Name: series-workflowqrpps Phase: Succeeded StartedAt: 2026-07-01 15:56:25 +0000 UTC FinishedAt: 2026-07-01 20:49:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[0] Phase: Succeeded StartedAt: 2026-07-01 15:56:25 +0000 UTC FinishedAt: 2026-07-01 16:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 15:56:25 +0000 UTC FinishedAt: 2026-07-01 16:08:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_OHCI_HCD", "USB_OHCI_HCD_PCI", "USB_OHCI_HCD_PLATFORM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_OHCI_HCD", "USB_OHCI_HCD_PCI", "USB_OHCI_HCD_PLATFORM" ], "series_id": "cd22e6b5-7a29-417f-a9ad-b146e2f0dac9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "usb_device_dump", "fill_buffer", "debug_close" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9PSENJX0hDRCYjMzQ7LAogICAgJiMzNDtVU0JfT0hDSV9IQ0RfUENJJiMzNDssCiAgICAmIzM0O1VTQl9PSENJX0hDRF9QTEFURk9STSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYl9kZXZpY2VfZHVtcCYjMzQ7LAogICAgJiMzNDtmaWxsX2J1ZmZlciYjMzQ7LAogICAgJiMzNDtkZWJ1Z19jbG9zZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwYWdlIGFsbG9jYXRvciBjYWxscyAoX19nZXRfZnJlZV9wYWdlcywgZ2V0X3plcm9lZF9wYWdlKSB3aXRoIHNsYWIgYWxsb2NhdG9yIGNhbGxzIChrbWFsbG9jLCBremFsbG9jKSBpbiBVU0IgZGV2aWNlIGR1bXAgYW5kIE9IQ0kgZGVidWdmcyBjb2RlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IgYW5kIGNhbiBwb3RlbnRpYWxseSBleHBvc2UgZGlmZmVyZW50IG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKGUuZy4sIEtBU0FOIGNhbiBiZXR0ZXIgZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb24gc2xhYiBvYmplY3RzKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSAvc3lzL2tlcm5lbC9kZWJ1Zy91c2IvZGV2aWNlcyBhbmQgT0hDSSBkZWJ1Z2ZzIGZpbGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWQ4NDMwYWVjM2JmNzk0ODEwNTllNTcxNWU3N2U1Y2I0NmMzZTNmY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMTY6MDU6MjYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuY1xuaW5kZXggYTI0N2RhNzNmMzRkN2QuLjZmMDM1NGFiYTM4YjMzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jXG5AQCAtMzcsNiAmIzQzOzM3LDcgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi5oXHUwMDNlXG5AQCAtNDA4LDcgJiM0Mzs0MDksNyBAQCBzdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX2R1bXAoY2hhciBfX3VzZXIgKipidWZmZXIsIHNpemVfdCAqbmJ5dGVzLFxuIFx0XHRyZXR1cm4gMDtcbiBcdC8qIGFsbG9jYXRlIDJeMSBwYWdlcyA9IDhLIChvbiBpMzg2KTtcbiBcdCAqIHNob3VsZCBiZSBtb3JlIHRoYW4gZW5vdWdoIGZvciBvbmUgZGV2aWNlICovXG4tXHRwYWdlc19zdGFydCA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlcyhHRlBfTk9JTywgMSk7XG4mIzQzO1x0cGFnZXNfc3RhcnQgPSBrbWFsbG9jKFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgMSwgR0ZQX05PSU8pO1xuIFx0aWYgKCFwYWdlc19zdGFydClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtNDc5LDcgJiM0Mzs0ODAsNyBAQCBzdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX2R1bXAoY2hhciBfX3VzZXIgKipidWZmZXIsIHNpemVfdCAqbmJ5dGVzLFxuIFx0XHRpZiAobGVuZ3RoIFx1MDAzZSAqbmJ5dGVzKVxuIFx0XHRcdGxlbmd0aCA9ICpuYnl0ZXM7XG4gXHRcdGlmIChjb3B5X3RvX3VzZXIoKmJ1ZmZlciwgcGFnZXNfc3RhcnQgJiM0MzsgKnNraXBfYnl0ZXMsIGxlbmd0aCkpIHtcbi1cdFx0XHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBhZ2VzX3N0YXJ0LCAxKTtcbiYjNDM7XHRcdFx0a2ZyZWUocGFnZXNfc3RhcnQpO1xuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0XHR9XG4gXHRcdCpuYnl0ZXMgLT0gbGVuZ3RoO1xuQEAgLTQ5MCw3ICYjNDM7NDkxLDcgQEAgc3RhdGljIHNzaXplX3QgdXNiX2RldmljZV9kdW1wKGNoYXIgX191c2VyICoqYnVmZmVyLCBzaXplX3QgKm5ieXRlcyxcbiBcdH0gZWxzZVxuIFx0XHQqc2tpcF9ieXRlcyAtPSBsZW5ndGg7XG4gXG4tXHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBhZ2VzX3N0YXJ0LCAxKTtcbiYjNDM7XHRrZnJlZShwYWdlc19zdGFydCk7XG4gXG4gXHQvKiBOb3cgbG9vayBhdCBhbGwgb2YgdGhpcyBkZXZpY2UmIzM5O3MgY2hpbGRyZW4uICovXG4gXHR1c2JfaHViX2Zvcl9lYWNoX2NoaWxkKHVzYmRldiwgY2hpeCwgY2hpbGRkZXYpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmNcbmluZGV4IDllMGUwNmJiYzU3MDYxLi4yM2RjOWVkZGMwNmM0NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jXG5AQCAtNjgzLDcgJiM0Mzs2ODMsNyBAQCBzdGF0aWMgaW50IGZpbGxfYnVmZmVyKHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZilcbiBcdGludCByZXQ7XG4gXG4gXHRpZiAoIWJ1Zi1cdTAwM2VwYWdlKVxuLVx0XHRidWYtXHUwMDNlcGFnZSA9IChjaGFyICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpO1xuJiM0MztcdFx0YnVmLVx1MDAzZXBhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4gXG4gXHRpZiAoIWJ1Zi1cdTAwM2VwYWdlKSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG5AQCAtNzI5LDExICYjNDM7NzI5LDggQEAgc3RhdGljIGludCBkZWJ1Z19jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4gXHRzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcbi1cdGlmIChidWYpIHtcbi1cdFx0aWYgKGJ1Zi1cdTAwM2VwYWdlKVxuLVx0XHRcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWYtXHUwMDNlcGFnZSk7XG4tXHRcdGtmcmVlKGJ1Zik7XG4tXHR9XG4mIzQzO1x0a2ZyZWUoYnVmLVx1MDAzZXBhZ2UpO1xuJiM0MztcdGtmcmVlKGJ1Zik7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX09IQ0lfSENEJiMzNDssCiAgICAmIzM0O1VTQl9PSENJX0hDRF9QQ0kmIzM0OywKICAgICYjMzQ7VVNCX09IQ0lfSENEX1BMQVRGT1JNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNiX2RldmljZV9kdW1wJiMzNDssCiAgICAmIzM0O2ZpbGxfYnVmZmVyJiMzNDssCiAgICAmIzM0O2RlYnVnX2Nsb3NlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHBhZ2UgYWxsb2NhdG9yIGNhbGxzIChfX2dldF9mcmVlX3BhZ2VzLCBnZXRfemVyb2VkX3BhZ2UpIHdpdGggc2xhYiBhbGxvY2F0b3IgY2FsbHMgKGttYWxsb2MsIGt6YWxsb2MpIGluIFVTQiBkZXZpY2UgZHVtcCBhbmQgT0hDSSBkZWJ1Z2ZzIGNvZGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBhbmQgY2FuIHBvdGVudGlhbGx5IGV4cG9zZSBkaWZmZXJlbnQgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAoZS5nLiwgS0FTQU4gY2FuIGJldHRlciBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvbiBzbGFiIG9iamVjdHMpLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIC9zeXMva2VybmVsL2RlYnVnL3VzYi9kZXZpY2VzIGFuZCBPSENJIGRlYnVnZnMgZmlsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDlkODQzMGFlYzNiZjc5NDgxMDU5ZTU3MTVlNzdlNWNiNDZjM2UzZmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxIDE2OjA1OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYwppbmRleCBhMjQ3ZGE3M2YzNGQ3ZC4uNmYwMzU0YWJhMzhiMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jCkBAIC0zNyw2ICYjNDM7MzcsNyBAQAogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9mcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9nZnAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91c2IuaCZndDsKQEAgLTQwOCw3ICYjNDM7NDA5LDcgQEAgc3RhdGljIHNzaXplX3QgdXNiX2RldmljZV9kdW1wKGNoYXIgX191c2VyICoqYnVmZmVyLCBzaXplX3QgKm5ieXRlcywKIAkJcmV0dXJuIDA7CiAJLyogYWxsb2NhdGUgMl4xIHBhZ2VzID0gOEsgKG9uIGkzODYpOwogCSAqIHNob3VsZCBiZSBtb3JlIHRoYW4gZW5vdWdoIGZvciBvbmUgZGV2aWNlICovCi0JcGFnZXNfc3RhcnQgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX05PSU8sIDEpOwomIzQzOwlwYWdlc19zdGFydCA9IGttYWxsb2MoUEFHRV9TSVpFICZsdDsmbHQ7IDEsIEdGUF9OT0lPKTsKIAlpZiAoIXBhZ2VzX3N0YXJ0KQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNDc5LDcgJiM0Mzs0ODAsNyBAQCBzdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX2R1bXAoY2hhciBfX3VzZXIgKipidWZmZXIsIHNpemVfdCAqbmJ5dGVzLAogCQlpZiAobGVuZ3RoICZndDsgKm5ieXRlcykKIAkJCWxlbmd0aCA9ICpuYnl0ZXM7CiAJCWlmIChjb3B5X3RvX3VzZXIoKmJ1ZmZlciwgcGFnZXNfc3RhcnQgJiM0MzsgKnNraXBfYnl0ZXMsIGxlbmd0aCkpIHsKLQkJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcGFnZXNfc3RhcnQsIDEpOwomIzQzOwkJCWtmcmVlKHBhZ2VzX3N0YXJ0KTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CiAJCSpuYnl0ZXMgLT0gbGVuZ3RoOwpAQCAtNDkwLDcgJiM0Mzs0OTEsNyBAQCBzdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX2R1bXAoY2hhciBfX3VzZXIgKipidWZmZXIsIHNpemVfdCAqbmJ5dGVzLAogCX0gZWxzZQogCQkqc2tpcF9ieXRlcyAtPSBsZW5ndGg7CiAKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBhZ2VzX3N0YXJ0LCAxKTsKJiM0MzsJa2ZyZWUocGFnZXNfc3RhcnQpOwogCiAJLyogTm93IGxvb2sgYXQgYWxsIG9mIHRoaXMgZGV2aWNlJiMzOTtzIGNoaWxkcmVuLiAqLwogCXVzYl9odWJfZm9yX2VhY2hfY2hpbGQodXNiZGV2LCBjaGl4LCBjaGlsZGRldikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jCmluZGV4IDllMGUwNmJiYzU3MDYxLi4yM2RjOWVkZGMwNmM0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYwpAQCAtNjgzLDcgJiM0Mzs2ODMsNyBAQCBzdGF0aWMgaW50IGZpbGxfYnVmZmVyKHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZikKIAlpbnQgcmV0OwogCiAJaWYgKCFidWYtJmd0O3BhZ2UpCi0JCWJ1Zi0mZ3Q7cGFnZSA9IChjaGFyICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwomIzQzOwkJYnVmLSZndDtwYWdlID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCiAJaWYgKCFidWYtJmd0O3BhZ2UpIHsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTcyOSwxMSAmIzQzOzcyOSw4IEBAIHN0YXRpYyBpbnQgZGVidWdfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGRlYnVnX2J1ZmZlciAqYnVmID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwogCi0JaWYgKGJ1ZikgewotCQlpZiAoYnVmLSZndDtwYWdlKQotCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1Zi0mZ3Q7cGFnZSk7Ci0JCWtmcmVlKGJ1Zik7Ci0JfQomIzQzOwlrZnJlZShidWYtJmd0O3BhZ2UpOwomIzQzOwlrZnJlZShidWYpOwogCiAJcmV0dXJuIDA7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVVNCIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgbWFraW5nIHNvbWUgbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhlIFVTQiBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdG91Y2hpbmcgYGRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jYCBhbmQgYGRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuY2AuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGV5JiMzOTtyZSByZXBsYWNpbmcgdGhlIGxlZ2FjeSBgX19nZXRfZnJlZV9wYWdlc2AvYGZyZWVfcGFnZXNgIGNhbGxzIHdpdGggYGttYWxsb2NgL2BrZnJlZWAgaW4gdGhlIGB1c2JfZGV2aWNlX2R1bXBgIGZ1bmN0aW9uLCB3aXRoaW4gYGRldmljZXMuY2AsIGFuZCBzd2l0Y2hpbmcgYGdldF96ZXJvZWRfcGFnZWAvYGZyZWVfcGFnZWAgZm9yIGBremFsbG9jYC9ga2ZyZWVgIGluIGBmaWxsX2J1ZmZlcmAgYW5kIGBkZWJ1Z19jbG9zZWAgaW4gYG9oY2ktZGJnLmNgLgoKUmlnaHQgYXdheSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyAqanVzdCogYW4gYWxsb2NhdGlvbiBjaGFuZ2Ugb3IgaWYgdGhlcmUgYXJlIHBvdGVudGlhbCBmdW5jdGlvbmFsIHNpZGUgZWZmZWN0cy4gQ2hhbmdpbmcgcGFnZSBhbGxvY2F0aW9uICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSwgZXZlbiBpZiBzdWJ0bGUuIEl0IGFsdGVycyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciwgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGNsb3NlIHNjcnV0aW55LgoKTm93LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgZnVuY3Rpb25zIGludm9sdmVkOiBgdXNiX2RldmljZV9kdW1wYCwgYGZpbGxfYnVmZmVyYCwgYW5kIGBkZWJ1Z19jbG9zZWAuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gY29uc2lkZXIgZnV6emluZy4gYHVzYl9kZXZpY2VfZHVtcGAgY2F1Z2h0IG15IGV5ZTsgbXkgZ3V0IHRlbGxzIG1lIGl0JiMzOTtzIHVzZWQgd2l0aGluIGEgZmlsZSBvcGVyYXRpb24gbGlrZSBgL3N5cy9rZXJuZWwvZGVidWcvdXNiL2RldmljZXNgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGJ5IGdvaW5nIGJhY2sgaW50byBgZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmNgIGFuZCBzZWUgd2hlcmUgdGhpcyBgdXNiX2RldmljZV9kdW1wYCBmdW5jdGlvbiBnZXRzIHVzZWQuIExldCYjMzk7cyBzZWUgaWYgd2UgY2FuIHRyaWdnZXIgc29tZSBpbnRlcmVzdGluZyBiZWhhdmlvciB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2JfZGV2aWNlX2R1bXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYz0zNjU9c3RhdGljIGNoYXIgKnVzYl9kdW1wX2Rlc2MoY2hhciAqc3RhcnQsIGNoYXIgKmVuZCwgc3RydWN0IHVzYl9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy0zOTAtICovXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYzozOTE6c3RhdGljIHNzaXplX3QgdXNiX2RldmljZV9kdW1wKGNoYXIgX191c2VyICoqYnVmZmVyLCBzaXplX3QgKm5ieXRlcyxcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jLTM5Mi1cdFx0XHQgICAgICAgbG9mZl90ICpza2lwX2J5dGVzLCBsb2ZmX3QgKmZpbGVfb2Zmc2V0LFxuLS1cbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jLTQ5OC1cdFx0dXNiX2xvY2tfZGV2aWNlKGNoaWxkZGV2KTtcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jOjQ5OTpcdFx0cmV0ID0gdXNiX2RldmljZV9kdW1wKGJ1ZmZlciwgbmJ5dGVzLCBza2lwX2J5dGVzLFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTAwLVx0XHRcdFx0ICAgICAgZmlsZV9vZmZzZXQsIGNoaWxkZGV2LCBidXMsXG4tLVxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM9NTEwPXN0YXRpYyBzc2l6ZV90IHVzYl9kZXZpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy01MjktXHRcdHVzYl9sb2NrX2RldmljZShidXMtXHUwMDNlcm9vdF9odWIpO1xuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM6NTMwOlx0XHRyZXQgPSB1c2JfZGV2aWNlX2R1bXAoXHUwMDI2YnVmLCBcdTAwMjZuYnl0ZXMsIFx1MDAyNnNraXBfYnl0ZXMsIHBwb3MsXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy01MzEtXHRcdFx0XHQgICAgICBidXMtXHUwMDNlcm9vdF9odWIsIGJ1cywgMCwgMCwgMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU0MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBgdXNiX2RldmljZV9yZWFkYCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgYHVzYl9kZXZpY2VfcmVhZGAuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBsaWtlbHkgcGVydGFpbnMgdG8gcmVhZGluZyBkYXRhIGZyb20gdGhlIGAvc3lzL2tlcm5lbC9kZWJ1Zy91c2IvZGV2aWNlc2AgZmlsZXN5c3RlbSBlbnRyeS4gVGhhdCYjMzk7cyBhIHByZXR0eSByZWFzb25hYmxlIGFzc3VtcHRpb24gZ2l2ZW4gdGhlIHBhdGguIFRoZSBkZWJ1ZyBmaWxlc3lzdGVtIG9mdGVuIGV4cG9zZXMga2VybmVsIGludGVybmFscyBpbiBhIHVzZXItcmVhZGFibGUgZm9ybWF0LCBhbmQgdGhlIG5hbWUgJiMzNDt1c2IvZGV2aWNlcyYjMzQ7IHN0cm9uZ2x5IHN1Z2dlc3RzIGluZm9ybWF0aW9uIGFib3V0IGF0dGFjaGVkIFVTQiBkZXZpY2VzLiBOb3csIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGVpdGhlciBpbnNwZWN0aW5nIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgZGlyZWN0bHkgaWYgSSBoYXZlIGFjY2Vzcywgb3IgcGVyaGFwcyBncmVwcGluZyB0aHJvdWdoIHRoZSBrZXJuZWwgc291cmNlcyBmb3IgYSBmdW5jdGlvbiB3aXRoIHRoYXQgbmFtZSBhbmQgbG9va2luZyBhdCBpdHMgdXNhZ2UgYW5kIGFzc29jaWF0ZWQgZmlsZXMuIEFsdGVybmF0aXZlbHksIEkgY291bGQgdHJ5IHRvIGZpbmQgZG9jdW1lbnRhdGlvbiB0aGF0IHBvaW50cyBtZSB0byB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlscyByZWxhdGVkIHRvIHRoaXMgZGVidWdmcyBlbnRyeSB0byBzZWUgaWYgdGhhdCBjb25maXJtcyBteSBzdXNwaWNpb24gYW5kIGdpdmVzIG1lIG1vcmUgZGV0YWlscy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKmV4YWN0bHkqIHdoYXQgZGF0YSB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciByZXRyaWV2aW5nIGFuZCBob3cgaXQmIzM5O3MgZm9ybWF0dGVkLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaXRzIHJlbGV2YW5jZSBhbmQgaG93IHRvIGJlc3QgdXNlIGl0IG9yIGJ1aWxkIHVwb24gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNiX2RldmljZV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM9MzkxPXN0YXRpYyBzc2l6ZV90IHVzYl9kZXZpY2VfZHVtcChjaGFyIF9fdXNlciAqKmJ1ZmZlciwgc2l6ZV90ICpuYnl0ZXMsXG4tLVxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTA5LVxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM6NTEwOnN0YXRpYyBzc2l6ZV90IHVzYl9kZXZpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jLTUxMS1cdFx0XHQgICAgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKVxuLS1cbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jPTU0Mz1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYmZzX2RldmljZXNfZm9wcyA9IHtcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jLTU0NC1cdC5sbHNlZWsgPVx0bm9fc2Vla19lbmRfbGxzZWVrLFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM6NTQ1Olx0LnJlYWQgPVx0XHR1c2JfZGV2aWNlX3JlYWQsXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy01NDYtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDk4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlBpbnBvaW50aW5nIHRoZSBVU0JGUyBJc3N1ZSoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgdXNiZnNfZGV2aWNlc19mb3BzYC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBoaW50IOKAkyBpdCBpbW1lZGlhdGVseSB6ZXJvZXMgaW4gb24gdGhlIHVzZXJzcGFjZSBmaWxlc3lzdGVtIGludGVyZmFjZSBmb3IgVVNCIGRldmljZXMuIFRoYXQgcG9pbnRzIGRpcmVjdGx5IHRvIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZS4gTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBmaW5kIHNvbWV0aGluZyB0aGF0JiMzOTtzIGNvbm5lY3RlZCB0byB0aGlzIHdpdGhpbiB0aGUgY29kZS4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gdGhlIGRlYnVnZ2luZyB0b29scy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGhhdmUgb24gYGRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuY2AuIFRoaXMgaXMgYSBsb3ctbGV2ZWwgaG9zdCBjb250cm9sbGVyIGRyaXZlci4gSXQmIzM5O3Mgb2Z0ZW4gdGhlIHBsYWNlIHdoZXJlIHdlIGZpbmQgZGV0YWlsZWQgbG9nZ2luZyBhbmQgcG90ZW50aWFsbHkgZXJyb3IgY29uZGl0aW9ucyByZWxhdGVkIHRvIFVTQiB0cmFuc2ZlcnMuIE9mdGVuIGl0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCB3aGVuIHRoZXJlIGFyZSBpc3N1ZXMgYXQgdGhlIGludGVyc2VjdGlvbiBvZiBhIGRyaXZlciBhbmQgYSBmaWxlc3lzdGVtIGludGVyZmFjZSwgZXNwZWNpYWxseSBzaW5jZSBgdXNiZnNgIGlzbiYjMzk7dCB2ZXJ5IGhlbHBmdWwgZm9yIGRpYWdub3NpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gZGV2aWNlIGNvbW11bmljYXRpb24uIExldCYjMzk7cyBzdGFydCB3aXRoIHRoaXMgYW5kIHNlZSB3aGF0IHdlIGNhbiB0dXJuIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbGxfYnVmZmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYz02NjU9c3RhdGljIHN0cnVjdCBkZWJ1Z19idWZmZXIgKmFsbG9jX2J1ZmZlcihzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksXG4tLVxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTY4MC1cbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYzo2ODE6c3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNjgyLXtcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM9NzA0PXN0YXRpYyBzc2l6ZV90IGRlYnVnX291dHB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxuLS1cbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy03MTEtXHRpZiAoYnVmLVx1MDAzZWNvdW50ID09IDApIHtcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYzo3MTI6XHRcdHJldCA9IGZpbGxfYnVmZmVyKGJ1Zik7XG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNzEzLVx0XHRpZiAocmV0ICE9IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjMwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgV29ydGhpbmVzcyBvZiBGdXp6aW5nIGEgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIGBmaWxsX2J1ZmZlcmAgaXMgY2FsbGVkIGZyb20gYGRlYnVnX291dHB1dGAgaW4gdGhlIG9oY2kgZHJpdmVyIOKAkyB0aGF0JiMzOTtzIGEgZGVidWdmcyBmaWxlLiBIbW0sIGFyZSB0aG9zZSBkZWJ1Z2ZzIGZpbGVzIGFjY2Vzc2libGU/IFllYWgsIHRoZXkgc2hvdWxkIGJlLCByb290IHVzdWFsbHkgbW91bnRzIHRoZW0sIGFuZCBTeXprYWxsZXIgY2FuIGRlZmluaXRlbHkgZ2V0IHRvIHRoZW0uIEJ1dCBpcyBpdCAqd29ydGgqIGZ1enppbmcgdGhpcyBwYXJ0aWN1bGFyIHBhdGNoPyBJdCBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHN3YXAgZnJvbSBgX19nZXRfZnJlZV9wYWdlc2AgdG8gYGttYWxsb2NgLgoKTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgaWYgaXQgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBpbiBhIG1lYW5pbmdmdWwgd2F5LiBEaWZmZXJlbnQgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcy4uLiBga21hbGxvY2AgdmVyc3VzIGBfX2dldF9mcmVlX3BhZ2VzYCBjb3VsZCBoYXZlIGRpZmZlcmVudCBiZWhhdmlvcnMgaW4gdGhlIGZhY2Ugb2Ygb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEtBU0FOIG1pZ2h0IGNhdGNoIGBrbWFsbG9jYCBPT0IgaXNzdWVzIGJldHRlciB0aGFuIHRob3NlIHdpdGggcGFnZS1iYXNlZCBhbGxvY2F0aW9ucy4KCkJ1dCB3YWl0LCBsZXQgbWUgY2hlY2sgdGhlIGluc3RydWN0aW9ucyBhZ2FpbjogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmLi4uJiMzNDsgTGV0IG1lIHJldmlldyB0aGUgY3JpdGVyaWEuLi4gQWgsIGhlcmUgaXQgaXM6IGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGxvZ2dpbmcuLi4gb3IgbnVtZXJpYyBjaGFuZ2VzIHRoYXQgZG9uJiMzOTt0IGNoYW5nZSBleGVjdXRpb24uIElzIHRoaXMgc3dpdGNoIGEgZnVuY3Rpb25hbCBjaGFuZ2U/IEl0IGRvZXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IHNsaWdodGx5IHNpbmNlIGl0IHVzZXMgYSBkaWZmZXJlbnQgYWxsb2NhdG9yLCBidXQgaXQgc2VlbXMgbGlrZSBhIHJlZmFjdG9yaW5nL2NsZWFudXAgbW9zdGx5LgoKT2ggd2FpdCwgYGttYWxsb2NgIHdpdGggYFBBR0VfU0laRSAmbHQ7Jmx0OyAxYCBhbGxvY2F0ZXMgOEssIGFuZCBgX19nZXRfZnJlZV9wYWdlcyhHRlBfTk9JTywgMSlgIGFsc28gYWxsb2NhdGVzIDhLIGluIGEgNEsgcGFnZSBzeXN0ZW0uIFNvLCB0aGUgYWxsb2NhdGlvbiBzaXplIHN0YXlzIHRoZSBzYW1lLiBJcyBpdCB3b3J0aCBmdXp6aW5nPyBZZXMsIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGl0IG1vZGlmaWVzIHRoZSBrZXJuZWwgbG9naWMgYW5kIGl04oCZcyBub3QganVzdCBhIGRlY29yYXRpb24gb3IgY29tbWVudCBvciBjb25zdGFudCBjaGFuZ2UuCgpPa2F5LCBub3cgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlLiBgdXNiX2RldmljZV9kdW1wYCBpcyBpbiBgZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmNgLCBhbmQgYGZpbGxfYnVmZmVyYCBpcyBpbiBgZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jYC4gTGV0JiMzOTtzIGNvbmZpcm0gYG9oY2ktZGJnLmNgIGlzIHJlYWNoYWJsZS4gT0hDSSBpcyBhIFVTQiBob3N0IGNvbnRyb2xsZXIuIEV4Y2VsbGVudCwgUUVNVSBjYW4gZW11bGF0ZSBPSENJLiBUaGF0JiMzOTtzIGdvb2QuIE5vdyBsZXQgbWUgbG9vayBmb3IgdGhlIGNvbmZpZyBmb3IgT0hDSS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvaGNpLWRiZy5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaG9zdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjMxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IE1ha2VmaWxlOgoKKipEaXZpbmcgaW50byB0aGUgVVNCIEhvc3QgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBkcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlYC4gVGhpcyBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIFVTQiBob3N0IGNvbnRyb2xsZXIgc3Vic3lzdGVtIGlzIGJ1aWx0IHdpdGhpbiB0aGlzIGtlcm5lbC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIG9iamVjdCBmaWxlcyBhcmUgb3JnYW5pemVkLCB3aGF0IGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheSwgYW5kIGhvdyB0aGUgY29tcGlsYXRpb24gcHJvY2VzcyBpcyBzdHJ1Y3R1cmVkIGZvciB0aGUgZGlmZmVyZW50IGhvc3QgY29udHJvbGxlciBkcml2ZXJzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGFueSBjbGV2ZXIgdHJpY2tzIGFyZSB1c2VkIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyBvciBib2FyZCBzdXBwb3J0IHBhY2thZ2VzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGJldHRpbmcgdGhlcmUmIzM5O3MgYSBnb29kIGFtb3VudCBvZiBjb21wbGV4aXR5IGhlcmUsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvZiBtb2R1bGFyaXR5IG9yIGVsZWdhbnQgYnVpbGQgdGVjaG5pcXVlcyB0aGF0IG1pZ2h0IHNwZWVkIHVwIG15IGNvbXByZWhlbnNpb24uIEkmIzM5O20gYWxzbyBob3BpbmcgdGhlcmUgYXJlbiYjMzk7dCB0b28gbWFueSB1bm5lY2Vzc2FyeSBsYXllcnMgb2YgYWJzdHJhY3Rpb24sIGFzIEkga25vdyB0aGF0IGNhbiBiZWNvbWUgYSByZWFsIGhlYWRhY2hlIHRvIG5hdmlnYXRlIHdoZW4geW91IG5lZWQgdG8gdHJhY2sgZG93biBhIHNwZWNpZmljIGhhcmR3YXJlIGlzc3VlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2hjaSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZT01ND1vYmotJChDT05GSUdfVVNCX0lTUDExNlhfSENEKVx0JiM0Mzs9IGlzcDExNngtaGNkLm9cbmRyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUtNTUtXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjU2Om9iai0kKENPTkZJR19VU0JfT0hDSV9IQ0QpXHQmIzQzOz0gb2hjaS1oY2Qub1xuZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZTo1NzpvYmotJChDT05GSUdfVVNCX09IQ0lfSENEX1BDSSlcdCYjNDM7PSBvaGNpLXBjaS5vXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjU4Om9iai0kKENPTkZJR19VU0JfT0hDSV9IQ0RfUExBVEZPUk0pXHQmIzQzOz0gb2hjaS1wbGF0Zm9ybS5vXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjU5Om9iai0kKENPTkZJR19VU0JfT0hDSV9FWFlOT1MpXHQmIzQzOz0gb2hjaS1leHlub3Mub1xuZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZTo2MDpvYmotJChDT05GSUdfVVNCX09IQ0lfSENEX09NQVAxKVx0JiM0Mzs9IG9oY2ktb21hcC5vXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjYxOm9iai0kKENPTkZJR19VU0JfT0hDSV9IQ0RfU1BFQVIpXHQmIzQzOz0gb2hjaS1zcGVhci5vXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjYyOm9iai0kKENPTkZJR19VU0JfT0hDSV9IQ0RfU1RJKVx0JiM0Mzs9IG9oY2ktc3Qub1xuZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfVVNCX09IQ0lfSENEX0FUOTEpXHQmIzQzOz0gb2hjaS1hdDkxLm9cbmRyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX1VTQl9PSENJX0hDRF9TM0MyNDEwKVx0JiM0Mzs9IG9oY2ktczNjMjQxMC5vXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjY1Om9iai0kKENPTkZJR19VU0JfT0hDSV9IQ0RfTFBDMzJYWClcdCYjNDM7PSBvaGNpLW54cC5vXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjY2Om9iai0kKENPTkZJR19VU0JfT0hDSV9IQ0RfUFhBMjdYKVx0JiM0Mzs9IG9oY2ktcHhhMjd4Lm9cbmRyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGU6Njc6b2JqLSQoQ09ORklHX1VTQl9PSENJX0hDRF9EQVZJTkNJKVx0JiM0Mzs9IG9oY2ktZGE4eHgub1xuZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZS02OC1vYmotJChDT05GSUdfVVNCX09DVEVPTl9IQ0QpXHQmIzQzOz0gb2N0ZW9uLWhjZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NTAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgT0hDSSBEZWJ1Z2dpbmcqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBPSENJIHN0dWZmLCBhbmQgdGhlIGluY2x1c2lvbiBvZiBgb2hjaS1kYmcuY2AgaXMgcHJvYmFibHkga2V5IHRvIG15IGltbWVkaWF0ZSBwcm9ibGVtLiBHaXZlbiBob3cgdGhlc2Uga2VybmVsIG1vZHVsZXMgYXJlIHR5cGljYWxseSBzdHJ1Y3R1cmVkLCBJJiMzOTttIGJldHRpbmcgdGhhdCB0aGUgZGVidWdnaW5nIGZ1bmN0aW9uYWxpdGllcywgdGhlIG9uZXMgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHVzaW5nIG9yIHVuZGVyc3RhbmRpbmcsIGFyZSBsaWtlbHkgKmRlZmluZWQqIHdpdGhpbiBgb2hjaS1kYmcuY2AsIGFuZCB0aGVuICppbmNvcnBvcmF0ZWQqIGludG8gdGhlIG1haW4gT0hDSSBIb3N0IENvbnRyb2xsZXIgRHJpdmVyIHNvdXJjZSwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgYG9oY2ktaGNkLmNgLiBJdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBhcHByb2FjaDogc2VwYXJhdGUgb3V0IHRoZSBkZWJ1Zy1zcGVjaWZpYyBjb2RlIGZvciBjbGFyaXR5IGFuZCBtYWludGFpbmFiaWxpdHkuIFRoaXMgbW9kdWxhcml0eSBtYWtlcyBzZW5zZTsgaXQgcHJldmVudHMgY2x1dHRlcmluZyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHdpdGggZGVidWcgcHJpbnRpbmcgYW5kIHNldHRpbmdzLiBOb3csIHdoZXRoZXIgYG9oY2ktaGNkLmNgIGluY2x1ZGVzIGl0IGRpcmVjdGx5IHdpdGggYCNpbmNsdWRlYCBvciBwZXJoYXBzIHJlbGllcyBvbiBidWlsZCBzeXN0ZW0gY29uZmlndXJhdGlvbiB0byBsaW5rIHRoZSBvYmplY3QgZmlsZXMgdG9nZXRoZXIgaXMgc29tZXRoaW5nIEkgc2hvdWxkIGNoZWNrIGJ1dCBpdCBpcyBtb3N0IGxpa2VseSBhIGRpcmVjdCBpbmNsdWRlLiBNYWtlcyBzZW5zZS4gV2hlcmUgdG8gZmluZCB0aGUgZGVidWdnaW5nIHNldHRpbmdzL2Z1bmN0aW9ucyBJIGFtIGludGVyZXN0ZWQgaW4sIGhvd2V2ZXIsIGlzIGEgcXVlc3Rpb24gd2hpY2ggY2FuIGJlIGFuc3dlcmVkIGJ5IHRoZSBzb3VyY2UgY29kZSBvZiB0aGUgYG9oY2ktaGNkLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvaGNpLWRiZy5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaG9zdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jPTg1PXN0YXRpYyB2b2lkIGlvX3dhdGNoZG9nX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuLS1cbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYy04Ny0jaW5jbHVkZSBcJiMzNDtvaGNpLWh1Yi5jXCYjMzQ7XG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmM6ODg6I2luY2x1ZGUgXCYjMzQ7b2hjaS1kYmcuY1wmIzM0O1xuZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jLTg5LSNpbmNsdWRlIFwmIzM0O29oY2ktbWVtLmNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkwNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKk9IQ0kgRHJpdmVyIElucXVpcnkqKgoKT2theSwgc28gSSYjMzk7bSB0cmFja2luZyBkb3duIHRoZSBPSENJIGRyaXZlci4gUmlnaHQsIEkgcmVjYWxsIGl0JiMzOTtzIGRlZmluaXRlbHkgaW5jbHVkZWQgaW4gYG9oY2ktaGNkLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gTm93LCByZWdhcmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24sIEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbiBpcyBgVVNCX09IQ0lfSENEYC4gSSYjMzk7dmUgdXNlZCB0aGF0IGJlZm9yZSwgc28gdGhhdCByaW5ncyBhIGJlbGwuIE5vdywgc29tZXRoaW5nJiMzOTtzIHRpY2tsaW5nIHRoZSBiYWNrIG9mIG15IGJyYWluIGFib3V0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLi4uIEkgd29uZGVyIGlmIGBvaGNpLWRiZy5jYCBpcyBjb21waWxlZCBiYXNlZCBvbiBzb21lIG90aGVyIHByZXByb2Nlc3NvciBkZWZpbml0aW9uPyBCZXR0ZXIgdG8gYmUgc2FmZSwgSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYmFjayBhdCBgb2hjaS1oY2QuY2AgdG8gYmUgY29tcGxldGVseSBzdXJlLiBJIGRvbiYjMzk7dCB3YW50IHRvIG1pc3MgYW55dGhpbmcgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2hjaS1kYmcuYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmM9ODU9c3RhdGljIHZvaWQgaW9fd2F0Y2hkb2dfZnVuYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG4tLVxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jLTg3LSNpbmNsdWRlIFwmIzM0O29oY2ktaHViLmNcJiMzNDtcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYzo4ODojaW5jbHVkZSBcJiMzNDtvaGNpLWRiZy5jXCYjMzQ7XG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMtODktI2luY2x1ZGUgXCYjMzQ7b2hjaS1tZW0uY1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzA3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgZm9yIFByZXByb2Nlc3NvciBEaXJlY3RpdmVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc2VjdGlvbiBvZiBjb2RlLiBCZWZvcmUgZGl2aW5nIGluLCBteSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byBjaGVjayBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEkgaGF2ZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmYCBvciBgI2lmbmRlZmAgZGlyZWN0aXZlcyB3cmFwcGluZyB0aGlzIGNvZGUuIEtub3dpbmcgdGhhdCB3aWxsIGdpdmUgbWUgYSBodWdlIGhlYWQgc3RhcnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY29kZSBpcyBpbmNsdWRlZCBpbiBhbGwgYnVpbGRzLCBvciBvbmx5IGluIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG9yIHBsYXRmb3Jtcy4gVGhhdCBjb25kaXRpb25hbCBsb2dpYyBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBhY3R1YWwgYmVoYXZpb3IgSSYjMzk7bSBzZWVpbmcuIEkmIzM5O2xsIHF1aWNrbHkgc2NhbiBmb3IgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRoYXQgY291bGQgYmUgY29udHJvbGxpbmcgdGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgdGhpcyBzZWN0aW9uLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBzdGVwIC0gYWx3YXlzIGxvb2sgZm9yIHRob3NlIGAjaWZkZWZgcyEgSXQmIzM5O2xsIHNhdmUgbWUgYSBsb3Qgb2YgdGltZSBpbiB0aGUgbG9uZyBydW4sIGFuZCBwcmV2ZW50IG1lIGZyb20gZ29pbmcgZG93biB0aGUgd3JvbmcgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0I2luY2x1ZGUgXCYjMzQ7b2hjaS5oXCYjMzQ7XG4gIDgxOlx0I2luY2x1ZGUgXCYjMzQ7cGNpLXF1aXJrcy5oXCYjMzQ7XG4gIDgyOlx0XG4gIDgzOlx0c3RhdGljIHZvaWQgb2hjaV9kdW1wKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSk7XG4gIDg0Olx0c3RhdGljIHZvaWQgb2hjaV9zdG9wKHN0cnVjdCB1c2JfaGNkICpoY2QpO1xuICA4NTpcdHN0YXRpYyB2b2lkIGlvX3dhdGNoZG9nX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuICA4NjpcdFxuICA4NzpcdCNpbmNsdWRlIFwmIzM0O29oY2ktaHViLmNcJiMzNDtcbiAgODg6XHQjaW5jbHVkZSBcJiMzNDtvaGNpLWRiZy5jXCYjMzQ7XG4gIDg5Olx0I2luY2x1ZGUgXCYjMzQ7b2hjaS1tZW0uY1wmIzM0O1xuICA5MDpcdCNpbmNsdWRlIFwmIzM0O29oY2ktcS5jXCYjMzQ7XG4gIDkxOlx0XG4gIDkyOlx0XG4gIDkzOlx0LypcbiAgOTQ6XHQgKiBPbiBhcmNoaXRlY3R1cmVzIHdpdGggZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cyB3ZSBtdXN0IG5ldmVyIHJldHVyblxuICA5NTpcdCAqIElSUV9OT05FLlxuICA5NjpcdCAqL1xuICA5NzpcdCNpZiBkZWZpbmVkKENPTkZJR19TQTExMTEpICAvKiAuLi4gb3Igb3RoZXIgZWRnZS10cmlnZ2VyZWQgc3lzdGVtcyAqL1xuICA5ODpcdCNkZWZpbmUgSVJRX05PVE1JTkVcdElSUV9IQU5ETEVEXG4gIDk5Olx0I2Vsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgzNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKk9IQ0kgRGVidWdnaW5nOiBUaGUgQ29uZGl0aW9uYWwgQ29tcGlsZSBRdWVzdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgY29kZS4gSSYjMzk7bSBzZWVpbmcgc29tZXRoaW5nIHRoYXQmIzM5O3MgYWx3YXlzIHByZXNlbnQg4oCTIG9yIGF0IGxlYXN0LCB0aGF0JiMzOTtzIHRoZSBpbXByZXNzaW9uIGl0IGdpdmVzLiBCdXQgdGhlbiwgYSBsaXR0bGUgYWxhcm0gYmVsbCBnb2VzIG9mZi4gSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFdhaXQgYSBtaW51dGUuLi4gdGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24sIHRoZSBvbmUgSSYjMzk7bSBmb2N1c2VkIG9uLCByZXNpZGVzIHdpdGhpbiBgb2hjaS1kYmcuY2AsIGRvZXNuJiMzOTt0IGl0PyBUaGF0JiMzOTtzIHRoZSBmaWxlIEkgbmVlZCB0byBsb29rIGF0LiBBbmQgbm93IEkmIzM5O20gYXNraW5nIG15c2VsZiwgYW5kIHRoYXQmIzM5O3MgdGhlIGtleSBxdWVzdGlvbiwgaXMgdGhpcyBjb2RlICphY3R1YWxseSogYWx3YXlzIGVuYWJsZWQ/IE9yIGlzIGl0IHdyYXBwZWQgaW4gc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmU/IElzIGl0IGNvbnRyb2xsZWQgYnkgYSBmbGFnLCBhIG1hY3JvLCBvciBzb21ldGhpbmcgZWxzZSB0aGF0IG1pZ2h0IHJlbmRlciBpdCBhY3RpdmUgb3IgaW5hY3RpdmUgZGVwZW5kaW5nIG9uIHRoZSBidWlsZCBjb25maWd1cmF0aW9uPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBJIG5lZWQgdG8gcmVzb2x2ZSBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciB3aXRoIG15IGFuYWx5c2lzLiBUaGF0JiMzOTtzIHdoZXJlIEkgd2lsbCBnbyBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMS4wJiM0MztcbiAgIDI6XHQvKlxuICAgMzpcdCAqIE9IQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLlxuICAgNDpcdCAqXG4gICA1Olx0ICogKEMpIENvcHlyaWdodCAxOTk5IFJvbWFuIFdlaXNzZ2FlcmJlciBcdTAwM2N3ZWlzc2dAdmllbm5hLmF0XHUwMDNlXG4gICA2Olx0ICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDIgRGF2aWQgQnJvd25lbGwgXHUwMDNjZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldFx1MDAzZVxuICAgNzpcdCAqXG4gICA4Olx0ICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuXG4gICA5Olx0ICovXG4gIDEwOlx0XG4gIDExOlx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgMTI6XHRcbiAgMTM6XHQjZGVmaW5lIGVkc3RyaW5nKGVkX3R5cGUpICh7IGNoYXIgKnRlbXA7IFxcXG4gIDE0Olx0XHRzd2l0Y2ggKGVkX3R5cGUpIHsgXFxcbiAgMTU6XHRcdGNhc2UgUElQRV9DT05UUk9MOlx0dGVtcCA9IFwmIzM0O2N0cmxcJiMzNDs7IGJyZWFrOyBcXFxuICAxNjpcdFx0Y2FzZSBQSVBFX0JVTEs6XHRcdHRlbXAgPSBcJiMzNDtidWxrXCYjMzQ7OyBicmVhazsgXFxcbiAgMTc6XHRcdGNhc2UgUElQRV9JTlRFUlJVUFQ6XHR0ZW1wID0gXCYjMzQ7aW50clwmIzM0OzsgYnJlYWs7IFxcXG4gIDE4Olx0XHRkZWZhdWx0Olx0XHR0ZW1wID0gXCYjMzQ7aXNvY1wmIzM0OzsgYnJlYWs7IFxcXG4gIDE5Olx0XHR9IHRlbXA7fSlcbiAgMjA6XHQjZGVmaW5lIHBpcGVzdHJpbmcocGlwZSkgZWRzdHJpbmcodXNiX3BpcGV0eXBlKHBpcGUpKVxuICAyMTpcdFxuICAyMjpcdFxuICAyMzpcdCNkZWZpbmUgb2hjaV9kYmdfc3cob2hjaSwgbmV4dCwgc2l6ZSwgZm9ybWF0LCBhcmcuLi4pIFxcXG4gIDI0Olx0XHRkbyB7IFxcXG4gIDI1Olx0XHRpZiAobmV4dCAhPSBOVUxMKSB7IFxcXG4gIDI2Olx0XHRcdHVuc2lnbmVkIHNfbGVuOyBcXFxuICAyNzpcdFx0XHRzX2xlbiA9IHNjbnByaW50ZiAoKm5leHQsICpzaXplLCBmb3JtYXQsICMjIGFyZyApOyBcXFxuICAyODpcdFx0XHQqc2l6ZSAtPSBzX2xlbjsgKm5leHQgJiM0Mzs9IHNfbGVuOyBcXFxuICAyOTpcdFx0fSBlbHNlIFxcXG4gIDMwOlx0XHRcdG9oY2lfZGJnKG9oY2ksZm9ybWF0LCAjIyBhcmcgKTsgXFxcbiAgMzE6XHRcdH0gd2hpbGUgKDApO1xuICAzMjpcdFxuICAzMzpcdC8qIFZlcnNpb24gZm9yIHVzZSB3aGVyZSBcJiMzNDtuZXh0XCYjMzQ7IGlzIHRoZSBhZGRyZXNzIG9mIGEgbG9jYWwgdmFyaWFibGUgKi9cbiAgMzQ6XHQjZGVmaW5lIG9oY2lfZGJnX25vc3cob2hjaSwgbmV4dCwgc2l6ZSwgZm9ybWF0LCBhcmcuLi4pIFxcXG4gIDM1Olx0XHRkbyB7IFxcXG4gIDM2Olx0XHRcdHVuc2lnbmVkIHNfbGVuOyBcXFxuICAzNzpcdFx0XHRzX2xlbiA9IHNjbnByaW50ZigqbmV4dCwgKnNpemUsIGZvcm1hdCwgIyMgYXJnKTsgXFxcbiAgMzg6XHRcdFx0KnNpemUgLT0gc19sZW47ICpuZXh0ICYjNDM7PSBzX2xlbjsgXFxcbiAgMzk6XHRcdH0gd2hpbGUgKDApO1xuICA0MDpcdFxuICA0MTpcdFxuICA0MjpcdHN0YXRpYyB2b2lkIG9oY2lfZHVtcF9pbnRyX21hc2sgKFxuICA0MzpcdFx0c3RydWN0IG9oY2lfaGNkICpvaGNpLFxuICA0NDpcdFx0Y2hhciAqbGFiZWwsXG4gIDQ1Olx0XHR1MzIgbWFzayxcbiAgNDY6XHRcdGNoYXIgKipuZXh0LFxuICA0NzpcdFx0dW5zaWduZWQgKnNpemUpXG4gIDQ4Olx0e1xuICA0OTpcdFx0b2hjaV9kYmdfc3cgKG9oY2ksIG5leHQsIHNpemUsIFwmIzM0OyVzIDB4JTA4eCVzJXMlcyVzJXMlcyVzJXMlc1xcblwmIzM0OyxcbiAgNTA6XHRcdFx0bGFiZWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NzYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJLCBhbiBleHBlcnQsIGFtIHRoaW5raW5nIGl0OgoKKipMb2NhdGluZyBDcml0aWNhbCBDb2RlIFNlY3Rpb25zKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBsYW5kc2NhcGUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcHJlY2lzZWx5IG1hcHBpbmcgb3V0IHRoZSB1c2FnZSBhbmQgZGVmaW5pdGlvbiBvZiBgZGVidWdfb3V0cHV0YCBhbmQgYGZpbGxfYnVmZmVyYC4gVW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWMgY29udGV4dCBvZiB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0IGlzIGNydWNpYWwgZm9yIGRpYWdub3Npbmcgd2hhdGV2ZXIgaXNzdWUgSSYjMzk7bSBjaGFzaW5nIGRvd24gb3Igb3B0aW1pemluZyB3aGF0ZXZlciBJJiMzOTttIGJ1aWxkaW5nLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIHRoZSBwcm9wZXIgY29udGV4dHVhbCBmb3VuZGF0aW9uLiBUaW1lIHRvIHN0YXJ0IHRyYWNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbGxfYnVmZmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYz02NjU9c3RhdGljIHN0cnVjdCBkZWJ1Z19idWZmZXIgKmFsbG9jX2J1ZmZlcihzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksXG4tLVxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTY4MC1cbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYzo2ODE6c3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNjgyLXtcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM9NzA0PXN0YXRpYyBzc2l6ZV90IGRlYnVnX291dHB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxuLS1cbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy03MTEtXHRpZiAoYnVmLVx1MDAzZWNvdW50ID09IDApIHtcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYzo3MTI6XHRcdHJldCA9IGZpbGxfYnVmZmVyKGJ1Zik7XG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNzEzLVx0XHRpZiAocmV0ICE9IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI5OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyBEaXZlOiBDaGVja2luZyBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpBbHJpZ2h0LCBiZWZvcmUgSSBnbyBkZWVwZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IGNoYXNpbmcgYSBnaG9zdC4gRmlyc3QgdGhpbmcmIzM5O3MgZmlyc3Q6IElzIHRoaXMgYmVoYXZpb3IsIHRoaXMgYnVnLCB0aGlzIGFub21hbHksIGV2ZW4gKmFjdGl2ZSogaW4gdGhlIGN1cnJlbnQgYnVpbGQgY29uZmlndXJhdGlvbj8gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgJiMzNDtIYXMgc29tZW9uZSBjbGV2ZXJseSB3cmFwcGVkIHRoaXMgcHJvYmxlbWF0aWMgY29kZSBzZWN0aW9uIGluIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlPyYjMzQ7IFlvdSBrbm93LCBzb21ldGhpbmcgbGlrZSBgI2lmZGVmIERFQlVHYCwgYCNpZmRlZiBURVNUSU5HYCwgb3IgbWF5YmUgZXZlbiBzb21ldGhpbmcgY3VzdG9tIHRoYXQgc29tZW9uZSBzZXQgdXAgc3BlY2lmaWNhbGx5IGZvciBhIHNwZWNpZmljIHBsYXRmb3JtIG9yIGJ1aWxkIHRhcmdldC4gQ291bGQgZXZlbiBiZSBzb21ldGhpbmcgbW9yZSBvYnNjdXJlLiBJJiMzOTt2ZSBiZWVuIGJpdHRlbiBieSB0aGF0IGJlZm9yZS4gU28sIGJlZm9yZSBJIHN0YXJ0IHVud2luZGluZyB0aGUgZW50aXJlIHN0YWNrLCBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIHJlbGV2YW50IHNvdXJjZSBjb2RlLCBhbmQgcGVyaGFwcyBkbyBhIHF1aWNrIGdyZXAsIGZvciBhbnkgb2YgdGhvc2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBpcyBldmVuIHRoZSAqYWN0aXZlKiBjb2RlIHBhdGggSSYjMzk7bSBsb29raW5nIGF0LiBUaGF0IHdvdWxkIGJlIGEgaHVnZSB0aW1lIHNhdmVyLiBJIG5lZWQgdG8gZWxpbWluYXRlIHRoaXMgcG9zc2liaWxpdHkgYmVmb3JlIEkgaW52ZXN0IHRvbyBtdWNoIGVmZm9ydC4gSXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IHF1aWNrIHdpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY2MDpcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoXHUwMDI2b2hjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gNjYxOlx0XG4gNjYyOlx0XHRyZXR1cm4gUEFHRV9TSVpFIC0gc2l6ZTtcbiA2NjM6XHR9XG4gNjY0Olx0XG4gNjY1Olx0c3RhdGljIHN0cnVjdCBkZWJ1Z19idWZmZXIgKmFsbG9jX2J1ZmZlcihzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksXG4gNjY2Olx0XHRcdFx0XHRzc2l6ZV90ICgqZmlsbF9mdW5jKShzdHJ1Y3QgZGVidWdfYnVmZmVyICopKVxuIDY2NzpcdHtcbiA2Njg6XHRcdHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZjtcbiA2Njk6XHRcbiA2NzA6XHRcdGJ1ZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkZWJ1Z19idWZmZXIpO1xuIDY3MTpcdFxuIDY3MjpcdFx0aWYgKGJ1Zikge1xuIDY3MzpcdFx0XHRidWYtXHUwMDNlb2hjaSA9IG9oY2k7XG4gNjc0Olx0XHRcdGJ1Zi1cdTAwM2VmaWxsX2Z1bmMgPSBmaWxsX2Z1bmM7XG4gNjc1Olx0XHRcdG11dGV4X2luaXQoXHUwMDI2YnVmLVx1MDAzZW11dGV4KTtcbiA2NzY6XHRcdH1cbiA2Nzc6XHRcbiA2Nzg6XHRcdHJldHVybiBidWY7XG4gNjc5Olx0fVxuIDY4MDpcdFxuIDY4MTpcdHN0YXRpYyBpbnQgZmlsbF9idWZmZXIoc3RydWN0IGRlYnVnX2J1ZmZlciAqYnVmKVxuIDY4MjpcdHtcbiA2ODM6XHRcdGludCByZXQ7XG4gNjg0Olx0XG4gNjg1Olx0XHRpZiAoIWJ1Zi1cdTAwM2VwYWdlKVxuIDY4NjpcdFx0XHRidWYtXHUwMDNlcGFnZSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiA2ODc6XHRcbiA2ODg6XHRcdGlmICghYnVmLVx1MDAzZXBhZ2UpIHtcbiA2ODk6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiA2OTA6XHRcdFx0Z290byBvdXQ7XG4gNjkxOlx0XHR9XG4gNjkyOlx0XG4gNjkzOlx0XHRyZXQgPSBidWYtXHUwMDNlZmlsbF9mdW5jKGJ1Zik7XG4gNjk0Olx0XG4gNjk1Olx0XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuIDY5NjpcdFx0XHRidWYtXHUwMDNlY291bnQgPSByZXQ7XG4gNjk3Olx0XHRcdHJldCA9IDA7XG4gNjk4Olx0XHR9XG4gNjk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDgwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGF0IGZpbGUsIGBvaGNpLWRiZy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgZGVidWdnaW5nIGZlYXR1cmVzIGFyZSBwb3RlbnRpYWxseSBlbmFibGVkIG9yIGRpc2FibGVkIHdpdGhpbiBpdC4gQW5kIHRoZSB1c3VhbCBzdXNwZWN0IGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsaWtlIHRoaXMgaXMgYCNpZmRlZiBERUJVR2AuIFNvLCBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGNvZGUsIGxvb2tpbmcgZm9yIHRoYXQgc3BlY2lmaWMgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSB0byBjb250cm9sIHRoZSB2aXNpYmlsaXR5IG9yIGJlaGF2aW91ciBvZiB0aGUgZGVidWcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYgREVCVUcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDIzNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgZG9tYWluIGV4cGVydGlzZToKCioqQ2hlY2tpbmcgdGhlIERlYnVnIEZpbGVzeXN0ZW0gRmxhZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBzZWUgd2UmIzM5O3JlIGF0IGEgcG9pbnQgd2hlcmUgd2UgbmVlZCB0byBleGFtaW5lIGBDT05GSUdfREVCVUdfRlNgLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbiwgYWxtb3N0IGFsd2F5cyBhIHNpZ24gd2UmIzM5O3JlIGdvaW5nIHRvIGludGVyYWN0IHdpdGggdGhlIGRlYnVnIGZpbGVzeXN0ZW0uIFRoaXMgdXN1YWxseSBtZWFucyBJJiMzOTttIHRyb3VibGVzaG9vdGluZywgYW5hbHl6aW5nIGtlcm5lbCBiZWhhdmlvciwgb3IgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgbG93LWxldmVsIGludGVyYWN0aW9ucy4gSSYjMzk7bSBsaWtlbHkgZ2VhcmluZyB1cCB0byBleGFtaW5lIHdoYXQgZGVidWcgaW5mb3JtYXRpb24gaGFzIGJlZW4gZW5hYmxlZCwgd2hhdCYjMzk7cyBiZWVuIGV4cG9zZWQsIGFuZCBob3cgaXQgbWlnaHQgaGVscCBtZSB1bmRlcnN0YW5kIGEgc3BlY2lmaWMgaXNzdWUgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LiBJdCYjMzk7cyBhIGtleSBmaXJzdCBzdGVwIGluIGRpYWdub3NpbmcgY29tcGxleCBrZXJuZWwgYmVoYXZpb3IsIHNvIGxldCYjMzk7cyBnZXQgcmlnaHQgb24gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0RFQlVHX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NjAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVidWdnaW5nIGEgUG9zc2libGUgQ29tcGlsYXRpb24gSXNzdWUqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIHJldHJhY2UgbXkgc3RlcHMgYW5kIGNvbnNpZGVyIHNvbWV0aGluZyBwb3RlbnRpYWxseSBzdWJ0bGUgaGVyZS4gSSB3YXMgZm9jdXNpbmcgb24gdGhlIHNwZWNpZmljIGZpbGUsIGJ1dCBJJiMzOTttIGhhdmluZyBhIGh1bmNoIGFib3V0IHNvbWV0aGluZyBtb3JlIGdsb2JhbC4gSXMgaXQgcG9zc2libGUgdGhhdCB0aGUgY29kZSBpbiBgb2hjaS1kYmcuY2Ag4oCTIHRoZSBkZWJ1ZyBmaWxlLCBzcGVjaWZpY2FsbHkg4oCTIGlzICpub3QqIGRpcmVjdGx5IGluY2x1ZGVkIGluIHRoZSBmaW5hbCBiaW5hcnk/IEl0JiMzOTtzIGNvbmNlaXZhYmxlIHRoYXQgdGhlIHByZXByb2Nlc3NvciBpcyBoYW5kbGluZyB0aGluZ3MsIGFuZCBpdCBtaWdodCBiZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHdpdGhpbiBgb2hjaS1oY2QuY2AuIFRoYXQgd291bGQgbWVhbiBJIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0byBlbnN1cmUgdGhhdCB0aGUgZGVidWdnaW5nIG91dHB1dCBJJiMzOTttIGV4cGVjdGluZyBpcyBhY3R1YWxseSBlbmFibGVkLiBJdCB3b3VsZCBhbHNvIGV4cGxhaW4gd2h5IEkgY2FuJiMzOTt0IHNlZSB0aGUgZGVidWcgc3RhdGVtZW50cyBiZWluZyB0cmlnZ2VyZWQuIEkgbmVlZCB0byBtYWtlIGEgbWVudGFsIG5vdGUgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGNvbXBpbGF0aW9uIGZsYWdzIGFuZCBwcmVwcm9jZXNzb3Igc3ltYm9scyB0byBtYWtlIHN1cmUgdGhlIGRlYnVnIGNvZGUgaXMgYWN0dWFsbHkgYmVpbmcgY29tcGlsZWQgaW50byB0aGUga2VybmVsIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2hjaS1kYmcuYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmM9ODU9c3RhdGljIHZvaWQgaW9fd2F0Y2hkb2dfZnVuYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG4tLVxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jLTg3LSNpbmNsdWRlIFwmIzM0O29oY2ktaHViLmNcJiMzNDtcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYzo4ODojaW5jbHVkZSBcJiMzNDtvaGNpLWRiZy5jXCYjMzQ7XG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMtODktI2luY2x1ZGUgXCYjMzQ7b2hjaS1tZW0uY1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg1NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG9oY2ktaGNkLmNgIGF0IExpbmUgODgqKgoKT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhpcyBpc3N1ZS4gQmFzZWQgb24gd2hhdCBJJiMzOTt2ZSBzZWVuLCBpdCYjMzk7cyBwb2ludGluZyB0b3dhcmRzIGEgcG90ZW50aWFsIHByb2JsZW0gaW4gdGhlIE9IQ0kgaG9zdCBjb250cm9sbGVyIGRyaXZlci4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGxvb2sgYXJvdW5kIGxpbmUgODggb2YgYG9oY2ktaGNkLmNgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hhdCYjMzk7cyBiZWluZyBpbml0aWFsaXplZCBvciBtb2RpZmllZCBhcm91bmQgdGhhdCBhcmVhLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IGl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBlaXRoZXIgZGVzY3JpcHRvciBzZXR1cCwgaW50ZXJydXB0IGhhbmRsaW5nLCBvciBtYXliZSBldmVuIHJlc291cmNlIGFsbG9jYXRpb24gd2l0aGluIHRoZSBkcml2ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgY29udGV4dCBvZiB0aGF0IGNvZGUgc2VjdGlvbi4gSXMgdGhpcyByZWxhdGVkIHRvIGVuZHBvaW50IGNvbmZpZ3VyYXRpb24/IE9yIHBvc3NpYmx5IGEgRE1BIHRyYW5zZmVyIHNldHVwPyBMaW5lIG51bWJlcnMgYXJlIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBxdWlja2x5IGZpbmQgYSBzcGVjaWZpYyBjb2RlIGJsb2NrLCBidXQgSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgT0hDSSBhcmNoaXRlY3R1cmUgdG8gcGxhY2UgdGhhdCBsaW5lIGluIGEgcmVsZXZhbnQgY29udGV4dC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGNsdWVzIHRoYXQgc3VnZ2VzdCBhIHJhY2UgY29uZGl0aW9uLCBhIG1lbW9yeSBjb3JydXB0aW9uLCBvciBhIG1pc2NvbmZpZ3VyYXRpb24gdGhhdCBjb3VsZCBiZSBjb250cmlidXRpbmcgdG8gdGhlIG9ic2VydmVkIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHQjZW5kaWZcbiAgNzE6XHRcbiAgNzI6XHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuICA3MzpcdFxuICA3NDpcdHN0YXRpYyBjb25zdCBjaGFyXHRoY2RfbmFtZSBbXSA9IFwmIzM0O29oY2lfaGNkXCYjMzQ7O1xuICA3NTpcdFxuICA3NjpcdCNkZWZpbmVcdFNUQVRFQ0hBTkdFX0RFTEFZXHRtc2Vjc190b19qaWZmaWVzKDMwMClcbiAgNzc6XHQjZGVmaW5lXHRJT19XQVRDSERPR19ERUxBWVx0bXNlY3NfdG9famlmZmllcygyNzUpXG4gIDc4Olx0I2RlZmluZVx0SU9fV0FUQ0hET0dfT0ZGXHRcdDB4ZmZmZmZmMDBcbiAgNzk6XHRcbiAgODA6XHQjaW5jbHVkZSBcJiMzNDtvaGNpLmhcJiMzNDtcbiAgODE6XHQjaW5jbHVkZSBcJiMzNDtwY2ktcXVpcmtzLmhcJiMzNDtcbiAgODI6XHRcbiAgODM6XHRzdGF0aWMgdm9pZCBvaGNpX2R1bXAoc3RydWN0IG9oY2lfaGNkICpvaGNpKTtcbiAgODQ6XHRzdGF0aWMgdm9pZCBvaGNpX3N0b3Aoc3RydWN0IHVzYl9oY2QgKmhjZCk7XG4gIDg1Olx0c3RhdGljIHZvaWQgaW9fd2F0Y2hkb2dfZnVuYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG4gIDg2Olx0XG4gIDg3Olx0I2luY2x1ZGUgXCYjMzQ7b2hjaS1odWIuY1wmIzM0O1xuICA4ODpcdCNpbmNsdWRlIFwmIzM0O29oY2ktZGJnLmNcJiMzNDtcbiAgODk6XHQjaW5jbHVkZSBcJiMzNDtvaGNpLW1lbS5jXCYjMzQ7XG4gIDkwOlx0I2luY2x1ZGUgXCYjMzQ7b2hjaS1xLmNcJiMzNDtcbiAgOTE6XHRcbiAgOTI6XHRcbiAgOTM6XHQvKlxuICA5NDpcdCAqIE9uIGFyY2hpdGVjdHVyZXMgd2l0aCBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIHdlIG11c3QgbmV2ZXIgcmV0dXJuXG4gIDk1Olx0ICogSVJRX05PTkUuXG4gIDk2Olx0ICovXG4gIDk3Olx0I2lmIGRlZmluZWQoQ09ORklHX1NBMTExMSkgIC8qIC4uLiBvciBvdGhlciBlZGdlLXRyaWdnZXJlZCBzeXN0ZW1zICovXG4gIDk4Olx0I2RlZmluZSBJUlFfTk9UTUlORVx0SVJRX0hBTkRMRURcbiAgOTk6XHQjZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU5OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJiMzOTttIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgRGVidWdnaW5nIEZsYWcmIzM5O3MgU2NvcGUqKgoKSG1tLCBpdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBpdCYjMzk7cyBqdXN0IGluY2x1ZGVkLiBCdXQgaGFuZyBvbiBhIHNlY29uZCwgYSBsaXR0bGUgYWxhcm0gYmVsbCBqdXN0IHdlbnQgb2ZmLiBXaGF0IGlmIHRoZSBmaWxlIGBvaGNpLWRiZy5jYCDigJMgdGhhdCBJJiMzOTttIGRlYWxpbmcgd2l0aCBoZXJlIOKAkyAqaXRzZWxmKiBoYXMgYSBgI2lmZGVmIERFQlVHYCBibG9jayB3aXRoaW4gaXQ/IFRoYXQmIzM5O3MgdGhlIHJlYWwgcG90ZW50aWFsIGdvdGNoYS4gSWYgaXQgZG9lcywgdGhlbiB0aGUgaW5jbHVzaW9uIG9mIGBvaGNpLWRiZy5jYCBhbG9uZSBtaWdodCBub3QgKmd1YXJhbnRlZSogdGhhdCB0aGUgZGVidWcgY29kZSB3aXRoaW4gaXQgaXMgYWN0aXZlLiBUaGUgbmVzdGVkIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGNvdWxkIGJlIGF0IHBsYXkgaGVyZS4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb250ZW50cyBvZiB0aGF0IGZpbGUuIEl0IGlzbiYjMzk7dCBnb29kIGVub3VnaCB0byBhc3N1bWUgZXZlcnl0aGluZyB3aWxsIGJlIGluIHBsYWNlIHdpdGggYSBzaW1wbGUgaW5jbHVkZSwgbm90IHdoZW4gdGhhdCBmaWxlIG1pZ2h0IGhhdmUgaXRzIG93biBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdGhlIHNhbWUgbWFjcm8uIEkgbmVlZCB0byBydWxlIHRoaXMgb3V0LCBhbmQgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTEuMCYjNDM7XG4gICAyOlx0LypcbiAgIDM6XHQgKiBPSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi5cbiAgIDQ6XHQgKlxuICAgNTpcdCAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIgXHUwMDNjd2Vpc3NnQHZpZW5uYS5hdFx1MDAzZVxuICAgNjpcdCAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAyIERhdmlkIEJyb3duZWxsIFx1MDAzY2Ricm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXRcdTAwM2VcbiAgIDc6XHQgKlxuICAgODpcdCAqIFRoaXMgZmlsZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMLlxuICAgOTpcdCAqL1xuICAxMDpcdFxuICAxMTpcdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4gIDEyOlx0XG4gIDEzOlx0I2RlZmluZSBlZHN0cmluZyhlZF90eXBlKSAoeyBjaGFyICp0ZW1wOyBcXFxuICAxNDpcdFx0c3dpdGNoIChlZF90eXBlKSB7IFxcXG4gIDE1Olx0XHRjYXNlIFBJUEVfQ09OVFJPTDpcdHRlbXAgPSBcJiMzNDtjdHJsXCYjMzQ7OyBicmVhazsgXFxcbiAgMTY6XHRcdGNhc2UgUElQRV9CVUxLOlx0XHR0ZW1wID0gXCYjMzQ7YnVsa1wmIzM0OzsgYnJlYWs7IFxcXG4gIDE3Olx0XHRjYXNlIFBJUEVfSU5URVJSVVBUOlx0dGVtcCA9IFwmIzM0O2ludHJcJiMzNDs7IGJyZWFrOyBcXFxuICAxODpcdFx0ZGVmYXVsdDpcdFx0dGVtcCA9IFwmIzM0O2lzb2NcJiMzNDs7IGJyZWFrOyBcXFxuICAxOTpcdFx0fSB0ZW1wO30pXG4gIDIwOlx0I2RlZmluZSBwaXBlc3RyaW5nKHBpcGUpIGVkc3RyaW5nKHVzYl9waXBldHlwZShwaXBlKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxOTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIGBvaGNpLWRiZy5jYCBGaWxlKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNvbWV0aGluZyBzcGVjaWZpYyB3aXRoaW4gdGhlIGBvaGNpLWRiZy5jYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuIEV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBvZnRlbiwgZGVidWctcmVsYXRlZCBmdW5jdGlvbnMgb3IgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCBtaWdodCBiZSBtb3JlIHJlY2VudCBhZGRpdGlvbnMgb3IgaGF2ZSBzcGVjaWZpYyB0ZXN0aW5nIGhvb2tzLCBhcmUgcGxhY2VkIHRvd2FyZHMgdGhlIHRhaWwgZW5kIG9mIHRoZSBzb3VyY2UgZmlsZS4gSXQmIzM5O3MgYSBxdWljayB3YXkgdG8gZmluZCB0aGUgcmVsZXZhbnQgZGVidWdnaW5nIGNvZGUgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24gcmVsYXRlZCB0byB0aGUgVVNCIE9wZW4gSG9zdCBDb250cm9sbGVyIEludGVyZmFjZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGRvd24gdGhlcmUuIFRoaXMgaXMgYSBjb21tb24gc3RhcnRpbmcgcG9pbnQgaW4gdGhpcyB0eXBlIG9mIGRlYnVnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcyMDpcdFx0cmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGxlbiwgb2Zmc2V0LFxuIDcyMTpcdFx0XHRcdFx0ICAgICAgYnVmLVx1MDAzZXBhZ2UsIGJ1Zi1cdTAwM2Vjb3VudCk7XG4gNzIyOlx0XG4gNzIzOlx0b3V0OlxuIDcyNDpcdFx0cmV0dXJuIHJldDtcbiA3MjU6XHRcbiA3MjY6XHR9XG4gNzI3Olx0XG4gNzI4Olx0c3RhdGljIGludCBkZWJ1Z19jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiA3Mjk6XHR7XG4gNzMwOlx0XHRzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiA3MzE6XHRcbiA3MzI6XHRcdGtmcmVlKGJ1Zi1cdTAwM2VwYWdlKTtcbiA3MzM6XHRcdGtmcmVlKGJ1Zik7XG4gNzM0Olx0XG4gNzM1Olx0XHRyZXR1cm4gMDtcbiA3MzY6XHR9XG4gNzM3Olx0c3RhdGljIGludCBkZWJ1Z19hc3luY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIDczODpcdHtcbiA3Mzk6XHRcdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gYWxsb2NfYnVmZmVyKGlub2RlLVx1MDAzZWlfcHJpdmF0ZSwgZmlsbF9hc3luY19idWZmZXIpO1xuIDc0MDpcdFxuIDc0MTpcdFx0cmV0dXJuIGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID8gMCA6IC1FTk9NRU07XG4gNzQyOlx0fVxuIDc0MzpcdFxuIDc0NDpcdHN0YXRpYyBpbnQgZGVidWdfcGVyaW9kaWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiA3NDU6XHR7XG4gNzQ2Olx0XHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IGFsbG9jX2J1ZmZlcihpbm9kZS1cdTAwM2VpX3ByaXZhdGUsXG4gNzQ3Olx0XHRcdFx0XHRcdCAgZmlsbF9wZXJpb2RpY19idWZmZXIpO1xuIDc0ODpcdFxuIDc0OTpcdFx0cmV0dXJuIGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID8gMCA6IC1FTk9NRU07XG4gNzUwOlx0fVxuIDc1MTpcdFxuIDc1MjpcdHN0YXRpYyBpbnQgZGVidWdfcmVnaXN0ZXJzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gNzUzOlx0e1xuIDc1NDpcdFx0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBhbGxvY19idWZmZXIoaW5vZGUtXHUwMDNlaV9wcml2YXRlLFxuIDc1NTpcdFx0XHRcdFx0XHQgIGZpbGxfcmVnaXN0ZXJzX2J1ZmZlcik7XG4gNzU2Olx0XG4gNzU3Olx0XHRyZXR1cm4gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPyAwIDogLUVOT01FTTtcbiA3NTg6XHR9XG4gNzU5Olx0c3RhdGljIGlubGluZSB2b2lkIGNyZWF0ZV9kZWJ1Z19maWxlcyAoc3RydWN0IG9oY2lfaGNkICpvaGNpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk3MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBgY3JlYXRlX2RlYnVnX2ZpbGVzYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgYmFjayBpbnRvIHRoZSBjb2RlLiBNeSBndXQgZmVlbGluZyBpcyB0byBmb2N1cyBvbiB0aGF0IGBjcmVhdGVfZGVidWdfZmlsZXNgIGZ1bmN0aW9uLiBJdOKAmXMgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB3aGVuIHRyYWNraW5nIGRvd24gcG90ZW50aWFsIGlzc3VlcyBvciBkZWJ1Z2dpbmcgYSBuZXcgc3lzdGVtLCBiZWNhdXNlIGl0IGlzIHNvbWV0aGluZyBJIGNhbiBzZWUgYSBsb3Qgb2YgZGV2ZWxvcGVycyB1c2luZyB0byBsb29rIGZvciBjbHVlcywgYW5kIGlzIHByb2JhYmx5IHVzZWQgcXVpdGUgZnJlcXVlbnRseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGNvbWZvcnRhYmxlIHRoYXQgdGhlIGZpbGVzIGdlbmVyYXRlZCBtYXRjaCBleHBlY3RhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgaW5wdXRzIGl0IHRha2VzIGFuZCBleGFjdGx5IHdoYXQgaXQgb3V0cHV0cy4gSG9wZWZ1bGx5LCBpdCBoYXMgZGVjZW50IGxvZ2dpbmcsIG9yIGF0IGxlYXN0IHNvbWUgaW5mb3JtYXRpdmUgZmlsZW5hbWVzIHRoYXQgY2FuIGxlYWQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiBpdCYjMzk7cyBjb3JyZWN0bHkgY29uZmlndXJlZCBpbiB0aGUgZmlyc3QgcGxhY2UsIG9yIGlmIHNvbWV0aGluZyBpcyBhY2NpZGVudGFsbHkgb3ZlcnJpZGluZyBpdHMgYmVoYXZpb3IuIEl0IGNhbiBiZSBlYXN5IHRvIGxvc2UgdHJhY2sgb2Ygc2V0dGluZ3MgYXMgd2UgZ28sIHNvIGxldHMgY29uZmlybSB0aGUgc3RhdGUgYW5kIHNldHRpbmdzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCB5aWVsZHMuIEl0JiMzOTtzIG9mdGVuIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzYwOlx0e1xuIDc2MTpcdFx0c3RydWN0IHVzYl9idXMgKmJ1cyA9IFx1MDAyNm9oY2lfdG9faGNkKG9oY2kpLVx1MDAzZXNlbGY7XG4gNzYyOlx0XHRzdHJ1Y3QgZGVudHJ5ICpyb290O1xuIDc2MzpcdFxuIDc2NDpcdFx0cm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihidXMtXHUwMDNlYnVzX25hbWUsIG9oY2lfZGVidWdfcm9vdCk7XG4gNzY1Olx0XHRvaGNpLVx1MDAzZWRlYnVnX2RpciA9IHJvb3Q7XG4gNzY2Olx0XG4gNzY3Olx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2FzeW5jXCYjMzQ7LCBTX0lSVUdPLCByb290LCBvaGNpLCBcdTAwMjZkZWJ1Z19hc3luY19mb3BzKTtcbiA3Njg6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7cGVyaW9kaWNcJiMzNDssIFNfSVJVR08sIHJvb3QsIG9oY2ksXG4gNzY5Olx0XHRcdFx0ICAgIFx1MDAyNmRlYnVnX3BlcmlvZGljX2ZvcHMpO1xuIDc3MDpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtyZWdpc3RlcnNcJiMzNDssIFNfSVJVR08sIHJvb3QsIG9oY2ksXG4gNzcxOlx0XHRcdFx0ICAgIFx1MDAyNmRlYnVnX3JlZ2lzdGVyc19mb3BzKTtcbiA3NzI6XHRcbiA3NzM6XHRcdG9oY2lfZGJnIChvaGNpLCBcJiMzNDtjcmVhdGVkIGRlYnVnIGZpbGVzXFxuXCYjMzQ7KTtcbiA3NzQ6XHR9XG4gNzc1Olx0XG4gNzc2Olx0c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9kZWJ1Z19maWxlcyAoc3RydWN0IG9oY2lfaGNkICpvaGNpKVxuIDc3NzpcdHtcbiA3Nzg6XHRcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShvaGNpLVx1MDAzZWRlYnVnX2Rpcik7XG4gNzc5Olx0fVxuIDc4MDpcdFxuIDc4MTpcdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4gNzgyOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjI1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyB0aGUgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBkZWJ1Z2ZzIGNoYW5nZSB3YXJyYW50cyBmdXp6aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7RGVidWdmcywgaHVoPyBJcyB0aGlzIGV2ZW4gd29ydGggdGhlIGVmZm9ydD8mIzM0OyBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogb25seSByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgaXQmIzM5O3MgZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgbm9uLWZ1bmN0aW9uYWwgY29uc3RhbnQgbW9kaWZpY2F0aW9ucywgb3IgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCgpGaXJzdCwgaXMgZGVidWdmcyByZWFjaGFibGU/IFllcywgaXQgaXMuIE5vdywgaXMgdGhpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBBdCBmaXJzdCBnbGFuY2UsIGl0IGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgbWVtb3J5IGFsbG9jYXRpb24gcmVmYWN0b3IgZnJvbSBgX19nZXRfZnJlZV9wYWdlc2AgdG8gYGttYWxsb2NgIGFuZCBgZ2V0X3plcm9lZF9wYWdlYCB0byBga3phbGxvY2AuIEhhbmcgb24sIGxldCYjMzk7cyBtYWtlIHN1cmUgSSBkaWRuJiMzOTt0IG1pc3MgYW55dGhpbmcuCgpPa2F5LCBpbiBgdXNiX2RldmljZV9kdW1wYCwgdGhlIGNoYW5nZSBpczoKCmBgYGMKLQlwYWdlc19zdGFydCA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlcyhHRlBfTk9JTywgMSk7CiYjNDM7CXBhZ2VzX3N0YXJ0ID0ga21hbGxvYyhQQUdFX1NJWkUgJmx0OyZsdDsgMSwgR0ZQX05PSU8pOwpgYGAKYW5kCmBgYGMKLQkJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcGFnZXNfc3RhcnQsIDEpOwomIzQzOwkJCWtmcmVlKHBhZ2VzX3N0YXJ0KTsKYGBgCkFuZCBpbiBgb2hjaS1kYmcuY2A6CmBgYGMKLQkJYnVmLSZndDtwYWdlID0gKGNoYXIgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiYjNDM7CQlidWYtJmd0O3BhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CmBgYAphbmQKYGBgYwotCWlmIChidWYpIHsKLQkJaWYgKGJ1Zi0mZ3Q7cGFnZSkKLQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWYtJmd0O3BhZ2UpOwotCQlrZnJlZShidWYpOwotCX0KJiM0MzsJa2ZyZWUoYnVmLSZndDtwYWdlKTsKJiM0MzsJa2ZyZWUoYnVmKTsKYGBgCgpUaGlzIGlzIGVzc2VudGlhbGx5IGEgc3RyYWlnaHRmb3J3YXJkIG1lbW9yeSBhbGxvY2F0aW9uIGNoYW5nZS4gSXQmIzM5O3MgcmVmYWN0b3JpbmcsIHJlcGxhY2luZyB0aGUgcGFnZSBhbGxvY2F0b3Igd2l0aCB0aGUgc2xhYiBhbGxvY2F0b3IuCgpJcyB0aGlzIHdvcnRoIGZ1enppbmc/IEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgZGlmZmVyZW50IGFsbG9jYXRvciBpcyBiZWluZyB1c2VkLiBFdmVuIGlmIGl0JiMzOTtzICpqdXN0KiByZWZhY3RvcmluZywgaXQgY291bGQgaW50cm9kdWNlIG5ldyB2dWxuZXJhYmlsaXRpZXMuIEJ1dCB3YWl0LCBsZXQmIzM5O3MgcmV2aXNpdCB0aGUgcHJvbXB0LiBJdCBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IG1lbnRpb24gcmVmYWN0b3JpbmcsIGJ1dCBpdCBkb2VzIHNheSB3aGF0IGlzbiYjMzk7dCB3b3J0aCBmdXp6aW5nLiBUaGUgcHJvbXB0IGxpc3QgKmRvZXMgbm90KiBpbmNsdWRlIHJlZmFjdG9yaW5nLgoKQWxyaWdodCwgaXMgdGhlIGNvZGUgcmVhY2hhYmxlIGluIFFFTVU/IFllcy4gYC9zeXMva2VybmVsL2RlYnVnL3VzYi9kZXZpY2VzYCBpcyByZWFjaGFibGUgZm9yIGB1c2JfZGV2aWNlX2R1bXBgLiBBbmQgYG9oY2ktZGJnLmNgIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBkZWJ1Z2ZzIGFzIHdlbGwsIHByb3ZpZGVkIE9IQ0kgaXMgZW5hYmxlZC4gQ2FuIHdlIGVuYWJsZSBPSENJIGluIFFFTVU/IFllcywgUUVNVSBoYXMgYHBjaS1vaGNpYCBhbmQgYHN5c2J1cy1vaGNpYCB3aGljaCB3ZSBjYW4gdXNlIGZvciBlbmFibGluZyBPSENJLgoKU28sIGl0JiMzOTtzIHJlYWNoYWJsZSBhbmQgYSBmdW5jdGlvbmFsIGNoYW5nZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzcGVjaWZpYyBjb25maWcgcmVxdWlyZW1lbnRzIEkmIzM5O20gbWlzc2luZy4gYHVzYl9kZXZpY2VfZHVtcGAgaXMgaW4gYGRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jYCwgYW5kIEkmIzM5O2xsIGNoZWNrIGBkcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4KCkJhc2VkIG9uIGFsbCB0aGlzLCBpdCBzZWVtcyByZWFzb25hYmxlIHRoYXQgdGhpcyB3YXJyYW50cyBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZpY2VzLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGU9MTA9dXNiY29yZS15ICYjNDM7PSBjb25maWcubyBmaWxlLm8gYnVmZmVyLm8gc3lzZnMubyBlbmRwb2ludC5vXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlOjExOnVzYmNvcmUteSAmIzQzOz0gZGV2aW8ubyBub3RpZnkubyBnZW5lcmljLm8gcXVpcmtzLm8gZGV2aWNlcy5vXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlLTEyLXVzYmNvcmUteSAmIzQzOz0gcGh5Lm8gcG9ydC5vIHRyYWNlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNzgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVVNCIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlc2UgVVNCIGNvbXBvbmVudHMgYXJlIGNvbmZpZ3VyZWQuIFJpZ2h0LCBzbyB0aGlzIGB1c2Jjb3JlYCB0aGluZywgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHVuZGVyIHRoZSB1bWJyZWxsYSBvZiBgQ09ORklHX1VTQmAsIG5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgb2hjaS1kYmcuY2AsIEkgc2VlIGl0JiMzOTtzIGxpbmtlZCB0byBgb2hjaS1oY2QuY2AsIHdoaWNoLCBpbiB0dXJuLCBpcyBjb250cm9sbGVkIGJ5IGBDT05GSUdfVVNCX09IQ0lfSENEYC4gSG1tLCBhIHF1aWNrIGNoZWNrIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjay4uLiBJIHdvbmRlciwgaXMgYG9oY2ktZGJnLmNgIGFsd2F5cyBjb21waWxlZCBpbiB3aGVuIGBDT05GSUdfVVNCX09IQ0lfSENEYCBpcyBlbmFibGVkPyBOZWVkIHRvIHZlcmlmeSB0aGF0IHJlbGF0aW9uc2hpcC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBgb2hjaS1oY2QuY2Agc291cmNlIGFnYWluIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY3kuIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvaGNpLWRiZy5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYz04NT1zdGF0aWMgdm9pZCBpb193YXRjaGRvZ19mdW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMtODctI2luY2x1ZGUgXCYjMzQ7b2hjaS1odWIuY1wmIzM0O1xuZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jOjg4OiNpbmNsdWRlIFwmIzM0O29oY2ktZGJnLmNcJiMzNDtcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYy04OS0jaW5jbHVkZSBcJiMzNDtvaGNpLW1lbS5jXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjIzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBVU0IgT0hDSSBEZWJ1Z2dpbmcgQ29kZSoqCgpZZXMsIHRoYXQgbWFrZXMgc2Vuc2UgaW4gdGhlIGdlbmVyYWwgY29udGV4dC4gQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gaXMgdGhlIGRlYnVnZ2luZyBmdW5jdGlvbmFsaXR5IHdpdGhpbiBgb2hjaS1kYmcuY2AgZGVwZW5kZW50IG9uIHRoZSBgQ09ORklHX0RFQlVHX0ZTYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24/IEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gd2hldGhlciB0aGUgZGVidWdnaW5nIGZlYXR1cmVzIGFyZSBjb21waWxlZCBpbiBvciBub3QgYmFzZWQgb24gdGhhdCBmbGFnLiBUaW1lIHRvIGp1bXAgaW50byBgb2hjaS1kYmcuY2AgYW5kIHNlYXJjaCBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrcyBvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyByZWxhdGVkIHRvIGBDT05GSUdfREVCVUdfRlNgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZW5hYmxlZCBhbmQgZGlzYWJsZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0RFQlVHX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NDIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgc25pcHBldCBvZiB0aG91Z2h0LCByZW5kZXJlZCBhcyBpZiBpdCB3ZXJlICpteSogaW50ZXJuYWwgbW9ub2xvZ3VlLCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgT0hDSSBEZXRhaWxzKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgbXkgYmVhcmluZ3Mgb24gdGhpcy4gU2VlbXMgbGlrZSB3ZSYjMzk7cmUgemVyb2luZyBpbiBvbiBhIHBhcnRpY3VsYXIgcGllY2Ugb2YgdGhlIHB1enpsZS4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYG9oY2kuaGAuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoYXQgYW55IGhhcmR3YXJlIGludGVyYWN0aW9uIHdpbGwgYmUgZGVmaW5lZCwgYXQgbGVhc3QgaW4gcGFydCwgaW4gdGhhdCBoZWFkZXIuIEkmIzM5O20gdGhpbmtpbmcgcmVnaXN0ZXIgbGF5b3V0cywgYml0ZmllbGRzLCBpbnRlcnJ1cHQgZGVmaW5pdGlvbnMg4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgc3RydWN0dXJlIG9mIHRoZSBPcGVuIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgaXMgZ29pbmcgdG8gYmUgbGFpZCBvdXQsIHRoZSBza2VsZXRvbiBvZiB0aGUgYmVhc3QuIEhvcGVmdWxseSwgaXQmIzM5O3Mgd2VsbC1jb21tZW50ZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBiYXNlIGFkZHJlc3Mgb2Zmc2V0cyBmb3IgdGhlIE9IQ0kgcmVnaXN0ZXJzLCBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9ucywgaW50ZXJydXB0IG51bWJlcnMuLi5hbGwgdGhlIHVzdWFsIHN1c3BlY3RzIHRoYXQgSSBuZWVkIHRvIG1hbmlwdWxhdGUgdGhpcyBoYXJkd2FyZSBwcm9wZXJseS4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIHdhaXRpbmcgdG8gYmUgdW5lYXJ0aGVkLiBUaGlzIGZpbGUgaXMgZ29pbmcgdG8gdGVsbCB0aGUgc3Rvcnkgb2YgdGhlIGhhcmR3YXJlJiMzOTtzIGludGVyZmFjZSB0byB0aGUgc29mdHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2hjaS1kYmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L29oY2kuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTM2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG9oY2ktaGNkLmNgIGFuZCBEZWJ1Z0ZTKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgT3BlbiBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIChPSENJKSBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIGRlYnVnZ2luZy4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCBhIHByZXR0eSBzdGFuZGFyZCBvbmUgaW4gdGhlc2Ugc2l0dWF0aW9ucywgaXMgdG8gemVybyBpbiBvbiBgb2hjaS1oY2QuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYywgc28gbmF0dXJhbGx5LCB0aGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBUaGUgcmVhbCBrZXkgaGVyZSBpcyBnb2luZyB0byBiZSB0cmFjaW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBgQ09ORklHX0RFQlVHX0ZTYC4gSSYjMzk7bSBnb2luZyB0byBiZSBsb29raW5nIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MgdGhhdCBhY3RpdmF0ZSBkZWJ1Z2dpbmcgZmVhdHVyZXMgd2hlbiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgZGVidWdmcy1yZWxhdGVkIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb25zIHVzZWQgd2l0aGluIHRoaXMgZHJpdmVyLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgcGljdHVyZSBvZiBob3cgdGhlIGRlYnVnIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBhbmQgd2hhdCBraW5kIG9mIGluc2lnaHRzIEkgY2FuIGdsZWFuIGZyb20gaXQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfREVCVUdfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQxOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlYnVnZnMgQ29uZmlndXJhdGlvbiBmb3IgVVNCX09IQ0lfSENEIFRlc3RpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgYGRlYnVnZnNfY3JlYXRlX2RpcmAgdXNlZC4gUmlnaHQgYXdheSwgbXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZGVidWdmcy4gSWYgYENPTkZJR19ERUJVR19GU2AgaXNuJiMzOTt0IGVuYWJsZWQsIGl0JiMzOTtzIGp1c3QgYSBzdHViLCBzbyBpdCYjMzk7cyBub3QgYWN0dWFsbHkgZG9pbmcgYW55dGhpbmcuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBwb2ludCB0byBjb25zaWRlciBmb3IgdGVzdGluZyB0aGUgZmlsZXMgdGhhdCBhcmUgYmVpbmcgY3JlYXRlZC4KClNpbmNlIHdlIG5lZWQgYENPTkZJR19ERUJVR19GU2AgdG8gKmFjdHVhbGx5KiB0ZXN0IGFueXRoaW5nIGhlcmUuIEkgaGF2ZSB0byB0aGluayBhYm91dCB3aGF0IG90aGVyIGNvbmZpZyBvcHRpb25zIGFyZSByZXF1aXJlZC4gQnV0IHdhaXQsIGBDT05GSUdfREVCVUdfRlNgIGlzIHByZXR0eSBnZW5lcmljLCBhbmQgc3l6a2FsbGVyIHByb2JhYmx5IGFscmVhZHkgaGFzIGl0IGVuYWJsZWQgYW55d2F5LiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYWlkIG5vdCB0byBsaXN0IHRoZSBzdXBlciBnZW5lcmljIHN0dWZmLCBvbmx5IGNvbmZpZ3Mgc3BlY2lmaWMgdG8gdGhlIGNoYW5nZWQgY29kZS4KClNvLCB0aGUgY29kZSBpcyB1c2luZyBVU0IsIG1lYW5pbmcgSSBzaG91bGQgYmUgbGlzdGluZyBgVVNCX09IQ0lfSENEYC4KCkhhbmcgb24gdGhvdWdoLiBJcyBpdCBgVVNCX09IQ0lfSENEX1BDSWAgb3IgYFVTQl9PSENJX0hDRF9QTEFURk9STWA/IGBVU0JfT0hDSV9IQ0RgIGlzIGEgdHJpc3RhdGUsIGl0JiMzOTtzIHVzdWFsbHkgc2VsZWN0ZWQgYnkgZWl0aGVyIGBVU0JfT0hDSV9IQ0RfUENJYCBvciBzb21ldGhpbmcgbGlrZSB0aGF0LiBMZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBgZHJpdmVycy91c2IvaG9zdC9LY29uZmlnYCBmaWxlIGFuZCBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX09IQ0lfSENEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaG9zdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZz0zOTI9Y29uZmlnIFVTQl9NQVgzNDIxX0hDRFxuLS1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00MDItXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NDAzOmNvbmZpZyBVU0JfT0hDSV9IQ0RcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00MDQtXHR0cmlzdGF0ZSBcJiMzNDtPSENJIEhDRCAoVVNCIDEuMSkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZz00MTk9aWYgVVNCX09IQ0lfSENEXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDIwLVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjQyMTpjb25maWcgVVNCX09IQ0lfSENEX09NQVAxXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDIyLVx0dHJpc3RhdGUgXCYjMzQ7T0hDSSBzdXBwb3J0IGZvciBPTUFQMS8yIGNoaXBzXCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQyNy1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo0Mjg6Y29uZmlnIFVTQl9PSENJX0hDRF9TUEVBUlxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQyOS1cdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgZm9yIFNUIFNQRUFyIG9uLWNoaXAgT0hDSSBVU0IgY29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00MzUtXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NDM2OmNvbmZpZyBVU0JfT0hDSV9IQ0RfU1RJXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDM3LVx0dHJpc3RhdGUgXCYjMzQ7U3VwcG9ydCBmb3IgU1QgU1RpSHh4eCBvbi1jaGlwIE9IQ0kgVVNCIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDQ0LVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjQ0NTpjb25maWcgVVNCX09IQ0lfSENEX1MzQzI0MTBcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00NDYtXHR0cmlzdGF0ZSBcJiMzNDtPSENJIHN1cHBvcnQgZm9yIFNhbXN1bmcgUzNDNjR4eCBTb0Mgc2VyaWVzXCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQ1Mi1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo0NTM6Y29uZmlnIFVTQl9PSENJX0hDRF9MUEMzMlhYXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDU0LVx0dHJpc3RhdGUgXCYjMzQ7U3VwcG9ydCBmb3IgTFBDIG9uLWNoaXAgT0hDSSBVU0IgY29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00NjItXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NDYzOmNvbmZpZyBVU0JfT0hDSV9IQ0RfUFhBMjdYXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDY0LVx0dHJpc3RhdGUgXCYjMzQ7U3VwcG9ydCBmb3IgUFhBMjdYL1BYQTNYWCBvbi1jaGlwIE9IQ0kgVVNCIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDcwLVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjQ3MTpjb25maWcgVVNCX09IQ0lfSENEX0FUOTFcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00NzItXHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciBBdG1lbCBvbi1jaGlwIE9IQ0kgVVNCIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDc4LVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjQ3OTpjb25maWcgVVNCX09IQ0lfSENEX09NQVAzXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDgwLVx0dHJpc3RhdGUgXCYjMzQ7T0hDSSBzdXBwb3J0IGZvciBPTUFQMyBhbmQgbGF0ZXIgY2hpcHNcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDkwLVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjQ5MTpjb25maWcgVVNCX09IQ0lfSENEX0RBVklOQ0lcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00OTItXHR0cmlzdGF0ZSBcJiMzNDtPSENJIHN1cHBvcnQgZm9yIFRJIERhVmluY2kgREE4eHhcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNTAxLVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjUwMjpjb25maWcgVVNCX09IQ0lfSENEX1BQQ19PRl9CRVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTUwMy1cdGJvb2wgXCYjMzQ7T0hDSSBzdXBwb3J0IGZvciBPRiBwbGF0Zm9ybSBidXMgKGJpZyBlbmRpYW4pXCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTUxMC1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo1MTE6Y29uZmlnIFVTQl9PSENJX0hDRF9QUENfT0ZfTEVcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy01MTItXHRib29sIFwmIzM0O09IQ0kgc3VwcG9ydCBmb3IgT0YgcGxhdGZvcm0gYnVzIChsaXR0bGUgZW5kaWFuKVwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy01MTgtXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NTE5OmNvbmZpZyBVU0JfT0hDSV9IQ0RfUFBDX09GXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNTIwLVx0Ym9vbFxuLS1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy01MjMtXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NTI0OmNvbmZpZyBVU0JfT0hDSV9IQ0RfUENJXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNTI1LVx0dHJpc3RhdGUgXCYjMzQ7T0hDSSBzdXBwb3J0IGZvciBQQ0ktYnVzIFVTQiBjb250cm9sbGVyc1wmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy01MzItXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NTMzOmNvbmZpZyBVU0JfT0hDSV9IQ0RfU1NCXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNTM0LVx0Ym9vbCBcJiMzNDtPSENJIHN1cHBvcnQgZm9yIEJyb2FkY29tIFNTQiBPSENJIGNvcmUgKERFUFJFQ0FURUQpXCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnPTU1MD1jb25maWcgVVNCX09IQ0lfRVhZTk9TXG4tLVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTU1Ni1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo1NTc6Y29uZmlnIFVTQl9PSENJX0hDRF9QTEFURk9STVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTU1OC1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgT0hDSSBkcml2ZXIgZm9yIGEgcGxhdGZvcm0gZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTg2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBlbWJlZGRlZCBzeXN0ZW1zIGV4cGVydDoKCioqVVNCIENvbnRyb2xsZXIgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgUUVNVSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgVVNCIGhvc3QgY29udHJvbGxlciBjb25maWd1cmF0aW9uIGZvciBRRU1VLCBhbmQgdGhlIGluaXRpYWwgaW5zdGluY3QgcG9pbnRzIHRvd2FyZHMgYFVTQl9PSENJX0hDRF9QQ0lgLiBUaGF0IHJpbmdzIGEgYmVsbCwgSSBvZnRlbiB1c2UgdGhhdCBmb3IgZW11bGF0aW5nIG9sZGVyIE9IQ0kgY29udHJvbGxlcnMuIEJ1dCBob2xkIG9uLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGJhc2UgY29uZmlndXJhdGlvbiBvcHRpb24gZmlyc3QuIFRoZSBtYWluIGNvbmZpZ3VyYXRpb24gc2VlbXMgdG8gYmUgYFVTQl9PSENJX0hDRGAsIHNvIGl0JiMzOTtzIGJlc3QgcHJhY3RpY2UgdG8gY29uZmlybSB0aGUgZXhhY3QgcHVycG9zZSBvZiBgVVNCX09IQ0lfSENEX1BDSWAuIExldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYW5kIG1ha2Ugc3VyZSB0aGVyZSBpc24mIzM5O3QgYSBzdWJ0bGUgZGlmZmVyZW5jZSBvciBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgSSYjMzk7bSBvdmVybG9va2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYFVTQl9PSENJX0hDRF9QQ0lgIGlzIGp1c3QgZW5hYmxpbmcgYSBQQ0ktc3BlY2lmaWMgdmFyaWFudCwgb3IgaWYgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGVsc2UgZ29pbmcgb24uIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX09IQ0lfSENEX1BDSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L0tjb25maWc9NTE5PWNvbmZpZyBVU0JfT0hDSV9IQ0RfUFBDX09GXG4tLVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTUyMy1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo1MjQ6Y29uZmlnIFVTQl9PSENJX0hDRF9QQ0lcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy01MjUtXHR0cmlzdGF0ZSBcJiMzNDtPSENJIHN1cHBvcnQgZm9yIFBDSS1idXMgVVNCIGNvbnRyb2xsZXJzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTkxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVVNCIENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBVU0IgY29uZmlndXJhdGlvbnMgaGVyZS4gSSBzZWUgYFVTQl9PSENJX0hDRGAgYW5kIGBVU0JfT0hDSV9IQ0RfUENJYCBsaXN0ZWQsIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBleHBlY3QgZm9yIHRoZSBPSENJIGhvc3QgY29udHJvbGxlciBkcml2ZXIuIEJ1dCBJIGFsc28gbmVlZCB0byBjb25zaWRlciBkZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzLiBXaGF0IGFib3V0IGB1c2JfZGV2aWNlX2R1bXBgPyBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgaXQmIzM5O3MgaW4gYGRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdCBmaWxlIGlzIGFsd2F5cyBjb21waWxlZCwgb3IgaWYgaXQmIzM5O3MgY29uZGl0aW9uYWwgYmFzZWQgb24gc29tZSBvdGhlciBjb25maWd1cmF0aW9uIHNldHRpbmcsIGVzcGVjaWFsbHkgaWYgSSYjMzk7bSBwbGFubmluZyBhbnkgbW9kaWZpY2F0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgZHJpdmVycy91c2IvY29yZS9NYWtlZmlsZWAgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBydWxlcyB0ZWxsIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZpY2VzLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGU9MTA9dXNiY29yZS15ICYjNDM7PSBjb25maWcubyBmaWxlLm8gYnVmZmVyLm8gc3lzZnMubyBlbmRwb2ludC5vXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlOjExOnVzYmNvcmUteSAmIzQzOz0gZGV2aW8ubyBub3RpZnkubyBnZW5lcmljLm8gcXVpcmtzLm8gZGV2aWNlcy5vXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlLTEyLXVzYmNvcmUteSAmIzQzOz0gcGh5Lm8gcG9ydC5vIHRyYWNlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUaGlzIFBhdGNoOiBNeSBFdmFsdWF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtZZXMsIGl0JiMzOTtzIGRlZmluaXRlbHkgY29tcGlsZWQgaWYgYENPTkZJR19VU0JgIGlzIGVuYWJsZWQuJiMzNDsgQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHRoaW5nIGFjdHVhbGx5ICp3b3J0aCogZnV6emluZz8gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyByZXBsYWNpbmcgYF9fZ2V0X2ZyZWVfcGFnZXNgIHdpdGggYGttYWxsb2NgIGFuZCBgZ2V0X3plcm9lZF9wYWdlYCB3aXRoIGBremFsbG9jYC4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBiZWNhdXNlIGl0JiMzOTtzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgdGhlIG1lbW9yeSBhbGxvY2F0b3IuCgpUaGlzIGNvdWxkIGRlZmluaXRlbHkgZXhwb3NlIGRpZmZlcmVudCBidWdzISBGb3IgZXhhbXBsZSwgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgbWlnaHQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG5vdywgYmVjYXVzZSBLQVNBTiB0cmFja3MgYGttYWxsb2NgIGFsbG9jYXRpb25zIG1vcmUgdGhvcm91Z2hseSB0aGFuIHBhZ2UgYWxsb2NhdGlvbnMsIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIGNvbmZpZy4KClRoZW4gdGhlcmUmIzM5O3MgdGhlIHNpemUgZGlmZmVyZW5jZS4gTGV0IG1lIHNlZS4uLiBgX19nZXRfZnJlZV9wYWdlcyhHRlBfTk9JTywgMSlgIGFsbG9jYXRlcyB0d28gcGFnZXMsIG9yIDgxOTIgYnl0ZXMgb24geDg2LiBXaGlsZSBga21hbGxvYyhQQUdFX1NJWkUgJmx0OyZsdDsgMSwgR0ZQX05PSU8pYCBhbHNvIGFsbG9jYXRlcyA4MTkyIGJ5dGVzLiBgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpYCBhbGxvY2F0ZXMgNDA5NiBieXRlcyBhbmQgYGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKWAgYWxzbyBhbGxvY2F0ZXMgNDA5NiBieXRlcy4gU28sIHNhbWUgc2l6ZSwganVzdCBhIGRpZmZlcmVudCBhbGxvY2F0b3IuCgpPa2F5LCBzbyB0aGUgYm90dG9tIGxpbmU6IEkgdGhpbmsgaXQgKmlzKiB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgdGhlIGNvZGUgcGF0aCBpcyByZWFjaGFibGUuCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHdoYXQgc3ltYm9scyB0byBmb2N1cyBvbi4gSSBzZWUgYHVzYl9kZXZpY2VfZHVtcGAsIGBmaWxsX2J1ZmZlcmAsIGFuZCBgZGVidWdfY2xvc2VgLgoKV2FpdCwgYXJlIHRob3NlIHN5bWJvbHMuLi4gQWgsIGBmaWxsX2J1ZmZlcmAgYW5kIGBkZWJ1Z19jbG9zZWAgYXJlIHN0YXRpYyBmdW5jdGlvbnMgaW4gYG9oY2ktZGJnLmNgLiBBbmQgYHVzYl9kZXZpY2VfZHVtcGAgaXMgaW4gYGRldmljZXMuY2AuIEhtbSwgY2FuIEkgdXNlIHN0YXRpYyBmdW5jdGlvbnMgYXMgZm9jdXMgc3ltYm9scz8gWWVzLCBzeXprYWxsZXIgY2FuIHVzZSBzdGF0aWMgZnVuY3Rpb25zLCBzbyB0aGF0JiMzOTtzIGZpbmUuIEJ1dCBgZmlsbF9idWZmZXJgIGlzIGEgcHJldHR5IGdlbmVyaWMgbmFtZS4gTWF5YmUgc29tZXRoaW5nIGxpa2UgYGRlYnVnX291dHB1dGAgZnJvbSBgb2hjaS1kYmcuY2Agd291bGQgYmUgYmV0dGVyPyBJIHNob3VsZCBkb3VibGUgY2hlY2sgYG9oY2ktZGJnLmNgIHRob3VnaCwganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWxsX2J1ZmZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM9NjY1PXN0YXRpYyBzdHJ1Y3QgZGVidWdfYnVmZmVyICphbGxvY19idWZmZXIoc3RydWN0IG9oY2lfaGNkICpvaGNpLFxuLS1cbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy02ODAtXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM6NjgxOnN0YXRpYyBpbnQgZmlsbF9idWZmZXIoc3RydWN0IGRlYnVnX2J1ZmZlciAqYnVmKVxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTY4Mi17XG4tLVxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jPTcwND1zdGF0aWMgc3NpemVfdCBkZWJ1Z19vdXRwdXQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1Zixcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNzExLVx0aWYgKGJ1Zi1cdTAwM2Vjb3VudCA9PSAwKSB7XG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM6NzEyOlx0XHRyZXQgPSBmaWxsX2J1ZmZlcihidWYpO1xuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTcxMy1cdFx0aWYgKHJldCAhPSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGB1c2JfZGV2aWNlX2R1bXBgKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGB1c2JfZGV2aWNlX2R1bXBgLiYjMzQ7IFRoaXMgc3VnZ2VzdHMgSSYjMzk7bSBhbHJlYWR5IGRlZXAgaW50byB0cm91Ymxlc2hvb3Rpbmcgb3IgYW5hbHlzaXMgb2YgYSBVU0ItcmVsYXRlZCBpc3N1ZSwgYW5kIG15IGludHVpdGlvbiBwb2ludHMgbWUgdG93YXJkcyB0aGF0IHBhcnRpY3VsYXIgdXRpbGl0eS4gSXQmIzM5O3MgbGlrZWx5IGEgZGVidWdnaW5nIHRvb2wsIGEgc2NyaXB0LCBvciBhIHNwZWNpZmljIGZ1bmN0aW9uIHdpdGhpbiBhIGxhcmdlciBVU0IgbWFuYWdlbWVudCBzeXN0ZW0uIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIGEgc3BlY2lmaWMgVVNCIGRldmljZSYjMzk7cyBzdGF0ZSwgY29uZmlndXJhdGlvbiwgb3IgcG90ZW50aWFsbHkgZXZlbiBpdHMgY29tbXVuaWNhdGlvbiBsb2dzLiBUaGlzIGlzIHVzdWFsbHkgdGhlIGdvLXRvIHdoZW4gSSYjMzk7bSBjaGFzaW5nIGRvd24gZHJpdmVyIHByb2JsZW1zLCBidXMgZXJyb3JzLCBvciBkaXNjcmVwYW5jaWVzIGluIGRldmljZSBlbnVtZXJhdGlvbi4gSXQmIzM5O3MgdGhlIGZpcnN0IHBsYWNlIEkmIzM5O2QgbG9vayBmb3IgbG93LWxldmVsIGRldGFpbHMgYWJvdXQgdGhlIGRldmljZSBJJiMzOTttIHRyb3VibGVzaG9vdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNiX2RldmljZV9kdW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM9MzY1PXN0YXRpYyBjaGFyICp1c2JfZHVtcF9kZXNjKGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtMzkwLSAqL1xuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM6MzkxOnN0YXRpYyBzc2l6ZV90IHVzYl9kZXZpY2VfZHVtcChjaGFyIF9fdXNlciAqKmJ1ZmZlciwgc2l6ZV90ICpuYnl0ZXMsXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy0zOTItXHRcdFx0ICAgICAgIGxvZmZfdCAqc2tpcF9ieXRlcywgbG9mZl90ICpmaWxlX29mZnNldCxcbi0tXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy00OTgtXHRcdHVzYl9sb2NrX2RldmljZShjaGlsZGRldik7XG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYzo0OTk6XHRcdHJldCA9IHVzYl9kZXZpY2VfZHVtcChidWZmZXIsIG5ieXRlcywgc2tpcF9ieXRlcyxcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jLTUwMC1cdFx0XHRcdCAgICAgIGZpbGVfb2Zmc2V0LCBjaGlsZGRldiwgYnVzLFxuLS1cbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jPTUxMD1zdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4tLVxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTI5LVx0XHR1c2JfbG9ja19kZXZpY2UoYnVzLVx1MDAzZXJvb3RfaHViKTtcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jOjUzMDpcdFx0cmV0ID0gdXNiX2RldmljZV9kdW1wKFx1MDAyNmJ1ZiwgXHUwMDI2bmJ5dGVzLCBcdTAwMjZza2lwX2J5dGVzLCBwcG9zLFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTMxLVx0XHRcdFx0ICAgICAgYnVzLVx1MDAzZXJvb3RfaHViLCBidXMsIDAsIDAsIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDcwMQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgRnVuY3Rpb24gTmFtZSBDb25mbGljdHMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZnVuY3Rpb25zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZm9yIHRoaXMgZGVidWdnaW5nIHNjZW5hcmlvLiBSaWdodCBub3csIEkmIzM5O20gemVyb2luZyBpbiBvbiBgdXNiX2RldmljZV9kdW1wYCwgd2hpY2ggc2VlbXMgcHJldHR5IHNwZWNpZmljLiBIb3dldmVyLCBJJiMzOTttIGEgbGl0dGxlIGNvbmNlcm5lZCBhYm91dCBgZmlsbF9idWZmZXJgIGFuZCBgZGVidWdfY2xvc2VgLiBUaG9zZSBhcmUgKmV4dHJlbWVseSogY29tbW9uIG5hbWVzLiBBbmQsIGdpdmVuIHRoYXQgd2UmIzM5O3JlIHRhcmdldGluZyBzeXprYWxsZXIgZm9yIGZ1enppbmcsIEkgbmVlZCB0byBiZSBjYXV0aW91cyBhYm91dCBwb3RlbnRpYWwgbmFtaW5nIGNvbmZsaWN0cy4gSWYgdGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIHRoZSB0b29sIG1pZ2h0IGluYWR2ZXJ0ZW50bHkgbWF0Y2ggb3RoZXIgZnVuY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZXMgaW4gdW5yZWxhdGVkIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoYXQgY291bGQgbGVhZCB0byBzb21lIHNlcmlvdXNseSBtaXNsZWFkaW5nIHJlc3VsdHMsIG9yIHdvcnNlLCB0cmlnZ2VyIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB1bmlxdWUgdGhlc2UgbmFtZXMgcmVhbGx5IGFyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG9ubHkgZGVhbGluZyB3aXRoICpteSogYGZpbGxfYnVmZmVyYCBhbmQgKm15KiBgZGVidWdfY2xvc2VgLiBUaW1lIHRvIGdvIGh1bnRpbmcgZm9yIG90aGVyIGluc3RhbmNlcyBvZiB0aG9zZSBmdW5jdGlvbiBuYW1lcyB0aHJvdWdob3V0IHRoZSBrZXJuZWwgc291cmNlIGFuZCBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBjbGVhcmx5IGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbnQgZmlsbF9idWZmZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZm90ZzIxMC9mb3RnMjEwLWhjZC5jPTczNj1zdGF0aWMgc3RydWN0IGRlYnVnX2J1ZmZlclxuLS1cbmRyaXZlcnMvdXNiL2ZvdGcyMTAvZm90ZzIxMC1oY2QuYy03NTItXG5kcml2ZXJzL3VzYi9mb3RnMjEwL2ZvdGcyMTAtaGNkLmM6NzUzOnN0YXRpYyBpbnQgZmlsbF9idWZmZXIoc3RydWN0IGRlYnVnX2J1ZmZlciAqYnVmKVxuZHJpdmVycy91c2IvZm90ZzIxMC9mb3RnMjEwLWhjZC5jLTc1NC17XG4tLVxuZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jPTkxNT1zdGF0aWMgc3RydWN0IGRlYnVnX2J1ZmZlciAqYWxsb2NfYnVmZmVyKHN0cnVjdCB1c2JfYnVzICpidXMsXG4tLVxuZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jLTkzMS1cbmRyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYzo5MzI6c3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXG5kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMtOTMzLXtcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM9NjY1PXN0YXRpYyBzdHJ1Y3QgZGVidWdfYnVmZmVyICphbGxvY19idWZmZXIoc3RydWN0IG9oY2lfaGNkICpvaGNpLFxuLS1cbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy02ODAtXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM6NjgxOnN0YXRpYyBpbnQgZmlsbF9idWZmZXIoc3RydWN0IGRlYnVnX2J1ZmZlciAqYnVmKVxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTY4Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzgxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgZmlsbF9idWZmZXJgIGlzIHByZXNlbnQgbm90IGp1c3Qgd2hlcmUgSSBpbml0aWFsbHkgc3VzcGVjdGVkLCBidXQgYWxzbyBpbiBgZWhjaS1kYmcuY2AgYW5kIGBmb3RnMjEwLWhjZC5jYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gbm90ZSBmb3IgZnV6emluZyBwdXJwb3Nlcy4KCioqQ29uc2lkZXJpbmcgVGFyZ2V0IFNjb3BlIGZvciBGdXp6aW5nKioKCklmIEkganVzdCB0YXJnZXQgYGZpbGxfYnVmZmVyYCBkaXJlY3RseSwgSSYjMzk7bGwgYmUgaGl0dGluZyB0aG9zZSAqb3RoZXIqIGZpbGVzIHRvby4gVGhhdCYjMzk7cyBwb3RlbnRpYWxseSBmaW5lLCBkZXBlbmRpbmcgb24gd2hhdCBJIHdhbnQgdG8gYWNjb21wbGlzaCwgb3IgcGVyaGFwcyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGRvd25zdHJlYW0gZWZmZWN0cywgbGlrZSB0aGUgY29tcGxleGl0eSBpbnRyb2R1Y2VkLiBBbHRlcm5hdGl2ZWx5LCBJJiMzOTt2ZSBnb3QgYW5vdGhlciBvcHRpb24gdGhhdCBtaWdodCBiZSBtb3JlIHRhcmdldGVkOiBJIHNlZSB0aGF0IGBkZWJ1Z19vdXRwdXRgIGNhbGxzIGBmaWxsX2J1ZmZlcmAuIFNvLCBJJiMzOTttIHRoaW5raW5nIEkgY2FuIHNwZWNpZnkgYGRlYnVnX291dHB1dGAgaW5zdGVhZC4gVGhpcyBsaWtlbHkgbGltaXRzIHRoZSBmdXp6aW5nIHRvICpvbmx5KiB3aGVyZSBgZGVidWdfb3V0cHV0YCBpcyB1c2VkLCB3aGljaCBjYWxscyB0aGUgdGhpbmcgSSYjMzk7bSBhY3R1YWxseSBpbnRlcmVzdGVkIGluLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgYGRlYnVnX291dHB1dGAgZXhpc3RzIGluIGBvaGNpLWRiZy5jYCB0byBnZXQgYSBtb3JlIGNvbmNyZXRlIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBpdCBsb29rcyBsaWtlIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgc3NpemVfdCBkZWJ1Z19vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jPTcwPXN0YXRpYyBpbnQgZGVidWdfaW5pdCh2b2lkKTtcbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYzo3MTpzdGF0aWMgc3NpemVfdCBkZWJ1Z19vdXRwdXQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZixcbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYy03Mi1cdFx0XHQgICAgc2l6ZV90IHVzZXJfbGVuLCBsb2ZmX3QgKm9mZnNldCk7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jPTYyMT1zdGF0aWMgYm9vbCBkZWJ1Z19tb3ZlX2VudHJ5KGZpbGVfcHJpdmF0ZV9pbmZvX3QgKnBfaW5mbywgYm9vbCByZXZlcnNlKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYy02MzMtICovXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmM6NjM0OnN0YXRpYyBzc2l6ZV90IGRlYnVnX291dHB1dChzdHJ1Y3QgZmlsZSAqZmlsZSxcdFx0LyogZmlsZSBkZXNjcmlwdG9yICovXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMtNjM1LVx0XHRcdCAgICBjaGFyIF9fdXNlciAqdXNlcl9idWYsXHQvKiB1c2VyIGJ1ZmZlciAqL1xuLS1cbmRyaXZlcnMvdXNiL2ZvdGcyMTAvZm90ZzIxMC1oY2QuYz0yODQ9c3RhdGljIGludCBkZWJ1Z19hc3luY19vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTtcbmRyaXZlcnMvdXNiL2ZvdGcyMTAvZm90ZzIxMC1oY2QuYy0yODUtXG5kcml2ZXJzL3VzYi9mb3RnMjEwL2ZvdGcyMTAtaGNkLmM6Mjg2OnN0YXRpYyBzc2l6ZV90IGRlYnVnX291dHB1dChzdHJ1Y3QgZmlsZSosIGNoYXIgX191c2VyKiwgc2l6ZV90LCBsb2ZmX3QqKTtcbmRyaXZlcnMvdXNiL2ZvdGcyMTAvZm90ZzIxMC1oY2QuYy0yODctc3RhdGljIGludCBkZWJ1Z19jbG9zZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7XG4tLVxuZHJpdmVycy91c2IvZm90ZzIxMC9mb3RnMjEwLWhjZC5jPTc1Mz1zdGF0aWMgaW50IGZpbGxfYnVmZmVyKHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1Zilcbi0tXG5kcml2ZXJzL3VzYi9mb3RnMjEwL2ZvdGcyMTAtaGNkLmMtNzc1LVxuZHJpdmVycy91c2IvZm90ZzIxMC9mb3RnMjEwLWhjZC5jOjc3NjpzdGF0aWMgc3NpemVfdCBkZWJ1Z19vdXRwdXQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZixcbmRyaXZlcnMvdXNiL2ZvdGcyMTAvZm90ZzIxMC1oY2QuYy03NzctXHRcdHNpemVfdCBsZW4sIGxvZmZfdCAqb2Zmc2V0KVxuLS1cbmRyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYz0yOTQ9c3RhdGljIGludCBkZWJ1Z19yZWdpc3RlcnNfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7XG5kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMtMjk1LVxuZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jOjI5NjpzdGF0aWMgc3NpemVfdCBkZWJ1Z19vdXRwdXQoc3RydWN0IGZpbGUqLCBjaGFyIF9fdXNlciosIHNpemVfdCwgbG9mZl90Kik7XG5kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMtMjk3LXN0YXRpYyBpbnQgZGVidWdfY2xvc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopO1xuLS1cbmRyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYz05MzI9c3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXG4tLVxuZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jLTk1NC1cbmRyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYzo5NTU6c3RhdGljIHNzaXplX3QgZGVidWdfb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsXG5kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMtOTU2LVx0XHRzaXplX3QgbGVuLCBsb2ZmX3QgKm9mZnNldClcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM9MzYzPXN0YXRpYyBpbnQgZGVidWdfYXN5bmNfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7XG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM6MzY0OnN0YXRpYyBzc2l6ZV90IGRlYnVnX291dHB1dChzdHJ1Y3QgZmlsZSosIGNoYXIgX191c2VyKiwgc2l6ZV90LCBsb2ZmX3QqKTtcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy0zNjUtc3RhdGljIGludCBkZWJ1Z19jbG9zZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7XG4tLVxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jPTY4MT1zdGF0aWMgaW50IGZpbGxfYnVmZmVyKHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1Zilcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNzAzLVxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jOjcwNDpzdGF0aWMgc3NpemVfdCBkZWJ1Z19vdXRwdXQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZixcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy03MDUtXHRcdFx0c2l6ZV90IGxlbiwgbG9mZl90ICpvZmZzZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzU4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFwcHJvYWNoIHRvIERlYnVnZ2luZyB0aGUgVVNCIFN5c3RlbSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIEkgY2FuIHN0cmVhbWxpbmUgdGhpcyBkZWJ1Z2dpbmcgcHJvY2Vzcy4gSSYjMzk7bGwganVzdCBsZXZlcmFnZSBgZmlsbF9idWZmZXJgIGFuZCBgZGVidWdfY2xvc2VgLiBJdCYjMzk7cyBub3QgYSBjb25jZXJuIGlmIEkgaGFwcGVuIHRvIGhpdCB0aGUgRUhDSSBhbmQgRk9URzIxMCBpbnN0YW5jZXMgd2l0aCB0aG9zZSwgYXMgdGhlaXIgZGVidWdmcyBmaWxlcyBhcmUgcHJldHR5IHNpbWlsYXIgYW55d2F5LiAKCkhvd2V2ZXIsIGB1c2JfZGV2aWNlX2R1bXBgIOKAkyB0aGF0IG9uZSBpcyB1bmlxdWUuIEl0JiMzOTtzIHRoZSBrZXkgaGVyZS4KClNvLCB0aGUgY3JpdGljYWwgc3ltYm9scyBJJiMzOTttIHRhcmdldGluZyBhcmU6IGB1c2JfZGV2aWNlX2R1bXBgLCBgZmlsbF9idWZmZXJgLCBhbmQgYGRlYnVnX2Nsb3NlYC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGB1c2JfZGV2aWNlX2R1bXBgIGlzIGluZGVlZCB1bmlxdWUgaW4gdGhpcyBjb250ZXh0LiBJdCYjMzk7cyB3b3J0aCBhIHNlY29uZCBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2JfZGV2aWNlX2R1bXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM9MzY1PXN0YXRpYyBjaGFyICp1c2JfZHVtcF9kZXNjKGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtMzkwLSAqL1xuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM6MzkxOnN0YXRpYyBzc2l6ZV90IHVzYl9kZXZpY2VfZHVtcChjaGFyIF9fdXNlciAqKmJ1ZmZlciwgc2l6ZV90ICpuYnl0ZXMsXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy0zOTItXHRcdFx0ICAgICAgIGxvZmZfdCAqc2tpcF9ieXRlcywgbG9mZl90ICpmaWxlX29mZnNldCxcbi0tXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy00OTgtXHRcdHVzYl9sb2NrX2RldmljZShjaGlsZGRldik7XG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYzo0OTk6XHRcdHJldCA9IHVzYl9kZXZpY2VfZHVtcChidWZmZXIsIG5ieXRlcywgc2tpcF9ieXRlcyxcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jLTUwMC1cdFx0XHRcdCAgICAgIGZpbGVfb2Zmc2V0LCBjaGlsZGRldiwgYnVzLFxuLS1cbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jPTUxMD1zdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4tLVxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTI5LVx0XHR1c2JfbG9ja19kZXZpY2UoYnVzLVx1MDAzZXJvb3RfaHViKTtcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jOjUzMDpcdFx0cmV0ID0gdXNiX2RldmljZV9kdW1wKFx1MDAyNmJ1ZiwgXHUwMDI2bmJ5dGVzLCBcdTAwMjZza2lwX2J5dGVzLCBwcG9zLFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTMxLVx0XHRcdFx0ICAgICAgYnVzLVx1MDAzZXJvb3RfaHViLCBidXMsIDAsIDAsIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQxOQoJCQkJCQkJb3V0cHV0OiAxODcKCQkJCQkJCXRob3VnaHRzOiA2NzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBXb3J0aGluZXNzKioKCk9rYXksIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIG1ha2luZyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBzd2FwcGluZyBwYWdlIGFsbG9jYXRvciBjYWxscyAoYF9fZ2V0X2ZyZWVfcGFnZXNgLCBgZ2V0X3plcm9lZF9wYWdlYCkgd2l0aCBzbGFiIGFsbG9jYXRvciBjYWxscyAoYGttYWxsb2NgLCBga3phbGxvY2ApLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGEgcmVkIGZsYWcsIGluIGEgZ29vZCB3YXksIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gbWVtb3J5IGFsbG9jYXRpb24sIHdoaWNoIG1lYW5zIHdlIGNvdWxkIHVuY292ZXIgc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgdGhhdCB3ZXJlbiYjMzk7dCBkZXRlY3RhYmxlIGJlZm9yZS4gS0FTQU4sIGZvciBpbnN0YW5jZSwgbWlnaHQgYmUgYWJsZSB0byBjYXRjaCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG5vdyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc2xhYiBvYmplY3RzIG1vcmUgY29uc2lzdGVudGx5LgoKTGV0IG1lIHF1aWNrbHkgZW5zdXJlIEkmIzM5O20gZ2V0dGluZyB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBVU0JfT0hDSV9IQ0RgIGFuZCBgVVNCX09IQ0lfSENEX1BDSWAgYXJlIHRoZSByaWdodCBvbmVzLiBgVVNCX09IQ0lfSENEYCBpcyB0aGUgY29yZSwgYW5kIEkmIzM5O2xsIGRlZmluaXRlbHkgaW5jbHVkZSBpdC4gIFRoZW4gdGhlcmUmIzM5O3MgYFVTQl9PSENJX0hDRF9QQ0lgLiBJdCBzZWVtcyBsaWtlIFFFTVUgcHJvdmlkZXMgYSBgcGNpLW9oY2lgIG9wdGlvbiwgc28gaW5jbHVkaW5nIGBVU0JfT0hDSV9IQ0RfUENJYCBnaXZlcyB1cyB0aGUgYXBwcm9wcmlhdGUgaGFyZHdhcmUgdG8gdGVzdC4gSXQmIzM5O3MgYWxzbyB3b3J0aCBub3RpbmcgdGhlIHRyaXN0YXRlIG5hdHVyZSBvZiBgVVNCX09IQ0lfSENEYCwganVzdCBpbiBjYXNlLiBBbHNvLCB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGl0ZW1zIGBVU0JgIGFuZCBgREVCVUdfRlNgIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuCgpUaGUgcGF0Y2gmIzM5O3MgbW9kaWZpY2F0aW9ucyBhcmUgd2l0aGluIGB1c2JfZGV2aWNlX2R1bXBgLCBgZmlsbF9idWZmZXJgLCBhbmQgYGRlYnVnX2Nsb3NlYC4gU3BlY2lmaWNhbGx5LCB3aXRoaW4gdGhlIE9IQ0kgZGVidWdmcyBjb2RlLiBUaGUgY29kZSBpdHNlbGYgaXMgcmVhY2hhYmxlIGluIFFFTVUsIHRocm91Z2ggYC9zeXMva2VybmVsL2RlYnVnL3VzYi9kZXZpY2VzYCBhbmQgc2ltaWxhciBkZWJ1Z2ZzIGZpbGVzLiBUaGlzIGNoYW5nZSBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBpbiBvdXIgdGVzdGluZyBlbnZpcm9ubWVudC4KCkkmIzM5O20gcmV2aWV3aW5nIHRoZSBydWxlcyBhZ2FpbiB0byBjb25maXJtIGlmIHRoaXMgcGF0Y2ggbWVldHMgdGhlIGNyaXRlcmlhIGZvciAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7LiBObywgaXQgZG9lc24mIzM5O3QuIFRoaXMgaXNuJiMzOTt0IGp1c3QgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyBvciBkZWNvcmF0aXZlIGxvZ2dpbmcsIG5vciBpcyBpdCBhIG1pbm9yIG51bWVyaWMgY29uc3RhbnQgY2hhbmdlLiBUaGlzIGlzIGEgbGVnaXRpbWF0ZSBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZW1vcnkgYWxsb2NhdGlvbi4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nPXRydWVgLgoKQW5kIGp1c3QgdG8gYmUgZXh0cmEgdGhvcm91Z2gsIEkmIzM5O2xsIGFsc28gYWRkIGBVU0JfT0hDSV9IQ0RfUExBVEZPUk1gIHNpbmNlIFFFTVUgc3VwcG9ydHMgdGhlIGBzeXNidXMtb2hjaWAgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9PSENJX0hDRCYjMzQ7LAogICAgJiMzNDtVU0JfT0hDSV9IQ0RfUENJJiMzNDssCiAgICAmIzM0O1VTQl9PSENJX0hDRF9QTEFURk9STSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYl9kZXZpY2VfZHVtcCYjMzQ7LAogICAgJiMzNDtmaWxsX2J1ZmZlciYjMzQ7LAogICAgJiMzNDtkZWJ1Z19jbG9zZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwYWdlIGFsbG9jYXRvciBjYWxscyAoX19nZXRfZnJlZV9wYWdlcywgZ2V0X3plcm9lZF9wYWdlKSB3aXRoIHNsYWIgYWxsb2NhdG9yIGNhbGxzIChrbWFsbG9jLCBremFsbG9jKSBpbiBVU0IgZGV2aWNlIGR1bXAgYW5kIE9IQ0kgZGVidWdmcyBjb2RlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IgYW5kIGNhbiBwb3RlbnRpYWxseSBleHBvc2UgZGlmZmVyZW50IG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKGUuZy4sIEtBU0FOIGNhbiBiZXR0ZXIgZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb24gc2xhYiBvYmplY3RzKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSAvc3lzL2tlcm5lbC9kZWJ1Zy91c2IvZGV2aWNlcyBhbmQgT0hDSSBkZWJ1Z2ZzIGZpbGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfT0hDSV9IQ0QmIzM0OywKICAgICYjMzQ7VVNCX09IQ0lfSENEX1BDSSYjMzQ7LAogICAgJiMzNDtVU0JfT0hDSV9IQ0RfUExBVEZPUk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2JfZGV2aWNlX2R1bXAmIzM0OywKICAgICYjMzQ7ZmlsbF9idWZmZXImIzM0OywKICAgICYjMzQ7ZGVidWdfY2xvc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgcGFnZSBhbGxvY2F0b3IgY2FsbHMgKF9fZ2V0X2ZyZWVfcGFnZXMsIGdldF96ZXJvZWRfcGFnZSkgd2l0aCBzbGFiIGFsbG9jYXRvciBjYWxscyAoa21hbGxvYywga3phbGxvYykgaW4gVVNCIGRldmljZSBkdW1wIGFuZCBPSENJIGRlYnVnZnMgY29kZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yIGFuZCBjYW4gcG90ZW50aWFsbHkgZXhwb3NlIGRpZmZlcmVudCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIChlLmcuLCBLQVNBTiBjYW4gYmV0dGVyIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9uIHNsYWIgb2JqZWN0cykuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgL3N5cy9rZXJuZWwvZGVidWcvdXNiL2RldmljZXMgYW5kIE9IQ0kgZGVidWdmcyBmaWxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA1OjI4LjEwODM4NjM5NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTg2NzY1NTk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfT0hDSV9IQ0RcIixcbiAgICBcIlVTQl9PSENJX0hDRF9QQ0lcIixcbiAgICBcIlVTQl9PSENJX0hDRF9QTEFURk9STVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzYl9kZXZpY2VfZHVtcFwiLFxuICAgIFwiZmlsbF9idWZmZXJcIixcbiAgICBcImRlYnVnX2Nsb3NlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgcGFnZSBhbGxvY2F0b3IgY2FsbHMgKF9fZ2V0X2ZyZWVfcGFnZXMsIGdldF96ZXJvZWRfcGFnZSkgd2l0aCBzbGFiIGFsbG9jYXRvciBjYWxscyAoa21hbGxvYywga3phbGxvYykgaW4gVVNCIGRldmljZSBkdW1wIGFuZCBPSENJIGRlYnVnZnMgY29kZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yIGFuZCBjYW4gcG90ZW50aWFsbHkgZXhwb3NlIGRpZmZlcmVudCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIChlLmcuLCBLQVNBTiBjYW4gYmV0dGVyIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9uIHNsYWIgb2JqZWN0cykuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgL3N5cy9rZXJuZWwvZGVidWcvdXNiL2RldmljZXMgYW5kIE9IQ0kgZGVidWdmcyBmaWxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDU6MjguMTA4Mzk0ODE1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzIzNzc2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5ZDg0MzBhZWMzYmY3OTQ4MTA1OWU1NzE1ZTc3ZTVjYjQ2YzNlM2ZjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDEgMTY6MDU6MjYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuY1xcbmluZGV4IGEyNDdkYTczZjM0ZDdkLi42ZjAzNTRhYmEzOGIzMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuY1xcbisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jXFxuQEAgLTM3LDYgKzM3LDcgQEBcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9nZnAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzYi5oXFx1MDAzZVxcbkBAIC00MDgsNyArNDA5LDcgQEAgc3RhdGljIHNzaXplX3QgdXNiX2RldmljZV9kdW1wKGNoYXIgX191c2VyICoqYnVmZmVyLCBzaXplX3QgKm5ieXRlcyxcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdC8qIGFsbG9jYXRlIDJeMSBwYWdlcyA9IDhLIChvbiBpMzg2KTtcXG4gXFx0ICogc2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2ggZm9yIG9uZSBkZXZpY2UgKi9cXG4tXFx0cGFnZXNfc3RhcnQgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX05PSU8sIDEpO1xcbitcXHRwYWdlc19zdGFydCA9IGttYWxsb2MoUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIDEsIEdGUF9OT0lPKTtcXG4gXFx0aWYgKCFwYWdlc19zdGFydClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC00NzksNyArNDgwLDcgQEAgc3RhdGljIHNzaXplX3QgdXNiX2RldmljZV9kdW1wKGNoYXIgX191c2VyICoqYnVmZmVyLCBzaXplX3QgKm5ieXRlcyxcXG4gXFx0XFx0aWYgKGxlbmd0aCBcXHUwMDNlICpuYnl0ZXMpXFxuIFxcdFxcdFxcdGxlbmd0aCA9ICpuYnl0ZXM7XFxuIFxcdFxcdGlmIChjb3B5X3RvX3VzZXIoKmJ1ZmZlciwgcGFnZXNfc3RhcnQgKyAqc2tpcF9ieXRlcywgbGVuZ3RoKSkge1xcbi1cXHRcXHRcXHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBhZ2VzX3N0YXJ0LCAxKTtcXG4rXFx0XFx0XFx0a2ZyZWUocGFnZXNfc3RhcnQpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFx0XFx0fVxcbiBcXHRcXHQqbmJ5dGVzIC09IGxlbmd0aDtcXG5AQCAtNDkwLDcgKzQ5MSw3IEBAIHN0YXRpYyBzc2l6ZV90IHVzYl9kZXZpY2VfZHVtcChjaGFyIF9fdXNlciAqKmJ1ZmZlciwgc2l6ZV90ICpuYnl0ZXMsXFxuIFxcdH0gZWxzZVxcbiBcXHRcXHQqc2tpcF9ieXRlcyAtPSBsZW5ndGg7XFxuIFxcbi1cXHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBhZ2VzX3N0YXJ0LCAxKTtcXG4rXFx0a2ZyZWUocGFnZXNfc3RhcnQpO1xcbiBcXG4gXFx0LyogTm93IGxvb2sgYXQgYWxsIG9mIHRoaXMgZGV2aWNlJ3MgY2hpbGRyZW4uICovXFxuIFxcdHVzYl9odWJfZm9yX2VhY2hfY2hpbGQodXNiZGV2LCBjaGl4LCBjaGlsZGRldikge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmNcXG5pbmRleCA5ZTBlMDZiYmM1NzA2MS4uMjNkYzllZGRjMDZjNDQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jXFxuKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jXFxuQEAgLTY4Myw3ICs2ODMsNyBAQCBzdGF0aWMgaW50IGZpbGxfYnVmZmVyKHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZilcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghYnVmLVxcdTAwM2VwYWdlKVxcbi1cXHRcXHRidWYtXFx1MDAzZXBhZ2UgPSAoY2hhciAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTtcXG4rXFx0XFx0YnVmLVxcdTAwM2VwYWdlID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xcbiBcXG4gXFx0aWYgKCFidWYtXFx1MDAzZXBhZ2UpIHtcXG4gXFx0XFx0cmV0ID0gLUVOT01FTTtcXG5AQCAtNzI5LDExICs3MjksOCBAQCBzdGF0aWMgaW50IGRlYnVnX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiB7XFxuIFxcdHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZiA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gXFxuLVxcdGlmIChidWYpIHtcXG4tXFx0XFx0aWYgKGJ1Zi1cXHUwMDNlcGFnZSlcXG4tXFx0XFx0XFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1Zi1cXHUwMDNlcGFnZSk7XFxuLVxcdFxcdGtmcmVlKGJ1Zik7XFxuLVxcdH1cXG4rXFx0a2ZyZWUoYnVmLVxcdTAwM2VwYWdlKTtcXG4rXFx0a2ZyZWUoYnVmKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA1OjI4Ljc4MTc5NDA2NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU5MTk0MjMzMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9PSENJX0hDRFwiLFxuICAgIFwiVVNCX09IQ0lfSENEX1BDSVwiLFxuICAgIFwiVVNCX09IQ0lfSENEX1BMQVRGT1JNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNiX2RldmljZV9kdW1wXCIsXG4gICAgXCJmaWxsX2J1ZmZlclwiLFxuICAgIFwiZGVidWdfY2xvc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBwYWdlIGFsbG9jYXRvciBjYWxscyAoX19nZXRfZnJlZV9wYWdlcywgZ2V0X3plcm9lZF9wYWdlKSB3aXRoIHNsYWIgYWxsb2NhdG9yIGNhbGxzIChrbWFsbG9jLCBremFsbG9jKSBpbiBVU0IgZGV2aWNlIGR1bXAgYW5kIE9IQ0kgZGVidWdmcyBjb2RlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IgYW5kIGNhbiBwb3RlbnRpYWxseSBleHBvc2UgZGlmZmVyZW50IG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKGUuZy4sIEtBU0FOIGNhbiBiZXR0ZXIgZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb24gc2xhYiBvYmplY3RzKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSAvc3lzL2tlcm5lbC9kZWJ1Zy91c2IvZGV2aWNlcyBhbmQgT0hDSSBkZWJ1Z2ZzIGZpbGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDlkODQzMGFlYzNiZjc5NDgxMDU5ZTU3MTVlNzdlNWNiNDZjM2UzZmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDE2OjA1OjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuY1xuaW5kZXggYTI0N2RhNzNmMzRkN2QuLjZmMDM1NGFiYTM4YjMzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmNcbisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jXG5AQCAtMzcsNiArMzcsNyBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IuaFx1MDAzZVxuQEAgLTQwOCw3ICs0MDksNyBAQCBzdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX2R1bXAoY2hhciBfX3VzZXIgKipidWZmZXIsIHNpemVfdCAqbmJ5dGVzLFxuIFx0XHRyZXR1cm4gMDtcbiBcdC8qIGFsbG9jYXRlIDJeMSBwYWdlcyA9IDhLIChvbiBpMzg2KTtcbiBcdCAqIHNob3VsZCBiZSBtb3JlIHRoYW4gZW5vdWdoIGZvciBvbmUgZGV2aWNlICovXG4tXHRwYWdlc19zdGFydCA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlcyhHRlBfTk9JTywgMSk7XG4rXHRwYWdlc19zdGFydCA9IGttYWxsb2MoUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyAxLCBHRlBfTk9JTyk7XG4gXHRpZiAoIXBhZ2VzX3N0YXJ0KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC00NzksNyArNDgwLDcgQEAgc3RhdGljIHNzaXplX3QgdXNiX2RldmljZV9kdW1wKGNoYXIgX191c2VyICoqYnVmZmVyLCBzaXplX3QgKm5ieXRlcyxcbiBcdFx0aWYgKGxlbmd0aCBcdTAwM2UgKm5ieXRlcylcbiBcdFx0XHRsZW5ndGggPSAqbmJ5dGVzO1xuIFx0XHRpZiAoY29weV90b191c2VyKCpidWZmZXIsIHBhZ2VzX3N0YXJ0ICsgKnNraXBfYnl0ZXMsIGxlbmd0aCkpIHtcbi1cdFx0XHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBhZ2VzX3N0YXJ0LCAxKTtcbitcdFx0XHRrZnJlZShwYWdlc19zdGFydCk7XG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdH1cbiBcdFx0Km5ieXRlcyAtPSBsZW5ndGg7XG5AQCAtNDkwLDcgKzQ5MSw3IEBAIHN0YXRpYyBzc2l6ZV90IHVzYl9kZXZpY2VfZHVtcChjaGFyIF9fdXNlciAqKmJ1ZmZlciwgc2l6ZV90ICpuYnl0ZXMsXG4gXHR9IGVsc2VcbiBcdFx0KnNraXBfYnl0ZXMgLT0gbGVuZ3RoO1xuIFxuLVx0ZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwYWdlc19zdGFydCwgMSk7XG4rXHRrZnJlZShwYWdlc19zdGFydCk7XG4gXG4gXHQvKiBOb3cgbG9vayBhdCBhbGwgb2YgdGhpcyBkZXZpY2UncyBjaGlsZHJlbi4gKi9cbiBcdHVzYl9odWJfZm9yX2VhY2hfY2hpbGQodXNiZGV2LCBjaGl4LCBjaGlsZGRldikge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuY1xuaW5kZXggOWUwZTA2YmJjNTcwNjEuLjIzZGM5ZWRkYzA2YzQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jXG4rKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmNcbkBAIC02ODMsNyArNjgzLDcgQEAgc3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFidWYtXHUwMDNlcGFnZSlcbi1cdFx0YnVmLVx1MDAzZXBhZ2UgPSAoY2hhciAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTtcbitcdFx0YnVmLVx1MDAzZXBhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4gXG4gXHRpZiAoIWJ1Zi1cdTAwM2VwYWdlKSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG5AQCAtNzI5LDExICs3MjksOCBAQCBzdGF0aWMgaW50IGRlYnVnX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbiBcdHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFxuLVx0aWYgKGJ1Zikge1xuLVx0XHRpZiAoYnVmLVx1MDAzZXBhZ2UpXG4tXHRcdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1Zi1cdTAwM2VwYWdlKTtcbi1cdFx0a2ZyZWUoYnVmKTtcbi1cdH1cbitcdGtmcmVlKGJ1Zi1cdTAwM2VwYWdlKTtcbitcdGtmcmVlKGJ1Zik7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNToyOC43ODE3OTYwOTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzMxNDUxNzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIG1ha2luZyBzb21lIG1vZGlmaWNhdGlvbnMgd2l0aGluIHRoZSBVU0Igc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIGl0J3MgdG91Y2hpbmcgYGRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jYCBhbmQgYGRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuY2AuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGV5J3JlIHJlcGxhY2luZyB0aGUgbGVnYWN5IGBfX2dldF9mcmVlX3BhZ2VzYC9gZnJlZV9wYWdlc2AgY2FsbHMgd2l0aCBga21hbGxvY2AvYGtmcmVlYCBpbiB0aGUgYHVzYl9kZXZpY2VfZHVtcGAgZnVuY3Rpb24sIHdpdGhpbiBgZGV2aWNlcy5jYCwgYW5kIHN3aXRjaGluZyBgZ2V0X3plcm9lZF9wYWdlYC9gZnJlZV9wYWdlYCBmb3IgYGt6YWxsb2NgL2BrZnJlZWAgaW4gYGZpbGxfYnVmZmVyYCBhbmQgYGRlYnVnX2Nsb3NlYCBpbiBgb2hjaS1kYmcuY2AuXG5cblJpZ2h0IGF3YXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgKmp1c3QqIGFuIGFsbG9jYXRpb24gY2hhbmdlIG9yIGlmIHRoZXJlIGFyZSBwb3RlbnRpYWwgZnVuY3Rpb25hbCBzaWRlIGVmZmVjdHMuIENoYW5naW5nIHBhZ2UgYWxsb2NhdGlvbiAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGV2ZW4gaWYgc3VidGxlLiBJdCBhbHRlcnMgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IsIHdoaWNoIGFsd2F5cyB3YXJyYW50cyBjbG9zZSBzY3J1dGlueS5cblxuTm93LCBsZXQncyBicmVhayBkb3duIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQ6IGB1c2JfZGV2aWNlX2R1bXBgLCBgZmlsbF9idWZmZXJgLCBhbmQgYGRlYnVnX2Nsb3NlYC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGNvbnNpZGVyIGZ1enppbmcuIGB1c2JfZGV2aWNlX2R1bXBgIGNhdWdodCBteSBleWU7IG15IGd1dCB0ZWxscyBtZSBpdCdzIHVzZWQgd2l0aGluIGEgZmlsZSBvcGVyYXRpb24gbGlrZSBgL3N5cy9rZXJuZWwvZGVidWcvdXNiL2RldmljZXNgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGJ5IGdvaW5nIGJhY2sgaW50byBgZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmNgIGFuZCBzZWUgd2hlcmUgdGhpcyBgdXNiX2RldmljZV9kdW1wYCBmdW5jdGlvbiBnZXRzIHVzZWQuIExldCdzIHNlZSBpZiB3ZSBjYW4gdHJpZ2dlciBzb21lIGludGVyZXN0aW5nIGJlaGF2aW9yIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDU6MzQuMTEzMjUwNTMzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzU0MTE3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2JfZGV2aWNlX2R1bXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM9MzY1PXN0YXRpYyBjaGFyICp1c2JfZHVtcF9kZXNjKGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy0zOTAtICovXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM6MzkxOnN0YXRpYyBzc2l6ZV90IHVzYl9kZXZpY2VfZHVtcChjaGFyIF9fdXNlciAqKmJ1ZmZlciwgc2l6ZV90ICpuYnl0ZXMsXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtMzkyLVxcdFxcdFxcdCAgICAgICBsb2ZmX3QgKnNraXBfYnl0ZXMsIGxvZmZfdCAqZmlsZV9vZmZzZXQsXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy00OTgtXFx0XFx0dXNiX2xvY2tfZGV2aWNlKGNoaWxkZGV2KTtcXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYzo0OTk6XFx0XFx0cmV0ID0gdXNiX2RldmljZV9kdW1wKGJ1ZmZlciwgbmJ5dGVzLCBza2lwX2J5dGVzLFxcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jLTUwMC1cXHRcXHRcXHRcXHQgICAgICBmaWxlX29mZnNldCwgY2hpbGRkZXYsIGJ1cyxcXG4tLVxcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jPTUxMD1zdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy01MjktXFx0XFx0dXNiX2xvY2tfZGV2aWNlKGJ1cy1cXHUwMDNlcm9vdF9odWIpO1xcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jOjUzMDpcXHRcXHRyZXQgPSB1c2JfZGV2aWNlX2R1bXAoXFx1MDAyNmJ1ZiwgXFx1MDAyNm5ieXRlcywgXFx1MDAyNnNraXBfYnl0ZXMsIHBwb3MsXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTMxLVxcdFxcdFxcdFxcdCAgICAgIGJ1cy1cXHUwMDNlcm9vdF9odWIsIGJ1cywgMCwgMCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA1OjM0LjI1MDc5ODE2NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDM3MDgyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBgdXNiX2RldmljZV9yZWFkYCoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBgdXNiX2RldmljZV9yZWFkYC4gQmFzZWQgb24gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBwZXJ0YWlucyB0byByZWFkaW5nIGRhdGEgZnJvbSB0aGUgYC9zeXMva2VybmVsL2RlYnVnL3VzYi9kZXZpY2VzYCBmaWxlc3lzdGVtIGVudHJ5LiBUaGF0J3MgYSBwcmV0dHkgcmVhc29uYWJsZSBhc3N1bXB0aW9uIGdpdmVuIHRoZSBwYXRoLiBUaGUgZGVidWcgZmlsZXN5c3RlbSBvZnRlbiBleHBvc2VzIGtlcm5lbCBpbnRlcm5hbHMgaW4gYSB1c2VyLXJlYWRhYmxlIGZvcm1hdCwgYW5kIHRoZSBuYW1lIFwidXNiL2RldmljZXNcIiBzdHJvbmdseSBzdWdnZXN0cyBpbmZvcm1hdGlvbiBhYm91dCBhdHRhY2hlZCBVU0IgZGV2aWNlcy4gTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGVpdGhlciBpbnNwZWN0aW5nIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgZGlyZWN0bHkgaWYgSSBoYXZlIGFjY2Vzcywgb3IgcGVyaGFwcyBncmVwcGluZyB0aHJvdWdoIHRoZSBrZXJuZWwgc291cmNlcyBmb3IgYSBmdW5jdGlvbiB3aXRoIHRoYXQgbmFtZSBhbmQgbG9va2luZyBhdCBpdHMgdXNhZ2UgYW5kIGFzc29jaWF0ZWQgZmlsZXMuIEFsdGVybmF0aXZlbHksIEkgY291bGQgdHJ5IHRvIGZpbmQgZG9jdW1lbnRhdGlvbiB0aGF0IHBvaW50cyBtZSB0byB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlscyByZWxhdGVkIHRvIHRoaXMgZGVidWdmcyBlbnRyeSB0byBzZWUgaWYgdGhhdCBjb25maXJtcyBteSBzdXNwaWNpb24gYW5kIGdpdmVzIG1lIG1vcmUgZGV0YWlscy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKmV4YWN0bHkqIHdoYXQgZGF0YSB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciByZXRyaWV2aW5nIGFuZCBob3cgaXQncyBmb3JtYXR0ZWQuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBpdHMgcmVsZXZhbmNlIGFuZCBob3cgdG8gYmVzdCB1c2UgaXQgb3IgYnVpbGQgdXBvbiBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU0MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA1OjM3LjM5NDUwOTc1NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjI4NTgyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNiX2RldmljZV9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jPTM5MT1zdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX2R1bXAoY2hhciBfX3VzZXIgKipidWZmZXIsIHNpemVfdCAqbmJ5dGVzLFxcbi0tXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTA5LVxcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jOjUxMDpzdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTExLVxcdFxcdFxcdCAgICAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYz01NDM9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2Jmc19kZXZpY2VzX2ZvcHMgPSB7XFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTQ0LVxcdC5sbHNlZWsgPVxcdG5vX3NlZWtfZW5kX2xsc2VlayxcXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYzo1NDU6XFx0LnJlYWQgPVxcdFxcdHVzYl9kZXZpY2VfcmVhZCxcXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy01NDYtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDU6MzcuNzU3MzczOTczWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5NTY1NTIxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqUGlucG9pbnRpbmcgdGhlIFVTQkZTIElzc3VlKipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBgdXNiZnNfZGV2aWNlc19mb3BzYC4gVGhhdCdzIGEgc3Ryb25nIGhpbnQg4oCTIGl0IGltbWVkaWF0ZWx5IHplcm9lcyBpbiBvbiB0aGUgdXNlcnNwYWNlIGZpbGVzeXN0ZW0gaW50ZXJmYWNlIGZvciBVU0IgZGV2aWNlcy4gVGhhdCBwb2ludHMgZGlyZWN0bHkgdG8gdGhlIGNvcmUgb2YgdGhlIGlzc3VlLiBOb3csIGxldCdzIHNlZSBpZiB3ZSBjYW4gZmluZCBzb21ldGhpbmcgdGhhdCdzIGNvbm5lY3RlZCB0byB0aGlzIHdpdGhpbiB0aGUgY29kZS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUgZGVidWdnaW5nIHRvb2xzLiBMZXQncyBzZWUgd2hhdCB3ZSBoYXZlIG9uIGBkcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmNgLiBUaGlzIGlzIGEgbG93LWxldmVsIGhvc3QgY29udHJvbGxlciBkcml2ZXIuIEl0J3Mgb2Z0ZW4gdGhlIHBsYWNlIHdoZXJlIHdlIGZpbmQgZGV0YWlsZWQgbG9nZ2luZyBhbmQgcG90ZW50aWFsbHkgZXJyb3IgY29uZGl0aW9ucyByZWxhdGVkIHRvIFVTQiB0cmFuc2ZlcnMuIE9mdGVuIGl0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdoZW4gdGhlcmUgYXJlIGlzc3VlcyBhdCB0aGUgaW50ZXJzZWN0aW9uIG9mIGEgZHJpdmVyIGFuZCBhIGZpbGVzeXN0ZW0gaW50ZXJmYWNlLCBlc3BlY2lhbGx5IHNpbmNlIGB1c2Jmc2AgaXNuJ3QgdmVyeSBoZWxwZnVsIGZvciBkaWFnbm9zaW5nIGlzc3VlcyByZWxhdGVkIHRvIGRldmljZSBjb21tdW5pY2F0aW9uLiBMZXQncyBzdGFydCB3aXRoIHRoaXMgYW5kIHNlZSB3aGF0IHdlIGNhbiB0dXJuIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDk4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDU6NDEuMDUzMDMwOTg0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NDEzMTk4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWxsX2J1ZmZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jPTY2NT1zdGF0aWMgc3RydWN0IGRlYnVnX2J1ZmZlciAqYWxsb2NfYnVmZmVyKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSxcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy02ODAtXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jOjY4MTpzdGF0aWMgaW50IGZpbGxfYnVmZmVyKHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZilcXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNjgyLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYz03MDQ9c3RhdGljIHNzaXplX3QgZGVidWdfb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsXFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNzExLVxcdGlmIChidWYtXFx1MDAzZWNvdW50ID09IDApIHtcXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM6NzEyOlxcdFxcdHJldCA9IGZpbGxfYnVmZmVyKGJ1Zik7XFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTcxMy1cXHRcXHRpZiAocmV0ICE9IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDU6NDEuMzQ3MTcwMDE2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODAwMDAwNTM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFdvcnRoaW5lc3Mgb2YgRnV6emluZyBhIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIGBmaWxsX2J1ZmZlcmAgaXMgY2FsbGVkIGZyb20gYGRlYnVnX291dHB1dGAgaW4gdGhlIG9oY2kgZHJpdmVyIOKAkyB0aGF0J3MgYSBkZWJ1Z2ZzIGZpbGUuIEhtbSwgYXJlIHRob3NlIGRlYnVnZnMgZmlsZXMgYWNjZXNzaWJsZT8gWWVhaCwgdGhleSBzaG91bGQgYmUsIHJvb3QgdXN1YWxseSBtb3VudHMgdGhlbSwgYW5kIFN5emthbGxlciBjYW4gZGVmaW5pdGVseSBnZXQgdG8gdGhlbS4gQnV0IGlzIGl0ICp3b3J0aCogZnV6emluZyB0aGlzIHBhcnRpY3VsYXIgcGF0Y2g/IEl0IGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgc3dhcCBmcm9tIGBfX2dldF9mcmVlX3BhZ2VzYCB0byBga21hbGxvY2AuXG5cbk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRldGVybWluZSB3aGV0aGVyIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgaWYgaXQgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBpbiBhIG1lYW5pbmdmdWwgd2F5LiBEaWZmZXJlbnQgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcy4uLiBga21hbGxvY2AgdmVyc3VzIGBfX2dldF9mcmVlX3BhZ2VzYCBjb3VsZCBoYXZlIGRpZmZlcmVudCBiZWhhdmlvcnMgaW4gdGhlIGZhY2Ugb2Ygb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEtBU0FOIG1pZ2h0IGNhdGNoIGBrbWFsbG9jYCBPT0IgaXNzdWVzIGJldHRlciB0aGFuIHRob3NlIHdpdGggcGFnZS1iYXNlZCBhbGxvY2F0aW9ucy5cblxuQnV0IHdhaXQsIGxldCBtZSBjaGVjayB0aGUgaW5zdHJ1Y3Rpb25zIGFnYWluOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYuLi5cIiBMZXQgbWUgcmV2aWV3IHRoZSBjcml0ZXJpYS4uLiBBaCwgaGVyZSBpdCBpczogZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZy4uLiBvciBudW1lcmljIGNoYW5nZXMgdGhhdCBkb24ndCBjaGFuZ2UgZXhlY3V0aW9uLiBJcyB0aGlzIHN3aXRjaCBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBJdCBkb2VzIGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBzbGlnaHRseSBzaW5jZSBpdCB1c2VzIGEgZGlmZmVyZW50IGFsbG9jYXRvciwgYnV0IGl0IHNlZW1zIGxpa2UgYSByZWZhY3RvcmluZy9jbGVhbnVwIG1vc3RseS5cblxuT2ggd2FpdCwgYGttYWxsb2NgIHdpdGggYFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgMWAgYWxsb2NhdGVzIDhLLCBhbmQgYF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX05PSU8sIDEpYCBhbHNvIGFsbG9jYXRlcyA4SyBpbiBhIDRLIHBhZ2Ugc3lzdGVtLiBTbywgdGhlIGFsbG9jYXRpb24gc2l6ZSBzdGF5cyB0aGUgc2FtZS4gSXMgaXQgd29ydGggZnV6emluZz8gWWVzLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBpdCBtb2RpZmllcyB0aGUga2VybmVsIGxvZ2ljIGFuZCBpdOKAmXMgbm90IGp1c3QgYSBkZWNvcmF0aW9uIG9yIGNvbW1lbnQgb3IgY29uc3RhbnQgY2hhbmdlLlxuXG5Pa2F5LCBub3cgbGV0J3MgbWFrZSBzdXJlIHRoaXMgY29kZSBpcyByZWFjaGFibGUuIGB1c2JfZGV2aWNlX2R1bXBgIGlzIGluIGBkcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuY2AsIGFuZCBgZmlsbF9idWZmZXJgIGlzIGluIGBkcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmNgLiBMZXQncyBjb25maXJtIGBvaGNpLWRiZy5jYCBpcyByZWFjaGFibGUuIE9IQ0kgaXMgYSBVU0IgaG9zdCBjb250cm9sbGVyLiBFeGNlbGxlbnQsIFFFTVUgY2FuIGVtdWxhdGUgT0hDSS4gVGhhdCdzIGdvb2QuIE5vdyBsZXQgbWUgbG9vayBmb3IgdGhlIGNvbmZpZyBmb3IgT0hDSS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYzMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNTo0OS4zNDcxNzc1OTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzE0NTIxNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2hjaS1kYmcub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9ob3N0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDU6NDkuNDU0MzMyNDI3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjk0NjY5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgTWFrZWZpbGU6XG5cbioqRGl2aW5nIGludG8gdGhlIFVTQiBIb3N0IE1ha2VmaWxlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBkcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlYC4gVGhpcyBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIFVTQiBob3N0IGNvbnRyb2xsZXIgc3Vic3lzdGVtIGlzIGJ1aWx0IHdpdGhpbiB0aGlzIGtlcm5lbC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIG9iamVjdCBmaWxlcyBhcmUgb3JnYW5pemVkLCB3aGF0IGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheSwgYW5kIGhvdyB0aGUgY29tcGlsYXRpb24gcHJvY2VzcyBpcyBzdHJ1Y3R1cmVkIGZvciB0aGUgZGlmZmVyZW50IGhvc3QgY29udHJvbGxlciBkcml2ZXJzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgYW55IGNsZXZlciB0cmlja3MgYXJlIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIG9yIGJvYXJkIHN1cHBvcnQgcGFja2FnZXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBiZXR0aW5nIHRoZXJlJ3MgYSBnb29kIGFtb3VudCBvZiBjb21wbGV4aXR5IGhlcmUsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9mIG1vZHVsYXJpdHkgb3IgZWxlZ2FudCBidWlsZCB0ZWNobmlxdWVzIHRoYXQgbWlnaHQgc3BlZWQgdXAgbXkgY29tcHJlaGVuc2lvbi4gSSdtIGFsc28gaG9waW5nIHRoZXJlIGFyZW4ndCB0b28gbWFueSB1bm5lY2Vzc2FyeSBsYXllcnMgb2YgYWJzdHJhY3Rpb24sIGFzIEkga25vdyB0aGF0IGNhbiBiZWNvbWUgYSByZWFsIGhlYWRhY2hlIHRvIG5hdmlnYXRlIHdoZW4geW91IG5lZWQgdG8gdHJhY2sgZG93biBhIHNwZWNpZmljIGhhcmR3YXJlIGlzc3VlLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjMxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDU6NTIuODIzODAyNTkzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQyODIxOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2hjaVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGU9NTQ9b2JqLSQoQ09ORklHX1VTQl9JU1AxMTZYX0hDRClcXHQrPSBpc3AxMTZ4LWhjZC5vXFxuZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZS01NS1cXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjU2Om9iai0kKENPTkZJR19VU0JfT0hDSV9IQ0QpXFx0Kz0gb2hjaS1oY2Qub1xcbmRyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGU6NTc6b2JqLSQoQ09ORklHX1VTQl9PSENJX0hDRF9QQ0kpXFx0Kz0gb2hjaS1wY2kub1xcbmRyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGU6NTg6b2JqLSQoQ09ORklHX1VTQl9PSENJX0hDRF9QTEFURk9STSlcXHQrPSBvaGNpLXBsYXRmb3JtLm9cXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjU5Om9iai0kKENPTkZJR19VU0JfT0hDSV9FWFlOT1MpXFx0Kz0gb2hjaS1leHlub3Mub1xcbmRyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGU6NjA6b2JqLSQoQ09ORklHX1VTQl9PSENJX0hDRF9PTUFQMSlcXHQrPSBvaGNpLW9tYXAub1xcbmRyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGU6NjE6b2JqLSQoQ09ORklHX1VTQl9PSENJX0hDRF9TUEVBUilcXHQrPSBvaGNpLXNwZWFyLm9cXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjYyOm9iai0kKENPTkZJR19VU0JfT0hDSV9IQ0RfU1RJKVxcdCs9IG9oY2ktc3Qub1xcbmRyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX1VTQl9PSENJX0hDRF9BVDkxKVxcdCs9IG9oY2ktYXQ5MS5vXFxuZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfVVNCX09IQ0lfSENEX1MzQzI0MTApXFx0Kz0gb2hjaS1zM2MyNDEwLm9cXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjY1Om9iai0kKENPTkZJR19VU0JfT0hDSV9IQ0RfTFBDMzJYWClcXHQrPSBvaGNpLW54cC5vXFxuZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZTo2NjpvYmotJChDT05GSUdfVVNCX09IQ0lfSENEX1BYQTI3WClcXHQrPSBvaGNpLXB4YTI3eC5vXFxuZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZTo2NzpvYmotJChDT05GSUdfVVNCX09IQ0lfSENEX0RBVklOQ0kpXFx0Kz0gb2hjaS1kYTh4eC5vXFxuZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZS02OC1vYmotJChDT05GSUdfVVNCX09DVEVPTl9IQ0QpXFx0Kz0gb2N0ZW9uLWhjZC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA1OjUyLjkyODEzMTMzN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODczMzI4NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgT0hDSSBEZWJ1Z2dpbmcqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgT0hDSSBzdHVmZiwgYW5kIHRoZSBpbmNsdXNpb24gb2YgYG9oY2ktZGJnLmNgIGlzIHByb2JhYmx5IGtleSB0byBteSBpbW1lZGlhdGUgcHJvYmxlbS4gR2l2ZW4gaG93IHRoZXNlIGtlcm5lbCBtb2R1bGVzIGFyZSB0eXBpY2FsbHkgc3RydWN0dXJlZCwgSSdtIGJldHRpbmcgdGhhdCB0aGUgZGVidWdnaW5nIGZ1bmN0aW9uYWxpdGllcywgdGhlIG9uZXMgSSdtIGludGVyZXN0ZWQgaW4gdXNpbmcgb3IgdW5kZXJzdGFuZGluZywgYXJlIGxpa2VseSAqZGVmaW5lZCogd2l0aGluIGBvaGNpLWRiZy5jYCwgYW5kIHRoZW4gKmluY29ycG9yYXRlZCogaW50byB0aGUgbWFpbiBPSENJIEhvc3QgQ29udHJvbGxlciBEcml2ZXIgc291cmNlLCB3aGljaCBpcywgb2YgY291cnNlLCBgb2hjaS1oY2QuY2AuIEl0J3MgYSBwcmV0dHkgc3RhbmRhcmQgYXBwcm9hY2g6IHNlcGFyYXRlIG91dCB0aGUgZGVidWctc3BlY2lmaWMgY29kZSBmb3IgY2xhcml0eSBhbmQgbWFpbnRhaW5hYmlsaXR5LiBUaGlzIG1vZHVsYXJpdHkgbWFrZXMgc2Vuc2U7IGl0IHByZXZlbnRzIGNsdXR0ZXJpbmcgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSB3aXRoIGRlYnVnIHByaW50aW5nIGFuZCBzZXR0aW5ncy4gTm93LCB3aGV0aGVyIGBvaGNpLWhjZC5jYCBpbmNsdWRlcyBpdCBkaXJlY3RseSB3aXRoIGAjaW5jbHVkZWAgb3IgcGVyaGFwcyByZWxpZXMgb24gYnVpbGQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gdG8gbGluayB0aGUgb2JqZWN0IGZpbGVzIHRvZ2V0aGVyIGlzIHNvbWV0aGluZyBJIHNob3VsZCBjaGVjayBidXQgaXQgaXMgbW9zdCBsaWtlbHkgYSBkaXJlY3QgaW5jbHVkZS4gTWFrZXMgc2Vuc2UuIFdoZXJlIHRvIGZpbmQgdGhlIGRlYnVnZ2luZyBzZXR0aW5ncy9mdW5jdGlvbnMgSSBhbSBpbnRlcmVzdGVkIGluLCBob3dldmVyLCBpcyBhIHF1ZXN0aW9uIHdoaWNoIGNhbiBiZSBhbnN3ZXJlZCBieSB0aGUgc291cmNlIGNvZGUgb2YgdGhlIGBvaGNpLWhjZC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ1MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA1OjU2LjgwMTQ2MzEyNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMTc4OTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9oY2ktZGJnLmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvaG9zdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jPTg1PXN0YXRpYyB2b2lkIGlvX3dhdGNoZG9nX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jLTg3LSNpbmNsdWRlIFxcXCJvaGNpLWh1Yi5jXFxcIlxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYzo4ODojaW5jbHVkZSBcXFwib2hjaS1kYmcuY1xcXCJcXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMtODktI2luY2x1ZGUgXFxcIm9oY2ktbWVtLmNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA1OjU2LjkxMTY1MzU4N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTYyMTE5OTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipPSENJIERyaXZlciBJbnF1aXJ5KipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGRvd24gdGhlIE9IQ0kgZHJpdmVyLiBSaWdodCwgSSByZWNhbGwgaXQncyBkZWZpbml0ZWx5IGluY2x1ZGVkIGluIGBvaGNpLWhjZC5jYC4gVGhhdCdzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gTm93LCByZWdhcmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24sIEknbSBwcmV0dHkgc3VyZSB0aGF0IHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uIGlzIGBVU0JfT0hDSV9IQ0RgLiBJJ3ZlIHVzZWQgdGhhdCBiZWZvcmUsIHNvIHRoYXQgcmluZ3MgYSBiZWxsLiBOb3csIHNvbWV0aGluZydzIHRpY2tsaW5nIHRoZSBiYWNrIG9mIG15IGJyYWluIGFib3V0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLi4uIEkgd29uZGVyIGlmIGBvaGNpLWRiZy5jYCBpcyBjb21waWxlZCBiYXNlZCBvbiBzb21lIG90aGVyIHByZXByb2Nlc3NvciBkZWZpbml0aW9uPyBCZXR0ZXIgdG8gYmUgc2FmZSwgSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBiYWNrIGF0IGBvaGNpLWhjZC5jYCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIEkgZG9uJ3Qgd2FudCB0byBtaXNzIGFueXRoaW5nIGNydWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MDQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjowMS44NzM3NzcxMDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NDgxODY1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvaGNpLWRiZy5jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmM9ODU9c3RhdGljIHZvaWQgaW9fd2F0Y2hkb2dfZnVuYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMtODctI2luY2x1ZGUgXFxcIm9oY2ktaHViLmNcXFwiXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jOjg4OiNpbmNsdWRlIFxcXCJvaGNpLWRiZy5jXFxcIlxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYy04OS0jaW5jbHVkZSBcXFwib2hjaS1tZW0uY1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDY6MDIuMjQ4NjA3NzA1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MzU0Mjg0MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIGZvciBQcmVwcm9jZXNzb3IgRGlyZWN0aXZlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc2VjdGlvbiBvZiBjb2RlLiBCZWZvcmUgZGl2aW5nIGluLCBteSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byBjaGVjayBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEkgaGF2ZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmYCBvciBgI2lmbmRlZmAgZGlyZWN0aXZlcyB3cmFwcGluZyB0aGlzIGNvZGUuIEtub3dpbmcgdGhhdCB3aWxsIGdpdmUgbWUgYSBodWdlIGhlYWQgc3RhcnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY29kZSBpcyBpbmNsdWRlZCBpbiBhbGwgYnVpbGRzLCBvciBvbmx5IGluIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG9yIHBsYXRmb3Jtcy4gVGhhdCBjb25kaXRpb25hbCBsb2dpYyBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBhY3R1YWwgYmVoYXZpb3IgSSdtIHNlZWluZy4gSSdsbCBxdWlja2x5IHNjYW4gZm9yIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IGNvdWxkIGJlIGNvbnRyb2xsaW5nIHRoZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIG9mIHRoaXMgc2VjdGlvbi4gVGhhdCdzIHRoZSBmaXJzdCBzdGVwIC0gYWx3YXlzIGxvb2sgZm9yIHRob3NlIGAjaWZkZWZgcyEgSXQnbGwgc2F2ZSBtZSBhIGxvdCBvZiB0aW1lIGluIHRoZSBsb25nIHJ1biwgYW5kIHByZXZlbnQgbWUgZnJvbSBnb2luZyBkb3duIHRoZSB3cm9uZyBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzA3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDY6MDUuMTg0MDM4ODQ4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTExNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdCNpbmNsdWRlIFxcXCJvaGNpLmhcXFwiXFxuICA4MTpcXHQjaW5jbHVkZSBcXFwicGNpLXF1aXJrcy5oXFxcIlxcbiAgODI6XFx0XFxuICA4MzpcXHRzdGF0aWMgdm9pZCBvaGNpX2R1bXAoc3RydWN0IG9oY2lfaGNkICpvaGNpKTtcXG4gIDg0OlxcdHN0YXRpYyB2b2lkIG9oY2lfc3RvcChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTtcXG4gIDg1OlxcdHN0YXRpYyB2b2lkIGlvX3dhdGNoZG9nX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xcbiAgODY6XFx0XFxuICA4NzpcXHQjaW5jbHVkZSBcXFwib2hjaS1odWIuY1xcXCJcXG4gIDg4OlxcdCNpbmNsdWRlIFxcXCJvaGNpLWRiZy5jXFxcIlxcbiAgODk6XFx0I2luY2x1ZGUgXFxcIm9oY2ktbWVtLmNcXFwiXFxuICA5MDpcXHQjaW5jbHVkZSBcXFwib2hjaS1xLmNcXFwiXFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcbiAgOTM6XFx0LypcXG4gIDk0OlxcdCAqIE9uIGFyY2hpdGVjdHVyZXMgd2l0aCBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIHdlIG11c3QgbmV2ZXIgcmV0dXJuXFxuICA5NTpcXHQgKiBJUlFfTk9ORS5cXG4gIDk2OlxcdCAqL1xcbiAgOTc6XFx0I2lmIGRlZmluZWQoQ09ORklHX1NBMTExMSkgIC8qIC4uLiBvciBvdGhlciBlZGdlLXRyaWdnZXJlZCBzeXN0ZW1zICovXFxuICA5ODpcXHQjZGVmaW5lIElSUV9OT1RNSU5FXFx0SVJRX0hBTkRMRURcXG4gIDk5OlxcdCNlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA2OjA1LjE4NjIzNTMyOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzA1MDY4OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipPSENJIERlYnVnZ2luZzogVGhlIENvbmRpdGlvbmFsIENvbXBpbGUgUXVlc3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBjb2RlLiBJJ20gc2VlaW5nIHNvbWV0aGluZyB0aGF0J3MgYWx3YXlzIHByZXNlbnQg4oCTIG9yIGF0IGxlYXN0LCB0aGF0J3MgdGhlIGltcHJlc3Npb24gaXQgZ2l2ZXMuIEJ1dCB0aGVuLCBhIGxpdHRsZSBhbGFybSBiZWxsIGdvZXMgb2ZmLiBJIG5lZWQgdG8gZGlnIGRlZXBlci4gV2FpdCBhIG1pbnV0ZS4uLiB0aGlzIHBhcnRpY3VsYXIgc2VjdGlvbiwgdGhlIG9uZSBJJ20gZm9jdXNlZCBvbiwgcmVzaWRlcyB3aXRoaW4gYG9oY2ktZGJnLmNgLCBkb2Vzbid0IGl0PyBUaGF0J3MgdGhlIGZpbGUgSSBuZWVkIHRvIGxvb2sgYXQuIEFuZCBub3cgSSdtIGFza2luZyBteXNlbGYsIGFuZCB0aGF0J3MgdGhlIGtleSBxdWVzdGlvbiwgaXMgdGhpcyBjb2RlICphY3R1YWxseSogYWx3YXlzIGVuYWJsZWQ/IE9yIGlzIGl0IHdyYXBwZWQgaW4gc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmU/IElzIGl0IGNvbnRyb2xsZWQgYnkgYSBmbGFnLCBhIG1hY3JvLCBvciBzb21ldGhpbmcgZWxzZSB0aGF0IG1pZ2h0IHJlbmRlciBpdCBhY3RpdmUgb3IgaW5hY3RpdmUgZGVwZW5kaW5nIG9uIHRoZSBidWlsZCBjb25maWd1cmF0aW9uPyBUaGF0J3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIEkgbmVlZCB0byByZXNvbHZlIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIHdpdGggbXkgYW5hbHlzaXMuIFRoYXQncyB3aGVyZSBJIHdpbGwgZ28gbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgzNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDY6MDguODkxMzA3NzE0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTEuMCtcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBPSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi5cXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiAoQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyIFxcdTAwM2N3ZWlzc2dAdmllbm5hLmF0XFx1MDAzZVxcbiAgIDY6XFx0ICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDIgRGF2aWQgQnJvd25lbGwgXFx1MDAzY2Ricm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXRcXHUwMDNlXFxuICAgNzpcXHQgKlxcbiAgIDg6XFx0ICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuXFxuICAgOTpcXHQgKi9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cXG4gIDEyOlxcdFxcbiAgMTM6XFx0I2RlZmluZSBlZHN0cmluZyhlZF90eXBlKSAoeyBjaGFyICp0ZW1wOyBcXFxcXFxuICAxNDpcXHRcXHRzd2l0Y2ggKGVkX3R5cGUpIHsgXFxcXFxcbiAgMTU6XFx0XFx0Y2FzZSBQSVBFX0NPTlRST0w6XFx0dGVtcCA9IFxcXCJjdHJsXFxcIjsgYnJlYWs7IFxcXFxcXG4gIDE2OlxcdFxcdGNhc2UgUElQRV9CVUxLOlxcdFxcdHRlbXAgPSBcXFwiYnVsa1xcXCI7IGJyZWFrOyBcXFxcXFxuICAxNzpcXHRcXHRjYXNlIFBJUEVfSU5URVJSVVBUOlxcdHRlbXAgPSBcXFwiaW50clxcXCI7IGJyZWFrOyBcXFxcXFxuICAxODpcXHRcXHRkZWZhdWx0OlxcdFxcdHRlbXAgPSBcXFwiaXNvY1xcXCI7IGJyZWFrOyBcXFxcXFxuICAxOTpcXHRcXHR9IHRlbXA7fSlcXG4gIDIwOlxcdCNkZWZpbmUgcGlwZXN0cmluZyhwaXBlKSBlZHN0cmluZyh1c2JfcGlwZXR5cGUocGlwZSkpXFxuICAyMTpcXHRcXG4gIDIyOlxcdFxcbiAgMjM6XFx0I2RlZmluZSBvaGNpX2RiZ19zdyhvaGNpLCBuZXh0LCBzaXplLCBmb3JtYXQsIGFyZy4uLikgXFxcXFxcbiAgMjQ6XFx0XFx0ZG8geyBcXFxcXFxuICAyNTpcXHRcXHRpZiAobmV4dCAhPSBOVUxMKSB7IFxcXFxcXG4gIDI2OlxcdFxcdFxcdHVuc2lnbmVkIHNfbGVuOyBcXFxcXFxuICAyNzpcXHRcXHRcXHRzX2xlbiA9IHNjbnByaW50ZiAoKm5leHQsICpzaXplLCBmb3JtYXQsICMjIGFyZyApOyBcXFxcXFxuICAyODpcXHRcXHRcXHQqc2l6ZSAtPSBzX2xlbjsgKm5leHQgKz0gc19sZW47IFxcXFxcXG4gIDI5OlxcdFxcdH0gZWxzZSBcXFxcXFxuICAzMDpcXHRcXHRcXHRvaGNpX2RiZyhvaGNpLGZvcm1hdCwgIyMgYXJnICk7IFxcXFxcXG4gIDMxOlxcdFxcdH0gd2hpbGUgKDApO1xcbiAgMzI6XFx0XFxuICAzMzpcXHQvKiBWZXJzaW9uIGZvciB1c2Ugd2hlcmUgXFxcIm5leHRcXFwiIGlzIHRoZSBhZGRyZXNzIG9mIGEgbG9jYWwgdmFyaWFibGUgKi9cXG4gIDM0OlxcdCNkZWZpbmUgb2hjaV9kYmdfbm9zdyhvaGNpLCBuZXh0LCBzaXplLCBmb3JtYXQsIGFyZy4uLikgXFxcXFxcbiAgMzU6XFx0XFx0ZG8geyBcXFxcXFxuICAzNjpcXHRcXHRcXHR1bnNpZ25lZCBzX2xlbjsgXFxcXFxcbiAgMzc6XFx0XFx0XFx0c19sZW4gPSBzY25wcmludGYoKm5leHQsICpzaXplLCBmb3JtYXQsICMjIGFyZyk7IFxcXFxcXG4gIDM4OlxcdFxcdFxcdCpzaXplIC09IHNfbGVuOyAqbmV4dCArPSBzX2xlbjsgXFxcXFxcbiAgMzk6XFx0XFx0fSB3aGlsZSAoMCk7XFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcbiAgNDI6XFx0c3RhdGljIHZvaWQgb2hjaV9kdW1wX2ludHJfbWFzayAoXFxuICA0MzpcXHRcXHRzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksXFxuICA0NDpcXHRcXHRjaGFyICpsYWJlbCxcXG4gIDQ1OlxcdFxcdHUzMiBtYXNrLFxcbiAgNDY6XFx0XFx0Y2hhciAqKm5leHQsXFxuICA0NzpcXHRcXHR1bnNpZ25lZCAqc2l6ZSlcXG4gIDQ4OlxcdHtcXG4gIDQ5OlxcdFxcdG9oY2lfZGJnX3N3IChvaGNpLCBuZXh0LCBzaXplLCBcXFwiJXMgMHglMDh4JXMlcyVzJXMlcyVzJXMlcyVzXFxcXG5cXFwiLFxcbiAgNTA6XFx0XFx0XFx0bGFiZWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA2OjA4Ljg5MTQ0Nzk0NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjg1NTg1MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSwgYW4gZXhwZXJ0LCBhbSB0aGlua2luZyBpdDpcblxuKipMb2NhdGluZyBDcml0aWNhbCBDb2RlIFNlY3Rpb25zKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGxhbmRzY2FwZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHByZWNpc2VseSBtYXBwaW5nIG91dCB0aGUgdXNhZ2UgYW5kIGRlZmluaXRpb24gb2YgYGRlYnVnX291dHB1dGAgYW5kIGBmaWxsX2J1ZmZlcmAuIFVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIGNvbnRleHQgb2Ygd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGFuZCBob3cgdGhleSBpbnRlcmFjdCBpcyBjcnVjaWFsIGZvciBkaWFnbm9zaW5nIHdoYXRldmVyIGlzc3VlIEknbSBjaGFzaW5nIGRvd24gb3Igb3B0aW1pemluZyB3aGF0ZXZlciBJJ20gYnVpbGRpbmcuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgdGhlIHByb3BlciBjb250ZXh0dWFsIGZvdW5kYXRpb24uIFRpbWUgdG8gc3RhcnQgdHJhY2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg3NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDY6MTEuNTc3MDM2MDUyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA0NDY2ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsbF9idWZmZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYz02NjU9c3RhdGljIHN0cnVjdCBkZWJ1Z19idWZmZXIgKmFsbG9jX2J1ZmZlcihzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksXFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNjgwLVxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYzo2ODE6c3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTY4Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM9NzA0PXN0YXRpYyBzc2l6ZV90IGRlYnVnX291dHB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTcxMS1cXHRpZiAoYnVmLVxcdTAwM2Vjb3VudCA9PSAwKSB7XFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jOjcxMjpcXHRcXHRyZXQgPSBmaWxsX2J1ZmZlcihidWYpO1xcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy03MTMtXFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA2OjExLjczNzQ4NzkxMloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzgxODcyMTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZWJ1Z2dpbmcgRGl2ZTogQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnbyBkZWVwZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgY2hhc2luZyBhIGdob3N0LiBGaXJzdCB0aGluZydzIGZpcnN0OiBJcyB0aGlzIGJlaGF2aW9yLCB0aGlzIGJ1ZywgdGhpcyBhbm9tYWx5LCBldmVuICphY3RpdmUqIGluIHRoZSBjdXJyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb24/IEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgXCJIYXMgc29tZW9uZSBjbGV2ZXJseSB3cmFwcGVkIHRoaXMgcHJvYmxlbWF0aWMgY29kZSBzZWN0aW9uIGluIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlP1wiIFlvdSBrbm93LCBzb21ldGhpbmcgbGlrZSBgI2lmZGVmIERFQlVHYCwgYCNpZmRlZiBURVNUSU5HYCwgb3IgbWF5YmUgZXZlbiBzb21ldGhpbmcgY3VzdG9tIHRoYXQgc29tZW9uZSBzZXQgdXAgc3BlY2lmaWNhbGx5IGZvciBhIHNwZWNpZmljIHBsYXRmb3JtIG9yIGJ1aWxkIHRhcmdldC4gQ291bGQgZXZlbiBiZSBzb21ldGhpbmcgbW9yZSBvYnNjdXJlLiBJJ3ZlIGJlZW4gYml0dGVuIGJ5IHRoYXQgYmVmb3JlLiBTbywgYmVmb3JlIEkgc3RhcnQgdW53aW5kaW5nIHRoZSBlbnRpcmUgc3RhY2ssIEknbSBnb2luZyB0byBzY2FuIHRoZSByZWxldmFudCBzb3VyY2UgY29kZSwgYW5kIHBlcmhhcHMgZG8gYSBxdWljayBncmVwLCBmb3IgYW55IG9mIHRob3NlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgaXMgZXZlbiB0aGUgKmFjdGl2ZSogY29kZSBwYXRoIEknbSBsb29raW5nIGF0LiBUaGF0IHdvdWxkIGJlIGEgaHVnZSB0aW1lIHNhdmVyLiBJIG5lZWQgdG8gZWxpbWluYXRlIHRoaXMgcG9zc2liaWxpdHkgYmVmb3JlIEkgaW52ZXN0IHRvbyBtdWNoIGVmZm9ydC4gSXQncyB0aGUgbW9zdCBsaWtlbHkgcXVpY2sgd2luLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjk4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDY6MTUuMTE5MzcxMzg4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjYwOlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKFxcdTAwMjZvaGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIDY2MTpcXHRcXG4gNjYyOlxcdFxcdHJldHVybiBQQUdFX1NJWkUgLSBzaXplO1xcbiA2NjM6XFx0fVxcbiA2NjQ6XFx0XFxuIDY2NTpcXHRzdGF0aWMgc3RydWN0IGRlYnVnX2J1ZmZlciAqYWxsb2NfYnVmZmVyKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSxcXG4gNjY2OlxcdFxcdFxcdFxcdFxcdHNzaXplX3QgKCpmaWxsX2Z1bmMpKHN0cnVjdCBkZWJ1Z19idWZmZXIgKikpXFxuIDY2NzpcXHR7XFxuIDY2ODpcXHRcXHRzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWY7XFxuIDY2OTpcXHRcXG4gNjcwOlxcdFxcdGJ1ZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkZWJ1Z19idWZmZXIpO1xcbiA2NzE6XFx0XFxuIDY3MjpcXHRcXHRpZiAoYnVmKSB7XFxuIDY3MzpcXHRcXHRcXHRidWYtXFx1MDAzZW9oY2kgPSBvaGNpO1xcbiA2NzQ6XFx0XFx0XFx0YnVmLVxcdTAwM2VmaWxsX2Z1bmMgPSBmaWxsX2Z1bmM7XFxuIDY3NTpcXHRcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZidWYtXFx1MDAzZW11dGV4KTtcXG4gNjc2OlxcdFxcdH1cXG4gNjc3OlxcdFxcbiA2Nzg6XFx0XFx0cmV0dXJuIGJ1ZjtcXG4gNjc5OlxcdH1cXG4gNjgwOlxcdFxcbiA2ODE6XFx0c3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXFxuIDY4MjpcXHR7XFxuIDY4MzpcXHRcXHRpbnQgcmV0O1xcbiA2ODQ6XFx0XFxuIDY4NTpcXHRcXHRpZiAoIWJ1Zi1cXHUwMDNlcGFnZSlcXG4gNjg2OlxcdFxcdFxcdGJ1Zi1cXHUwMDNlcGFnZSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG4gNjg3OlxcdFxcbiA2ODg6XFx0XFx0aWYgKCFidWYtXFx1MDAzZXBhZ2UpIHtcXG4gNjg5OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDY5MDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNjkxOlxcdFxcdH1cXG4gNjkyOlxcdFxcbiA2OTM6XFx0XFx0cmV0ID0gYnVmLVxcdTAwM2VmaWxsX2Z1bmMoYnVmKTtcXG4gNjk0OlxcdFxcbiA2OTU6XFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwKSB7XFxuIDY5NjpcXHRcXHRcXHRidWYtXFx1MDAzZWNvdW50ID0gcmV0O1xcbiA2OTc6XFx0XFx0XFx0cmV0ID0gMDtcXG4gNjk4OlxcdFxcdH1cXG4gNjk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjoxNS4xMTk1NzMwNjhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUyMzY0ODczOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhhdCBmaWxlLCBgb2hjaS1kYmcuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGRlYnVnZ2luZyBmZWF0dXJlcyBhcmUgcG90ZW50aWFsbHkgZW5hYmxlZCBvciBkaXNhYmxlZCB3aXRoaW4gaXQuIEFuZCB0aGUgdXN1YWwgc3VzcGVjdCBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbGlrZSB0aGlzIGlzIGAjaWZkZWYgREVCVUdgLiBTbywgSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGNvZGUsIGxvb2tpbmcgZm9yIHRoYXQgc3BlY2lmaWMgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSB0byBjb250cm9sIHRoZSB2aXNpYmlsaXR5IG9yIGJlaGF2aW91ciBvZiB0aGUgZGVidWcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwODAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA2OjE3LjY0MzIyNDcxNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0MjUwNzQzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWYgREVCVUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjoxNy45Mjc0ODM5OTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1MzM4NTEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBteSBkb21haW4gZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIHRoZSBEZWJ1ZyBGaWxlc3lzdGVtIEZsYWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBzZWUgd2UncmUgYXQgYSBwb2ludCB3aGVyZSB3ZSBuZWVkIHRvIGV4YW1pbmUgYENPTkZJR19ERUJVR19GU2AuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgdGhpcyBpcyBhIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbG1vc3QgYWx3YXlzIGEgc2lnbiB3ZSdyZSBnb2luZyB0byBpbnRlcmFjdCB3aXRoIHRoZSBkZWJ1ZyBmaWxlc3lzdGVtLiBUaGlzIHVzdWFsbHkgbWVhbnMgSSdtIHRyb3VibGVzaG9vdGluZywgYW5hbHl6aW5nIGtlcm5lbCBiZWhhdmlvciwgb3IgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgbG93LWxldmVsIGludGVyYWN0aW9ucy4gSSdtIGxpa2VseSBnZWFyaW5nIHVwIHRvIGV4YW1pbmUgd2hhdCBkZWJ1ZyBpbmZvcm1hdGlvbiBoYXMgYmVlbiBlbmFibGVkLCB3aGF0J3MgYmVlbiBleHBvc2VkLCBhbmQgaG93IGl0IG1pZ2h0IGhlbHAgbWUgdW5kZXJzdGFuZCBhIHNwZWNpZmljIGlzc3VlIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0eS4gSXQncyBhIGtleSBmaXJzdCBzdGVwIGluIGRpYWdub3NpbmcgY29tcGxleCBrZXJuZWwgYmVoYXZpb3IsIHNvIGxldCdzIGdldCByaWdodCBvbiBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjoyMC45ODA4NzIzNjVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MTEyOTA1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfREVCVUdfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjoyMS4wNzQ5OTU1NzlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyOTk4MTM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlYnVnZ2luZyBhIFBvc3NpYmxlIENvbXBpbGF0aW9uIElzc3VlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIHJldHJhY2UgbXkgc3RlcHMgYW5kIGNvbnNpZGVyIHNvbWV0aGluZyBwb3RlbnRpYWxseSBzdWJ0bGUgaGVyZS4gSSB3YXMgZm9jdXNpbmcgb24gdGhlIHNwZWNpZmljIGZpbGUsIGJ1dCBJJ20gaGF2aW5nIGEgaHVuY2ggYWJvdXQgc29tZXRoaW5nIG1vcmUgZ2xvYmFsLiBJcyBpdCBwb3NzaWJsZSB0aGF0IHRoZSBjb2RlIGluIGBvaGNpLWRiZy5jYCDigJMgdGhlIGRlYnVnIGZpbGUsIHNwZWNpZmljYWxseSDigJMgaXMgKm5vdCogZGlyZWN0bHkgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIGJpbmFyeT8gSXQncyBjb25jZWl2YWJsZSB0aGF0IHRoZSBwcmVwcm9jZXNzb3IgaXMgaGFuZGxpbmcgdGhpbmdzLCBhbmQgaXQgbWlnaHQgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoaW4gYG9oY2ktaGNkLmNgLiBUaGF0IHdvdWxkIG1lYW4gSSBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdG8gZW5zdXJlIHRoYXQgdGhlIGRlYnVnZ2luZyBvdXRwdXQgSSdtIGV4cGVjdGluZyBpcyBhY3R1YWxseSBlbmFibGVkLiBJdCB3b3VsZCBhbHNvIGV4cGxhaW4gd2h5IEkgY2FuJ3Qgc2VlIHRoZSBkZWJ1ZyBzdGF0ZW1lbnRzIGJlaW5nIHRyaWdnZXJlZC4gSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgY29tcGlsYXRpb24gZmxhZ3MgYW5kIHByZXByb2Nlc3NvciBzeW1ib2xzIHRvIG1ha2Ugc3VyZSB0aGUgZGVidWcgY29kZSBpcyBhY3R1YWxseSBiZWluZyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ2MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA2OjI0LjMwNDk4MDEyNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1Mzk1NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9oY2ktZGJnLmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYz04NT1zdGF0aWMgdm9pZCBpb193YXRjaGRvZ19mdW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYy04Ny0jaW5jbHVkZSBcXFwib2hjaS1odWIuY1xcXCJcXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmM6ODg6I2luY2x1ZGUgXFxcIm9oY2ktZGJnLmNcXFwiXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jLTg5LSNpbmNsdWRlIFxcXCJvaGNpLW1lbS5jXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjoyNC40MTAzODQ5MzhaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzMDY4NTcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgb2hjaS1oY2QuY2AgYXQgTGluZSA4OCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoaXMgaXNzdWUuIEJhc2VkIG9uIHdoYXQgSSd2ZSBzZWVuLCBpdCdzIHBvaW50aW5nIHRvd2FyZHMgYSBwb3RlbnRpYWwgcHJvYmxlbSBpbiB0aGUgT0hDSSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyLiBMZXQncyBzdGFydCB3aXRoIGEgZm9jdXNlZCBsb29rIGFyb3VuZCBsaW5lIDg4IG9mIGBvaGNpLWhjZC5jYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hhdCdzIGJlaW5nIGluaXRpYWxpemVkIG9yIG1vZGlmaWVkIGFyb3VuZCB0aGF0IGFyZWEuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gZWl0aGVyIGRlc2NyaXB0b3Igc2V0dXAsIGludGVycnVwdCBoYW5kbGluZywgb3IgbWF5YmUgZXZlbiByZXNvdXJjZSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGNvbnRleHQgb2YgdGhhdCBjb2RlIHNlY3Rpb24uIElzIHRoaXMgcmVsYXRlZCB0byBlbmRwb2ludCBjb25maWd1cmF0aW9uPyBPciBwb3NzaWJseSBhIERNQSB0cmFuc2ZlciBzZXR1cD8gTGluZSBudW1iZXJzIGFyZSBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gcXVpY2tseSBmaW5kIGEgc3BlY2lmaWMgY29kZSBibG9jaywgYnV0IEknbGwgbmVlZCB0byB1c2UgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgT0hDSSBhcmNoaXRlY3R1cmUgdG8gcGxhY2UgdGhhdCBsaW5lIGluIGEgcmVsZXZhbnQgY29udGV4dC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgY2x1ZXMgdGhhdCBzdWdnZXN0IGEgcmFjZSBjb25kaXRpb24sIGEgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIGEgbWlzY29uZmlndXJhdGlvbiB0aGF0IGNvdWxkIGJlIGNvbnRyaWJ1dGluZyB0byB0aGUgb2JzZXJ2ZWQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODU1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDY6MjcuNzQxMDcyODI3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzA6XFx0I2VuZGlmXFxuICA3MTpcXHRcXG4gIDcyOlxcdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuICA3MzpcXHRcXG4gIDc0OlxcdHN0YXRpYyBjb25zdCBjaGFyXFx0aGNkX25hbWUgW10gPSBcXFwib2hjaV9oY2RcXFwiO1xcbiAgNzU6XFx0XFxuICA3NjpcXHQjZGVmaW5lXFx0U1RBVEVDSEFOR0VfREVMQVlcXHRtc2Vjc190b19qaWZmaWVzKDMwMClcXG4gIDc3OlxcdCNkZWZpbmVcXHRJT19XQVRDSERPR19ERUxBWVxcdG1zZWNzX3RvX2ppZmZpZXMoMjc1KVxcbiAgNzg6XFx0I2RlZmluZVxcdElPX1dBVENIRE9HX09GRlxcdFxcdDB4ZmZmZmZmMDBcXG4gIDc5OlxcdFxcbiAgODA6XFx0I2luY2x1ZGUgXFxcIm9oY2kuaFxcXCJcXG4gIDgxOlxcdCNpbmNsdWRlIFxcXCJwY2ktcXVpcmtzLmhcXFwiXFxuICA4MjpcXHRcXG4gIDgzOlxcdHN0YXRpYyB2b2lkIG9oY2lfZHVtcChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpO1xcbiAgODQ6XFx0c3RhdGljIHZvaWQgb2hjaV9zdG9wKHN0cnVjdCB1c2JfaGNkICpoY2QpO1xcbiAgODU6XFx0c3RhdGljIHZvaWQgaW9fd2F0Y2hkb2dfZnVuYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxuICA4NjpcXHRcXG4gIDg3OlxcdCNpbmNsdWRlIFxcXCJvaGNpLWh1Yi5jXFxcIlxcbiAgODg6XFx0I2luY2x1ZGUgXFxcIm9oY2ktZGJnLmNcXFwiXFxuICA4OTpcXHQjaW5jbHVkZSBcXFwib2hjaS1tZW0uY1xcXCJcXG4gIDkwOlxcdCNpbmNsdWRlIFxcXCJvaGNpLXEuY1xcXCJcXG4gIDkxOlxcdFxcbiAgOTI6XFx0XFxuICA5MzpcXHQvKlxcbiAgOTQ6XFx0ICogT24gYXJjaGl0ZWN0dXJlcyB3aXRoIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMgd2UgbXVzdCBuZXZlciByZXR1cm5cXG4gIDk1OlxcdCAqIElSUV9OT05FLlxcbiAgOTY6XFx0ICovXFxuICA5NzpcXHQjaWYgZGVmaW5lZChDT05GSUdfU0ExMTExKSAgLyogLi4uIG9yIG90aGVyIGVkZ2UtdHJpZ2dlcmVkIHN5c3RlbXMgKi9cXG4gIDk4OlxcdCNkZWZpbmUgSVJRX05PVE1JTkVcXHRJUlFfSEFORExFRFxcbiAgOTk6XFx0I2Vsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDY6MjcuNzQxMjAzOTM3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTAxMjE3NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSdtIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZWJ1Z2dpbmcgRmxhZydzIFNjb3BlKipcblxuSG1tLCBpdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGl0J3MganVzdCBpbmNsdWRlZC4gQnV0IGhhbmcgb24gYSBzZWNvbmQsIGEgbGl0dGxlIGFsYXJtIGJlbGwganVzdCB3ZW50IG9mZi4gV2hhdCBpZiB0aGUgZmlsZSBgb2hjaS1kYmcuY2Ag4oCTIHRoYXQgSSdtIGRlYWxpbmcgd2l0aCBoZXJlIOKAkyAqaXRzZWxmKiBoYXMgYSBgI2lmZGVmIERFQlVHYCBibG9jayB3aXRoaW4gaXQ/IFRoYXQncyB0aGUgcmVhbCBwb3RlbnRpYWwgZ290Y2hhLiBJZiBpdCBkb2VzLCB0aGVuIHRoZSBpbmNsdXNpb24gb2YgYG9oY2ktZGJnLmNgIGFsb25lIG1pZ2h0IG5vdCAqZ3VhcmFudGVlKiB0aGF0IHRoZSBkZWJ1ZyBjb2RlIHdpdGhpbiBpdCBpcyBhY3RpdmUuIFRoZSBuZXN0ZWQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gY291bGQgYmUgYXQgcGxheSBoZXJlLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbnRlbnRzIG9mIHRoYXQgZmlsZS4gSXQgaXNuJ3QgZ29vZCBlbm91Z2ggdG8gYXNzdW1lIGV2ZXJ5dGhpbmcgd2lsbCBiZSBpbiBwbGFjZSB3aXRoIGEgc2ltcGxlIGluY2x1ZGUsIG5vdCB3aGVuIHRoYXQgZmlsZSBtaWdodCBoYXZlIGl0cyBvd24gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHRoZSBzYW1lIG1hY3JvLiBJIG5lZWQgdG8gcnVsZSB0aGlzIG91dCwgYW5kIHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTk5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjozMS4wOTEzMjg2NjVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMS4wK1xcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIE9IQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLlxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIgXFx1MDAzY3dlaXNzZ0B2aWVubmEuYXRcXHUwMDNlXFxuICAgNjpcXHQgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMiBEYXZpZCBCcm93bmVsbCBcXHUwMDNjZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldFxcdTAwM2VcXG4gICA3OlxcdCAqXFxuICAgODpcXHQgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC5cXG4gICA5OlxcdCAqL1xcbiAgMTA6XFx0XFxuICAxMTpcXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xcbiAgMTI6XFx0XFxuICAxMzpcXHQjZGVmaW5lIGVkc3RyaW5nKGVkX3R5cGUpICh7IGNoYXIgKnRlbXA7IFxcXFxcXG4gIDE0OlxcdFxcdHN3aXRjaCAoZWRfdHlwZSkgeyBcXFxcXFxuICAxNTpcXHRcXHRjYXNlIFBJUEVfQ09OVFJPTDpcXHR0ZW1wID0gXFxcImN0cmxcXFwiOyBicmVhazsgXFxcXFxcbiAgMTY6XFx0XFx0Y2FzZSBQSVBFX0JVTEs6XFx0XFx0dGVtcCA9IFxcXCJidWxrXFxcIjsgYnJlYWs7IFxcXFxcXG4gIDE3OlxcdFxcdGNhc2UgUElQRV9JTlRFUlJVUFQ6XFx0dGVtcCA9IFxcXCJpbnRyXFxcIjsgYnJlYWs7IFxcXFxcXG4gIDE4OlxcdFxcdGRlZmF1bHQ6XFx0XFx0dGVtcCA9IFxcXCJpc29jXFxcIjsgYnJlYWs7IFxcXFxcXG4gIDE5OlxcdFxcdH0gdGVtcDt9KVxcbiAgMjA6XFx0I2RlZmluZSBwaXBlc3RyaW5nKHBpcGUpIGVkc3RyaW5nKHVzYl9waXBldHlwZShwaXBlKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDY6MzEuMDkxNDYwNDM1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODUzMTA2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgYG9oY2ktZGJnLmNgIEZpbGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiBzb21ldGhpbmcgc3BlY2lmaWMgd2l0aGluIHRoZSBgb2hjaS1kYmcuY2AgZmlsZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuIEV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBvZnRlbiwgZGVidWctcmVsYXRlZCBmdW5jdGlvbnMgb3IgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCBtaWdodCBiZSBtb3JlIHJlY2VudCBhZGRpdGlvbnMgb3IgaGF2ZSBzcGVjaWZpYyB0ZXN0aW5nIGhvb2tzLCBhcmUgcGxhY2VkIHRvd2FyZHMgdGhlIHRhaWwgZW5kIG9mIHRoZSBzb3VyY2UgZmlsZS4gSXQncyBhIHF1aWNrIHdheSB0byBmaW5kIHRoZSByZWxldmFudCBkZWJ1Z2dpbmcgY29kZSBvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiByZWxhdGVkIHRvIHRoZSBVU0IgT3BlbiBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlLiBMZXQncyBzZWUgd2hhdCdzIGRvd24gdGhlcmUuIFRoaXMgaXMgYSBjb21tb24gc3RhcnRpbmcgcG9pbnQgaW4gdGhpcyB0eXBlIG9mIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxOTUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA2OjM0LjA3Njc3NTU2NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAxNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcyMDpcXHRcXHRyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgbGVuLCBvZmZzZXQsXFxuIDcyMTpcXHRcXHRcXHRcXHRcXHQgICAgICBidWYtXFx1MDAzZXBhZ2UsIGJ1Zi1cXHUwMDNlY291bnQpO1xcbiA3MjI6XFx0XFxuIDcyMzpcXHRvdXQ6XFxuIDcyNDpcXHRcXHRyZXR1cm4gcmV0O1xcbiA3MjU6XFx0XFxuIDcyNjpcXHR9XFxuIDcyNzpcXHRcXG4gNzI4OlxcdHN0YXRpYyBpbnQgZGVidWdfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIDcyOTpcXHR7XFxuIDczMDpcXHRcXHRzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDczMTpcXHRcXG4gNzMyOlxcdFxcdGtmcmVlKGJ1Zi1cXHUwMDNlcGFnZSk7XFxuIDczMzpcXHRcXHRrZnJlZShidWYpO1xcbiA3MzQ6XFx0XFxuIDczNTpcXHRcXHRyZXR1cm4gMDtcXG4gNzM2OlxcdH1cXG4gNzM3OlxcdHN0YXRpYyBpbnQgZGVidWdfYXN5bmNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gNzM4OlxcdHtcXG4gNzM5OlxcdFxcdGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YSA9IGFsbG9jX2J1ZmZlcihpbm9kZS1cXHUwMDNlaV9wcml2YXRlLCBmaWxsX2FzeW5jX2J1ZmZlcik7XFxuIDc0MDpcXHRcXG4gNzQxOlxcdFxcdHJldHVybiBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEgPyAwIDogLUVOT01FTTtcXG4gNzQyOlxcdH1cXG4gNzQzOlxcdFxcbiA3NDQ6XFx0c3RhdGljIGludCBkZWJ1Z19wZXJpb2RpY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiA3NDU6XFx0e1xcbiA3NDY6XFx0XFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gYWxsb2NfYnVmZmVyKGlub2RlLVxcdTAwM2VpX3ByaXZhdGUsXFxuIDc0NzpcXHRcXHRcXHRcXHRcXHRcXHQgIGZpbGxfcGVyaW9kaWNfYnVmZmVyKTtcXG4gNzQ4OlxcdFxcbiA3NDk6XFx0XFx0cmV0dXJuIGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YSA/IDAgOiAtRU5PTUVNO1xcbiA3NTA6XFx0fVxcbiA3NTE6XFx0XFxuIDc1MjpcXHRzdGF0aWMgaW50IGRlYnVnX3JlZ2lzdGVyc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiA3NTM6XFx0e1xcbiA3NTQ6XFx0XFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gYWxsb2NfYnVmZmVyKGlub2RlLVxcdTAwM2VpX3ByaXZhdGUsXFxuIDc1NTpcXHRcXHRcXHRcXHRcXHRcXHQgIGZpbGxfcmVnaXN0ZXJzX2J1ZmZlcik7XFxuIDc1NjpcXHRcXG4gNzU3OlxcdFxcdHJldHVybiBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEgPyAwIDogLUVOT01FTTtcXG4gNzU4OlxcdH1cXG4gNzU5OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBjcmVhdGVfZGVidWdfZmlsZXMgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDY6MzQuMDc2OTA3Njc1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDk2MDIwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBgY3JlYXRlX2RlYnVnX2ZpbGVzYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBiYWNrIGludG8gdGhlIGNvZGUuIE15IGd1dCBmZWVsaW5nIGlzIHRvIGZvY3VzIG9uIHRoYXQgYGNyZWF0ZV9kZWJ1Z19maWxlc2AgZnVuY3Rpb24uIEl04oCZcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHdoZW4gdHJhY2tpbmcgZG93biBwb3RlbnRpYWwgaXNzdWVzIG9yIGRlYnVnZ2luZyBhIG5ldyBzeXN0ZW0sIGJlY2F1c2UgaXQgaXMgc29tZXRoaW5nIEkgY2FuIHNlZSBhIGxvdCBvZiBkZXZlbG9wZXJzIHVzaW5nIHRvIGxvb2sgZm9yIGNsdWVzLCBhbmQgaXMgcHJvYmFibHkgdXNlZCBxdWl0ZSBmcmVxdWVudGx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gY29tZm9ydGFibGUgdGhhdCB0aGUgZmlsZXMgZ2VuZXJhdGVkIG1hdGNoIGV4cGVjdGF0aW9ucy4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGlucHV0cyBpdCB0YWtlcyBhbmQgZXhhY3RseSB3aGF0IGl0IG91dHB1dHMuIEhvcGVmdWxseSwgaXQgaGFzIGRlY2VudCBsb2dnaW5nLCBvciBhdCBsZWFzdCBzb21lIGluZm9ybWF0aXZlIGZpbGVuYW1lcyB0aGF0IGNhbiBsZWFkIG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgaXQncyBjb3JyZWN0bHkgY29uZmlndXJlZCBpbiB0aGUgZmlyc3QgcGxhY2UsIG9yIGlmIHNvbWV0aGluZyBpcyBhY2NpZGVudGFsbHkgb3ZlcnJpZGluZyBpdHMgYmVoYXZpb3IuIEl0IGNhbiBiZSBlYXN5IHRvIGxvc2UgdHJhY2sgb2Ygc2V0dGluZ3MgYXMgd2UgZ28sIHNvIGxldHMgY29uZmlybSB0aGUgc3RhdGUgYW5kIHNldHRpbmdzLiBMZXQncyBzZWUgd2hhdCB0aGF0IHlpZWxkcy4gSXQncyBvZnRlbiB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NzIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA2OjM4LjUyNjUxMzI3NloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc2MDpcXHR7XFxuIDc2MTpcXHRcXHRzdHJ1Y3QgdXNiX2J1cyAqYnVzID0gXFx1MDAyNm9oY2lfdG9faGNkKG9oY2kpLVxcdTAwM2VzZWxmO1xcbiA3NjI6XFx0XFx0c3RydWN0IGRlbnRyeSAqcm9vdDtcXG4gNzYzOlxcdFxcbiA3NjQ6XFx0XFx0cm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihidXMtXFx1MDAzZWJ1c19uYW1lLCBvaGNpX2RlYnVnX3Jvb3QpO1xcbiA3NjU6XFx0XFx0b2hjaS1cXHUwMDNlZGVidWdfZGlyID0gcm9vdDtcXG4gNzY2OlxcdFxcbiA3Njc6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiYXN5bmNcXFwiLCBTX0lSVUdPLCByb290LCBvaGNpLCBcXHUwMDI2ZGVidWdfYXN5bmNfZm9wcyk7XFxuIDc2ODpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJwZXJpb2RpY1xcXCIsIFNfSVJVR08sIHJvb3QsIG9oY2ksXFxuIDc2OTpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmRlYnVnX3BlcmlvZGljX2ZvcHMpO1xcbiA3NzA6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwicmVnaXN0ZXJzXFxcIiwgU19JUlVHTywgcm9vdCwgb2hjaSxcXG4gNzcxOlxcdFxcdFxcdFxcdCAgICBcXHUwMDI2ZGVidWdfcmVnaXN0ZXJzX2ZvcHMpO1xcbiA3NzI6XFx0XFxuIDc3MzpcXHRcXHRvaGNpX2RiZyAob2hjaSwgXFxcImNyZWF0ZWQgZGVidWcgZmlsZXNcXFxcblxcXCIpO1xcbiA3NzQ6XFx0fVxcbiA3NzU6XFx0XFxuIDc3NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX2RlYnVnX2ZpbGVzIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpXFxuIDc3NzpcXHR7XFxuIDc3ODpcXHRcXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUob2hjaS1cXHUwMDNlZGVidWdfZGlyKTtcXG4gNzc5OlxcdH1cXG4gNzgwOlxcdFxcbiA3ODE6XFx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cXG4gNzgyOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjozOC41MjY2NTE5NDZaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0NDQxODYzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gdGhlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgZGVidWdmcyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkRlYnVnZnMsIGh1aD8gSXMgdGhpcyBldmVuIHdvcnRoIHRoZSBlZmZvcnQ/XCIgVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IG9ubHkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIGl0J3MgZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgbm9uLWZ1bmN0aW9uYWwgY29uc3RhbnQgbW9kaWZpY2F0aW9ucywgb3IgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cbkZpcnN0LCBpcyBkZWJ1Z2ZzIHJlYWNoYWJsZT8gWWVzLCBpdCBpcy4gTm93LCBpcyB0aGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U/IEF0IGZpcnN0IGdsYW5jZSwgaXQgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBtZW1vcnkgYWxsb2NhdGlvbiByZWZhY3RvciBmcm9tIGBfX2dldF9mcmVlX3BhZ2VzYCB0byBga21hbGxvY2AgYW5kIGBnZXRfemVyb2VkX3BhZ2VgIHRvIGBremFsbG9jYC4gSGFuZyBvbiwgbGV0J3MgbWFrZSBzdXJlIEkgZGlkbid0IG1pc3MgYW55dGhpbmcuXG5cbk9rYXksIGluIGB1c2JfZGV2aWNlX2R1bXBgLCB0aGUgY2hhbmdlIGlzOlxuXG5gYGBjXG4tXHRwYWdlc19zdGFydCA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlcyhHRlBfTk9JTywgMSk7XG4rXHRwYWdlc19zdGFydCA9IGttYWxsb2MoUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyAxLCBHRlBfTk9JTyk7XG5gYGBcbmFuZFxuYGBgY1xuLVx0XHRcdGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcGFnZXNfc3RhcnQsIDEpO1xuK1x0XHRcdGtmcmVlKHBhZ2VzX3N0YXJ0KTtcbmBgYFxuQW5kIGluIGBvaGNpLWRiZy5jYDpcbmBgYGNcbi1cdFx0YnVmLVx1MDAzZXBhZ2UgPSAoY2hhciAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTtcbitcdFx0YnVmLVx1MDAzZXBhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG5gYGBcbmFuZFxuYGBgY1xuLVx0aWYgKGJ1Zikge1xuLVx0XHRpZiAoYnVmLVx1MDAzZXBhZ2UpXG4tXHRcdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1Zi1cdTAwM2VwYWdlKTtcbi1cdFx0a2ZyZWUoYnVmKTtcbi1cdH1cbitcdGtmcmVlKGJ1Zi1cdTAwM2VwYWdlKTtcbitcdGtmcmVlKGJ1Zik7XG5gYGBcblxuVGhpcyBpcyBlc3NlbnRpYWxseSBhIHN0cmFpZ2h0Zm9yd2FyZCBtZW1vcnkgYWxsb2NhdGlvbiBjaGFuZ2UuIEl0J3MgcmVmYWN0b3JpbmcsIHJlcGxhY2luZyB0aGUgcGFnZSBhbGxvY2F0b3Igd2l0aCB0aGUgc2xhYiBhbGxvY2F0b3IuXG5cbklzIHRoaXMgd29ydGggZnV6emluZz8gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGRpZmZlcmVudCBhbGxvY2F0b3IgaXMgYmVpbmcgdXNlZC4gRXZlbiBpZiBpdCdzICpqdXN0KiByZWZhY3RvcmluZywgaXQgY291bGQgaW50cm9kdWNlIG5ldyB2dWxuZXJhYmlsaXRpZXMuIEJ1dCB3YWl0LCBsZXQncyByZXZpc2l0IHRoZSBwcm9tcHQuIEl0IGRvZXNuJ3QgZXhwbGljaXRseSBtZW50aW9uIHJlZmFjdG9yaW5nLCBidXQgaXQgZG9lcyBzYXkgd2hhdCBpc24ndCB3b3J0aCBmdXp6aW5nLiBUaGUgcHJvbXB0IGxpc3QgKmRvZXMgbm90KiBpbmNsdWRlIHJlZmFjdG9yaW5nLlxuXG5BbHJpZ2h0LCBpcyB0aGUgY29kZSByZWFjaGFibGUgaW4gUUVNVT8gWWVzLiBgL3N5cy9rZXJuZWwvZGVidWcvdXNiL2RldmljZXNgIGlzIHJlYWNoYWJsZSBmb3IgYHVzYl9kZXZpY2VfZHVtcGAuIEFuZCBgb2hjaS1kYmcuY2AgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIGRlYnVnZnMgYXMgd2VsbCwgcHJvdmlkZWQgT0hDSSBpcyBlbmFibGVkLiBDYW4gd2UgZW5hYmxlIE9IQ0kgaW4gUUVNVT8gWWVzLCBRRU1VIGhhcyBgcGNpLW9oY2lgIGFuZCBgc3lzYnVzLW9oY2lgIHdoaWNoIHdlIGNhbiB1c2UgZm9yIGVuYWJsaW5nIE9IQ0kuXG5cblNvLCBpdCdzIHJlYWNoYWJsZSBhbmQgYSBmdW5jdGlvbmFsIGNoYW5nZS4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgc3BlY2lmaWMgY29uZmlnIHJlcXVpcmVtZW50cyBJJ20gbWlzc2luZy4gYHVzYl9kZXZpY2VfZHVtcGAgaXMgaW4gYGRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jYCwgYW5kIEknbGwgY2hlY2sgYGRyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGVgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuXG5cbkJhc2VkIG9uIGFsbCB0aGlzLCBpdCBzZWVtcyByZWFzb25hYmxlIHRoYXQgdGhpcyB3YXJyYW50cyBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYyNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA2OjUwLjk3MDg0MzMxNVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzczMDg3MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmljZXMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGU9MTA9dXNiY29yZS15ICs9IGNvbmZpZy5vIGZpbGUubyBidWZmZXIubyBzeXNmcy5vIGVuZHBvaW50Lm9cXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlOjExOnVzYmNvcmUteSArPSBkZXZpby5vIG5vdGlmeS5vIGdlbmVyaWMubyBxdWlya3MubyBkZXZpY2VzLm9cXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlLTEyLXVzYmNvcmUteSArPSBwaHkubyBwb3J0Lm8gdHJhY2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjo1MS4zNDM5MzU4NzNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExOTQzNTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVVNCIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZXNlIFVTQiBjb21wb25lbnRzIGFyZSBjb25maWd1cmVkLiBSaWdodCwgc28gdGhpcyBgdXNiY29yZWAgdGhpbmcsIHRoYXQncyBkZWZpbml0ZWx5IHVuZGVyIHRoZSB1bWJyZWxsYSBvZiBgQ09ORklHX1VTQmAsIG5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgb2hjaS1kYmcuY2AsIEkgc2VlIGl0J3MgbGlua2VkIHRvIGBvaGNpLWhjZC5jYCwgd2hpY2gsIGluIHR1cm4sIGlzIGNvbnRyb2xsZWQgYnkgYENPTkZJR19VU0JfT0hDSV9IQ0RgLiBIbW0sIGEgcXVpY2sgY2hlY2sgdG8gbWFrZSBzdXJlIEknbSBvbiB0aGUgcmlnaHQgdHJhY2suLi4gSSB3b25kZXIsIGlzIGBvaGNpLWRiZy5jYCBhbHdheXMgY29tcGlsZWQgaW4gd2hlbiBgQ09ORklHX1VTQl9PSENJX0hDRGAgaXMgZW5hYmxlZD8gTmVlZCB0byB2ZXJpZnkgdGhhdCByZWxhdGlvbnNoaXAuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgYG9oY2ktaGNkLmNgIHNvdXJjZSBhZ2FpbiB0byBjb25maXJtIHRoZSBkZXBlbmRlbmN5LiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNzgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjo1NS40NjMzNzU5MTRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4OTM4Mjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9oY2ktZGJnLmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYz04NT1zdGF0aWMgdm9pZCBpb193YXRjaGRvZ19mdW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYy04Ny0jaW5jbHVkZSBcXFwib2hjaS1odWIuY1xcXCJcXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmM6ODg6I2luY2x1ZGUgXFxcIm9oY2ktZGJnLmNcXFwiXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jLTg5LSNpbmNsdWRlIFxcXCJvaGNpLW1lbS5jXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjo1NS41NjIzMjM5ODhaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3NzMxOTA3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFVTQiBPSENJIERlYnVnZ2luZyBDb2RlKipcblxuWWVzLCB0aGF0IG1ha2VzIHNlbnNlIGluIHRoZSBnZW5lcmFsIGNvbnRleHQuIEJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIHRoZSBkZWJ1Z2dpbmcgZnVuY3Rpb25hbGl0eSB3aXRoaW4gYG9oY2ktZGJnLmNgIGRlcGVuZGVudCBvbiB0aGUgYENPTkZJR19ERUJVR19GU2Aga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgdGhlIGRlYnVnZ2luZyBmZWF0dXJlcyBhcmUgY29tcGlsZWQgaW4gb3Igbm90IGJhc2VkIG9uIHRoYXQgZmxhZy4gVGltZSB0byBqdW1wIGludG8gYG9oY2ktZGJnLmNgIGFuZCBzZWFyY2ggZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3Mgb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgcmVsYXRlZCB0byBgQ09ORklHX0RFQlVHX0ZTYC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBlbmFibGVkIGFuZCBkaXNhYmxlZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MjMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjo1OC42Mzk2NDUyMDJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDcxODM5MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0RFQlVHX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDY6NTguNzUwMzc1OTE2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODQ4ODAyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IHNuaXBwZXQgb2YgdGhvdWdodCwgcmVuZGVyZWQgYXMgaWYgaXQgd2VyZSAqbXkqIGludGVybmFsIG1vbm9sb2d1ZSwgdGFpbG9yZWQgZm9yIGEgZmVsbG93IGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgT0hDSSBEZXRhaWxzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBteSBiZWFyaW5ncyBvbiB0aGlzLiBTZWVtcyBsaWtlIHdlJ3JlIHplcm9pbmcgaW4gb24gYSBwYXJ0aWN1bGFyIHBpZWNlIG9mIHRoZSBwdXp6bGUuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBvaGNpLmhgLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoYXQgYW55IGhhcmR3YXJlIGludGVyYWN0aW9uIHdpbGwgYmUgZGVmaW5lZCwgYXQgbGVhc3QgaW4gcGFydCwgaW4gdGhhdCBoZWFkZXIuIEknbSB0aGlua2luZyByZWdpc3RlciBsYXlvdXRzLCBiaXRmaWVsZHMsIGludGVycnVwdCBkZWZpbml0aW9ucyDigJMgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIHN0cnVjdHVyZSBvZiB0aGUgT3BlbiBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGlzIGdvaW5nIHRvIGJlIGxhaWQgb3V0LCB0aGUgc2tlbGV0b24gb2YgdGhlIGJlYXN0LiBIb3BlZnVsbHksIGl0J3Mgd2VsbC1jb21tZW50ZWQuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgdGhlIGJhc2UgYWRkcmVzcyBvZmZzZXRzIGZvciB0aGUgT0hDSSByZWdpc3RlcnMsIGRhdGEgc3RydWN0dXJlIGRlZmluaXRpb25zLCBpbnRlcnJ1cHQgbnVtYmVycy4uLmFsbCB0aGUgdXN1YWwgc3VzcGVjdHMgdGhhdCBJIG5lZWQgdG8gbWFuaXB1bGF0ZSB0aGlzIGhhcmR3YXJlIHByb3Blcmx5LiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSB3YWl0aW5nIHRvIGJlIHVuZWFydGhlZC4gVGhpcyBmaWxlIGlzIGdvaW5nIHRvIHRlbGwgdGhlIHN0b3J5IG9mIHRoZSBoYXJkd2FyZSdzIGludGVyZmFjZSB0byB0aGUgc29mdHdhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODQyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDc6MDIuMzM1MjU5MzM5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg2MTk2MzIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9oY2ktZGJnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNzowMi40NTM4ODcxNTJaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzMDAwMTkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG9oY2ktaGNkLmNgIGFuZCBEZWJ1Z0ZTKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIE9wZW4gSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSAoT0hDSSkgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBkZWJ1Z2dpbmcuIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgYSBwcmV0dHkgc3RhbmRhcmQgb25lIGluIHRoZXNlIHNpdHVhdGlvbnMsIGlzIHRvIHplcm8gaW4gb24gYG9oY2ktaGNkLmNgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYywgc28gbmF0dXJhbGx5LCB0aGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIFRoZSByZWFsIGtleSBoZXJlIGlzIGdvaW5nIHRvIGJlIHRyYWNpbmcgdGhlIGludGVyYWN0aW9ucyB3aXRoIGBDT05GSUdfREVCVUdfRlNgLiBJJ20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2tzIHRoYXQgYWN0aXZhdGUgZGVidWdnaW5nIGZlYXR1cmVzIHdoZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZC4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IGRlYnVnZnMtcmVsYXRlZCBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9ucyB1c2VkIHdpdGhpbiB0aGlzIGRyaXZlci4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHBpY3R1cmUgb2YgaG93IHRoZSBkZWJ1ZyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYW5kIHdoYXQga2luZCBvZiBpbnNpZ2h0cyBJIGNhbiBnbGVhbiBmcm9tIGl0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMzYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNzowNS41ODM4OTQzNzRaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNDE1OTE1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfREVCVUdfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNzowNS42NzczMzY0MDhaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQwMjM2MDM2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERlYnVnZnMgQ29uZmlndXJhdGlvbiBmb3IgVVNCX09IQ0lfSENEIFRlc3RpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc2VlIGBkZWJ1Z2ZzX2NyZWF0ZV9kaXJgIHVzZWQuIFJpZ2h0IGF3YXksIG15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggZGVidWdmcy4gSWYgYENPTkZJR19ERUJVR19GU2AgaXNuJ3QgZW5hYmxlZCwgaXQncyBqdXN0IGEgc3R1Yiwgc28gaXQncyBub3QgYWN0dWFsbHkgZG9pbmcgYW55dGhpbmcuIFRoYXQncyBhIGNyaXRpY2FsIHBvaW50IHRvIGNvbnNpZGVyIGZvciB0ZXN0aW5nIHRoZSBmaWxlcyB0aGF0IGFyZSBiZWluZyBjcmVhdGVkLlxuXG5TaW5jZSB3ZSBuZWVkIGBDT05GSUdfREVCVUdfRlNgIHRvICphY3R1YWxseSogdGVzdCBhbnl0aGluZyBoZXJlLiBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgd2hhdCBvdGhlciBjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQuIEJ1dCB3YWl0LCBgQ09ORklHX0RFQlVHX0ZTYCBpcyBwcmV0dHkgZ2VuZXJpYywgYW5kIHN5emthbGxlciBwcm9iYWJseSBhbHJlYWR5IGhhcyBpdCBlbmFibGVkIGFueXdheS4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgc2FpZCBub3QgdG8gbGlzdCB0aGUgc3VwZXIgZ2VuZXJpYyBzdHVmZiwgb25seSBjb25maWdzIHNwZWNpZmljIHRvIHRoZSBjaGFuZ2VkIGNvZGUuXG5cblNvLCB0aGUgY29kZSBpcyB1c2luZyBVU0IsIG1lYW5pbmcgSSBzaG91bGQgYmUgbGlzdGluZyBgVVNCX09IQ0lfSENEYC5cblxuSGFuZyBvbiB0aG91Z2guIElzIGl0IGBVU0JfT0hDSV9IQ0RfUENJYCBvciBgVVNCX09IQ0lfSENEX1BMQVRGT1JNYD8gYFVTQl9PSENJX0hDRGAgaXMgYSB0cmlzdGF0ZSwgaXQncyB1c3VhbGx5IHNlbGVjdGVkIGJ5IGVpdGhlciBgVVNCX09IQ0lfSENEX1BDSWAgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4gTGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgYGRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZ2AgZmlsZSBhbmQgY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MTksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDc6MTEuMDc5NzAyMzkyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTUwMTc3OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9PSENJX0hDRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9ob3N0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvaG9zdC9LY29uZmlnPTM5Mj1jb25maWcgVVNCX01BWDM0MjFfSENEXFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDAyLVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo0MDM6Y29uZmlnIFVTQl9PSENJX0hDRFxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00MDQtXFx0dHJpc3RhdGUgXFxcIk9IQ0kgSENEIChVU0IgMS4xKSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnPTQxOT1pZiBVU0JfT0hDSV9IQ0RcXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDIwLVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo0MjE6Y29uZmlnIFVTQl9PSENJX0hDRF9PTUFQMVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00MjItXFx0dHJpc3RhdGUgXFxcIk9IQ0kgc3VwcG9ydCBmb3IgT01BUDEvMiBjaGlwc1xcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00MjctXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjQyODpjb25maWcgVVNCX09IQ0lfSENEX1NQRUFSXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQyOS1cXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgU1QgU1BFQXIgb24tY2hpcCBPSENJIFVTQiBjb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQzNS1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NDM2OmNvbmZpZyBVU0JfT0hDSV9IQ0RfU1RJXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQzNy1cXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgU1QgU1RpSHh4eCBvbi1jaGlwIE9IQ0kgVVNCIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDQ0LVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo0NDU6Y29uZmlnIFVTQl9PSENJX0hDRF9TM0MyNDEwXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQ0Ni1cXHR0cmlzdGF0ZSBcXFwiT0hDSSBzdXBwb3J0IGZvciBTYW1zdW5nIFMzQzY0eHggU29DIHNlcmllc1xcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00NTItXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjQ1Mzpjb25maWcgVVNCX09IQ0lfSENEX0xQQzMyWFhcXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDU0LVxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IGZvciBMUEMgb24tY2hpcCBPSENJIFVTQiBjb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQ2Mi1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NDYzOmNvbmZpZyBVU0JfT0hDSV9IQ0RfUFhBMjdYXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQ2NC1cXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgUFhBMjdYL1BYQTNYWCBvbi1jaGlwIE9IQ0kgVVNCIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDcwLVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo0NzE6Y29uZmlnIFVTQl9PSENJX0hDRF9BVDkxXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQ3Mi1cXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgQXRtZWwgb24tY2hpcCBPSENJIFVTQiBjb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQ3OC1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NDc5OmNvbmZpZyBVU0JfT0hDSV9IQ0RfT01BUDNcXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDgwLVxcdHRyaXN0YXRlIFxcXCJPSENJIHN1cHBvcnQgZm9yIE9NQVAzIGFuZCBsYXRlciBjaGlwc1xcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00OTAtXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjQ5MTpjb25maWcgVVNCX09IQ0lfSENEX0RBVklOQ0lcXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDkyLVxcdHRyaXN0YXRlIFxcXCJPSENJIHN1cHBvcnQgZm9yIFRJIERhVmluY2kgREE4eHhcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNTAxLVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo1MDI6Y29uZmlnIFVTQl9PSENJX0hDRF9QUENfT0ZfQkVcXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNTAzLVxcdGJvb2wgXFxcIk9IQ0kgc3VwcG9ydCBmb3IgT0YgcGxhdGZvcm0gYnVzIChiaWcgZW5kaWFuKVxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy01MTAtXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjUxMTpjb25maWcgVVNCX09IQ0lfSENEX1BQQ19PRl9MRVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy01MTItXFx0Ym9vbCBcXFwiT0hDSSBzdXBwb3J0IGZvciBPRiBwbGF0Zm9ybSBidXMgKGxpdHRsZSBlbmRpYW4pXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTUxOC1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NTE5OmNvbmZpZyBVU0JfT0hDSV9IQ0RfUFBDX09GXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTUyMC1cXHRib29sXFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNTIzLVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo1MjQ6Y29uZmlnIFVTQl9PSENJX0hDRF9QQ0lcXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNTI1LVxcdHRyaXN0YXRlIFxcXCJPSENJIHN1cHBvcnQgZm9yIFBDSS1idXMgVVNCIGNvbnRyb2xsZXJzXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTUzMi1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NTMzOmNvbmZpZyBVU0JfT0hDSV9IQ0RfU1NCXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTUzNC1cXHRib29sIFxcXCJPSENJIHN1cHBvcnQgZm9yIEJyb2FkY29tIFNTQiBPSENJIGNvcmUgKERFUFJFQ0FURUQpXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnPTU1MD1jb25maWcgVVNCX09IQ0lfRVhZTk9TXFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNTU2LVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo1NTc6Y29uZmlnIFVTQl9PSENJX0hDRF9QTEFURk9STVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy01NTgtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgT0hDSSBkcml2ZXIgZm9yIGEgcGxhdGZvcm0gZGV2aWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNzoxMS4zMzQ3MjUyOTZaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3Nzk1MTIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZW1iZWRkZWQgc3lzdGVtcyBleHBlcnQ6XG5cbioqVVNCIENvbnRyb2xsZXIgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgUUVNVSoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IFVTQiBob3N0IGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbiBmb3IgUUVNVSwgYW5kIHRoZSBpbml0aWFsIGluc3RpbmN0IHBvaW50cyB0b3dhcmRzIGBVU0JfT0hDSV9IQ0RfUENJYC4gVGhhdCByaW5ncyBhIGJlbGwsIEkgb2Z0ZW4gdXNlIHRoYXQgZm9yIGVtdWxhdGluZyBvbGRlciBPSENJIGNvbnRyb2xsZXJzLiBCdXQgaG9sZCBvbiwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZpcnN0LiBUaGUgbWFpbiBjb25maWd1cmF0aW9uIHNlZW1zIHRvIGJlIGBVU0JfT0hDSV9IQ0RgLCBzbyBpdCdzIGJlc3QgcHJhY3RpY2UgdG8gY29uZmlybSB0aGUgZXhhY3QgcHVycG9zZSBvZiBgVVNCX09IQ0lfSENEX1BDSWAuIExldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhbmQgbWFrZSBzdXJlIHRoZXJlIGlzbid0IGEgc3VidGxlIGRpZmZlcmVuY2Ugb3IgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IEknbSBvdmVybG9va2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYFVTQl9PSENJX0hDRF9QQ0lgIGlzIGp1c3QgZW5hYmxpbmcgYSBQQ0ktc3BlY2lmaWMgdmFyaWFudCwgb3IgaWYgdGhlcmUncyBzb21ldGhpbmcgZWxzZSBnb2luZyBvbi4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDc6MTUuNjEyNjgxMjY5WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ1MTY4ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9PSENJX0hDRF9QQ0lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvaG9zdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZz01MTk9Y29uZmlnIFVTQl9PSENJX0hDRF9QUENfT0ZcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy01MjMtXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjUyNDpjb25maWcgVVNCX09IQ0lfSENEX1BDSVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy01MjUtXFx0dHJpc3RhdGUgXFxcIk9IQ0kgc3VwcG9ydCBmb3IgUENJLWJ1cyBVU0IgY29udHJvbGxlcnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA3OjE1LjczNzIwNzQ5MVoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzM4NDA1MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVTQiBDb25maWd1cmF0aW9uIFRob3VnaHRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIFVTQiBjb25maWd1cmF0aW9ucyBoZXJlLiBJIHNlZSBgVVNCX09IQ0lfSENEYCBhbmQgYFVTQl9PSENJX0hDRF9QQ0lgIGxpc3RlZCwgd2hpY2ggaXMgd2hhdCBJJ2QgZXhwZWN0IGZvciB0aGUgT0hDSSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyLiBCdXQgSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgZGVidWdnaW5nIGNhcGFiaWxpdGllcy4gV2hhdCBhYm91dCBgdXNiX2RldmljZV9kdW1wYD8gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IGl0J3MgaW4gYGRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdCBmaWxlIGlzIGFsd2F5cyBjb21waWxlZCwgb3IgaWYgaXQncyBjb25kaXRpb25hbCBiYXNlZCBvbiBzb21lIG90aGVyIGNvbmZpZ3VyYXRpb24gc2V0dGluZywgZXNwZWNpYWxseSBpZiBJJ20gcGxhbm5pbmcgYW55IG1vZGlmaWNhdGlvbnMuIExldCdzIGRpZyBpbnRvIHRoZSBgZHJpdmVycy91c2IvY29yZS9NYWtlZmlsZWAgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBydWxlcyB0ZWxsIG1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU5MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA3OjE5LjQ3NTY1MDc0NVoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMDk1NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmljZXMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGU9MTA9dXNiY29yZS15ICs9IGNvbmZpZy5vIGZpbGUubyBidWZmZXIubyBzeXNmcy5vIGVuZHBvaW50Lm9cXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlOjExOnVzYmNvcmUteSArPSBkZXZpby5vIG5vdGlmeS5vIGdlbmVyaWMubyBxdWlya3MubyBkZXZpY2VzLm9cXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlLTEyLXVzYmNvcmUteSArPSBwaHkubyBwb3J0Lm8gdHJhY2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNzoxOS42Mzc3NTY5MTVaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzgwODQ3OTUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRoaXMgUGF0Y2g6IE15IEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiWWVzLCBpdCdzIGRlZmluaXRlbHkgY29tcGlsZWQgaWYgYENPTkZJR19VU0JgIGlzIGVuYWJsZWQuXCIgQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHRoaW5nIGFjdHVhbGx5ICp3b3J0aCogZnV6emluZz8gSXQgbG9va3MgbGlrZSBpdCdzIHJlcGxhY2luZyBgX19nZXRfZnJlZV9wYWdlc2Agd2l0aCBga21hbGxvY2AgYW5kIGBnZXRfemVyb2VkX3BhZ2VgIHdpdGggYGt6YWxsb2NgLiBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYmVjYXVzZSBpdCdzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgdGhlIG1lbW9yeSBhbGxvY2F0b3IuXG5cblRoaXMgY291bGQgZGVmaW5pdGVseSBleHBvc2UgZGlmZmVyZW50IGJ1Z3MhIEZvciBleGFtcGxlLCBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBtaWdodCBiZSBjYXVnaHQgYnkgS0FTQU4gbm93LCBiZWNhdXNlIEtBU0FOIHRyYWNrcyBga21hbGxvY2AgYWxsb2NhdGlvbnMgbW9yZSB0aG9yb3VnaGx5IHRoYW4gcGFnZSBhbGxvY2F0aW9ucywgZGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgY29uZmlnLlxuXG5UaGVuIHRoZXJlJ3MgdGhlIHNpemUgZGlmZmVyZW5jZS4gTGV0IG1lIHNlZS4uLiBgX19nZXRfZnJlZV9wYWdlcyhHRlBfTk9JTywgMSlgIGFsbG9jYXRlcyB0d28gcGFnZXMsIG9yIDgxOTIgYnl0ZXMgb24geDg2LiBXaGlsZSBga21hbGxvYyhQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIDEsIEdGUF9OT0lPKWAgYWxzbyBhbGxvY2F0ZXMgODE5MiBieXRlcy4gYGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKWAgYWxsb2NhdGVzIDQwOTYgYnl0ZXMgYW5kIGBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTClgIGFsc28gYWxsb2NhdGVzIDQwOTYgYnl0ZXMuIFNvLCBzYW1lIHNpemUsIGp1c3QgYSBkaWZmZXJlbnQgYWxsb2NhdG9yLlxuXG5Pa2F5LCBzbyB0aGUgYm90dG9tIGxpbmU6IEkgdGhpbmsgaXQgKmlzKiB3b3J0aCBmdXp6aW5nLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCB0aGUgY29kZSBwYXRoIGlzIHJlYWNoYWJsZS5cblxuTm93LCBsZXQncyBmaWd1cmUgb3V0IHdoYXQgc3ltYm9scyB0byBmb2N1cyBvbi4gSSBzZWUgYHVzYl9kZXZpY2VfZHVtcGAsIGBmaWxsX2J1ZmZlcmAsIGFuZCBgZGVidWdfY2xvc2VgLlxuXG5XYWl0LCBhcmUgdGhvc2Ugc3ltYm9scy4uLiBBaCwgYGZpbGxfYnVmZmVyYCBhbmQgYGRlYnVnX2Nsb3NlYCBhcmUgc3RhdGljIGZ1bmN0aW9ucyBpbiBgb2hjaS1kYmcuY2AuIEFuZCBgdXNiX2RldmljZV9kdW1wYCBpcyBpbiBgZGV2aWNlcy5jYC4gSG1tLCBjYW4gSSB1c2Ugc3RhdGljIGZ1bmN0aW9ucyBhcyBmb2N1cyBzeW1ib2xzPyBZZXMsIHN5emthbGxlciBjYW4gdXNlIHN0YXRpYyBmdW5jdGlvbnMsIHNvIHRoYXQncyBmaW5lLiBCdXQgYGZpbGxfYnVmZmVyYCBpcyBhIHByZXR0eSBnZW5lcmljIG5hbWUuIE1heWJlIHNvbWV0aGluZyBsaWtlIGBkZWJ1Z19vdXRwdXRgIGZyb20gYG9oY2ktZGJnLmNgIHdvdWxkIGJlIGJldHRlcj8gSSBzaG91bGQgZG91YmxlIGNoZWNrIGBvaGNpLWRiZy5jYCB0aG91Z2gsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDc6MjcuNDQ2MjM5MTY0WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIzNjEyNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsbF9idWZmZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYz02NjU9c3RhdGljIHN0cnVjdCBkZWJ1Z19idWZmZXIgKmFsbG9jX2J1ZmZlcihzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksXFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNjgwLVxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYzo2ODE6c3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTY4Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM9NzA0PXN0YXRpYyBzc2l6ZV90IGRlYnVnX291dHB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTcxMS1cXHRpZiAoYnVmLVxcdTAwM2Vjb3VudCA9PSAwKSB7XFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jOjcxMjpcXHRcXHRyZXQgPSBmaWxsX2J1ZmZlcihidWYpO1xcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy03MTMtXFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA3OjI3LjU1ODYwODAzOFoiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjM0NTA4MzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgdXNiX2RldmljZV9kdW1wYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgY2hlY2sgYHVzYl9kZXZpY2VfZHVtcGAuXCIgVGhpcyBzdWdnZXN0cyBJJ20gYWxyZWFkeSBkZWVwIGludG8gdHJvdWJsZXNob290aW5nIG9yIGFuYWx5c2lzIG9mIGEgVVNCLXJlbGF0ZWQgaXNzdWUsIGFuZCBteSBpbnR1aXRpb24gcG9pbnRzIG1lIHRvd2FyZHMgdGhhdCBwYXJ0aWN1bGFyIHV0aWxpdHkuIEl0J3MgbGlrZWx5IGEgZGVidWdnaW5nIHRvb2wsIGEgc2NyaXB0LCBvciBhIHNwZWNpZmljIGZ1bmN0aW9uIHdpdGhpbiBhIGxhcmdlciBVU0IgbWFuYWdlbWVudCBzeXN0ZW0uIEknbSBwcm9iYWJseSBsb29raW5nIGZvciBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgYSBzcGVjaWZpYyBVU0IgZGV2aWNlJ3Mgc3RhdGUsIGNvbmZpZ3VyYXRpb24sIG9yIHBvdGVudGlhbGx5IGV2ZW4gaXRzIGNvbW11bmljYXRpb24gbG9ncy4gVGhpcyBpcyB1c3VhbGx5IHRoZSBnby10byB3aGVuIEknbSBjaGFzaW5nIGRvd24gZHJpdmVyIHByb2JsZW1zLCBidXMgZXJyb3JzLCBvciBkaXNjcmVwYW5jaWVzIGluIGRldmljZSBlbnVtZXJhdGlvbi4gSXQncyB0aGUgZmlyc3QgcGxhY2UgSSdkIGxvb2sgZm9yIGxvdy1sZXZlbCBkZXRhaWxzIGFib3V0IHRoZSBkZXZpY2UgSSdtIHRyb3VibGVzaG9vdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxMDAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNzozMi43OTMxMTk0NjJaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTY0NDYwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2JfZGV2aWNlX2R1bXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM9MzY1PXN0YXRpYyBjaGFyICp1c2JfZHVtcF9kZXNjKGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy0zOTAtICovXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM6MzkxOnN0YXRpYyBzc2l6ZV90IHVzYl9kZXZpY2VfZHVtcChjaGFyIF9fdXNlciAqKmJ1ZmZlciwgc2l6ZV90ICpuYnl0ZXMsXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtMzkyLVxcdFxcdFxcdCAgICAgICBsb2ZmX3QgKnNraXBfYnl0ZXMsIGxvZmZfdCAqZmlsZV9vZmZzZXQsXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy00OTgtXFx0XFx0dXNiX2xvY2tfZGV2aWNlKGNoaWxkZGV2KTtcXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYzo0OTk6XFx0XFx0cmV0ID0gdXNiX2RldmljZV9kdW1wKGJ1ZmZlciwgbmJ5dGVzLCBza2lwX2J5dGVzLFxcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jLTUwMC1cXHRcXHRcXHRcXHQgICAgICBmaWxlX29mZnNldCwgY2hpbGRkZXYsIGJ1cyxcXG4tLVxcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jPTUxMD1zdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy01MjktXFx0XFx0dXNiX2xvY2tfZGV2aWNlKGJ1cy1cXHUwMDNlcm9vdF9odWIpO1xcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jOjUzMDpcXHRcXHRyZXQgPSB1c2JfZGV2aWNlX2R1bXAoXFx1MDAyNmJ1ZiwgXFx1MDAyNm5ieXRlcywgXFx1MDAyNnNraXBfYnl0ZXMsIHBwb3MsXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTMxLVxcdFxcdFxcdFxcdCAgICAgIGJ1cy1cXHUwMDNlcm9vdF9odWIsIGJ1cywgMCwgMCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA3OjMyLjk0NDc2ODUwM1oiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTgzNDUyMTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRnVuY3Rpb24gTmFtZSBDb25mbGljdHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGZ1bmN0aW9ucyB3ZSdyZSBkZWFsaW5nIHdpdGggZm9yIHRoaXMgZGVidWdnaW5nIHNjZW5hcmlvLiBSaWdodCBub3csIEknbSB6ZXJvaW5nIGluIG9uIGB1c2JfZGV2aWNlX2R1bXBgLCB3aGljaCBzZWVtcyBwcmV0dHkgc3BlY2lmaWMuIEhvd2V2ZXIsIEknbSBhIGxpdHRsZSBjb25jZXJuZWQgYWJvdXQgYGZpbGxfYnVmZmVyYCBhbmQgYGRlYnVnX2Nsb3NlYC4gVGhvc2UgYXJlICpleHRyZW1lbHkqIGNvbW1vbiBuYW1lcy4gQW5kLCBnaXZlbiB0aGF0IHdlJ3JlIHRhcmdldGluZyBzeXprYWxsZXIgZm9yIGZ1enppbmcsIEkgbmVlZCB0byBiZSBjYXV0aW91cyBhYm91dCBwb3RlbnRpYWwgbmFtaW5nIGNvbmZsaWN0cy4gSWYgdGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIHRoZSB0b29sIG1pZ2h0IGluYWR2ZXJ0ZW50bHkgbWF0Y2ggb3RoZXIgZnVuY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZXMgaW4gdW5yZWxhdGVkIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoYXQgY291bGQgbGVhZCB0byBzb21lIHNlcmlvdXNseSBtaXNsZWFkaW5nIHJlc3VsdHMsIG9yIHdvcnNlLCB0cmlnZ2VyIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaG93IHVuaXF1ZSB0aGVzZSBuYW1lcyByZWFsbHkgYXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBvbmx5IGRlYWxpbmcgd2l0aCAqbXkqIGBmaWxsX2J1ZmZlcmAgYW5kICpteSogYGRlYnVnX2Nsb3NlYC4gVGltZSB0byBnbyBodW50aW5nIGZvciBvdGhlciBpbnN0YW5jZXMgb2YgdGhvc2UgZnVuY3Rpb24gbmFtZXMgdGhyb3VnaG91dCB0aGUga2VybmVsIHNvdXJjZSBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgY2xlYXJseSBkZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDcwMSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA3OjM3LjUyODIyNTc5NloiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI1MTA1ODc4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW50IGZpbGxfYnVmZmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9mb3RnMjEwL2ZvdGcyMTAtaGNkLmM9NzM2PXN0YXRpYyBzdHJ1Y3QgZGVidWdfYnVmZmVyXFxuLS1cXG5kcml2ZXJzL3VzYi9mb3RnMjEwL2ZvdGcyMTAtaGNkLmMtNzUyLVxcbmRyaXZlcnMvdXNiL2ZvdGcyMTAvZm90ZzIxMC1oY2QuYzo3NTM6c3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXFxuZHJpdmVycy91c2IvZm90ZzIxMC9mb3RnMjEwLWhjZC5jLTc1NC17XFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmM9OTE1PXN0YXRpYyBzdHJ1Y3QgZGVidWdfYnVmZmVyICphbGxvY19idWZmZXIoc3RydWN0IHVzYl9idXMgKmJ1cyxcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYy05MzEtXFxuZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jOjkzMjpzdGF0aWMgaW50IGZpbGxfYnVmZmVyKHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZilcXG5kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMtOTMzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYz02NjU9c3RhdGljIHN0cnVjdCBkZWJ1Z19idWZmZXIgKmFsbG9jX2J1ZmZlcihzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksXFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNjgwLVxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYzo2ODE6c3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTY4Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA3OjQwLjc3OTI5MDYxWiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNzc4ODg4ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBmaWxsX2J1ZmZlcmAgaXMgcHJlc2VudCBub3QganVzdCB3aGVyZSBJIGluaXRpYWxseSBzdXNwZWN0ZWQsIGJ1dCBhbHNvIGluIGBlaGNpLWRiZy5jYCBhbmQgYGZvdGcyMTAtaGNkLmNgLiBUaGF0J3MgaW1wb3J0YW50IHRvIG5vdGUgZm9yIGZ1enppbmcgcHVycG9zZXMuXG5cbioqQ29uc2lkZXJpbmcgVGFyZ2V0IFNjb3BlIGZvciBGdXp6aW5nKipcblxuSWYgSSBqdXN0IHRhcmdldCBgZmlsbF9idWZmZXJgIGRpcmVjdGx5LCBJJ2xsIGJlIGhpdHRpbmcgdGhvc2UgKm90aGVyKiBmaWxlcyB0b28uIFRoYXQncyBwb3RlbnRpYWxseSBmaW5lLCBkZXBlbmRpbmcgb24gd2hhdCBJIHdhbnQgdG8gYWNjb21wbGlzaCwgb3IgcGVyaGFwcyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGRvd25zdHJlYW0gZWZmZWN0cywgbGlrZSB0aGUgY29tcGxleGl0eSBpbnRyb2R1Y2VkLiBBbHRlcm5hdGl2ZWx5LCBJJ3ZlIGdvdCBhbm90aGVyIG9wdGlvbiB0aGF0IG1pZ2h0IGJlIG1vcmUgdGFyZ2V0ZWQ6IEkgc2VlIHRoYXQgYGRlYnVnX291dHB1dGAgY2FsbHMgYGZpbGxfYnVmZmVyYC4gU28sIEknbSB0aGlua2luZyBJIGNhbiBzcGVjaWZ5IGBkZWJ1Z19vdXRwdXRgIGluc3RlYWQuIFRoaXMgbGlrZWx5IGxpbWl0cyB0aGUgZnV6emluZyB0byAqb25seSogd2hlcmUgYGRlYnVnX291dHB1dGAgaXMgdXNlZCwgd2hpY2ggY2FsbHMgdGhlIHRoaW5nIEknbSBhY3R1YWxseSBpbnRlcmVzdGVkIGluLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgYGRlYnVnX291dHB1dGAgZXhpc3RzIGluIGBvaGNpLWRiZy5jYCB0byBnZXQgYSBtb3JlIGNvbmNyZXRlIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBpdCBsb29rcyBsaWtlIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM4MSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA3OjQ1Ljg1NzE4MzI1M1oiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY4OTIyMDk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgc3NpemVfdCBkZWJ1Z19vdXRwdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rZXJuZWwvZGVidWcuYz03MD1zdGF0aWMgaW50IGRlYnVnX2luaXQodm9pZCk7XFxuYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jOjcxOnN0YXRpYyBzc2l6ZV90IGRlYnVnX291dHB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxcbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYy03Mi1cXHRcXHRcXHQgICAgc2l6ZV90IHVzZXJfbGVuLCBsb2ZmX3QgKm9mZnNldCk7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmM9NjIxPXN0YXRpYyBib29sIGRlYnVnX21vdmVfZW50cnkoZmlsZV9wcml2YXRlX2luZm9fdCAqcF9pbmZvLCBib29sIHJldmVyc2UpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMtNjMzLSAqL1xcbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYzo2MzQ6c3RhdGljIHNzaXplX3QgZGVidWdfb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLFxcdFxcdC8qIGZpbGUgZGVzY3JpcHRvciAqL1xcbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYy02MzUtXFx0XFx0XFx0ICAgIGNoYXIgX191c2VyICp1c2VyX2J1ZixcXHQvKiB1c2VyIGJ1ZmZlciAqL1xcbi0tXFxuZHJpdmVycy91c2IvZm90ZzIxMC9mb3RnMjEwLWhjZC5jPTI4ND1zdGF0aWMgaW50IGRlYnVnX2FzeW5jX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopO1xcbmRyaXZlcnMvdXNiL2ZvdGcyMTAvZm90ZzIxMC1oY2QuYy0yODUtXFxuZHJpdmVycy91c2IvZm90ZzIxMC9mb3RnMjEwLWhjZC5jOjI4NjpzdGF0aWMgc3NpemVfdCBkZWJ1Z19vdXRwdXQoc3RydWN0IGZpbGUqLCBjaGFyIF9fdXNlciosIHNpemVfdCwgbG9mZl90Kik7XFxuZHJpdmVycy91c2IvZm90ZzIxMC9mb3RnMjEwLWhjZC5jLTI4Ny1zdGF0aWMgaW50IGRlYnVnX2Nsb3NlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2ZvdGcyMTAvZm90ZzIxMC1oY2QuYz03NTM9c3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXFxuLS1cXG5kcml2ZXJzL3VzYi9mb3RnMjEwL2ZvdGcyMTAtaGNkLmMtNzc1LVxcbmRyaXZlcnMvdXNiL2ZvdGcyMTAvZm90ZzIxMC1oY2QuYzo3NzY6c3RhdGljIHNzaXplX3QgZGVidWdfb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsXFxuZHJpdmVycy91c2IvZm90ZzIxMC9mb3RnMjEwLWhjZC5jLTc3Ny1cXHRcXHRzaXplX3QgbGVuLCBsb2ZmX3QgKm9mZnNldClcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYz0yOTQ9c3RhdGljIGludCBkZWJ1Z19yZWdpc3RlcnNfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7XFxuZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jLTI5NS1cXG5kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmM6Mjk2OnN0YXRpYyBzc2l6ZV90IGRlYnVnX291dHB1dChzdHJ1Y3QgZmlsZSosIGNoYXIgX191c2VyKiwgc2l6ZV90LCBsb2ZmX3QqKTtcXG5kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMtMjk3LXN0YXRpYyBpbnQgZGVidWdfY2xvc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopO1xcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jPTkzMj1zdGF0aWMgaW50IGZpbGxfYnVmZmVyKHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYy05NTQtXFxuZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jOjk1NTpzdGF0aWMgc3NpemVfdCBkZWJ1Z19vdXRwdXQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZixcXG5kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMtOTU2LVxcdFxcdHNpemVfdCBsZW4sIGxvZmZfdCAqb2Zmc2V0KVxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jPTM2Mz1zdGF0aWMgaW50IGRlYnVnX2FzeW5jX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopO1xcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYzozNjQ6c3RhdGljIHNzaXplX3QgZGVidWdfb3V0cHV0KHN0cnVjdCBmaWxlKiwgY2hhciBfX3VzZXIqLCBzaXplX3QsIGxvZmZfdCopO1xcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy0zNjUtc3RhdGljIGludCBkZWJ1Z19jbG9zZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7XFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM9NjgxPXN0YXRpYyBpbnQgZmlsbF9idWZmZXIoc3RydWN0IGRlYnVnX2J1ZmZlciAqYnVmKVxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTcwMy1cXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM6NzA0OnN0YXRpYyBzc2l6ZV90IGRlYnVnX291dHB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy03MDUtXFx0XFx0XFx0c2l6ZV90IGxlbiwgbG9mZl90ICpvZmZzZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA3OjQ5LjU0NjQxMDgzMVoiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDU4MzMzNjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFwcHJvYWNoIHRvIERlYnVnZ2luZyB0aGUgVVNCIFN5c3RlbSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBJIGNhbiBzdHJlYW1saW5lIHRoaXMgZGVidWdnaW5nIHByb2Nlc3MuIEknbGwganVzdCBsZXZlcmFnZSBgZmlsbF9idWZmZXJgIGFuZCBgZGVidWdfY2xvc2VgLiBJdCdzIG5vdCBhIGNvbmNlcm4gaWYgSSBoYXBwZW4gdG8gaGl0IHRoZSBFSENJIGFuZCBGT1RHMjEwIGluc3RhbmNlcyB3aXRoIHRob3NlLCBhcyB0aGVpciBkZWJ1Z2ZzIGZpbGVzIGFyZSBwcmV0dHkgc2ltaWxhciBhbnl3YXkuIFxuXG5Ib3dldmVyLCBgdXNiX2RldmljZV9kdW1wYCDigJMgdGhhdCBvbmUgaXMgdW5pcXVlLiBJdCdzIHRoZSBrZXkgaGVyZS5cblxuU28sIHRoZSBjcml0aWNhbCBzeW1ib2xzIEknbSB0YXJnZXRpbmcgYXJlOiBgdXNiX2RldmljZV9kdW1wYCwgYGZpbGxfYnVmZmVyYCwgYW5kIGBkZWJ1Z19jbG9zZWAuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYHVzYl9kZXZpY2VfZHVtcGAgaXMgaW5kZWVkIHVuaXF1ZSBpbiB0aGlzIGNvbnRleHQuIEl0J3Mgd29ydGggYSBzZWNvbmQgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3NTgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDc6NTMuMDA0NzQ4ODUyWiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgwMzE0MjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYl9kZXZpY2VfZHVtcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM9MzY1PXN0YXRpYyBjaGFyICp1c2JfZHVtcF9kZXNjKGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy0zOTAtICovXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM6MzkxOnN0YXRpYyBzc2l6ZV90IHVzYl9kZXZpY2VfZHVtcChjaGFyIF9fdXNlciAqKmJ1ZmZlciwgc2l6ZV90ICpuYnl0ZXMsXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtMzkyLVxcdFxcdFxcdCAgICAgICBsb2ZmX3QgKnNraXBfYnl0ZXMsIGxvZmZfdCAqZmlsZV9vZmZzZXQsXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy00OTgtXFx0XFx0dXNiX2xvY2tfZGV2aWNlKGNoaWxkZGV2KTtcXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYzo0OTk6XFx0XFx0cmV0ID0gdXNiX2RldmljZV9kdW1wKGJ1ZmZlciwgbmJ5dGVzLCBza2lwX2J5dGVzLFxcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jLTUwMC1cXHRcXHRcXHRcXHQgICAgICBmaWxlX29mZnNldCwgY2hpbGRkZXYsIGJ1cyxcXG4tLVxcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jPTUxMD1zdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy01MjktXFx0XFx0dXNiX2xvY2tfZGV2aWNlKGJ1cy1cXHUwMDNlcm9vdF9odWIpO1xcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jOjUzMDpcXHRcXHRyZXQgPSB1c2JfZGV2aWNlX2R1bXAoXFx1MDAyNmJ1ZiwgXFx1MDAyNm5ieXRlcywgXFx1MDAyNnNraXBfYnl0ZXMsIHBwb3MsXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTMxLVxcdFxcdFxcdFxcdCAgICAgIGJ1cy1cXHUwMDNlcm9vdF9odWIsIGJ1cywgMCwgMCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA3OjU3Ljc4NTI0OTQ3NFoiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDA1MDI4MTE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEl0J3MgbWFraW5nIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIHN3YXBwaW5nIHBhZ2UgYWxsb2NhdG9yIGNhbGxzIChgX19nZXRfZnJlZV9wYWdlc2AsIGBnZXRfemVyb2VkX3BhZ2VgKSB3aXRoIHNsYWIgYWxsb2NhdG9yIGNhbGxzIChga21hbGxvY2AsIGBremFsbG9jYCkuIFRoYXQncyBpbW1lZGlhdGVseSBhIHJlZCBmbGFnLCBpbiBhIGdvb2Qgd2F5LCBmb3IgZnV6emluZyBwb3RlbnRpYWwuIEl0J3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gbWVtb3J5IGFsbG9jYXRpb24sIHdoaWNoIG1lYW5zIHdlIGNvdWxkIHVuY292ZXIgc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgdGhhdCB3ZXJlbid0IGRldGVjdGFibGUgYmVmb3JlLiBLQVNBTiwgZm9yIGluc3RhbmNlLCBtaWdodCBiZSBhYmxlIHRvIGNhdGNoIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgbm93IHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIHNsYWIgb2JqZWN0cyBtb3JlIGNvbnNpc3RlbnRseS5cblxuTGV0IG1lIHF1aWNrbHkgZW5zdXJlIEknbSBnZXR0aW5nIHRoZSByaWdodCBjb25maWd1cmF0aW9ucy4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYFVTQl9PSENJX0hDRGAgYW5kIGBVU0JfT0hDSV9IQ0RfUENJYCBhcmUgdGhlIHJpZ2h0IG9uZXMuIGBVU0JfT0hDSV9IQ0RgIGlzIHRoZSBjb3JlLCBhbmQgSSdsbCBkZWZpbml0ZWx5IGluY2x1ZGUgaXQuICBUaGVuIHRoZXJlJ3MgYFVTQl9PSENJX0hDRF9QQ0lgLiBJdCBzZWVtcyBsaWtlIFFFTVUgcHJvdmlkZXMgYSBgcGNpLW9oY2lgIG9wdGlvbiwgc28gaW5jbHVkaW5nIGBVU0JfT0hDSV9IQ0RfUENJYCBnaXZlcyB1cyB0aGUgYXBwcm9wcmlhdGUgaGFyZHdhcmUgdG8gdGVzdC4gSXQncyBhbHNvIHdvcnRoIG5vdGluZyB0aGUgdHJpc3RhdGUgbmF0dXJlIG9mIGBVU0JfT0hDSV9IQ0RgLCBqdXN0IGluIGNhc2UuIEFsc28sIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYFVTQmAgYW5kIGBERUJVR19GU2AgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC5cblxuVGhlIHBhdGNoJ3MgbW9kaWZpY2F0aW9ucyBhcmUgd2l0aGluIGB1c2JfZGV2aWNlX2R1bXBgLCBgZmlsbF9idWZmZXJgLCBhbmQgYGRlYnVnX2Nsb3NlYC4gU3BlY2lmaWNhbGx5LCB3aXRoaW4gdGhlIE9IQ0kgZGVidWdmcyBjb2RlLiBUaGUgY29kZSBpdHNlbGYgaXMgcmVhY2hhYmxlIGluIFFFTVUsIHRocm91Z2ggYC9zeXMva2VybmVsL2RlYnVnL3VzYi9kZXZpY2VzYCBhbmQgc2ltaWxhciBkZWJ1Z2ZzIGZpbGVzLiBUaGlzIGNoYW5nZSBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBpbiBvdXIgdGVzdGluZyBlbnZpcm9ubWVudC5cblxuSSdtIHJldmlld2luZyB0aGUgcnVsZXMgYWdhaW4gdG8gY29uZmlybSBpZiB0aGlzIHBhdGNoIG1lZXRzIHRoZSBjcml0ZXJpYSBmb3IgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIi4gTm8sIGl0IGRvZXNuJ3QuIFRoaXMgaXNuJ3QganVzdCBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIG9yIGRlY29yYXRpdmUgbG9nZ2luZywgbm9yIGlzIGl0IGEgbWlub3IgbnVtZXJpYyBjb25zdGFudCBjaGFuZ2UuIFRoaXMgaXMgYSBsZWdpdGltYXRlIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIG1lbW9yeSBhbGxvY2F0aW9uLiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkFuZCBqdXN0IHRvIGJlIGV4dHJhIHRob3JvdWdoLCBJJ2xsIGFsc28gYWRkIGBVU0JfT0hDSV9IQ0RfUExBVEZPUk1gIHNpbmNlIFFFTVUgc3VwcG9ydHMgdGhlIGBzeXNidXMtb2hjaWAgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0MTksIk91dHB1dFRva2VucyI6MTg3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA4OjA3LjgzNTUzMzYwN1oiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDQ4NTIyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX09IQ0lfSENEXCIsXG4gICAgXCJVU0JfT0hDSV9IQ0RfUENJXCIsXG4gICAgXCJVU0JfT0hDSV9IQ0RfUExBVEZPUk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2JfZGV2aWNlX2R1bXBcIixcbiAgICBcImZpbGxfYnVmZmVyXCIsXG4gICAgXCJkZWJ1Z19jbG9zZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHBhZ2UgYWxsb2NhdG9yIGNhbGxzIChfX2dldF9mcmVlX3BhZ2VzLCBnZXRfemVyb2VkX3BhZ2UpIHdpdGggc2xhYiBhbGxvY2F0b3IgY2FsbHMgKGttYWxsb2MsIGt6YWxsb2MpIGluIFVTQiBkZXZpY2UgZHVtcCBhbmQgT0hDSSBkZWJ1Z2ZzIGNvZGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBhbmQgY2FuIHBvdGVudGlhbGx5IGV4cG9zZSBkaWZmZXJlbnQgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAoZS5nLiwgS0FTQU4gY2FuIGJldHRlciBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvbiBzbGFiIG9iamVjdHMpLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIC9zeXMva2VybmVsL2RlYnVnL3VzYi9kZXZpY2VzIGFuZCBPSENJIGRlYnVnZnMgZmlsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX09IQ0lfSENEXCIsXG4gICAgXCJVU0JfT0hDSV9IQ0RfUENJXCIsXG4gICAgXCJVU0JfT0hDSV9IQ0RfUExBVEZPUk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2JfZGV2aWNlX2R1bXBcIixcbiAgICBcImZpbGxfYnVmZmVyXCIsXG4gICAgXCJkZWJ1Z19jbG9zZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHBhZ2UgYWxsb2NhdG9yIGNhbGxzIChfX2dldF9mcmVlX3BhZ2VzLCBnZXRfemVyb2VkX3BhZ2UpIHdpdGggc2xhYiBhbGxvY2F0b3IgY2FsbHMgKGttYWxsb2MsIGt6YWxsb2MpIGluIFVTQiBkZXZpY2UgZHVtcCBhbmQgT0hDSSBkZWJ1Z2ZzIGNvZGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBhbmQgY2FuIHBvdGVudGlhbGx5IGV4cG9zZSBkaWZmZXJlbnQgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAoZS5nLiwgS0FTQU4gY2FuIGJldHRlciBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvbiBzbGFiIG9iamVjdHMpLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIC9zeXMva2VybmVsL2RlYnVnL3VzYi9kZXZpY2VzIGFuZCBPSENJIGRlYnVnZnMgZmlsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqrpps[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 15:56:25 +0000 UTC FinishedAt: 2026-07-01 16:08:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_OHCI_HCD", "USB_OHCI_HCD_PCI", "USB_OHCI_HCD_PLATFORM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_OHCI_HCD", "USB_OHCI_HCD_PCI", "USB_OHCI_HCD_PLATFORM" ], "series_id": "cd22e6b5-7a29-417f-a9ad-b146e2f0dac9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "usb_device_dump", "fill_buffer", "debug_close" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9PSENJX0hDRCYjMzQ7LAogICAgJiMzNDtVU0JfT0hDSV9IQ0RfUENJJiMzNDssCiAgICAmIzM0O1VTQl9PSENJX0hDRF9QTEFURk9STSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYl9kZXZpY2VfZHVtcCYjMzQ7LAogICAgJiMzNDtmaWxsX2J1ZmZlciYjMzQ7LAogICAgJiMzNDtkZWJ1Z19jbG9zZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwYWdlIGFsbG9jYXRvciBjYWxscyAoX19nZXRfZnJlZV9wYWdlcywgZ2V0X3plcm9lZF9wYWdlKSB3aXRoIHNsYWIgYWxsb2NhdG9yIGNhbGxzIChrbWFsbG9jLCBremFsbG9jKSBpbiBVU0IgZGV2aWNlIGR1bXAgYW5kIE9IQ0kgZGVidWdmcyBjb2RlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IgYW5kIGNhbiBwb3RlbnRpYWxseSBleHBvc2UgZGlmZmVyZW50IG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKGUuZy4sIEtBU0FOIGNhbiBiZXR0ZXIgZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb24gc2xhYiBvYmplY3RzKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSAvc3lzL2tlcm5lbC9kZWJ1Zy91c2IvZGV2aWNlcyBhbmQgT0hDSSBkZWJ1Z2ZzIGZpbGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWQ4NDMwYWVjM2JmNzk0ODEwNTllNTcxNWU3N2U1Y2I0NmMzZTNmY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMTY6MDU6MjYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuY1xuaW5kZXggYTI0N2RhNzNmMzRkN2QuLjZmMDM1NGFiYTM4YjMzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jXG5AQCAtMzcsNiAmIzQzOzM3LDcgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi5oXHUwMDNlXG5AQCAtNDA4LDcgJiM0Mzs0MDksNyBAQCBzdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX2R1bXAoY2hhciBfX3VzZXIgKipidWZmZXIsIHNpemVfdCAqbmJ5dGVzLFxuIFx0XHRyZXR1cm4gMDtcbiBcdC8qIGFsbG9jYXRlIDJeMSBwYWdlcyA9IDhLIChvbiBpMzg2KTtcbiBcdCAqIHNob3VsZCBiZSBtb3JlIHRoYW4gZW5vdWdoIGZvciBvbmUgZGV2aWNlICovXG4tXHRwYWdlc19zdGFydCA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlcyhHRlBfTk9JTywgMSk7XG4mIzQzO1x0cGFnZXNfc3RhcnQgPSBrbWFsbG9jKFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgMSwgR0ZQX05PSU8pO1xuIFx0aWYgKCFwYWdlc19zdGFydClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtNDc5LDcgJiM0Mzs0ODAsNyBAQCBzdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX2R1bXAoY2hhciBfX3VzZXIgKipidWZmZXIsIHNpemVfdCAqbmJ5dGVzLFxuIFx0XHRpZiAobGVuZ3RoIFx1MDAzZSAqbmJ5dGVzKVxuIFx0XHRcdGxlbmd0aCA9ICpuYnl0ZXM7XG4gXHRcdGlmIChjb3B5X3RvX3VzZXIoKmJ1ZmZlciwgcGFnZXNfc3RhcnQgJiM0MzsgKnNraXBfYnl0ZXMsIGxlbmd0aCkpIHtcbi1cdFx0XHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBhZ2VzX3N0YXJ0LCAxKTtcbiYjNDM7XHRcdFx0a2ZyZWUocGFnZXNfc3RhcnQpO1xuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0XHR9XG4gXHRcdCpuYnl0ZXMgLT0gbGVuZ3RoO1xuQEAgLTQ5MCw3ICYjNDM7NDkxLDcgQEAgc3RhdGljIHNzaXplX3QgdXNiX2RldmljZV9kdW1wKGNoYXIgX191c2VyICoqYnVmZmVyLCBzaXplX3QgKm5ieXRlcyxcbiBcdH0gZWxzZVxuIFx0XHQqc2tpcF9ieXRlcyAtPSBsZW5ndGg7XG4gXG4tXHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBhZ2VzX3N0YXJ0LCAxKTtcbiYjNDM7XHRrZnJlZShwYWdlc19zdGFydCk7XG4gXG4gXHQvKiBOb3cgbG9vayBhdCBhbGwgb2YgdGhpcyBkZXZpY2UmIzM5O3MgY2hpbGRyZW4uICovXG4gXHR1c2JfaHViX2Zvcl9lYWNoX2NoaWxkKHVzYmRldiwgY2hpeCwgY2hpbGRkZXYpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmNcbmluZGV4IDllMGUwNmJiYzU3MDYxLi4yM2RjOWVkZGMwNmM0NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jXG5AQCAtNjgzLDcgJiM0Mzs2ODMsNyBAQCBzdGF0aWMgaW50IGZpbGxfYnVmZmVyKHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZilcbiBcdGludCByZXQ7XG4gXG4gXHRpZiAoIWJ1Zi1cdTAwM2VwYWdlKVxuLVx0XHRidWYtXHUwMDNlcGFnZSA9IChjaGFyICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpO1xuJiM0MztcdFx0YnVmLVx1MDAzZXBhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4gXG4gXHRpZiAoIWJ1Zi1cdTAwM2VwYWdlKSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG5AQCAtNzI5LDExICYjNDM7NzI5LDggQEAgc3RhdGljIGludCBkZWJ1Z19jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4gXHRzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcbi1cdGlmIChidWYpIHtcbi1cdFx0aWYgKGJ1Zi1cdTAwM2VwYWdlKVxuLVx0XHRcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWYtXHUwMDNlcGFnZSk7XG4tXHRcdGtmcmVlKGJ1Zik7XG4tXHR9XG4mIzQzO1x0a2ZyZWUoYnVmLVx1MDAzZXBhZ2UpO1xuJiM0MztcdGtmcmVlKGJ1Zik7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX09IQ0lfSENEJiMzNDssCiAgICAmIzM0O1VTQl9PSENJX0hDRF9QQ0kmIzM0OywKICAgICYjMzQ7VVNCX09IQ0lfSENEX1BMQVRGT1JNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNiX2RldmljZV9kdW1wJiMzNDssCiAgICAmIzM0O2ZpbGxfYnVmZmVyJiMzNDssCiAgICAmIzM0O2RlYnVnX2Nsb3NlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHBhZ2UgYWxsb2NhdG9yIGNhbGxzIChfX2dldF9mcmVlX3BhZ2VzLCBnZXRfemVyb2VkX3BhZ2UpIHdpdGggc2xhYiBhbGxvY2F0b3IgY2FsbHMgKGttYWxsb2MsIGt6YWxsb2MpIGluIFVTQiBkZXZpY2UgZHVtcCBhbmQgT0hDSSBkZWJ1Z2ZzIGNvZGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBhbmQgY2FuIHBvdGVudGlhbGx5IGV4cG9zZSBkaWZmZXJlbnQgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAoZS5nLiwgS0FTQU4gY2FuIGJldHRlciBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvbiBzbGFiIG9iamVjdHMpLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIC9zeXMva2VybmVsL2RlYnVnL3VzYi9kZXZpY2VzIGFuZCBPSENJIGRlYnVnZnMgZmlsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDlkODQzMGFlYzNiZjc5NDgxMDU5ZTU3MTVlNzdlNWNiNDZjM2UzZmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxIDE2OjA1OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYwppbmRleCBhMjQ3ZGE3M2YzNGQ3ZC4uNmYwMzU0YWJhMzhiMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jCkBAIC0zNyw2ICYjNDM7MzcsNyBAQAogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9mcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9nZnAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91c2IuaCZndDsKQEAgLTQwOCw3ICYjNDM7NDA5LDcgQEAgc3RhdGljIHNzaXplX3QgdXNiX2RldmljZV9kdW1wKGNoYXIgX191c2VyICoqYnVmZmVyLCBzaXplX3QgKm5ieXRlcywKIAkJcmV0dXJuIDA7CiAJLyogYWxsb2NhdGUgMl4xIHBhZ2VzID0gOEsgKG9uIGkzODYpOwogCSAqIHNob3VsZCBiZSBtb3JlIHRoYW4gZW5vdWdoIGZvciBvbmUgZGV2aWNlICovCi0JcGFnZXNfc3RhcnQgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX05PSU8sIDEpOwomIzQzOwlwYWdlc19zdGFydCA9IGttYWxsb2MoUEFHRV9TSVpFICZsdDsmbHQ7IDEsIEdGUF9OT0lPKTsKIAlpZiAoIXBhZ2VzX3N0YXJ0KQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNDc5LDcgJiM0Mzs0ODAsNyBAQCBzdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX2R1bXAoY2hhciBfX3VzZXIgKipidWZmZXIsIHNpemVfdCAqbmJ5dGVzLAogCQlpZiAobGVuZ3RoICZndDsgKm5ieXRlcykKIAkJCWxlbmd0aCA9ICpuYnl0ZXM7CiAJCWlmIChjb3B5X3RvX3VzZXIoKmJ1ZmZlciwgcGFnZXNfc3RhcnQgJiM0MzsgKnNraXBfYnl0ZXMsIGxlbmd0aCkpIHsKLQkJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcGFnZXNfc3RhcnQsIDEpOwomIzQzOwkJCWtmcmVlKHBhZ2VzX3N0YXJ0KTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CiAJCSpuYnl0ZXMgLT0gbGVuZ3RoOwpAQCAtNDkwLDcgJiM0Mzs0OTEsNyBAQCBzdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX2R1bXAoY2hhciBfX3VzZXIgKipidWZmZXIsIHNpemVfdCAqbmJ5dGVzLAogCX0gZWxzZQogCQkqc2tpcF9ieXRlcyAtPSBsZW5ndGg7CiAKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBhZ2VzX3N0YXJ0LCAxKTsKJiM0MzsJa2ZyZWUocGFnZXNfc3RhcnQpOwogCiAJLyogTm93IGxvb2sgYXQgYWxsIG9mIHRoaXMgZGV2aWNlJiMzOTtzIGNoaWxkcmVuLiAqLwogCXVzYl9odWJfZm9yX2VhY2hfY2hpbGQodXNiZGV2LCBjaGl4LCBjaGlsZGRldikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jCmluZGV4IDllMGUwNmJiYzU3MDYxLi4yM2RjOWVkZGMwNmM0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYwpAQCAtNjgzLDcgJiM0Mzs2ODMsNyBAQCBzdGF0aWMgaW50IGZpbGxfYnVmZmVyKHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZikKIAlpbnQgcmV0OwogCiAJaWYgKCFidWYtJmd0O3BhZ2UpCi0JCWJ1Zi0mZ3Q7cGFnZSA9IChjaGFyICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwomIzQzOwkJYnVmLSZndDtwYWdlID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCiAJaWYgKCFidWYtJmd0O3BhZ2UpIHsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTcyOSwxMSAmIzQzOzcyOSw4IEBAIHN0YXRpYyBpbnQgZGVidWdfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGRlYnVnX2J1ZmZlciAqYnVmID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwogCi0JaWYgKGJ1ZikgewotCQlpZiAoYnVmLSZndDtwYWdlKQotCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1Zi0mZ3Q7cGFnZSk7Ci0JCWtmcmVlKGJ1Zik7Ci0JfQomIzQzOwlrZnJlZShidWYtJmd0O3BhZ2UpOwomIzQzOwlrZnJlZShidWYpOwogCiAJcmV0dXJuIDA7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVVNCIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgbWFraW5nIHNvbWUgbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhlIFVTQiBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdG91Y2hpbmcgYGRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jYCBhbmQgYGRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuY2AuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGV5JiMzOTtyZSByZXBsYWNpbmcgdGhlIGxlZ2FjeSBgX19nZXRfZnJlZV9wYWdlc2AvYGZyZWVfcGFnZXNgIGNhbGxzIHdpdGggYGttYWxsb2NgL2BrZnJlZWAgaW4gdGhlIGB1c2JfZGV2aWNlX2R1bXBgIGZ1bmN0aW9uLCB3aXRoaW4gYGRldmljZXMuY2AsIGFuZCBzd2l0Y2hpbmcgYGdldF96ZXJvZWRfcGFnZWAvYGZyZWVfcGFnZWAgZm9yIGBremFsbG9jYC9ga2ZyZWVgIGluIGBmaWxsX2J1ZmZlcmAgYW5kIGBkZWJ1Z19jbG9zZWAgaW4gYG9oY2ktZGJnLmNgLgoKUmlnaHQgYXdheSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyAqanVzdCogYW4gYWxsb2NhdGlvbiBjaGFuZ2Ugb3IgaWYgdGhlcmUgYXJlIHBvdGVudGlhbCBmdW5jdGlvbmFsIHNpZGUgZWZmZWN0cy4gQ2hhbmdpbmcgcGFnZSBhbGxvY2F0aW9uICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSwgZXZlbiBpZiBzdWJ0bGUuIEl0IGFsdGVycyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciwgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGNsb3NlIHNjcnV0aW55LgoKTm93LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgZnVuY3Rpb25zIGludm9sdmVkOiBgdXNiX2RldmljZV9kdW1wYCwgYGZpbGxfYnVmZmVyYCwgYW5kIGBkZWJ1Z19jbG9zZWAuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gY29uc2lkZXIgZnV6emluZy4gYHVzYl9kZXZpY2VfZHVtcGAgY2F1Z2h0IG15IGV5ZTsgbXkgZ3V0IHRlbGxzIG1lIGl0JiMzOTtzIHVzZWQgd2l0aGluIGEgZmlsZSBvcGVyYXRpb24gbGlrZSBgL3N5cy9rZXJuZWwvZGVidWcvdXNiL2RldmljZXNgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGJ5IGdvaW5nIGJhY2sgaW50byBgZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmNgIGFuZCBzZWUgd2hlcmUgdGhpcyBgdXNiX2RldmljZV9kdW1wYCBmdW5jdGlvbiBnZXRzIHVzZWQuIExldCYjMzk7cyBzZWUgaWYgd2UgY2FuIHRyaWdnZXIgc29tZSBpbnRlcmVzdGluZyBiZWhhdmlvciB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2JfZGV2aWNlX2R1bXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYz0zNjU9c3RhdGljIGNoYXIgKnVzYl9kdW1wX2Rlc2MoY2hhciAqc3RhcnQsIGNoYXIgKmVuZCwgc3RydWN0IHVzYl9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy0zOTAtICovXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYzozOTE6c3RhdGljIHNzaXplX3QgdXNiX2RldmljZV9kdW1wKGNoYXIgX191c2VyICoqYnVmZmVyLCBzaXplX3QgKm5ieXRlcyxcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jLTM5Mi1cdFx0XHQgICAgICAgbG9mZl90ICpza2lwX2J5dGVzLCBsb2ZmX3QgKmZpbGVfb2Zmc2V0LFxuLS1cbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jLTQ5OC1cdFx0dXNiX2xvY2tfZGV2aWNlKGNoaWxkZGV2KTtcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jOjQ5OTpcdFx0cmV0ID0gdXNiX2RldmljZV9kdW1wKGJ1ZmZlciwgbmJ5dGVzLCBza2lwX2J5dGVzLFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTAwLVx0XHRcdFx0ICAgICAgZmlsZV9vZmZzZXQsIGNoaWxkZGV2LCBidXMsXG4tLVxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM9NTEwPXN0YXRpYyBzc2l6ZV90IHVzYl9kZXZpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy01MjktXHRcdHVzYl9sb2NrX2RldmljZShidXMtXHUwMDNlcm9vdF9odWIpO1xuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM6NTMwOlx0XHRyZXQgPSB1c2JfZGV2aWNlX2R1bXAoXHUwMDI2YnVmLCBcdTAwMjZuYnl0ZXMsIFx1MDAyNnNraXBfYnl0ZXMsIHBwb3MsXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy01MzEtXHRcdFx0XHQgICAgICBidXMtXHUwMDNlcm9vdF9odWIsIGJ1cywgMCwgMCwgMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU0MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBgdXNiX2RldmljZV9yZWFkYCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgYHVzYl9kZXZpY2VfcmVhZGAuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBsaWtlbHkgcGVydGFpbnMgdG8gcmVhZGluZyBkYXRhIGZyb20gdGhlIGAvc3lzL2tlcm5lbC9kZWJ1Zy91c2IvZGV2aWNlc2AgZmlsZXN5c3RlbSBlbnRyeS4gVGhhdCYjMzk7cyBhIHByZXR0eSByZWFzb25hYmxlIGFzc3VtcHRpb24gZ2l2ZW4gdGhlIHBhdGguIFRoZSBkZWJ1ZyBmaWxlc3lzdGVtIG9mdGVuIGV4cG9zZXMga2VybmVsIGludGVybmFscyBpbiBhIHVzZXItcmVhZGFibGUgZm9ybWF0LCBhbmQgdGhlIG5hbWUgJiMzNDt1c2IvZGV2aWNlcyYjMzQ7IHN0cm9uZ2x5IHN1Z2dlc3RzIGluZm9ybWF0aW9uIGFib3V0IGF0dGFjaGVkIFVTQiBkZXZpY2VzLiBOb3csIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGVpdGhlciBpbnNwZWN0aW5nIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgZGlyZWN0bHkgaWYgSSBoYXZlIGFjY2Vzcywgb3IgcGVyaGFwcyBncmVwcGluZyB0aHJvdWdoIHRoZSBrZXJuZWwgc291cmNlcyBmb3IgYSBmdW5jdGlvbiB3aXRoIHRoYXQgbmFtZSBhbmQgbG9va2luZyBhdCBpdHMgdXNhZ2UgYW5kIGFzc29jaWF0ZWQgZmlsZXMuIEFsdGVybmF0aXZlbHksIEkgY291bGQgdHJ5IHRvIGZpbmQgZG9jdW1lbnRhdGlvbiB0aGF0IHBvaW50cyBtZSB0byB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlscyByZWxhdGVkIHRvIHRoaXMgZGVidWdmcyBlbnRyeSB0byBzZWUgaWYgdGhhdCBjb25maXJtcyBteSBzdXNwaWNpb24gYW5kIGdpdmVzIG1lIG1vcmUgZGV0YWlscy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKmV4YWN0bHkqIHdoYXQgZGF0YSB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciByZXRyaWV2aW5nIGFuZCBob3cgaXQmIzM5O3MgZm9ybWF0dGVkLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaXRzIHJlbGV2YW5jZSBhbmQgaG93IHRvIGJlc3QgdXNlIGl0IG9yIGJ1aWxkIHVwb24gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNiX2RldmljZV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM9MzkxPXN0YXRpYyBzc2l6ZV90IHVzYl9kZXZpY2VfZHVtcChjaGFyIF9fdXNlciAqKmJ1ZmZlciwgc2l6ZV90ICpuYnl0ZXMsXG4tLVxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTA5LVxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM6NTEwOnN0YXRpYyBzc2l6ZV90IHVzYl9kZXZpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jLTUxMS1cdFx0XHQgICAgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKVxuLS1cbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jPTU0Mz1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYmZzX2RldmljZXNfZm9wcyA9IHtcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jLTU0NC1cdC5sbHNlZWsgPVx0bm9fc2Vla19lbmRfbGxzZWVrLFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM6NTQ1Olx0LnJlYWQgPVx0XHR1c2JfZGV2aWNlX3JlYWQsXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy01NDYtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDk4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlBpbnBvaW50aW5nIHRoZSBVU0JGUyBJc3N1ZSoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgdXNiZnNfZGV2aWNlc19mb3BzYC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBoaW50IOKAkyBpdCBpbW1lZGlhdGVseSB6ZXJvZXMgaW4gb24gdGhlIHVzZXJzcGFjZSBmaWxlc3lzdGVtIGludGVyZmFjZSBmb3IgVVNCIGRldmljZXMuIFRoYXQgcG9pbnRzIGRpcmVjdGx5IHRvIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZS4gTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBmaW5kIHNvbWV0aGluZyB0aGF0JiMzOTtzIGNvbm5lY3RlZCB0byB0aGlzIHdpdGhpbiB0aGUgY29kZS4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gdGhlIGRlYnVnZ2luZyB0b29scy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGhhdmUgb24gYGRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuY2AuIFRoaXMgaXMgYSBsb3ctbGV2ZWwgaG9zdCBjb250cm9sbGVyIGRyaXZlci4gSXQmIzM5O3Mgb2Z0ZW4gdGhlIHBsYWNlIHdoZXJlIHdlIGZpbmQgZGV0YWlsZWQgbG9nZ2luZyBhbmQgcG90ZW50aWFsbHkgZXJyb3IgY29uZGl0aW9ucyByZWxhdGVkIHRvIFVTQiB0cmFuc2ZlcnMuIE9mdGVuIGl0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCB3aGVuIHRoZXJlIGFyZSBpc3N1ZXMgYXQgdGhlIGludGVyc2VjdGlvbiBvZiBhIGRyaXZlciBhbmQgYSBmaWxlc3lzdGVtIGludGVyZmFjZSwgZXNwZWNpYWxseSBzaW5jZSBgdXNiZnNgIGlzbiYjMzk7dCB2ZXJ5IGhlbHBmdWwgZm9yIGRpYWdub3NpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gZGV2aWNlIGNvbW11bmljYXRpb24uIExldCYjMzk7cyBzdGFydCB3aXRoIHRoaXMgYW5kIHNlZSB3aGF0IHdlIGNhbiB0dXJuIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbGxfYnVmZmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYz02NjU9c3RhdGljIHN0cnVjdCBkZWJ1Z19idWZmZXIgKmFsbG9jX2J1ZmZlcihzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksXG4tLVxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTY4MC1cbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYzo2ODE6c3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNjgyLXtcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM9NzA0PXN0YXRpYyBzc2l6ZV90IGRlYnVnX291dHB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxuLS1cbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy03MTEtXHRpZiAoYnVmLVx1MDAzZWNvdW50ID09IDApIHtcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYzo3MTI6XHRcdHJldCA9IGZpbGxfYnVmZmVyKGJ1Zik7XG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNzEzLVx0XHRpZiAocmV0ICE9IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjMwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgV29ydGhpbmVzcyBvZiBGdXp6aW5nIGEgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIGBmaWxsX2J1ZmZlcmAgaXMgY2FsbGVkIGZyb20gYGRlYnVnX291dHB1dGAgaW4gdGhlIG9oY2kgZHJpdmVyIOKAkyB0aGF0JiMzOTtzIGEgZGVidWdmcyBmaWxlLiBIbW0sIGFyZSB0aG9zZSBkZWJ1Z2ZzIGZpbGVzIGFjY2Vzc2libGU/IFllYWgsIHRoZXkgc2hvdWxkIGJlLCByb290IHVzdWFsbHkgbW91bnRzIHRoZW0sIGFuZCBTeXprYWxsZXIgY2FuIGRlZmluaXRlbHkgZ2V0IHRvIHRoZW0uIEJ1dCBpcyBpdCAqd29ydGgqIGZ1enppbmcgdGhpcyBwYXJ0aWN1bGFyIHBhdGNoPyBJdCBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHN3YXAgZnJvbSBgX19nZXRfZnJlZV9wYWdlc2AgdG8gYGttYWxsb2NgLgoKTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgaWYgaXQgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBpbiBhIG1lYW5pbmdmdWwgd2F5LiBEaWZmZXJlbnQgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcy4uLiBga21hbGxvY2AgdmVyc3VzIGBfX2dldF9mcmVlX3BhZ2VzYCBjb3VsZCBoYXZlIGRpZmZlcmVudCBiZWhhdmlvcnMgaW4gdGhlIGZhY2Ugb2Ygb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEtBU0FOIG1pZ2h0IGNhdGNoIGBrbWFsbG9jYCBPT0IgaXNzdWVzIGJldHRlciB0aGFuIHRob3NlIHdpdGggcGFnZS1iYXNlZCBhbGxvY2F0aW9ucy4KCkJ1dCB3YWl0LCBsZXQgbWUgY2hlY2sgdGhlIGluc3RydWN0aW9ucyBhZ2FpbjogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmLi4uJiMzNDsgTGV0IG1lIHJldmlldyB0aGUgY3JpdGVyaWEuLi4gQWgsIGhlcmUgaXQgaXM6IGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGxvZ2dpbmcuLi4gb3IgbnVtZXJpYyBjaGFuZ2VzIHRoYXQgZG9uJiMzOTt0IGNoYW5nZSBleGVjdXRpb24uIElzIHRoaXMgc3dpdGNoIGEgZnVuY3Rpb25hbCBjaGFuZ2U/IEl0IGRvZXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IHNsaWdodGx5IHNpbmNlIGl0IHVzZXMgYSBkaWZmZXJlbnQgYWxsb2NhdG9yLCBidXQgaXQgc2VlbXMgbGlrZSBhIHJlZmFjdG9yaW5nL2NsZWFudXAgbW9zdGx5LgoKT2ggd2FpdCwgYGttYWxsb2NgIHdpdGggYFBBR0VfU0laRSAmbHQ7Jmx0OyAxYCBhbGxvY2F0ZXMgOEssIGFuZCBgX19nZXRfZnJlZV9wYWdlcyhHRlBfTk9JTywgMSlgIGFsc28gYWxsb2NhdGVzIDhLIGluIGEgNEsgcGFnZSBzeXN0ZW0uIFNvLCB0aGUgYWxsb2NhdGlvbiBzaXplIHN0YXlzIHRoZSBzYW1lLiBJcyBpdCB3b3J0aCBmdXp6aW5nPyBZZXMsIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGl0IG1vZGlmaWVzIHRoZSBrZXJuZWwgbG9naWMgYW5kIGl04oCZcyBub3QganVzdCBhIGRlY29yYXRpb24gb3IgY29tbWVudCBvciBjb25zdGFudCBjaGFuZ2UuCgpPa2F5LCBub3cgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlLiBgdXNiX2RldmljZV9kdW1wYCBpcyBpbiBgZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmNgLCBhbmQgYGZpbGxfYnVmZmVyYCBpcyBpbiBgZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jYC4gTGV0JiMzOTtzIGNvbmZpcm0gYG9oY2ktZGJnLmNgIGlzIHJlYWNoYWJsZS4gT0hDSSBpcyBhIFVTQiBob3N0IGNvbnRyb2xsZXIuIEV4Y2VsbGVudCwgUUVNVSBjYW4gZW11bGF0ZSBPSENJLiBUaGF0JiMzOTtzIGdvb2QuIE5vdyBsZXQgbWUgbG9vayBmb3IgdGhlIGNvbmZpZyBmb3IgT0hDSS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvaGNpLWRiZy5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaG9zdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjMxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IE1ha2VmaWxlOgoKKipEaXZpbmcgaW50byB0aGUgVVNCIEhvc3QgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBkcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlYC4gVGhpcyBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIFVTQiBob3N0IGNvbnRyb2xsZXIgc3Vic3lzdGVtIGlzIGJ1aWx0IHdpdGhpbiB0aGlzIGtlcm5lbC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIG9iamVjdCBmaWxlcyBhcmUgb3JnYW5pemVkLCB3aGF0IGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheSwgYW5kIGhvdyB0aGUgY29tcGlsYXRpb24gcHJvY2VzcyBpcyBzdHJ1Y3R1cmVkIGZvciB0aGUgZGlmZmVyZW50IGhvc3QgY29udHJvbGxlciBkcml2ZXJzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGFueSBjbGV2ZXIgdHJpY2tzIGFyZSB1c2VkIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyBvciBib2FyZCBzdXBwb3J0IHBhY2thZ2VzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGJldHRpbmcgdGhlcmUmIzM5O3MgYSBnb29kIGFtb3VudCBvZiBjb21wbGV4aXR5IGhlcmUsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvZiBtb2R1bGFyaXR5IG9yIGVsZWdhbnQgYnVpbGQgdGVjaG5pcXVlcyB0aGF0IG1pZ2h0IHNwZWVkIHVwIG15IGNvbXByZWhlbnNpb24uIEkmIzM5O20gYWxzbyBob3BpbmcgdGhlcmUgYXJlbiYjMzk7dCB0b28gbWFueSB1bm5lY2Vzc2FyeSBsYXllcnMgb2YgYWJzdHJhY3Rpb24sIGFzIEkga25vdyB0aGF0IGNhbiBiZWNvbWUgYSByZWFsIGhlYWRhY2hlIHRvIG5hdmlnYXRlIHdoZW4geW91IG5lZWQgdG8gdHJhY2sgZG93biBhIHNwZWNpZmljIGhhcmR3YXJlIGlzc3VlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2hjaSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZT01ND1vYmotJChDT05GSUdfVVNCX0lTUDExNlhfSENEKVx0JiM0Mzs9IGlzcDExNngtaGNkLm9cbmRyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUtNTUtXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjU2Om9iai0kKENPTkZJR19VU0JfT0hDSV9IQ0QpXHQmIzQzOz0gb2hjaS1oY2Qub1xuZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZTo1NzpvYmotJChDT05GSUdfVVNCX09IQ0lfSENEX1BDSSlcdCYjNDM7PSBvaGNpLXBjaS5vXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjU4Om9iai0kKENPTkZJR19VU0JfT0hDSV9IQ0RfUExBVEZPUk0pXHQmIzQzOz0gb2hjaS1wbGF0Zm9ybS5vXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjU5Om9iai0kKENPTkZJR19VU0JfT0hDSV9FWFlOT1MpXHQmIzQzOz0gb2hjaS1leHlub3Mub1xuZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZTo2MDpvYmotJChDT05GSUdfVVNCX09IQ0lfSENEX09NQVAxKVx0JiM0Mzs9IG9oY2ktb21hcC5vXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjYxOm9iai0kKENPTkZJR19VU0JfT0hDSV9IQ0RfU1BFQVIpXHQmIzQzOz0gb2hjaS1zcGVhci5vXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjYyOm9iai0kKENPTkZJR19VU0JfT0hDSV9IQ0RfU1RJKVx0JiM0Mzs9IG9oY2ktc3Qub1xuZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfVVNCX09IQ0lfSENEX0FUOTEpXHQmIzQzOz0gb2hjaS1hdDkxLm9cbmRyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX1VTQl9PSENJX0hDRF9TM0MyNDEwKVx0JiM0Mzs9IG9oY2ktczNjMjQxMC5vXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjY1Om9iai0kKENPTkZJR19VU0JfT0hDSV9IQ0RfTFBDMzJYWClcdCYjNDM7PSBvaGNpLW54cC5vXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjY2Om9iai0kKENPTkZJR19VU0JfT0hDSV9IQ0RfUFhBMjdYKVx0JiM0Mzs9IG9oY2ktcHhhMjd4Lm9cbmRyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGU6Njc6b2JqLSQoQ09ORklHX1VTQl9PSENJX0hDRF9EQVZJTkNJKVx0JiM0Mzs9IG9oY2ktZGE4eHgub1xuZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZS02OC1vYmotJChDT05GSUdfVVNCX09DVEVPTl9IQ0QpXHQmIzQzOz0gb2N0ZW9uLWhjZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NTAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgT0hDSSBEZWJ1Z2dpbmcqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBPSENJIHN0dWZmLCBhbmQgdGhlIGluY2x1c2lvbiBvZiBgb2hjaS1kYmcuY2AgaXMgcHJvYmFibHkga2V5IHRvIG15IGltbWVkaWF0ZSBwcm9ibGVtLiBHaXZlbiBob3cgdGhlc2Uga2VybmVsIG1vZHVsZXMgYXJlIHR5cGljYWxseSBzdHJ1Y3R1cmVkLCBJJiMzOTttIGJldHRpbmcgdGhhdCB0aGUgZGVidWdnaW5nIGZ1bmN0aW9uYWxpdGllcywgdGhlIG9uZXMgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHVzaW5nIG9yIHVuZGVyc3RhbmRpbmcsIGFyZSBsaWtlbHkgKmRlZmluZWQqIHdpdGhpbiBgb2hjaS1kYmcuY2AsIGFuZCB0aGVuICppbmNvcnBvcmF0ZWQqIGludG8gdGhlIG1haW4gT0hDSSBIb3N0IENvbnRyb2xsZXIgRHJpdmVyIHNvdXJjZSwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgYG9oY2ktaGNkLmNgLiBJdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBhcHByb2FjaDogc2VwYXJhdGUgb3V0IHRoZSBkZWJ1Zy1zcGVjaWZpYyBjb2RlIGZvciBjbGFyaXR5IGFuZCBtYWludGFpbmFiaWxpdHkuIFRoaXMgbW9kdWxhcml0eSBtYWtlcyBzZW5zZTsgaXQgcHJldmVudHMgY2x1dHRlcmluZyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHdpdGggZGVidWcgcHJpbnRpbmcgYW5kIHNldHRpbmdzLiBOb3csIHdoZXRoZXIgYG9oY2ktaGNkLmNgIGluY2x1ZGVzIGl0IGRpcmVjdGx5IHdpdGggYCNpbmNsdWRlYCBvciBwZXJoYXBzIHJlbGllcyBvbiBidWlsZCBzeXN0ZW0gY29uZmlndXJhdGlvbiB0byBsaW5rIHRoZSBvYmplY3QgZmlsZXMgdG9nZXRoZXIgaXMgc29tZXRoaW5nIEkgc2hvdWxkIGNoZWNrIGJ1dCBpdCBpcyBtb3N0IGxpa2VseSBhIGRpcmVjdCBpbmNsdWRlLiBNYWtlcyBzZW5zZS4gV2hlcmUgdG8gZmluZCB0aGUgZGVidWdnaW5nIHNldHRpbmdzL2Z1bmN0aW9ucyBJIGFtIGludGVyZXN0ZWQgaW4sIGhvd2V2ZXIsIGlzIGEgcXVlc3Rpb24gd2hpY2ggY2FuIGJlIGFuc3dlcmVkIGJ5IHRoZSBzb3VyY2UgY29kZSBvZiB0aGUgYG9oY2ktaGNkLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvaGNpLWRiZy5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaG9zdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jPTg1PXN0YXRpYyB2b2lkIGlvX3dhdGNoZG9nX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuLS1cbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYy04Ny0jaW5jbHVkZSBcJiMzNDtvaGNpLWh1Yi5jXCYjMzQ7XG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmM6ODg6I2luY2x1ZGUgXCYjMzQ7b2hjaS1kYmcuY1wmIzM0O1xuZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jLTg5LSNpbmNsdWRlIFwmIzM0O29oY2ktbWVtLmNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkwNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKk9IQ0kgRHJpdmVyIElucXVpcnkqKgoKT2theSwgc28gSSYjMzk7bSB0cmFja2luZyBkb3duIHRoZSBPSENJIGRyaXZlci4gUmlnaHQsIEkgcmVjYWxsIGl0JiMzOTtzIGRlZmluaXRlbHkgaW5jbHVkZWQgaW4gYG9oY2ktaGNkLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gTm93LCByZWdhcmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24sIEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbiBpcyBgVVNCX09IQ0lfSENEYC4gSSYjMzk7dmUgdXNlZCB0aGF0IGJlZm9yZSwgc28gdGhhdCByaW5ncyBhIGJlbGwuIE5vdywgc29tZXRoaW5nJiMzOTtzIHRpY2tsaW5nIHRoZSBiYWNrIG9mIG15IGJyYWluIGFib3V0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLi4uIEkgd29uZGVyIGlmIGBvaGNpLWRiZy5jYCBpcyBjb21waWxlZCBiYXNlZCBvbiBzb21lIG90aGVyIHByZXByb2Nlc3NvciBkZWZpbml0aW9uPyBCZXR0ZXIgdG8gYmUgc2FmZSwgSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYmFjayBhdCBgb2hjaS1oY2QuY2AgdG8gYmUgY29tcGxldGVseSBzdXJlLiBJIGRvbiYjMzk7dCB3YW50IHRvIG1pc3MgYW55dGhpbmcgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2hjaS1kYmcuYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmM9ODU9c3RhdGljIHZvaWQgaW9fd2F0Y2hkb2dfZnVuYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG4tLVxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jLTg3LSNpbmNsdWRlIFwmIzM0O29oY2ktaHViLmNcJiMzNDtcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYzo4ODojaW5jbHVkZSBcJiMzNDtvaGNpLWRiZy5jXCYjMzQ7XG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMtODktI2luY2x1ZGUgXCYjMzQ7b2hjaS1tZW0uY1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzA3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgZm9yIFByZXByb2Nlc3NvciBEaXJlY3RpdmVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc2VjdGlvbiBvZiBjb2RlLiBCZWZvcmUgZGl2aW5nIGluLCBteSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byBjaGVjayBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEkgaGF2ZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmYCBvciBgI2lmbmRlZmAgZGlyZWN0aXZlcyB3cmFwcGluZyB0aGlzIGNvZGUuIEtub3dpbmcgdGhhdCB3aWxsIGdpdmUgbWUgYSBodWdlIGhlYWQgc3RhcnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY29kZSBpcyBpbmNsdWRlZCBpbiBhbGwgYnVpbGRzLCBvciBvbmx5IGluIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG9yIHBsYXRmb3Jtcy4gVGhhdCBjb25kaXRpb25hbCBsb2dpYyBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBhY3R1YWwgYmVoYXZpb3IgSSYjMzk7bSBzZWVpbmcuIEkmIzM5O2xsIHF1aWNrbHkgc2NhbiBmb3IgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRoYXQgY291bGQgYmUgY29udHJvbGxpbmcgdGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgdGhpcyBzZWN0aW9uLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBzdGVwIC0gYWx3YXlzIGxvb2sgZm9yIHRob3NlIGAjaWZkZWZgcyEgSXQmIzM5O2xsIHNhdmUgbWUgYSBsb3Qgb2YgdGltZSBpbiB0aGUgbG9uZyBydW4sIGFuZCBwcmV2ZW50IG1lIGZyb20gZ29pbmcgZG93biB0aGUgd3JvbmcgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0I2luY2x1ZGUgXCYjMzQ7b2hjaS5oXCYjMzQ7XG4gIDgxOlx0I2luY2x1ZGUgXCYjMzQ7cGNpLXF1aXJrcy5oXCYjMzQ7XG4gIDgyOlx0XG4gIDgzOlx0c3RhdGljIHZvaWQgb2hjaV9kdW1wKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSk7XG4gIDg0Olx0c3RhdGljIHZvaWQgb2hjaV9zdG9wKHN0cnVjdCB1c2JfaGNkICpoY2QpO1xuICA4NTpcdHN0YXRpYyB2b2lkIGlvX3dhdGNoZG9nX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuICA4NjpcdFxuICA4NzpcdCNpbmNsdWRlIFwmIzM0O29oY2ktaHViLmNcJiMzNDtcbiAgODg6XHQjaW5jbHVkZSBcJiMzNDtvaGNpLWRiZy5jXCYjMzQ7XG4gIDg5Olx0I2luY2x1ZGUgXCYjMzQ7b2hjaS1tZW0uY1wmIzM0O1xuICA5MDpcdCNpbmNsdWRlIFwmIzM0O29oY2ktcS5jXCYjMzQ7XG4gIDkxOlx0XG4gIDkyOlx0XG4gIDkzOlx0LypcbiAgOTQ6XHQgKiBPbiBhcmNoaXRlY3R1cmVzIHdpdGggZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cyB3ZSBtdXN0IG5ldmVyIHJldHVyblxuICA5NTpcdCAqIElSUV9OT05FLlxuICA5NjpcdCAqL1xuICA5NzpcdCNpZiBkZWZpbmVkKENPTkZJR19TQTExMTEpICAvKiAuLi4gb3Igb3RoZXIgZWRnZS10cmlnZ2VyZWQgc3lzdGVtcyAqL1xuICA5ODpcdCNkZWZpbmUgSVJRX05PVE1JTkVcdElSUV9IQU5ETEVEXG4gIDk5Olx0I2Vsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgzNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKk9IQ0kgRGVidWdnaW5nOiBUaGUgQ29uZGl0aW9uYWwgQ29tcGlsZSBRdWVzdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgY29kZS4gSSYjMzk7bSBzZWVpbmcgc29tZXRoaW5nIHRoYXQmIzM5O3MgYWx3YXlzIHByZXNlbnQg4oCTIG9yIGF0IGxlYXN0LCB0aGF0JiMzOTtzIHRoZSBpbXByZXNzaW9uIGl0IGdpdmVzLiBCdXQgdGhlbiwgYSBsaXR0bGUgYWxhcm0gYmVsbCBnb2VzIG9mZi4gSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFdhaXQgYSBtaW51dGUuLi4gdGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24sIHRoZSBvbmUgSSYjMzk7bSBmb2N1c2VkIG9uLCByZXNpZGVzIHdpdGhpbiBgb2hjaS1kYmcuY2AsIGRvZXNuJiMzOTt0IGl0PyBUaGF0JiMzOTtzIHRoZSBmaWxlIEkgbmVlZCB0byBsb29rIGF0LiBBbmQgbm93IEkmIzM5O20gYXNraW5nIG15c2VsZiwgYW5kIHRoYXQmIzM5O3MgdGhlIGtleSBxdWVzdGlvbiwgaXMgdGhpcyBjb2RlICphY3R1YWxseSogYWx3YXlzIGVuYWJsZWQ/IE9yIGlzIGl0IHdyYXBwZWQgaW4gc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmU/IElzIGl0IGNvbnRyb2xsZWQgYnkgYSBmbGFnLCBhIG1hY3JvLCBvciBzb21ldGhpbmcgZWxzZSB0aGF0IG1pZ2h0IHJlbmRlciBpdCBhY3RpdmUgb3IgaW5hY3RpdmUgZGVwZW5kaW5nIG9uIHRoZSBidWlsZCBjb25maWd1cmF0aW9uPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBJIG5lZWQgdG8gcmVzb2x2ZSBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciB3aXRoIG15IGFuYWx5c2lzLiBUaGF0JiMzOTtzIHdoZXJlIEkgd2lsbCBnbyBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMS4wJiM0MztcbiAgIDI6XHQvKlxuICAgMzpcdCAqIE9IQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLlxuICAgNDpcdCAqXG4gICA1Olx0ICogKEMpIENvcHlyaWdodCAxOTk5IFJvbWFuIFdlaXNzZ2FlcmJlciBcdTAwM2N3ZWlzc2dAdmllbm5hLmF0XHUwMDNlXG4gICA2Olx0ICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDIgRGF2aWQgQnJvd25lbGwgXHUwMDNjZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldFx1MDAzZVxuICAgNzpcdCAqXG4gICA4Olx0ICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuXG4gICA5Olx0ICovXG4gIDEwOlx0XG4gIDExOlx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgMTI6XHRcbiAgMTM6XHQjZGVmaW5lIGVkc3RyaW5nKGVkX3R5cGUpICh7IGNoYXIgKnRlbXA7IFxcXG4gIDE0Olx0XHRzd2l0Y2ggKGVkX3R5cGUpIHsgXFxcbiAgMTU6XHRcdGNhc2UgUElQRV9DT05UUk9MOlx0dGVtcCA9IFwmIzM0O2N0cmxcJiMzNDs7IGJyZWFrOyBcXFxuICAxNjpcdFx0Y2FzZSBQSVBFX0JVTEs6XHRcdHRlbXAgPSBcJiMzNDtidWxrXCYjMzQ7OyBicmVhazsgXFxcbiAgMTc6XHRcdGNhc2UgUElQRV9JTlRFUlJVUFQ6XHR0ZW1wID0gXCYjMzQ7aW50clwmIzM0OzsgYnJlYWs7IFxcXG4gIDE4Olx0XHRkZWZhdWx0Olx0XHR0ZW1wID0gXCYjMzQ7aXNvY1wmIzM0OzsgYnJlYWs7IFxcXG4gIDE5Olx0XHR9IHRlbXA7fSlcbiAgMjA6XHQjZGVmaW5lIHBpcGVzdHJpbmcocGlwZSkgZWRzdHJpbmcodXNiX3BpcGV0eXBlKHBpcGUpKVxuICAyMTpcdFxuICAyMjpcdFxuICAyMzpcdCNkZWZpbmUgb2hjaV9kYmdfc3cob2hjaSwgbmV4dCwgc2l6ZSwgZm9ybWF0LCBhcmcuLi4pIFxcXG4gIDI0Olx0XHRkbyB7IFxcXG4gIDI1Olx0XHRpZiAobmV4dCAhPSBOVUxMKSB7IFxcXG4gIDI2Olx0XHRcdHVuc2lnbmVkIHNfbGVuOyBcXFxuICAyNzpcdFx0XHRzX2xlbiA9IHNjbnByaW50ZiAoKm5leHQsICpzaXplLCBmb3JtYXQsICMjIGFyZyApOyBcXFxuICAyODpcdFx0XHQqc2l6ZSAtPSBzX2xlbjsgKm5leHQgJiM0Mzs9IHNfbGVuOyBcXFxuICAyOTpcdFx0fSBlbHNlIFxcXG4gIDMwOlx0XHRcdG9oY2lfZGJnKG9oY2ksZm9ybWF0LCAjIyBhcmcgKTsgXFxcbiAgMzE6XHRcdH0gd2hpbGUgKDApO1xuICAzMjpcdFxuICAzMzpcdC8qIFZlcnNpb24gZm9yIHVzZSB3aGVyZSBcJiMzNDtuZXh0XCYjMzQ7IGlzIHRoZSBhZGRyZXNzIG9mIGEgbG9jYWwgdmFyaWFibGUgKi9cbiAgMzQ6XHQjZGVmaW5lIG9oY2lfZGJnX25vc3cob2hjaSwgbmV4dCwgc2l6ZSwgZm9ybWF0LCBhcmcuLi4pIFxcXG4gIDM1Olx0XHRkbyB7IFxcXG4gIDM2Olx0XHRcdHVuc2lnbmVkIHNfbGVuOyBcXFxuICAzNzpcdFx0XHRzX2xlbiA9IHNjbnByaW50ZigqbmV4dCwgKnNpemUsIGZvcm1hdCwgIyMgYXJnKTsgXFxcbiAgMzg6XHRcdFx0KnNpemUgLT0gc19sZW47ICpuZXh0ICYjNDM7PSBzX2xlbjsgXFxcbiAgMzk6XHRcdH0gd2hpbGUgKDApO1xuICA0MDpcdFxuICA0MTpcdFxuICA0MjpcdHN0YXRpYyB2b2lkIG9oY2lfZHVtcF9pbnRyX21hc2sgKFxuICA0MzpcdFx0c3RydWN0IG9oY2lfaGNkICpvaGNpLFxuICA0NDpcdFx0Y2hhciAqbGFiZWwsXG4gIDQ1Olx0XHR1MzIgbWFzayxcbiAgNDY6XHRcdGNoYXIgKipuZXh0LFxuICA0NzpcdFx0dW5zaWduZWQgKnNpemUpXG4gIDQ4Olx0e1xuICA0OTpcdFx0b2hjaV9kYmdfc3cgKG9oY2ksIG5leHQsIHNpemUsIFwmIzM0OyVzIDB4JTA4eCVzJXMlcyVzJXMlcyVzJXMlc1xcblwmIzM0OyxcbiAgNTA6XHRcdFx0bGFiZWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NzYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJLCBhbiBleHBlcnQsIGFtIHRoaW5raW5nIGl0OgoKKipMb2NhdGluZyBDcml0aWNhbCBDb2RlIFNlY3Rpb25zKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBsYW5kc2NhcGUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcHJlY2lzZWx5IG1hcHBpbmcgb3V0IHRoZSB1c2FnZSBhbmQgZGVmaW5pdGlvbiBvZiBgZGVidWdfb3V0cHV0YCBhbmQgYGZpbGxfYnVmZmVyYC4gVW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWMgY29udGV4dCBvZiB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0IGlzIGNydWNpYWwgZm9yIGRpYWdub3Npbmcgd2hhdGV2ZXIgaXNzdWUgSSYjMzk7bSBjaGFzaW5nIGRvd24gb3Igb3B0aW1pemluZyB3aGF0ZXZlciBJJiMzOTttIGJ1aWxkaW5nLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIHRoZSBwcm9wZXIgY29udGV4dHVhbCBmb3VuZGF0aW9uLiBUaW1lIHRvIHN0YXJ0IHRyYWNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbGxfYnVmZmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYz02NjU9c3RhdGljIHN0cnVjdCBkZWJ1Z19idWZmZXIgKmFsbG9jX2J1ZmZlcihzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksXG4tLVxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTY4MC1cbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYzo2ODE6c3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNjgyLXtcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM9NzA0PXN0YXRpYyBzc2l6ZV90IGRlYnVnX291dHB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxuLS1cbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy03MTEtXHRpZiAoYnVmLVx1MDAzZWNvdW50ID09IDApIHtcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYzo3MTI6XHRcdHJldCA9IGZpbGxfYnVmZmVyKGJ1Zik7XG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNzEzLVx0XHRpZiAocmV0ICE9IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI5OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyBEaXZlOiBDaGVja2luZyBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpBbHJpZ2h0LCBiZWZvcmUgSSBnbyBkZWVwZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IGNoYXNpbmcgYSBnaG9zdC4gRmlyc3QgdGhpbmcmIzM5O3MgZmlyc3Q6IElzIHRoaXMgYmVoYXZpb3IsIHRoaXMgYnVnLCB0aGlzIGFub21hbHksIGV2ZW4gKmFjdGl2ZSogaW4gdGhlIGN1cnJlbnQgYnVpbGQgY29uZmlndXJhdGlvbj8gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgJiMzNDtIYXMgc29tZW9uZSBjbGV2ZXJseSB3cmFwcGVkIHRoaXMgcHJvYmxlbWF0aWMgY29kZSBzZWN0aW9uIGluIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlPyYjMzQ7IFlvdSBrbm93LCBzb21ldGhpbmcgbGlrZSBgI2lmZGVmIERFQlVHYCwgYCNpZmRlZiBURVNUSU5HYCwgb3IgbWF5YmUgZXZlbiBzb21ldGhpbmcgY3VzdG9tIHRoYXQgc29tZW9uZSBzZXQgdXAgc3BlY2lmaWNhbGx5IGZvciBhIHNwZWNpZmljIHBsYXRmb3JtIG9yIGJ1aWxkIHRhcmdldC4gQ291bGQgZXZlbiBiZSBzb21ldGhpbmcgbW9yZSBvYnNjdXJlLiBJJiMzOTt2ZSBiZWVuIGJpdHRlbiBieSB0aGF0IGJlZm9yZS4gU28sIGJlZm9yZSBJIHN0YXJ0IHVud2luZGluZyB0aGUgZW50aXJlIHN0YWNrLCBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIHJlbGV2YW50IHNvdXJjZSBjb2RlLCBhbmQgcGVyaGFwcyBkbyBhIHF1aWNrIGdyZXAsIGZvciBhbnkgb2YgdGhvc2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBpcyBldmVuIHRoZSAqYWN0aXZlKiBjb2RlIHBhdGggSSYjMzk7bSBsb29raW5nIGF0LiBUaGF0IHdvdWxkIGJlIGEgaHVnZSB0aW1lIHNhdmVyLiBJIG5lZWQgdG8gZWxpbWluYXRlIHRoaXMgcG9zc2liaWxpdHkgYmVmb3JlIEkgaW52ZXN0IHRvbyBtdWNoIGVmZm9ydC4gSXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IHF1aWNrIHdpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY2MDpcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoXHUwMDI2b2hjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gNjYxOlx0XG4gNjYyOlx0XHRyZXR1cm4gUEFHRV9TSVpFIC0gc2l6ZTtcbiA2NjM6XHR9XG4gNjY0Olx0XG4gNjY1Olx0c3RhdGljIHN0cnVjdCBkZWJ1Z19idWZmZXIgKmFsbG9jX2J1ZmZlcihzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksXG4gNjY2Olx0XHRcdFx0XHRzc2l6ZV90ICgqZmlsbF9mdW5jKShzdHJ1Y3QgZGVidWdfYnVmZmVyICopKVxuIDY2NzpcdHtcbiA2Njg6XHRcdHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZjtcbiA2Njk6XHRcbiA2NzA6XHRcdGJ1ZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkZWJ1Z19idWZmZXIpO1xuIDY3MTpcdFxuIDY3MjpcdFx0aWYgKGJ1Zikge1xuIDY3MzpcdFx0XHRidWYtXHUwMDNlb2hjaSA9IG9oY2k7XG4gNjc0Olx0XHRcdGJ1Zi1cdTAwM2VmaWxsX2Z1bmMgPSBmaWxsX2Z1bmM7XG4gNjc1Olx0XHRcdG11dGV4X2luaXQoXHUwMDI2YnVmLVx1MDAzZW11dGV4KTtcbiA2NzY6XHRcdH1cbiA2Nzc6XHRcbiA2Nzg6XHRcdHJldHVybiBidWY7XG4gNjc5Olx0fVxuIDY4MDpcdFxuIDY4MTpcdHN0YXRpYyBpbnQgZmlsbF9idWZmZXIoc3RydWN0IGRlYnVnX2J1ZmZlciAqYnVmKVxuIDY4MjpcdHtcbiA2ODM6XHRcdGludCByZXQ7XG4gNjg0Olx0XG4gNjg1Olx0XHRpZiAoIWJ1Zi1cdTAwM2VwYWdlKVxuIDY4NjpcdFx0XHRidWYtXHUwMDNlcGFnZSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiA2ODc6XHRcbiA2ODg6XHRcdGlmICghYnVmLVx1MDAzZXBhZ2UpIHtcbiA2ODk6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiA2OTA6XHRcdFx0Z290byBvdXQ7XG4gNjkxOlx0XHR9XG4gNjkyOlx0XG4gNjkzOlx0XHRyZXQgPSBidWYtXHUwMDNlZmlsbF9mdW5jKGJ1Zik7XG4gNjk0Olx0XG4gNjk1Olx0XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuIDY5NjpcdFx0XHRidWYtXHUwMDNlY291bnQgPSByZXQ7XG4gNjk3Olx0XHRcdHJldCA9IDA7XG4gNjk4Olx0XHR9XG4gNjk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDgwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGF0IGZpbGUsIGBvaGNpLWRiZy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgZGVidWdnaW5nIGZlYXR1cmVzIGFyZSBwb3RlbnRpYWxseSBlbmFibGVkIG9yIGRpc2FibGVkIHdpdGhpbiBpdC4gQW5kIHRoZSB1c3VhbCBzdXNwZWN0IGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsaWtlIHRoaXMgaXMgYCNpZmRlZiBERUJVR2AuIFNvLCBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGNvZGUsIGxvb2tpbmcgZm9yIHRoYXQgc3BlY2lmaWMgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSB0byBjb250cm9sIHRoZSB2aXNpYmlsaXR5IG9yIGJlaGF2aW91ciBvZiB0aGUgZGVidWcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYgREVCVUcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDIzNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgZG9tYWluIGV4cGVydGlzZToKCioqQ2hlY2tpbmcgdGhlIERlYnVnIEZpbGVzeXN0ZW0gRmxhZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBzZWUgd2UmIzM5O3JlIGF0IGEgcG9pbnQgd2hlcmUgd2UgbmVlZCB0byBleGFtaW5lIGBDT05GSUdfREVCVUdfRlNgLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbiwgYWxtb3N0IGFsd2F5cyBhIHNpZ24gd2UmIzM5O3JlIGdvaW5nIHRvIGludGVyYWN0IHdpdGggdGhlIGRlYnVnIGZpbGVzeXN0ZW0uIFRoaXMgdXN1YWxseSBtZWFucyBJJiMzOTttIHRyb3VibGVzaG9vdGluZywgYW5hbHl6aW5nIGtlcm5lbCBiZWhhdmlvciwgb3IgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgbG93LWxldmVsIGludGVyYWN0aW9ucy4gSSYjMzk7bSBsaWtlbHkgZ2VhcmluZyB1cCB0byBleGFtaW5lIHdoYXQgZGVidWcgaW5mb3JtYXRpb24gaGFzIGJlZW4gZW5hYmxlZCwgd2hhdCYjMzk7cyBiZWVuIGV4cG9zZWQsIGFuZCBob3cgaXQgbWlnaHQgaGVscCBtZSB1bmRlcnN0YW5kIGEgc3BlY2lmaWMgaXNzdWUgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LiBJdCYjMzk7cyBhIGtleSBmaXJzdCBzdGVwIGluIGRpYWdub3NpbmcgY29tcGxleCBrZXJuZWwgYmVoYXZpb3IsIHNvIGxldCYjMzk7cyBnZXQgcmlnaHQgb24gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0RFQlVHX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NjAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVidWdnaW5nIGEgUG9zc2libGUgQ29tcGlsYXRpb24gSXNzdWUqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIHJldHJhY2UgbXkgc3RlcHMgYW5kIGNvbnNpZGVyIHNvbWV0aGluZyBwb3RlbnRpYWxseSBzdWJ0bGUgaGVyZS4gSSB3YXMgZm9jdXNpbmcgb24gdGhlIHNwZWNpZmljIGZpbGUsIGJ1dCBJJiMzOTttIGhhdmluZyBhIGh1bmNoIGFib3V0IHNvbWV0aGluZyBtb3JlIGdsb2JhbC4gSXMgaXQgcG9zc2libGUgdGhhdCB0aGUgY29kZSBpbiBgb2hjaS1kYmcuY2Ag4oCTIHRoZSBkZWJ1ZyBmaWxlLCBzcGVjaWZpY2FsbHkg4oCTIGlzICpub3QqIGRpcmVjdGx5IGluY2x1ZGVkIGluIHRoZSBmaW5hbCBiaW5hcnk/IEl0JiMzOTtzIGNvbmNlaXZhYmxlIHRoYXQgdGhlIHByZXByb2Nlc3NvciBpcyBoYW5kbGluZyB0aGluZ3MsIGFuZCBpdCBtaWdodCBiZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHdpdGhpbiBgb2hjaS1oY2QuY2AuIFRoYXQgd291bGQgbWVhbiBJIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0byBlbnN1cmUgdGhhdCB0aGUgZGVidWdnaW5nIG91dHB1dCBJJiMzOTttIGV4cGVjdGluZyBpcyBhY3R1YWxseSBlbmFibGVkLiBJdCB3b3VsZCBhbHNvIGV4cGxhaW4gd2h5IEkgY2FuJiMzOTt0IHNlZSB0aGUgZGVidWcgc3RhdGVtZW50cyBiZWluZyB0cmlnZ2VyZWQuIEkgbmVlZCB0byBtYWtlIGEgbWVudGFsIG5vdGUgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGNvbXBpbGF0aW9uIGZsYWdzIGFuZCBwcmVwcm9jZXNzb3Igc3ltYm9scyB0byBtYWtlIHN1cmUgdGhlIGRlYnVnIGNvZGUgaXMgYWN0dWFsbHkgYmVpbmcgY29tcGlsZWQgaW50byB0aGUga2VybmVsIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2hjaS1kYmcuYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmM9ODU9c3RhdGljIHZvaWQgaW9fd2F0Y2hkb2dfZnVuYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG4tLVxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jLTg3LSNpbmNsdWRlIFwmIzM0O29oY2ktaHViLmNcJiMzNDtcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYzo4ODojaW5jbHVkZSBcJiMzNDtvaGNpLWRiZy5jXCYjMzQ7XG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMtODktI2luY2x1ZGUgXCYjMzQ7b2hjaS1tZW0uY1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg1NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG9oY2ktaGNkLmNgIGF0IExpbmUgODgqKgoKT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhpcyBpc3N1ZS4gQmFzZWQgb24gd2hhdCBJJiMzOTt2ZSBzZWVuLCBpdCYjMzk7cyBwb2ludGluZyB0b3dhcmRzIGEgcG90ZW50aWFsIHByb2JsZW0gaW4gdGhlIE9IQ0kgaG9zdCBjb250cm9sbGVyIGRyaXZlci4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGxvb2sgYXJvdW5kIGxpbmUgODggb2YgYG9oY2ktaGNkLmNgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hhdCYjMzk7cyBiZWluZyBpbml0aWFsaXplZCBvciBtb2RpZmllZCBhcm91bmQgdGhhdCBhcmVhLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IGl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBlaXRoZXIgZGVzY3JpcHRvciBzZXR1cCwgaW50ZXJydXB0IGhhbmRsaW5nLCBvciBtYXliZSBldmVuIHJlc291cmNlIGFsbG9jYXRpb24gd2l0aGluIHRoZSBkcml2ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgY29udGV4dCBvZiB0aGF0IGNvZGUgc2VjdGlvbi4gSXMgdGhpcyByZWxhdGVkIHRvIGVuZHBvaW50IGNvbmZpZ3VyYXRpb24/IE9yIHBvc3NpYmx5IGEgRE1BIHRyYW5zZmVyIHNldHVwPyBMaW5lIG51bWJlcnMgYXJlIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBxdWlja2x5IGZpbmQgYSBzcGVjaWZpYyBjb2RlIGJsb2NrLCBidXQgSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgT0hDSSBhcmNoaXRlY3R1cmUgdG8gcGxhY2UgdGhhdCBsaW5lIGluIGEgcmVsZXZhbnQgY29udGV4dC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGNsdWVzIHRoYXQgc3VnZ2VzdCBhIHJhY2UgY29uZGl0aW9uLCBhIG1lbW9yeSBjb3JydXB0aW9uLCBvciBhIG1pc2NvbmZpZ3VyYXRpb24gdGhhdCBjb3VsZCBiZSBjb250cmlidXRpbmcgdG8gdGhlIG9ic2VydmVkIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHQjZW5kaWZcbiAgNzE6XHRcbiAgNzI6XHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuICA3MzpcdFxuICA3NDpcdHN0YXRpYyBjb25zdCBjaGFyXHRoY2RfbmFtZSBbXSA9IFwmIzM0O29oY2lfaGNkXCYjMzQ7O1xuICA3NTpcdFxuICA3NjpcdCNkZWZpbmVcdFNUQVRFQ0hBTkdFX0RFTEFZXHRtc2Vjc190b19qaWZmaWVzKDMwMClcbiAgNzc6XHQjZGVmaW5lXHRJT19XQVRDSERPR19ERUxBWVx0bXNlY3NfdG9famlmZmllcygyNzUpXG4gIDc4Olx0I2RlZmluZVx0SU9fV0FUQ0hET0dfT0ZGXHRcdDB4ZmZmZmZmMDBcbiAgNzk6XHRcbiAgODA6XHQjaW5jbHVkZSBcJiMzNDtvaGNpLmhcJiMzNDtcbiAgODE6XHQjaW5jbHVkZSBcJiMzNDtwY2ktcXVpcmtzLmhcJiMzNDtcbiAgODI6XHRcbiAgODM6XHRzdGF0aWMgdm9pZCBvaGNpX2R1bXAoc3RydWN0IG9oY2lfaGNkICpvaGNpKTtcbiAgODQ6XHRzdGF0aWMgdm9pZCBvaGNpX3N0b3Aoc3RydWN0IHVzYl9oY2QgKmhjZCk7XG4gIDg1Olx0c3RhdGljIHZvaWQgaW9fd2F0Y2hkb2dfZnVuYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG4gIDg2Olx0XG4gIDg3Olx0I2luY2x1ZGUgXCYjMzQ7b2hjaS1odWIuY1wmIzM0O1xuICA4ODpcdCNpbmNsdWRlIFwmIzM0O29oY2ktZGJnLmNcJiMzNDtcbiAgODk6XHQjaW5jbHVkZSBcJiMzNDtvaGNpLW1lbS5jXCYjMzQ7XG4gIDkwOlx0I2luY2x1ZGUgXCYjMzQ7b2hjaS1xLmNcJiMzNDtcbiAgOTE6XHRcbiAgOTI6XHRcbiAgOTM6XHQvKlxuICA5NDpcdCAqIE9uIGFyY2hpdGVjdHVyZXMgd2l0aCBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIHdlIG11c3QgbmV2ZXIgcmV0dXJuXG4gIDk1Olx0ICogSVJRX05PTkUuXG4gIDk2Olx0ICovXG4gIDk3Olx0I2lmIGRlZmluZWQoQ09ORklHX1NBMTExMSkgIC8qIC4uLiBvciBvdGhlciBlZGdlLXRyaWdnZXJlZCBzeXN0ZW1zICovXG4gIDk4Olx0I2RlZmluZSBJUlFfTk9UTUlORVx0SVJRX0hBTkRMRURcbiAgOTk6XHQjZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU5OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJiMzOTttIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgRGVidWdnaW5nIEZsYWcmIzM5O3MgU2NvcGUqKgoKSG1tLCBpdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBpdCYjMzk7cyBqdXN0IGluY2x1ZGVkLiBCdXQgaGFuZyBvbiBhIHNlY29uZCwgYSBsaXR0bGUgYWxhcm0gYmVsbCBqdXN0IHdlbnQgb2ZmLiBXaGF0IGlmIHRoZSBmaWxlIGBvaGNpLWRiZy5jYCDigJMgdGhhdCBJJiMzOTttIGRlYWxpbmcgd2l0aCBoZXJlIOKAkyAqaXRzZWxmKiBoYXMgYSBgI2lmZGVmIERFQlVHYCBibG9jayB3aXRoaW4gaXQ/IFRoYXQmIzM5O3MgdGhlIHJlYWwgcG90ZW50aWFsIGdvdGNoYS4gSWYgaXQgZG9lcywgdGhlbiB0aGUgaW5jbHVzaW9uIG9mIGBvaGNpLWRiZy5jYCBhbG9uZSBtaWdodCBub3QgKmd1YXJhbnRlZSogdGhhdCB0aGUgZGVidWcgY29kZSB3aXRoaW4gaXQgaXMgYWN0aXZlLiBUaGUgbmVzdGVkIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGNvdWxkIGJlIGF0IHBsYXkgaGVyZS4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb250ZW50cyBvZiB0aGF0IGZpbGUuIEl0IGlzbiYjMzk7dCBnb29kIGVub3VnaCB0byBhc3N1bWUgZXZlcnl0aGluZyB3aWxsIGJlIGluIHBsYWNlIHdpdGggYSBzaW1wbGUgaW5jbHVkZSwgbm90IHdoZW4gdGhhdCBmaWxlIG1pZ2h0IGhhdmUgaXRzIG93biBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRlbnQgb24gdGhlIHNhbWUgbWFjcm8uIEkgbmVlZCB0byBydWxlIHRoaXMgb3V0LCBhbmQgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTEuMCYjNDM7XG4gICAyOlx0LypcbiAgIDM6XHQgKiBPSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi5cbiAgIDQ6XHQgKlxuICAgNTpcdCAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIgXHUwMDNjd2Vpc3NnQHZpZW5uYS5hdFx1MDAzZVxuICAgNjpcdCAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAyIERhdmlkIEJyb3duZWxsIFx1MDAzY2Ricm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXRcdTAwM2VcbiAgIDc6XHQgKlxuICAgODpcdCAqIFRoaXMgZmlsZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMLlxuICAgOTpcdCAqL1xuICAxMDpcdFxuICAxMTpcdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4gIDEyOlx0XG4gIDEzOlx0I2RlZmluZSBlZHN0cmluZyhlZF90eXBlKSAoeyBjaGFyICp0ZW1wOyBcXFxuICAxNDpcdFx0c3dpdGNoIChlZF90eXBlKSB7IFxcXG4gIDE1Olx0XHRjYXNlIFBJUEVfQ09OVFJPTDpcdHRlbXAgPSBcJiMzNDtjdHJsXCYjMzQ7OyBicmVhazsgXFxcbiAgMTY6XHRcdGNhc2UgUElQRV9CVUxLOlx0XHR0ZW1wID0gXCYjMzQ7YnVsa1wmIzM0OzsgYnJlYWs7IFxcXG4gIDE3Olx0XHRjYXNlIFBJUEVfSU5URVJSVVBUOlx0dGVtcCA9IFwmIzM0O2ludHJcJiMzNDs7IGJyZWFrOyBcXFxuICAxODpcdFx0ZGVmYXVsdDpcdFx0dGVtcCA9IFwmIzM0O2lzb2NcJiMzNDs7IGJyZWFrOyBcXFxuICAxOTpcdFx0fSB0ZW1wO30pXG4gIDIwOlx0I2RlZmluZSBwaXBlc3RyaW5nKHBpcGUpIGVkc3RyaW5nKHVzYl9waXBldHlwZShwaXBlKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxOTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIGBvaGNpLWRiZy5jYCBGaWxlKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNvbWV0aGluZyBzcGVjaWZpYyB3aXRoaW4gdGhlIGBvaGNpLWRiZy5jYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuIEV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBvZnRlbiwgZGVidWctcmVsYXRlZCBmdW5jdGlvbnMgb3IgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCBtaWdodCBiZSBtb3JlIHJlY2VudCBhZGRpdGlvbnMgb3IgaGF2ZSBzcGVjaWZpYyB0ZXN0aW5nIGhvb2tzLCBhcmUgcGxhY2VkIHRvd2FyZHMgdGhlIHRhaWwgZW5kIG9mIHRoZSBzb3VyY2UgZmlsZS4gSXQmIzM5O3MgYSBxdWljayB3YXkgdG8gZmluZCB0aGUgcmVsZXZhbnQgZGVidWdnaW5nIGNvZGUgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24gcmVsYXRlZCB0byB0aGUgVVNCIE9wZW4gSG9zdCBDb250cm9sbGVyIEludGVyZmFjZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGRvd24gdGhlcmUuIFRoaXMgaXMgYSBjb21tb24gc3RhcnRpbmcgcG9pbnQgaW4gdGhpcyB0eXBlIG9mIGRlYnVnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcyMDpcdFx0cmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGxlbiwgb2Zmc2V0LFxuIDcyMTpcdFx0XHRcdFx0ICAgICAgYnVmLVx1MDAzZXBhZ2UsIGJ1Zi1cdTAwM2Vjb3VudCk7XG4gNzIyOlx0XG4gNzIzOlx0b3V0OlxuIDcyNDpcdFx0cmV0dXJuIHJldDtcbiA3MjU6XHRcbiA3MjY6XHR9XG4gNzI3Olx0XG4gNzI4Olx0c3RhdGljIGludCBkZWJ1Z19jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiA3Mjk6XHR7XG4gNzMwOlx0XHRzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiA3MzE6XHRcbiA3MzI6XHRcdGtmcmVlKGJ1Zi1cdTAwM2VwYWdlKTtcbiA3MzM6XHRcdGtmcmVlKGJ1Zik7XG4gNzM0Olx0XG4gNzM1Olx0XHRyZXR1cm4gMDtcbiA3MzY6XHR9XG4gNzM3Olx0c3RhdGljIGludCBkZWJ1Z19hc3luY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIDczODpcdHtcbiA3Mzk6XHRcdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gYWxsb2NfYnVmZmVyKGlub2RlLVx1MDAzZWlfcHJpdmF0ZSwgZmlsbF9hc3luY19idWZmZXIpO1xuIDc0MDpcdFxuIDc0MTpcdFx0cmV0dXJuIGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID8gMCA6IC1FTk9NRU07XG4gNzQyOlx0fVxuIDc0MzpcdFxuIDc0NDpcdHN0YXRpYyBpbnQgZGVidWdfcGVyaW9kaWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiA3NDU6XHR7XG4gNzQ2Olx0XHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IGFsbG9jX2J1ZmZlcihpbm9kZS1cdTAwM2VpX3ByaXZhdGUsXG4gNzQ3Olx0XHRcdFx0XHRcdCAgZmlsbF9wZXJpb2RpY19idWZmZXIpO1xuIDc0ODpcdFxuIDc0OTpcdFx0cmV0dXJuIGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID8gMCA6IC1FTk9NRU07XG4gNzUwOlx0fVxuIDc1MTpcdFxuIDc1MjpcdHN0YXRpYyBpbnQgZGVidWdfcmVnaXN0ZXJzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gNzUzOlx0e1xuIDc1NDpcdFx0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBhbGxvY19idWZmZXIoaW5vZGUtXHUwMDNlaV9wcml2YXRlLFxuIDc1NTpcdFx0XHRcdFx0XHQgIGZpbGxfcmVnaXN0ZXJzX2J1ZmZlcik7XG4gNzU2Olx0XG4gNzU3Olx0XHRyZXR1cm4gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPyAwIDogLUVOT01FTTtcbiA3NTg6XHR9XG4gNzU5Olx0c3RhdGljIGlubGluZSB2b2lkIGNyZWF0ZV9kZWJ1Z19maWxlcyAoc3RydWN0IG9oY2lfaGNkICpvaGNpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk3MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBgY3JlYXRlX2RlYnVnX2ZpbGVzYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgYmFjayBpbnRvIHRoZSBjb2RlLiBNeSBndXQgZmVlbGluZyBpcyB0byBmb2N1cyBvbiB0aGF0IGBjcmVhdGVfZGVidWdfZmlsZXNgIGZ1bmN0aW9uLiBJdOKAmXMgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB3aGVuIHRyYWNraW5nIGRvd24gcG90ZW50aWFsIGlzc3VlcyBvciBkZWJ1Z2dpbmcgYSBuZXcgc3lzdGVtLCBiZWNhdXNlIGl0IGlzIHNvbWV0aGluZyBJIGNhbiBzZWUgYSBsb3Qgb2YgZGV2ZWxvcGVycyB1c2luZyB0byBsb29rIGZvciBjbHVlcywgYW5kIGlzIHByb2JhYmx5IHVzZWQgcXVpdGUgZnJlcXVlbnRseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGNvbWZvcnRhYmxlIHRoYXQgdGhlIGZpbGVzIGdlbmVyYXRlZCBtYXRjaCBleHBlY3RhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgaW5wdXRzIGl0IHRha2VzIGFuZCBleGFjdGx5IHdoYXQgaXQgb3V0cHV0cy4gSG9wZWZ1bGx5LCBpdCBoYXMgZGVjZW50IGxvZ2dpbmcsIG9yIGF0IGxlYXN0IHNvbWUgaW5mb3JtYXRpdmUgZmlsZW5hbWVzIHRoYXQgY2FuIGxlYWQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiBpdCYjMzk7cyBjb3JyZWN0bHkgY29uZmlndXJlZCBpbiB0aGUgZmlyc3QgcGxhY2UsIG9yIGlmIHNvbWV0aGluZyBpcyBhY2NpZGVudGFsbHkgb3ZlcnJpZGluZyBpdHMgYmVoYXZpb3IuIEl0IGNhbiBiZSBlYXN5IHRvIGxvc2UgdHJhY2sgb2Ygc2V0dGluZ3MgYXMgd2UgZ28sIHNvIGxldHMgY29uZmlybSB0aGUgc3RhdGUgYW5kIHNldHRpbmdzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCB5aWVsZHMuIEl0JiMzOTtzIG9mdGVuIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzYwOlx0e1xuIDc2MTpcdFx0c3RydWN0IHVzYl9idXMgKmJ1cyA9IFx1MDAyNm9oY2lfdG9faGNkKG9oY2kpLVx1MDAzZXNlbGY7XG4gNzYyOlx0XHRzdHJ1Y3QgZGVudHJ5ICpyb290O1xuIDc2MzpcdFxuIDc2NDpcdFx0cm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihidXMtXHUwMDNlYnVzX25hbWUsIG9oY2lfZGVidWdfcm9vdCk7XG4gNzY1Olx0XHRvaGNpLVx1MDAzZWRlYnVnX2RpciA9IHJvb3Q7XG4gNzY2Olx0XG4gNzY3Olx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2FzeW5jXCYjMzQ7LCBTX0lSVUdPLCByb290LCBvaGNpLCBcdTAwMjZkZWJ1Z19hc3luY19mb3BzKTtcbiA3Njg6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7cGVyaW9kaWNcJiMzNDssIFNfSVJVR08sIHJvb3QsIG9oY2ksXG4gNzY5Olx0XHRcdFx0ICAgIFx1MDAyNmRlYnVnX3BlcmlvZGljX2ZvcHMpO1xuIDc3MDpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtyZWdpc3RlcnNcJiMzNDssIFNfSVJVR08sIHJvb3QsIG9oY2ksXG4gNzcxOlx0XHRcdFx0ICAgIFx1MDAyNmRlYnVnX3JlZ2lzdGVyc19mb3BzKTtcbiA3NzI6XHRcbiA3NzM6XHRcdG9oY2lfZGJnIChvaGNpLCBcJiMzNDtjcmVhdGVkIGRlYnVnIGZpbGVzXFxuXCYjMzQ7KTtcbiA3NzQ6XHR9XG4gNzc1Olx0XG4gNzc2Olx0c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9kZWJ1Z19maWxlcyAoc3RydWN0IG9oY2lfaGNkICpvaGNpKVxuIDc3NzpcdHtcbiA3Nzg6XHRcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShvaGNpLVx1MDAzZWRlYnVnX2Rpcik7XG4gNzc5Olx0fVxuIDc4MDpcdFxuIDc4MTpcdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4gNzgyOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjI1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyB0aGUgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBkZWJ1Z2ZzIGNoYW5nZSB3YXJyYW50cyBmdXp6aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7RGVidWdmcywgaHVoPyBJcyB0aGlzIGV2ZW4gd29ydGggdGhlIGVmZm9ydD8mIzM0OyBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogb25seSByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgaXQmIzM5O3MgZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgbm9uLWZ1bmN0aW9uYWwgY29uc3RhbnQgbW9kaWZpY2F0aW9ucywgb3IgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCgpGaXJzdCwgaXMgZGVidWdmcyByZWFjaGFibGU/IFllcywgaXQgaXMuIE5vdywgaXMgdGhpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBBdCBmaXJzdCBnbGFuY2UsIGl0IGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgbWVtb3J5IGFsbG9jYXRpb24gcmVmYWN0b3IgZnJvbSBgX19nZXRfZnJlZV9wYWdlc2AgdG8gYGttYWxsb2NgIGFuZCBgZ2V0X3plcm9lZF9wYWdlYCB0byBga3phbGxvY2AuIEhhbmcgb24sIGxldCYjMzk7cyBtYWtlIHN1cmUgSSBkaWRuJiMzOTt0IG1pc3MgYW55dGhpbmcuCgpPa2F5LCBpbiBgdXNiX2RldmljZV9kdW1wYCwgdGhlIGNoYW5nZSBpczoKCmBgYGMKLQlwYWdlc19zdGFydCA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlcyhHRlBfTk9JTywgMSk7CiYjNDM7CXBhZ2VzX3N0YXJ0ID0ga21hbGxvYyhQQUdFX1NJWkUgJmx0OyZsdDsgMSwgR0ZQX05PSU8pOwpgYGAKYW5kCmBgYGMKLQkJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcGFnZXNfc3RhcnQsIDEpOwomIzQzOwkJCWtmcmVlKHBhZ2VzX3N0YXJ0KTsKYGBgCkFuZCBpbiBgb2hjaS1kYmcuY2A6CmBgYGMKLQkJYnVmLSZndDtwYWdlID0gKGNoYXIgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiYjNDM7CQlidWYtJmd0O3BhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CmBgYAphbmQKYGBgYwotCWlmIChidWYpIHsKLQkJaWYgKGJ1Zi0mZ3Q7cGFnZSkKLQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWYtJmd0O3BhZ2UpOwotCQlrZnJlZShidWYpOwotCX0KJiM0MzsJa2ZyZWUoYnVmLSZndDtwYWdlKTsKJiM0MzsJa2ZyZWUoYnVmKTsKYGBgCgpUaGlzIGlzIGVzc2VudGlhbGx5IGEgc3RyYWlnaHRmb3J3YXJkIG1lbW9yeSBhbGxvY2F0aW9uIGNoYW5nZS4gSXQmIzM5O3MgcmVmYWN0b3JpbmcsIHJlcGxhY2luZyB0aGUgcGFnZSBhbGxvY2F0b3Igd2l0aCB0aGUgc2xhYiBhbGxvY2F0b3IuCgpJcyB0aGlzIHdvcnRoIGZ1enppbmc/IEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgZGlmZmVyZW50IGFsbG9jYXRvciBpcyBiZWluZyB1c2VkLiBFdmVuIGlmIGl0JiMzOTtzICpqdXN0KiByZWZhY3RvcmluZywgaXQgY291bGQgaW50cm9kdWNlIG5ldyB2dWxuZXJhYmlsaXRpZXMuIEJ1dCB3YWl0LCBsZXQmIzM5O3MgcmV2aXNpdCB0aGUgcHJvbXB0LiBJdCBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IG1lbnRpb24gcmVmYWN0b3JpbmcsIGJ1dCBpdCBkb2VzIHNheSB3aGF0IGlzbiYjMzk7dCB3b3J0aCBmdXp6aW5nLiBUaGUgcHJvbXB0IGxpc3QgKmRvZXMgbm90KiBpbmNsdWRlIHJlZmFjdG9yaW5nLgoKQWxyaWdodCwgaXMgdGhlIGNvZGUgcmVhY2hhYmxlIGluIFFFTVU/IFllcy4gYC9zeXMva2VybmVsL2RlYnVnL3VzYi9kZXZpY2VzYCBpcyByZWFjaGFibGUgZm9yIGB1c2JfZGV2aWNlX2R1bXBgLiBBbmQgYG9oY2ktZGJnLmNgIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBkZWJ1Z2ZzIGFzIHdlbGwsIHByb3ZpZGVkIE9IQ0kgaXMgZW5hYmxlZC4gQ2FuIHdlIGVuYWJsZSBPSENJIGluIFFFTVU/IFllcywgUUVNVSBoYXMgYHBjaS1vaGNpYCBhbmQgYHN5c2J1cy1vaGNpYCB3aGljaCB3ZSBjYW4gdXNlIGZvciBlbmFibGluZyBPSENJLgoKU28sIGl0JiMzOTtzIHJlYWNoYWJsZSBhbmQgYSBmdW5jdGlvbmFsIGNoYW5nZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzcGVjaWZpYyBjb25maWcgcmVxdWlyZW1lbnRzIEkmIzM5O20gbWlzc2luZy4gYHVzYl9kZXZpY2VfZHVtcGAgaXMgaW4gYGRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jYCwgYW5kIEkmIzM5O2xsIGNoZWNrIGBkcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4KCkJhc2VkIG9uIGFsbCB0aGlzLCBpdCBzZWVtcyByZWFzb25hYmxlIHRoYXQgdGhpcyB3YXJyYW50cyBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZpY2VzLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGU9MTA9dXNiY29yZS15ICYjNDM7PSBjb25maWcubyBmaWxlLm8gYnVmZmVyLm8gc3lzZnMubyBlbmRwb2ludC5vXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlOjExOnVzYmNvcmUteSAmIzQzOz0gZGV2aW8ubyBub3RpZnkubyBnZW5lcmljLm8gcXVpcmtzLm8gZGV2aWNlcy5vXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlLTEyLXVzYmNvcmUteSAmIzQzOz0gcGh5Lm8gcG9ydC5vIHRyYWNlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNzgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVVNCIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlc2UgVVNCIGNvbXBvbmVudHMgYXJlIGNvbmZpZ3VyZWQuIFJpZ2h0LCBzbyB0aGlzIGB1c2Jjb3JlYCB0aGluZywgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHVuZGVyIHRoZSB1bWJyZWxsYSBvZiBgQ09ORklHX1VTQmAsIG5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgb2hjaS1kYmcuY2AsIEkgc2VlIGl0JiMzOTtzIGxpbmtlZCB0byBgb2hjaS1oY2QuY2AsIHdoaWNoLCBpbiB0dXJuLCBpcyBjb250cm9sbGVkIGJ5IGBDT05GSUdfVVNCX09IQ0lfSENEYC4gSG1tLCBhIHF1aWNrIGNoZWNrIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjay4uLiBJIHdvbmRlciwgaXMgYG9oY2ktZGJnLmNgIGFsd2F5cyBjb21waWxlZCBpbiB3aGVuIGBDT05GSUdfVVNCX09IQ0lfSENEYCBpcyBlbmFibGVkPyBOZWVkIHRvIHZlcmlmeSB0aGF0IHJlbGF0aW9uc2hpcC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBgb2hjaS1oY2QuY2Agc291cmNlIGFnYWluIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY3kuIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvaGNpLWRiZy5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYz04NT1zdGF0aWMgdm9pZCBpb193YXRjaGRvZ19mdW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMtODctI2luY2x1ZGUgXCYjMzQ7b2hjaS1odWIuY1wmIzM0O1xuZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jOjg4OiNpbmNsdWRlIFwmIzM0O29oY2ktZGJnLmNcJiMzNDtcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYy04OS0jaW5jbHVkZSBcJiMzNDtvaGNpLW1lbS5jXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjIzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBVU0IgT0hDSSBEZWJ1Z2dpbmcgQ29kZSoqCgpZZXMsIHRoYXQgbWFrZXMgc2Vuc2UgaW4gdGhlIGdlbmVyYWwgY29udGV4dC4gQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gaXMgdGhlIGRlYnVnZ2luZyBmdW5jdGlvbmFsaXR5IHdpdGhpbiBgb2hjaS1kYmcuY2AgZGVwZW5kZW50IG9uIHRoZSBgQ09ORklHX0RFQlVHX0ZTYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24/IEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gd2hldGhlciB0aGUgZGVidWdnaW5nIGZlYXR1cmVzIGFyZSBjb21waWxlZCBpbiBvciBub3QgYmFzZWQgb24gdGhhdCBmbGFnLiBUaW1lIHRvIGp1bXAgaW50byBgb2hjaS1kYmcuY2AgYW5kIHNlYXJjaCBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrcyBvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyByZWxhdGVkIHRvIGBDT05GSUdfREVCVUdfRlNgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZW5hYmxlZCBhbmQgZGlzYWJsZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0RFQlVHX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NDIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgc25pcHBldCBvZiB0aG91Z2h0LCByZW5kZXJlZCBhcyBpZiBpdCB3ZXJlICpteSogaW50ZXJuYWwgbW9ub2xvZ3VlLCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgT0hDSSBEZXRhaWxzKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgbXkgYmVhcmluZ3Mgb24gdGhpcy4gU2VlbXMgbGlrZSB3ZSYjMzk7cmUgemVyb2luZyBpbiBvbiBhIHBhcnRpY3VsYXIgcGllY2Ugb2YgdGhlIHB1enpsZS4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYG9oY2kuaGAuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoYXQgYW55IGhhcmR3YXJlIGludGVyYWN0aW9uIHdpbGwgYmUgZGVmaW5lZCwgYXQgbGVhc3QgaW4gcGFydCwgaW4gdGhhdCBoZWFkZXIuIEkmIzM5O20gdGhpbmtpbmcgcmVnaXN0ZXIgbGF5b3V0cywgYml0ZmllbGRzLCBpbnRlcnJ1cHQgZGVmaW5pdGlvbnMg4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgc3RydWN0dXJlIG9mIHRoZSBPcGVuIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgaXMgZ29pbmcgdG8gYmUgbGFpZCBvdXQsIHRoZSBza2VsZXRvbiBvZiB0aGUgYmVhc3QuIEhvcGVmdWxseSwgaXQmIzM5O3Mgd2VsbC1jb21tZW50ZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBiYXNlIGFkZHJlc3Mgb2Zmc2V0cyBmb3IgdGhlIE9IQ0kgcmVnaXN0ZXJzLCBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9ucywgaW50ZXJydXB0IG51bWJlcnMuLi5hbGwgdGhlIHVzdWFsIHN1c3BlY3RzIHRoYXQgSSBuZWVkIHRvIG1hbmlwdWxhdGUgdGhpcyBoYXJkd2FyZSBwcm9wZXJseS4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIHdhaXRpbmcgdG8gYmUgdW5lYXJ0aGVkLiBUaGlzIGZpbGUgaXMgZ29pbmcgdG8gdGVsbCB0aGUgc3Rvcnkgb2YgdGhlIGhhcmR3YXJlJiMzOTtzIGludGVyZmFjZSB0byB0aGUgc29mdHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2hjaS1kYmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L29oY2kuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTM2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG9oY2ktaGNkLmNgIGFuZCBEZWJ1Z0ZTKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgT3BlbiBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIChPSENJKSBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIGRlYnVnZ2luZy4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCBhIHByZXR0eSBzdGFuZGFyZCBvbmUgaW4gdGhlc2Ugc2l0dWF0aW9ucywgaXMgdG8gemVybyBpbiBvbiBgb2hjaS1oY2QuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYywgc28gbmF0dXJhbGx5LCB0aGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBUaGUgcmVhbCBrZXkgaGVyZSBpcyBnb2luZyB0byBiZSB0cmFjaW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBgQ09ORklHX0RFQlVHX0ZTYC4gSSYjMzk7bSBnb2luZyB0byBiZSBsb29raW5nIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MgdGhhdCBhY3RpdmF0ZSBkZWJ1Z2dpbmcgZmVhdHVyZXMgd2hlbiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgZGVidWdmcy1yZWxhdGVkIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb25zIHVzZWQgd2l0aGluIHRoaXMgZHJpdmVyLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgcGljdHVyZSBvZiBob3cgdGhlIGRlYnVnIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBhbmQgd2hhdCBraW5kIG9mIGluc2lnaHRzIEkgY2FuIGdsZWFuIGZyb20gaXQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfREVCVUdfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQxOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlYnVnZnMgQ29uZmlndXJhdGlvbiBmb3IgVVNCX09IQ0lfSENEIFRlc3RpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgYGRlYnVnZnNfY3JlYXRlX2RpcmAgdXNlZC4gUmlnaHQgYXdheSwgbXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZGVidWdmcy4gSWYgYENPTkZJR19ERUJVR19GU2AgaXNuJiMzOTt0IGVuYWJsZWQsIGl0JiMzOTtzIGp1c3QgYSBzdHViLCBzbyBpdCYjMzk7cyBub3QgYWN0dWFsbHkgZG9pbmcgYW55dGhpbmcuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBwb2ludCB0byBjb25zaWRlciBmb3IgdGVzdGluZyB0aGUgZmlsZXMgdGhhdCBhcmUgYmVpbmcgY3JlYXRlZC4KClNpbmNlIHdlIG5lZWQgYENPTkZJR19ERUJVR19GU2AgdG8gKmFjdHVhbGx5KiB0ZXN0IGFueXRoaW5nIGhlcmUuIEkgaGF2ZSB0byB0aGluayBhYm91dCB3aGF0IG90aGVyIGNvbmZpZyBvcHRpb25zIGFyZSByZXF1aXJlZC4gQnV0IHdhaXQsIGBDT05GSUdfREVCVUdfRlNgIGlzIHByZXR0eSBnZW5lcmljLCBhbmQgc3l6a2FsbGVyIHByb2JhYmx5IGFscmVhZHkgaGFzIGl0IGVuYWJsZWQgYW55d2F5LiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYWlkIG5vdCB0byBsaXN0IHRoZSBzdXBlciBnZW5lcmljIHN0dWZmLCBvbmx5IGNvbmZpZ3Mgc3BlY2lmaWMgdG8gdGhlIGNoYW5nZWQgY29kZS4KClNvLCB0aGUgY29kZSBpcyB1c2luZyBVU0IsIG1lYW5pbmcgSSBzaG91bGQgYmUgbGlzdGluZyBgVVNCX09IQ0lfSENEYC4KCkhhbmcgb24gdGhvdWdoLiBJcyBpdCBgVVNCX09IQ0lfSENEX1BDSWAgb3IgYFVTQl9PSENJX0hDRF9QTEFURk9STWA/IGBVU0JfT0hDSV9IQ0RgIGlzIGEgdHJpc3RhdGUsIGl0JiMzOTtzIHVzdWFsbHkgc2VsZWN0ZWQgYnkgZWl0aGVyIGBVU0JfT0hDSV9IQ0RfUENJYCBvciBzb21ldGhpbmcgbGlrZSB0aGF0LiBMZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBgZHJpdmVycy91c2IvaG9zdC9LY29uZmlnYCBmaWxlIGFuZCBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX09IQ0lfSENEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaG9zdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZz0zOTI9Y29uZmlnIFVTQl9NQVgzNDIxX0hDRFxuLS1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00MDItXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NDAzOmNvbmZpZyBVU0JfT0hDSV9IQ0RcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00MDQtXHR0cmlzdGF0ZSBcJiMzNDtPSENJIEhDRCAoVVNCIDEuMSkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZz00MTk9aWYgVVNCX09IQ0lfSENEXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDIwLVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjQyMTpjb25maWcgVVNCX09IQ0lfSENEX09NQVAxXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDIyLVx0dHJpc3RhdGUgXCYjMzQ7T0hDSSBzdXBwb3J0IGZvciBPTUFQMS8yIGNoaXBzXCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQyNy1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo0Mjg6Y29uZmlnIFVTQl9PSENJX0hDRF9TUEVBUlxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQyOS1cdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgZm9yIFNUIFNQRUFyIG9uLWNoaXAgT0hDSSBVU0IgY29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00MzUtXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NDM2OmNvbmZpZyBVU0JfT0hDSV9IQ0RfU1RJXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDM3LVx0dHJpc3RhdGUgXCYjMzQ7U3VwcG9ydCBmb3IgU1QgU1RpSHh4eCBvbi1jaGlwIE9IQ0kgVVNCIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDQ0LVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjQ0NTpjb25maWcgVVNCX09IQ0lfSENEX1MzQzI0MTBcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00NDYtXHR0cmlzdGF0ZSBcJiMzNDtPSENJIHN1cHBvcnQgZm9yIFNhbXN1bmcgUzNDNjR4eCBTb0Mgc2VyaWVzXCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQ1Mi1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo0NTM6Y29uZmlnIFVTQl9PSENJX0hDRF9MUEMzMlhYXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDU0LVx0dHJpc3RhdGUgXCYjMzQ7U3VwcG9ydCBmb3IgTFBDIG9uLWNoaXAgT0hDSSBVU0IgY29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00NjItXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NDYzOmNvbmZpZyBVU0JfT0hDSV9IQ0RfUFhBMjdYXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDY0LVx0dHJpc3RhdGUgXCYjMzQ7U3VwcG9ydCBmb3IgUFhBMjdYL1BYQTNYWCBvbi1jaGlwIE9IQ0kgVVNCIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDcwLVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjQ3MTpjb25maWcgVVNCX09IQ0lfSENEX0FUOTFcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00NzItXHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciBBdG1lbCBvbi1jaGlwIE9IQ0kgVVNCIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDc4LVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjQ3OTpjb25maWcgVVNCX09IQ0lfSENEX09NQVAzXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDgwLVx0dHJpc3RhdGUgXCYjMzQ7T0hDSSBzdXBwb3J0IGZvciBPTUFQMyBhbmQgbGF0ZXIgY2hpcHNcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDkwLVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjQ5MTpjb25maWcgVVNCX09IQ0lfSENEX0RBVklOQ0lcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00OTItXHR0cmlzdGF0ZSBcJiMzNDtPSENJIHN1cHBvcnQgZm9yIFRJIERhVmluY2kgREE4eHhcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNTAxLVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjUwMjpjb25maWcgVVNCX09IQ0lfSENEX1BQQ19PRl9CRVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTUwMy1cdGJvb2wgXCYjMzQ7T0hDSSBzdXBwb3J0IGZvciBPRiBwbGF0Zm9ybSBidXMgKGJpZyBlbmRpYW4pXCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTUxMC1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo1MTE6Y29uZmlnIFVTQl9PSENJX0hDRF9QUENfT0ZfTEVcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy01MTItXHRib29sIFwmIzM0O09IQ0kgc3VwcG9ydCBmb3IgT0YgcGxhdGZvcm0gYnVzIChsaXR0bGUgZW5kaWFuKVwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy01MTgtXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NTE5OmNvbmZpZyBVU0JfT0hDSV9IQ0RfUFBDX09GXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNTIwLVx0Ym9vbFxuLS1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy01MjMtXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NTI0OmNvbmZpZyBVU0JfT0hDSV9IQ0RfUENJXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNTI1LVx0dHJpc3RhdGUgXCYjMzQ7T0hDSSBzdXBwb3J0IGZvciBQQ0ktYnVzIFVTQiBjb250cm9sbGVyc1wmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy01MzItXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NTMzOmNvbmZpZyBVU0JfT0hDSV9IQ0RfU1NCXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNTM0LVx0Ym9vbCBcJiMzNDtPSENJIHN1cHBvcnQgZm9yIEJyb2FkY29tIFNTQiBPSENJIGNvcmUgKERFUFJFQ0FURUQpXCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnPTU1MD1jb25maWcgVVNCX09IQ0lfRVhZTk9TXG4tLVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTU1Ni1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo1NTc6Y29uZmlnIFVTQl9PSENJX0hDRF9QTEFURk9STVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTU1OC1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgT0hDSSBkcml2ZXIgZm9yIGEgcGxhdGZvcm0gZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTg2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBlbWJlZGRlZCBzeXN0ZW1zIGV4cGVydDoKCioqVVNCIENvbnRyb2xsZXIgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgUUVNVSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgVVNCIGhvc3QgY29udHJvbGxlciBjb25maWd1cmF0aW9uIGZvciBRRU1VLCBhbmQgdGhlIGluaXRpYWwgaW5zdGluY3QgcG9pbnRzIHRvd2FyZHMgYFVTQl9PSENJX0hDRF9QQ0lgLiBUaGF0IHJpbmdzIGEgYmVsbCwgSSBvZnRlbiB1c2UgdGhhdCBmb3IgZW11bGF0aW5nIG9sZGVyIE9IQ0kgY29udHJvbGxlcnMuIEJ1dCBob2xkIG9uLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGJhc2UgY29uZmlndXJhdGlvbiBvcHRpb24gZmlyc3QuIFRoZSBtYWluIGNvbmZpZ3VyYXRpb24gc2VlbXMgdG8gYmUgYFVTQl9PSENJX0hDRGAsIHNvIGl0JiMzOTtzIGJlc3QgcHJhY3RpY2UgdG8gY29uZmlybSB0aGUgZXhhY3QgcHVycG9zZSBvZiBgVVNCX09IQ0lfSENEX1BDSWAuIExldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYW5kIG1ha2Ugc3VyZSB0aGVyZSBpc24mIzM5O3QgYSBzdWJ0bGUgZGlmZmVyZW5jZSBvciBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgSSYjMzk7bSBvdmVybG9va2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYFVTQl9PSENJX0hDRF9QQ0lgIGlzIGp1c3QgZW5hYmxpbmcgYSBQQ0ktc3BlY2lmaWMgdmFyaWFudCwgb3IgaWYgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGVsc2UgZ29pbmcgb24uIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX09IQ0lfSENEX1BDSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L0tjb25maWc9NTE5PWNvbmZpZyBVU0JfT0hDSV9IQ0RfUFBDX09GXG4tLVxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTUyMy1cbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo1MjQ6Y29uZmlnIFVTQl9PSENJX0hDRF9QQ0lcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy01MjUtXHR0cmlzdGF0ZSBcJiMzNDtPSENJIHN1cHBvcnQgZm9yIFBDSS1idXMgVVNCIGNvbnRyb2xsZXJzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTkxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVVNCIENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBVU0IgY29uZmlndXJhdGlvbnMgaGVyZS4gSSBzZWUgYFVTQl9PSENJX0hDRGAgYW5kIGBVU0JfT0hDSV9IQ0RfUENJYCBsaXN0ZWQsIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBleHBlY3QgZm9yIHRoZSBPSENJIGhvc3QgY29udHJvbGxlciBkcml2ZXIuIEJ1dCBJIGFsc28gbmVlZCB0byBjb25zaWRlciBkZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzLiBXaGF0IGFib3V0IGB1c2JfZGV2aWNlX2R1bXBgPyBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgaXQmIzM5O3MgaW4gYGRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdCBmaWxlIGlzIGFsd2F5cyBjb21waWxlZCwgb3IgaWYgaXQmIzM5O3MgY29uZGl0aW9uYWwgYmFzZWQgb24gc29tZSBvdGhlciBjb25maWd1cmF0aW9uIHNldHRpbmcsIGVzcGVjaWFsbHkgaWYgSSYjMzk7bSBwbGFubmluZyBhbnkgbW9kaWZpY2F0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgZHJpdmVycy91c2IvY29yZS9NYWtlZmlsZWAgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBydWxlcyB0ZWxsIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZpY2VzLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGU9MTA9dXNiY29yZS15ICYjNDM7PSBjb25maWcubyBmaWxlLm8gYnVmZmVyLm8gc3lzZnMubyBlbmRwb2ludC5vXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlOjExOnVzYmNvcmUteSAmIzQzOz0gZGV2aW8ubyBub3RpZnkubyBnZW5lcmljLm8gcXVpcmtzLm8gZGV2aWNlcy5vXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlLTEyLXVzYmNvcmUteSAmIzQzOz0gcGh5Lm8gcG9ydC5vIHRyYWNlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUaGlzIFBhdGNoOiBNeSBFdmFsdWF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtZZXMsIGl0JiMzOTtzIGRlZmluaXRlbHkgY29tcGlsZWQgaWYgYENPTkZJR19VU0JgIGlzIGVuYWJsZWQuJiMzNDsgQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHRoaW5nIGFjdHVhbGx5ICp3b3J0aCogZnV6emluZz8gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyByZXBsYWNpbmcgYF9fZ2V0X2ZyZWVfcGFnZXNgIHdpdGggYGttYWxsb2NgIGFuZCBgZ2V0X3plcm9lZF9wYWdlYCB3aXRoIGBremFsbG9jYC4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBiZWNhdXNlIGl0JiMzOTtzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgdGhlIG1lbW9yeSBhbGxvY2F0b3IuCgpUaGlzIGNvdWxkIGRlZmluaXRlbHkgZXhwb3NlIGRpZmZlcmVudCBidWdzISBGb3IgZXhhbXBsZSwgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgbWlnaHQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG5vdywgYmVjYXVzZSBLQVNBTiB0cmFja3MgYGttYWxsb2NgIGFsbG9jYXRpb25zIG1vcmUgdGhvcm91Z2hseSB0aGFuIHBhZ2UgYWxsb2NhdGlvbnMsIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIGNvbmZpZy4KClRoZW4gdGhlcmUmIzM5O3MgdGhlIHNpemUgZGlmZmVyZW5jZS4gTGV0IG1lIHNlZS4uLiBgX19nZXRfZnJlZV9wYWdlcyhHRlBfTk9JTywgMSlgIGFsbG9jYXRlcyB0d28gcGFnZXMsIG9yIDgxOTIgYnl0ZXMgb24geDg2LiBXaGlsZSBga21hbGxvYyhQQUdFX1NJWkUgJmx0OyZsdDsgMSwgR0ZQX05PSU8pYCBhbHNvIGFsbG9jYXRlcyA4MTkyIGJ5dGVzLiBgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpYCBhbGxvY2F0ZXMgNDA5NiBieXRlcyBhbmQgYGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKWAgYWxzbyBhbGxvY2F0ZXMgNDA5NiBieXRlcy4gU28sIHNhbWUgc2l6ZSwganVzdCBhIGRpZmZlcmVudCBhbGxvY2F0b3IuCgpPa2F5LCBzbyB0aGUgYm90dG9tIGxpbmU6IEkgdGhpbmsgaXQgKmlzKiB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgdGhlIGNvZGUgcGF0aCBpcyByZWFjaGFibGUuCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHdoYXQgc3ltYm9scyB0byBmb2N1cyBvbi4gSSBzZWUgYHVzYl9kZXZpY2VfZHVtcGAsIGBmaWxsX2J1ZmZlcmAsIGFuZCBgZGVidWdfY2xvc2VgLgoKV2FpdCwgYXJlIHRob3NlIHN5bWJvbHMuLi4gQWgsIGBmaWxsX2J1ZmZlcmAgYW5kIGBkZWJ1Z19jbG9zZWAgYXJlIHN0YXRpYyBmdW5jdGlvbnMgaW4gYG9oY2ktZGJnLmNgLiBBbmQgYHVzYl9kZXZpY2VfZHVtcGAgaXMgaW4gYGRldmljZXMuY2AuIEhtbSwgY2FuIEkgdXNlIHN0YXRpYyBmdW5jdGlvbnMgYXMgZm9jdXMgc3ltYm9scz8gWWVzLCBzeXprYWxsZXIgY2FuIHVzZSBzdGF0aWMgZnVuY3Rpb25zLCBzbyB0aGF0JiMzOTtzIGZpbmUuIEJ1dCBgZmlsbF9idWZmZXJgIGlzIGEgcHJldHR5IGdlbmVyaWMgbmFtZS4gTWF5YmUgc29tZXRoaW5nIGxpa2UgYGRlYnVnX291dHB1dGAgZnJvbSBgb2hjaS1kYmcuY2Agd291bGQgYmUgYmV0dGVyPyBJIHNob3VsZCBkb3VibGUgY2hlY2sgYG9oY2ktZGJnLmNgIHRob3VnaCwganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWxsX2J1ZmZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM9NjY1PXN0YXRpYyBzdHJ1Y3QgZGVidWdfYnVmZmVyICphbGxvY19idWZmZXIoc3RydWN0IG9oY2lfaGNkICpvaGNpLFxuLS1cbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy02ODAtXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM6NjgxOnN0YXRpYyBpbnQgZmlsbF9idWZmZXIoc3RydWN0IGRlYnVnX2J1ZmZlciAqYnVmKVxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTY4Mi17XG4tLVxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jPTcwND1zdGF0aWMgc3NpemVfdCBkZWJ1Z19vdXRwdXQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1Zixcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNzExLVx0aWYgKGJ1Zi1cdTAwM2Vjb3VudCA9PSAwKSB7XG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM6NzEyOlx0XHRyZXQgPSBmaWxsX2J1ZmZlcihidWYpO1xuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTcxMy1cdFx0aWYgKHJldCAhPSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGB1c2JfZGV2aWNlX2R1bXBgKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGB1c2JfZGV2aWNlX2R1bXBgLiYjMzQ7IFRoaXMgc3VnZ2VzdHMgSSYjMzk7bSBhbHJlYWR5IGRlZXAgaW50byB0cm91Ymxlc2hvb3Rpbmcgb3IgYW5hbHlzaXMgb2YgYSBVU0ItcmVsYXRlZCBpc3N1ZSwgYW5kIG15IGludHVpdGlvbiBwb2ludHMgbWUgdG93YXJkcyB0aGF0IHBhcnRpY3VsYXIgdXRpbGl0eS4gSXQmIzM5O3MgbGlrZWx5IGEgZGVidWdnaW5nIHRvb2wsIGEgc2NyaXB0LCBvciBhIHNwZWNpZmljIGZ1bmN0aW9uIHdpdGhpbiBhIGxhcmdlciBVU0IgbWFuYWdlbWVudCBzeXN0ZW0uIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIGEgc3BlY2lmaWMgVVNCIGRldmljZSYjMzk7cyBzdGF0ZSwgY29uZmlndXJhdGlvbiwgb3IgcG90ZW50aWFsbHkgZXZlbiBpdHMgY29tbXVuaWNhdGlvbiBsb2dzLiBUaGlzIGlzIHVzdWFsbHkgdGhlIGdvLXRvIHdoZW4gSSYjMzk7bSBjaGFzaW5nIGRvd24gZHJpdmVyIHByb2JsZW1zLCBidXMgZXJyb3JzLCBvciBkaXNjcmVwYW5jaWVzIGluIGRldmljZSBlbnVtZXJhdGlvbi4gSXQmIzM5O3MgdGhlIGZpcnN0IHBsYWNlIEkmIzM5O2QgbG9vayBmb3IgbG93LWxldmVsIGRldGFpbHMgYWJvdXQgdGhlIGRldmljZSBJJiMzOTttIHRyb3VibGVzaG9vdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNiX2RldmljZV9kdW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM9MzY1PXN0YXRpYyBjaGFyICp1c2JfZHVtcF9kZXNjKGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtMzkwLSAqL1xuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM6MzkxOnN0YXRpYyBzc2l6ZV90IHVzYl9kZXZpY2VfZHVtcChjaGFyIF9fdXNlciAqKmJ1ZmZlciwgc2l6ZV90ICpuYnl0ZXMsXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy0zOTItXHRcdFx0ICAgICAgIGxvZmZfdCAqc2tpcF9ieXRlcywgbG9mZl90ICpmaWxlX29mZnNldCxcbi0tXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy00OTgtXHRcdHVzYl9sb2NrX2RldmljZShjaGlsZGRldik7XG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYzo0OTk6XHRcdHJldCA9IHVzYl9kZXZpY2VfZHVtcChidWZmZXIsIG5ieXRlcywgc2tpcF9ieXRlcyxcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jLTUwMC1cdFx0XHRcdCAgICAgIGZpbGVfb2Zmc2V0LCBjaGlsZGRldiwgYnVzLFxuLS1cbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jPTUxMD1zdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4tLVxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTI5LVx0XHR1c2JfbG9ja19kZXZpY2UoYnVzLVx1MDAzZXJvb3RfaHViKTtcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jOjUzMDpcdFx0cmV0ID0gdXNiX2RldmljZV9kdW1wKFx1MDAyNmJ1ZiwgXHUwMDI2bmJ5dGVzLCBcdTAwMjZza2lwX2J5dGVzLCBwcG9zLFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTMxLVx0XHRcdFx0ICAgICAgYnVzLVx1MDAzZXJvb3RfaHViLCBidXMsIDAsIDAsIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDcwMQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgRnVuY3Rpb24gTmFtZSBDb25mbGljdHMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZnVuY3Rpb25zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZm9yIHRoaXMgZGVidWdnaW5nIHNjZW5hcmlvLiBSaWdodCBub3csIEkmIzM5O20gemVyb2luZyBpbiBvbiBgdXNiX2RldmljZV9kdW1wYCwgd2hpY2ggc2VlbXMgcHJldHR5IHNwZWNpZmljLiBIb3dldmVyLCBJJiMzOTttIGEgbGl0dGxlIGNvbmNlcm5lZCBhYm91dCBgZmlsbF9idWZmZXJgIGFuZCBgZGVidWdfY2xvc2VgLiBUaG9zZSBhcmUgKmV4dHJlbWVseSogY29tbW9uIG5hbWVzLiBBbmQsIGdpdmVuIHRoYXQgd2UmIzM5O3JlIHRhcmdldGluZyBzeXprYWxsZXIgZm9yIGZ1enppbmcsIEkgbmVlZCB0byBiZSBjYXV0aW91cyBhYm91dCBwb3RlbnRpYWwgbmFtaW5nIGNvbmZsaWN0cy4gSWYgdGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIHRoZSB0b29sIG1pZ2h0IGluYWR2ZXJ0ZW50bHkgbWF0Y2ggb3RoZXIgZnVuY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZXMgaW4gdW5yZWxhdGVkIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoYXQgY291bGQgbGVhZCB0byBzb21lIHNlcmlvdXNseSBtaXNsZWFkaW5nIHJlc3VsdHMsIG9yIHdvcnNlLCB0cmlnZ2VyIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB1bmlxdWUgdGhlc2UgbmFtZXMgcmVhbGx5IGFyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG9ubHkgZGVhbGluZyB3aXRoICpteSogYGZpbGxfYnVmZmVyYCBhbmQgKm15KiBgZGVidWdfY2xvc2VgLiBUaW1lIHRvIGdvIGh1bnRpbmcgZm9yIG90aGVyIGluc3RhbmNlcyBvZiB0aG9zZSBmdW5jdGlvbiBuYW1lcyB0aHJvdWdob3V0IHRoZSBrZXJuZWwgc291cmNlIGFuZCBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBjbGVhcmx5IGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbnQgZmlsbF9idWZmZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZm90ZzIxMC9mb3RnMjEwLWhjZC5jPTczNj1zdGF0aWMgc3RydWN0IGRlYnVnX2J1ZmZlclxuLS1cbmRyaXZlcnMvdXNiL2ZvdGcyMTAvZm90ZzIxMC1oY2QuYy03NTItXG5kcml2ZXJzL3VzYi9mb3RnMjEwL2ZvdGcyMTAtaGNkLmM6NzUzOnN0YXRpYyBpbnQgZmlsbF9idWZmZXIoc3RydWN0IGRlYnVnX2J1ZmZlciAqYnVmKVxuZHJpdmVycy91c2IvZm90ZzIxMC9mb3RnMjEwLWhjZC5jLTc1NC17XG4tLVxuZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jPTkxNT1zdGF0aWMgc3RydWN0IGRlYnVnX2J1ZmZlciAqYWxsb2NfYnVmZmVyKHN0cnVjdCB1c2JfYnVzICpidXMsXG4tLVxuZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jLTkzMS1cbmRyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYzo5MzI6c3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXG5kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMtOTMzLXtcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM9NjY1PXN0YXRpYyBzdHJ1Y3QgZGVidWdfYnVmZmVyICphbGxvY19idWZmZXIoc3RydWN0IG9oY2lfaGNkICpvaGNpLFxuLS1cbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy02ODAtXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM6NjgxOnN0YXRpYyBpbnQgZmlsbF9idWZmZXIoc3RydWN0IGRlYnVnX2J1ZmZlciAqYnVmKVxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTY4Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzgxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgZmlsbF9idWZmZXJgIGlzIHByZXNlbnQgbm90IGp1c3Qgd2hlcmUgSSBpbml0aWFsbHkgc3VzcGVjdGVkLCBidXQgYWxzbyBpbiBgZWhjaS1kYmcuY2AgYW5kIGBmb3RnMjEwLWhjZC5jYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gbm90ZSBmb3IgZnV6emluZyBwdXJwb3Nlcy4KCioqQ29uc2lkZXJpbmcgVGFyZ2V0IFNjb3BlIGZvciBGdXp6aW5nKioKCklmIEkganVzdCB0YXJnZXQgYGZpbGxfYnVmZmVyYCBkaXJlY3RseSwgSSYjMzk7bGwgYmUgaGl0dGluZyB0aG9zZSAqb3RoZXIqIGZpbGVzIHRvby4gVGhhdCYjMzk7cyBwb3RlbnRpYWxseSBmaW5lLCBkZXBlbmRpbmcgb24gd2hhdCBJIHdhbnQgdG8gYWNjb21wbGlzaCwgb3IgcGVyaGFwcyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGRvd25zdHJlYW0gZWZmZWN0cywgbGlrZSB0aGUgY29tcGxleGl0eSBpbnRyb2R1Y2VkLiBBbHRlcm5hdGl2ZWx5LCBJJiMzOTt2ZSBnb3QgYW5vdGhlciBvcHRpb24gdGhhdCBtaWdodCBiZSBtb3JlIHRhcmdldGVkOiBJIHNlZSB0aGF0IGBkZWJ1Z19vdXRwdXRgIGNhbGxzIGBmaWxsX2J1ZmZlcmAuIFNvLCBJJiMzOTttIHRoaW5raW5nIEkgY2FuIHNwZWNpZnkgYGRlYnVnX291dHB1dGAgaW5zdGVhZC4gVGhpcyBsaWtlbHkgbGltaXRzIHRoZSBmdXp6aW5nIHRvICpvbmx5KiB3aGVyZSBgZGVidWdfb3V0cHV0YCBpcyB1c2VkLCB3aGljaCBjYWxscyB0aGUgdGhpbmcgSSYjMzk7bSBhY3R1YWxseSBpbnRlcmVzdGVkIGluLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgYGRlYnVnX291dHB1dGAgZXhpc3RzIGluIGBvaGNpLWRiZy5jYCB0byBnZXQgYSBtb3JlIGNvbmNyZXRlIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBpdCBsb29rcyBsaWtlIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgc3NpemVfdCBkZWJ1Z19vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jPTcwPXN0YXRpYyBpbnQgZGVidWdfaW5pdCh2b2lkKTtcbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYzo3MTpzdGF0aWMgc3NpemVfdCBkZWJ1Z19vdXRwdXQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZixcbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYy03Mi1cdFx0XHQgICAgc2l6ZV90IHVzZXJfbGVuLCBsb2ZmX3QgKm9mZnNldCk7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jPTYyMT1zdGF0aWMgYm9vbCBkZWJ1Z19tb3ZlX2VudHJ5KGZpbGVfcHJpdmF0ZV9pbmZvX3QgKnBfaW5mbywgYm9vbCByZXZlcnNlKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYy02MzMtICovXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmM6NjM0OnN0YXRpYyBzc2l6ZV90IGRlYnVnX291dHB1dChzdHJ1Y3QgZmlsZSAqZmlsZSxcdFx0LyogZmlsZSBkZXNjcmlwdG9yICovXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMtNjM1LVx0XHRcdCAgICBjaGFyIF9fdXNlciAqdXNlcl9idWYsXHQvKiB1c2VyIGJ1ZmZlciAqL1xuLS1cbmRyaXZlcnMvdXNiL2ZvdGcyMTAvZm90ZzIxMC1oY2QuYz0yODQ9c3RhdGljIGludCBkZWJ1Z19hc3luY19vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTtcbmRyaXZlcnMvdXNiL2ZvdGcyMTAvZm90ZzIxMC1oY2QuYy0yODUtXG5kcml2ZXJzL3VzYi9mb3RnMjEwL2ZvdGcyMTAtaGNkLmM6Mjg2OnN0YXRpYyBzc2l6ZV90IGRlYnVnX291dHB1dChzdHJ1Y3QgZmlsZSosIGNoYXIgX191c2VyKiwgc2l6ZV90LCBsb2ZmX3QqKTtcbmRyaXZlcnMvdXNiL2ZvdGcyMTAvZm90ZzIxMC1oY2QuYy0yODctc3RhdGljIGludCBkZWJ1Z19jbG9zZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7XG4tLVxuZHJpdmVycy91c2IvZm90ZzIxMC9mb3RnMjEwLWhjZC5jPTc1Mz1zdGF0aWMgaW50IGZpbGxfYnVmZmVyKHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1Zilcbi0tXG5kcml2ZXJzL3VzYi9mb3RnMjEwL2ZvdGcyMTAtaGNkLmMtNzc1LVxuZHJpdmVycy91c2IvZm90ZzIxMC9mb3RnMjEwLWhjZC5jOjc3NjpzdGF0aWMgc3NpemVfdCBkZWJ1Z19vdXRwdXQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZixcbmRyaXZlcnMvdXNiL2ZvdGcyMTAvZm90ZzIxMC1oY2QuYy03NzctXHRcdHNpemVfdCBsZW4sIGxvZmZfdCAqb2Zmc2V0KVxuLS1cbmRyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYz0yOTQ9c3RhdGljIGludCBkZWJ1Z19yZWdpc3RlcnNfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7XG5kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMtMjk1LVxuZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jOjI5NjpzdGF0aWMgc3NpemVfdCBkZWJ1Z19vdXRwdXQoc3RydWN0IGZpbGUqLCBjaGFyIF9fdXNlciosIHNpemVfdCwgbG9mZl90Kik7XG5kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMtMjk3LXN0YXRpYyBpbnQgZGVidWdfY2xvc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopO1xuLS1cbmRyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYz05MzI9c3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXG4tLVxuZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jLTk1NC1cbmRyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYzo5NTU6c3RhdGljIHNzaXplX3QgZGVidWdfb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsXG5kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMtOTU2LVx0XHRzaXplX3QgbGVuLCBsb2ZmX3QgKm9mZnNldClcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM9MzYzPXN0YXRpYyBpbnQgZGVidWdfYXN5bmNfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7XG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM6MzY0OnN0YXRpYyBzc2l6ZV90IGRlYnVnX291dHB1dChzdHJ1Y3QgZmlsZSosIGNoYXIgX191c2VyKiwgc2l6ZV90LCBsb2ZmX3QqKTtcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy0zNjUtc3RhdGljIGludCBkZWJ1Z19jbG9zZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7XG4tLVxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jPTY4MT1zdGF0aWMgaW50IGZpbGxfYnVmZmVyKHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1Zilcbi0tXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNzAzLVxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jOjcwNDpzdGF0aWMgc3NpemVfdCBkZWJ1Z19vdXRwdXQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZixcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy03MDUtXHRcdFx0c2l6ZV90IGxlbiwgbG9mZl90ICpvZmZzZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzU4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFwcHJvYWNoIHRvIERlYnVnZ2luZyB0aGUgVVNCIFN5c3RlbSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIEkgY2FuIHN0cmVhbWxpbmUgdGhpcyBkZWJ1Z2dpbmcgcHJvY2Vzcy4gSSYjMzk7bGwganVzdCBsZXZlcmFnZSBgZmlsbF9idWZmZXJgIGFuZCBgZGVidWdfY2xvc2VgLiBJdCYjMzk7cyBub3QgYSBjb25jZXJuIGlmIEkgaGFwcGVuIHRvIGhpdCB0aGUgRUhDSSBhbmQgRk9URzIxMCBpbnN0YW5jZXMgd2l0aCB0aG9zZSwgYXMgdGhlaXIgZGVidWdmcyBmaWxlcyBhcmUgcHJldHR5IHNpbWlsYXIgYW55d2F5LiAKCkhvd2V2ZXIsIGB1c2JfZGV2aWNlX2R1bXBgIOKAkyB0aGF0IG9uZSBpcyB1bmlxdWUuIEl0JiMzOTtzIHRoZSBrZXkgaGVyZS4KClNvLCB0aGUgY3JpdGljYWwgc3ltYm9scyBJJiMzOTttIHRhcmdldGluZyBhcmU6IGB1c2JfZGV2aWNlX2R1bXBgLCBgZmlsbF9idWZmZXJgLCBhbmQgYGRlYnVnX2Nsb3NlYC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGB1c2JfZGV2aWNlX2R1bXBgIGlzIGluZGVlZCB1bmlxdWUgaW4gdGhpcyBjb250ZXh0LiBJdCYjMzk7cyB3b3J0aCBhIHNlY29uZCBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2JfZGV2aWNlX2R1bXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM9MzY1PXN0YXRpYyBjaGFyICp1c2JfZHVtcF9kZXNjKGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtMzkwLSAqL1xuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM6MzkxOnN0YXRpYyBzc2l6ZV90IHVzYl9kZXZpY2VfZHVtcChjaGFyIF9fdXNlciAqKmJ1ZmZlciwgc2l6ZV90ICpuYnl0ZXMsXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy0zOTItXHRcdFx0ICAgICAgIGxvZmZfdCAqc2tpcF9ieXRlcywgbG9mZl90ICpmaWxlX29mZnNldCxcbi0tXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy00OTgtXHRcdHVzYl9sb2NrX2RldmljZShjaGlsZGRldik7XG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYzo0OTk6XHRcdHJldCA9IHVzYl9kZXZpY2VfZHVtcChidWZmZXIsIG5ieXRlcywgc2tpcF9ieXRlcyxcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jLTUwMC1cdFx0XHRcdCAgICAgIGZpbGVfb2Zmc2V0LCBjaGlsZGRldiwgYnVzLFxuLS1cbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jPTUxMD1zdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4tLVxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTI5LVx0XHR1c2JfbG9ja19kZXZpY2UoYnVzLVx1MDAzZXJvb3RfaHViKTtcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jOjUzMDpcdFx0cmV0ID0gdXNiX2RldmljZV9kdW1wKFx1MDAyNmJ1ZiwgXHUwMDI2bmJ5dGVzLCBcdTAwMjZza2lwX2J5dGVzLCBwcG9zLFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTMxLVx0XHRcdFx0ICAgICAgYnVzLVx1MDAzZXJvb3RfaHViLCBidXMsIDAsIDAsIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQxOQoJCQkJCQkJb3V0cHV0OiAxODcKCQkJCQkJCXRob3VnaHRzOiA2NzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBXb3J0aGluZXNzKioKCk9rYXksIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIG1ha2luZyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBzd2FwcGluZyBwYWdlIGFsbG9jYXRvciBjYWxscyAoYF9fZ2V0X2ZyZWVfcGFnZXNgLCBgZ2V0X3plcm9lZF9wYWdlYCkgd2l0aCBzbGFiIGFsbG9jYXRvciBjYWxscyAoYGttYWxsb2NgLCBga3phbGxvY2ApLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGEgcmVkIGZsYWcsIGluIGEgZ29vZCB3YXksIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gbWVtb3J5IGFsbG9jYXRpb24sIHdoaWNoIG1lYW5zIHdlIGNvdWxkIHVuY292ZXIgc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgdGhhdCB3ZXJlbiYjMzk7dCBkZXRlY3RhYmxlIGJlZm9yZS4gS0FTQU4sIGZvciBpbnN0YW5jZSwgbWlnaHQgYmUgYWJsZSB0byBjYXRjaCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG5vdyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc2xhYiBvYmplY3RzIG1vcmUgY29uc2lzdGVudGx5LgoKTGV0IG1lIHF1aWNrbHkgZW5zdXJlIEkmIzM5O20gZ2V0dGluZyB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBVU0JfT0hDSV9IQ0RgIGFuZCBgVVNCX09IQ0lfSENEX1BDSWAgYXJlIHRoZSByaWdodCBvbmVzLiBgVVNCX09IQ0lfSENEYCBpcyB0aGUgY29yZSwgYW5kIEkmIzM5O2xsIGRlZmluaXRlbHkgaW5jbHVkZSBpdC4gIFRoZW4gdGhlcmUmIzM5O3MgYFVTQl9PSENJX0hDRF9QQ0lgLiBJdCBzZWVtcyBsaWtlIFFFTVUgcHJvdmlkZXMgYSBgcGNpLW9oY2lgIG9wdGlvbiwgc28gaW5jbHVkaW5nIGBVU0JfT0hDSV9IQ0RfUENJYCBnaXZlcyB1cyB0aGUgYXBwcm9wcmlhdGUgaGFyZHdhcmUgdG8gdGVzdC4gSXQmIzM5O3MgYWxzbyB3b3J0aCBub3RpbmcgdGhlIHRyaXN0YXRlIG5hdHVyZSBvZiBgVVNCX09IQ0lfSENEYCwganVzdCBpbiBjYXNlLiBBbHNvLCB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGl0ZW1zIGBVU0JgIGFuZCBgREVCVUdfRlNgIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuCgpUaGUgcGF0Y2gmIzM5O3MgbW9kaWZpY2F0aW9ucyBhcmUgd2l0aGluIGB1c2JfZGV2aWNlX2R1bXBgLCBgZmlsbF9idWZmZXJgLCBhbmQgYGRlYnVnX2Nsb3NlYC4gU3BlY2lmaWNhbGx5LCB3aXRoaW4gdGhlIE9IQ0kgZGVidWdmcyBjb2RlLiBUaGUgY29kZSBpdHNlbGYgaXMgcmVhY2hhYmxlIGluIFFFTVUsIHRocm91Z2ggYC9zeXMva2VybmVsL2RlYnVnL3VzYi9kZXZpY2VzYCBhbmQgc2ltaWxhciBkZWJ1Z2ZzIGZpbGVzLiBUaGlzIGNoYW5nZSBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBpbiBvdXIgdGVzdGluZyBlbnZpcm9ubWVudC4KCkkmIzM5O20gcmV2aWV3aW5nIHRoZSBydWxlcyBhZ2FpbiB0byBjb25maXJtIGlmIHRoaXMgcGF0Y2ggbWVldHMgdGhlIGNyaXRlcmlhIGZvciAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7LiBObywgaXQgZG9lc24mIzM5O3QuIFRoaXMgaXNuJiMzOTt0IGp1c3QgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyBvciBkZWNvcmF0aXZlIGxvZ2dpbmcsIG5vciBpcyBpdCBhIG1pbm9yIG51bWVyaWMgY29uc3RhbnQgY2hhbmdlLiBUaGlzIGlzIGEgbGVnaXRpbWF0ZSBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZW1vcnkgYWxsb2NhdGlvbi4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nPXRydWVgLgoKQW5kIGp1c3QgdG8gYmUgZXh0cmEgdGhvcm91Z2gsIEkmIzM5O2xsIGFsc28gYWRkIGBVU0JfT0hDSV9IQ0RfUExBVEZPUk1gIHNpbmNlIFFFTVUgc3VwcG9ydHMgdGhlIGBzeXNidXMtb2hjaWAgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTY6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9PSENJX0hDRCYjMzQ7LAogICAgJiMzNDtVU0JfT0hDSV9IQ0RfUENJJiMzNDssCiAgICAmIzM0O1VTQl9PSENJX0hDRF9QTEFURk9STSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYl9kZXZpY2VfZHVtcCYjMzQ7LAogICAgJiMzNDtmaWxsX2J1ZmZlciYjMzQ7LAogICAgJiMzNDtkZWJ1Z19jbG9zZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwYWdlIGFsbG9jYXRvciBjYWxscyAoX19nZXRfZnJlZV9wYWdlcywgZ2V0X3plcm9lZF9wYWdlKSB3aXRoIHNsYWIgYWxsb2NhdG9yIGNhbGxzIChrbWFsbG9jLCBremFsbG9jKSBpbiBVU0IgZGV2aWNlIGR1bXAgYW5kIE9IQ0kgZGVidWdmcyBjb2RlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IgYW5kIGNhbiBwb3RlbnRpYWxseSBleHBvc2UgZGlmZmVyZW50IG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKGUuZy4sIEtBU0FOIGNhbiBiZXR0ZXIgZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb24gc2xhYiBvYmplY3RzKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSAvc3lzL2tlcm5lbC9kZWJ1Zy91c2IvZGV2aWNlcyBhbmQgT0hDSSBkZWJ1Z2ZzIGZpbGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfT0hDSV9IQ0QmIzM0OywKICAgICYjMzQ7VVNCX09IQ0lfSENEX1BDSSYjMzQ7LAogICAgJiMzNDtVU0JfT0hDSV9IQ0RfUExBVEZPUk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2JfZGV2aWNlX2R1bXAmIzM0OywKICAgICYjMzQ7ZmlsbF9idWZmZXImIzM0OywKICAgICYjMzQ7ZGVidWdfY2xvc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgcGFnZSBhbGxvY2F0b3IgY2FsbHMgKF9fZ2V0X2ZyZWVfcGFnZXMsIGdldF96ZXJvZWRfcGFnZSkgd2l0aCBzbGFiIGFsbG9jYXRvciBjYWxscyAoa21hbGxvYywga3phbGxvYykgaW4gVVNCIGRldmljZSBkdW1wIGFuZCBPSENJIGRlYnVnZnMgY29kZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yIGFuZCBjYW4gcG90ZW50aWFsbHkgZXhwb3NlIGRpZmZlcmVudCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIChlLmcuLCBLQVNBTiBjYW4gYmV0dGVyIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9uIHNsYWIgb2JqZWN0cykuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgL3N5cy9rZXJuZWwvZGVidWcvdXNiL2RldmljZXMgYW5kIE9IQ0kgZGVidWdmcyBmaWxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA1OjI4LjEwODM4NjM5NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTg2NzY1NTk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfT0hDSV9IQ0RcIixcbiAgICBcIlVTQl9PSENJX0hDRF9QQ0lcIixcbiAgICBcIlVTQl9PSENJX0hDRF9QTEFURk9STVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzYl9kZXZpY2VfZHVtcFwiLFxuICAgIFwiZmlsbF9idWZmZXJcIixcbiAgICBcImRlYnVnX2Nsb3NlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgcGFnZSBhbGxvY2F0b3IgY2FsbHMgKF9fZ2V0X2ZyZWVfcGFnZXMsIGdldF96ZXJvZWRfcGFnZSkgd2l0aCBzbGFiIGFsbG9jYXRvciBjYWxscyAoa21hbGxvYywga3phbGxvYykgaW4gVVNCIGRldmljZSBkdW1wIGFuZCBPSENJIGRlYnVnZnMgY29kZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yIGFuZCBjYW4gcG90ZW50aWFsbHkgZXhwb3NlIGRpZmZlcmVudCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIChlLmcuLCBLQVNBTiBjYW4gYmV0dGVyIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9uIHNsYWIgb2JqZWN0cykuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgL3N5cy9rZXJuZWwvZGVidWcvdXNiL2RldmljZXMgYW5kIE9IQ0kgZGVidWdmcyBmaWxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDU6MjguMTA4Mzk0ODE1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzIzNzc2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5ZDg0MzBhZWMzYmY3OTQ4MTA1OWU1NzE1ZTc3ZTVjYjQ2YzNlM2ZjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDEgMTY6MDU6MjYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuY1xcbmluZGV4IGEyNDdkYTczZjM0ZDdkLi42ZjAzNTRhYmEzOGIzMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuY1xcbisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jXFxuQEAgLTM3LDYgKzM3LDcgQEBcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9nZnAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzYi5oXFx1MDAzZVxcbkBAIC00MDgsNyArNDA5LDcgQEAgc3RhdGljIHNzaXplX3QgdXNiX2RldmljZV9kdW1wKGNoYXIgX191c2VyICoqYnVmZmVyLCBzaXplX3QgKm5ieXRlcyxcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdC8qIGFsbG9jYXRlIDJeMSBwYWdlcyA9IDhLIChvbiBpMzg2KTtcXG4gXFx0ICogc2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2ggZm9yIG9uZSBkZXZpY2UgKi9cXG4tXFx0cGFnZXNfc3RhcnQgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX05PSU8sIDEpO1xcbitcXHRwYWdlc19zdGFydCA9IGttYWxsb2MoUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIDEsIEdGUF9OT0lPKTtcXG4gXFx0aWYgKCFwYWdlc19zdGFydClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC00NzksNyArNDgwLDcgQEAgc3RhdGljIHNzaXplX3QgdXNiX2RldmljZV9kdW1wKGNoYXIgX191c2VyICoqYnVmZmVyLCBzaXplX3QgKm5ieXRlcyxcXG4gXFx0XFx0aWYgKGxlbmd0aCBcXHUwMDNlICpuYnl0ZXMpXFxuIFxcdFxcdFxcdGxlbmd0aCA9ICpuYnl0ZXM7XFxuIFxcdFxcdGlmIChjb3B5X3RvX3VzZXIoKmJ1ZmZlciwgcGFnZXNfc3RhcnQgKyAqc2tpcF9ieXRlcywgbGVuZ3RoKSkge1xcbi1cXHRcXHRcXHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBhZ2VzX3N0YXJ0LCAxKTtcXG4rXFx0XFx0XFx0a2ZyZWUocGFnZXNfc3RhcnQpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFx0XFx0fVxcbiBcXHRcXHQqbmJ5dGVzIC09IGxlbmd0aDtcXG5AQCAtNDkwLDcgKzQ5MSw3IEBAIHN0YXRpYyBzc2l6ZV90IHVzYl9kZXZpY2VfZHVtcChjaGFyIF9fdXNlciAqKmJ1ZmZlciwgc2l6ZV90ICpuYnl0ZXMsXFxuIFxcdH0gZWxzZVxcbiBcXHRcXHQqc2tpcF9ieXRlcyAtPSBsZW5ndGg7XFxuIFxcbi1cXHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBhZ2VzX3N0YXJ0LCAxKTtcXG4rXFx0a2ZyZWUocGFnZXNfc3RhcnQpO1xcbiBcXG4gXFx0LyogTm93IGxvb2sgYXQgYWxsIG9mIHRoaXMgZGV2aWNlJ3MgY2hpbGRyZW4uICovXFxuIFxcdHVzYl9odWJfZm9yX2VhY2hfY2hpbGQodXNiZGV2LCBjaGl4LCBjaGlsZGRldikge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmNcXG5pbmRleCA5ZTBlMDZiYmM1NzA2MS4uMjNkYzllZGRjMDZjNDQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jXFxuKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jXFxuQEAgLTY4Myw3ICs2ODMsNyBAQCBzdGF0aWMgaW50IGZpbGxfYnVmZmVyKHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZilcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghYnVmLVxcdTAwM2VwYWdlKVxcbi1cXHRcXHRidWYtXFx1MDAzZXBhZ2UgPSAoY2hhciAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTtcXG4rXFx0XFx0YnVmLVxcdTAwM2VwYWdlID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xcbiBcXG4gXFx0aWYgKCFidWYtXFx1MDAzZXBhZ2UpIHtcXG4gXFx0XFx0cmV0ID0gLUVOT01FTTtcXG5AQCAtNzI5LDExICs3MjksOCBAQCBzdGF0aWMgaW50IGRlYnVnX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiB7XFxuIFxcdHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZiA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gXFxuLVxcdGlmIChidWYpIHtcXG4tXFx0XFx0aWYgKGJ1Zi1cXHUwMDNlcGFnZSlcXG4tXFx0XFx0XFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1Zi1cXHUwMDNlcGFnZSk7XFxuLVxcdFxcdGtmcmVlKGJ1Zik7XFxuLVxcdH1cXG4rXFx0a2ZyZWUoYnVmLVxcdTAwM2VwYWdlKTtcXG4rXFx0a2ZyZWUoYnVmKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA1OjI4Ljc4MTc5NDA2NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU5MTk0MjMzMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9PSENJX0hDRFwiLFxuICAgIFwiVVNCX09IQ0lfSENEX1BDSVwiLFxuICAgIFwiVVNCX09IQ0lfSENEX1BMQVRGT1JNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNiX2RldmljZV9kdW1wXCIsXG4gICAgXCJmaWxsX2J1ZmZlclwiLFxuICAgIFwiZGVidWdfY2xvc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBwYWdlIGFsbG9jYXRvciBjYWxscyAoX19nZXRfZnJlZV9wYWdlcywgZ2V0X3plcm9lZF9wYWdlKSB3aXRoIHNsYWIgYWxsb2NhdG9yIGNhbGxzIChrbWFsbG9jLCBremFsbG9jKSBpbiBVU0IgZGV2aWNlIGR1bXAgYW5kIE9IQ0kgZGVidWdmcyBjb2RlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IgYW5kIGNhbiBwb3RlbnRpYWxseSBleHBvc2UgZGlmZmVyZW50IG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKGUuZy4sIEtBU0FOIGNhbiBiZXR0ZXIgZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb24gc2xhYiBvYmplY3RzKS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSAvc3lzL2tlcm5lbC9kZWJ1Zy91c2IvZGV2aWNlcyBhbmQgT0hDSSBkZWJ1Z2ZzIGZpbGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDlkODQzMGFlYzNiZjc5NDgxMDU5ZTU3MTVlNzdlNWNiNDZjM2UzZmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDE2OjA1OjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuY1xuaW5kZXggYTI0N2RhNzNmMzRkN2QuLjZmMDM1NGFiYTM4YjMzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmNcbisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jXG5AQCAtMzcsNiArMzcsNyBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IuaFx1MDAzZVxuQEAgLTQwOCw3ICs0MDksNyBAQCBzdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX2R1bXAoY2hhciBfX3VzZXIgKipidWZmZXIsIHNpemVfdCAqbmJ5dGVzLFxuIFx0XHRyZXR1cm4gMDtcbiBcdC8qIGFsbG9jYXRlIDJeMSBwYWdlcyA9IDhLIChvbiBpMzg2KTtcbiBcdCAqIHNob3VsZCBiZSBtb3JlIHRoYW4gZW5vdWdoIGZvciBvbmUgZGV2aWNlICovXG4tXHRwYWdlc19zdGFydCA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlcyhHRlBfTk9JTywgMSk7XG4rXHRwYWdlc19zdGFydCA9IGttYWxsb2MoUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyAxLCBHRlBfTk9JTyk7XG4gXHRpZiAoIXBhZ2VzX3N0YXJ0KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC00NzksNyArNDgwLDcgQEAgc3RhdGljIHNzaXplX3QgdXNiX2RldmljZV9kdW1wKGNoYXIgX191c2VyICoqYnVmZmVyLCBzaXplX3QgKm5ieXRlcyxcbiBcdFx0aWYgKGxlbmd0aCBcdTAwM2UgKm5ieXRlcylcbiBcdFx0XHRsZW5ndGggPSAqbmJ5dGVzO1xuIFx0XHRpZiAoY29weV90b191c2VyKCpidWZmZXIsIHBhZ2VzX3N0YXJ0ICsgKnNraXBfYnl0ZXMsIGxlbmd0aCkpIHtcbi1cdFx0XHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBhZ2VzX3N0YXJ0LCAxKTtcbitcdFx0XHRrZnJlZShwYWdlc19zdGFydCk7XG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdH1cbiBcdFx0Km5ieXRlcyAtPSBsZW5ndGg7XG5AQCAtNDkwLDcgKzQ5MSw3IEBAIHN0YXRpYyBzc2l6ZV90IHVzYl9kZXZpY2VfZHVtcChjaGFyIF9fdXNlciAqKmJ1ZmZlciwgc2l6ZV90ICpuYnl0ZXMsXG4gXHR9IGVsc2VcbiBcdFx0KnNraXBfYnl0ZXMgLT0gbGVuZ3RoO1xuIFxuLVx0ZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwYWdlc19zdGFydCwgMSk7XG4rXHRrZnJlZShwYWdlc19zdGFydCk7XG4gXG4gXHQvKiBOb3cgbG9vayBhdCBhbGwgb2YgdGhpcyBkZXZpY2UncyBjaGlsZHJlbi4gKi9cbiBcdHVzYl9odWJfZm9yX2VhY2hfY2hpbGQodXNiZGV2LCBjaGl4LCBjaGlsZGRldikge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuY1xuaW5kZXggOWUwZTA2YmJjNTcwNjEuLjIzZGM5ZWRkYzA2YzQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jXG4rKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmNcbkBAIC02ODMsNyArNjgzLDcgQEAgc3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFidWYtXHUwMDNlcGFnZSlcbi1cdFx0YnVmLVx1MDAzZXBhZ2UgPSAoY2hhciAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTtcbitcdFx0YnVmLVx1MDAzZXBhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4gXG4gXHRpZiAoIWJ1Zi1cdTAwM2VwYWdlKSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG5AQCAtNzI5LDExICs3MjksOCBAQCBzdGF0aWMgaW50IGRlYnVnX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbiBcdHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFxuLVx0aWYgKGJ1Zikge1xuLVx0XHRpZiAoYnVmLVx1MDAzZXBhZ2UpXG4tXHRcdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1Zi1cdTAwM2VwYWdlKTtcbi1cdFx0a2ZyZWUoYnVmKTtcbi1cdH1cbitcdGtmcmVlKGJ1Zi1cdTAwM2VwYWdlKTtcbitcdGtmcmVlKGJ1Zik7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNToyOC43ODE3OTYwOTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzMxNDUxNzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIG1ha2luZyBzb21lIG1vZGlmaWNhdGlvbnMgd2l0aGluIHRoZSBVU0Igc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIGl0J3MgdG91Y2hpbmcgYGRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jYCBhbmQgYGRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuY2AuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGV5J3JlIHJlcGxhY2luZyB0aGUgbGVnYWN5IGBfX2dldF9mcmVlX3BhZ2VzYC9gZnJlZV9wYWdlc2AgY2FsbHMgd2l0aCBga21hbGxvY2AvYGtmcmVlYCBpbiB0aGUgYHVzYl9kZXZpY2VfZHVtcGAgZnVuY3Rpb24sIHdpdGhpbiBgZGV2aWNlcy5jYCwgYW5kIHN3aXRjaGluZyBgZ2V0X3plcm9lZF9wYWdlYC9gZnJlZV9wYWdlYCBmb3IgYGt6YWxsb2NgL2BrZnJlZWAgaW4gYGZpbGxfYnVmZmVyYCBhbmQgYGRlYnVnX2Nsb3NlYCBpbiBgb2hjaS1kYmcuY2AuXG5cblJpZ2h0IGF3YXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgKmp1c3QqIGFuIGFsbG9jYXRpb24gY2hhbmdlIG9yIGlmIHRoZXJlIGFyZSBwb3RlbnRpYWwgZnVuY3Rpb25hbCBzaWRlIGVmZmVjdHMuIENoYW5naW5nIHBhZ2UgYWxsb2NhdGlvbiAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGV2ZW4gaWYgc3VidGxlLiBJdCBhbHRlcnMgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IsIHdoaWNoIGFsd2F5cyB3YXJyYW50cyBjbG9zZSBzY3J1dGlueS5cblxuTm93LCBsZXQncyBicmVhayBkb3duIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQ6IGB1c2JfZGV2aWNlX2R1bXBgLCBgZmlsbF9idWZmZXJgLCBhbmQgYGRlYnVnX2Nsb3NlYC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGNvbnNpZGVyIGZ1enppbmcuIGB1c2JfZGV2aWNlX2R1bXBgIGNhdWdodCBteSBleWU7IG15IGd1dCB0ZWxscyBtZSBpdCdzIHVzZWQgd2l0aGluIGEgZmlsZSBvcGVyYXRpb24gbGlrZSBgL3N5cy9rZXJuZWwvZGVidWcvdXNiL2RldmljZXNgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGJ5IGdvaW5nIGJhY2sgaW50byBgZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmNgIGFuZCBzZWUgd2hlcmUgdGhpcyBgdXNiX2RldmljZV9kdW1wYCBmdW5jdGlvbiBnZXRzIHVzZWQuIExldCdzIHNlZSBpZiB3ZSBjYW4gdHJpZ2dlciBzb21lIGludGVyZXN0aW5nIGJlaGF2aW9yIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDU6MzQuMTEzMjUwNTMzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzU0MTE3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2JfZGV2aWNlX2R1bXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM9MzY1PXN0YXRpYyBjaGFyICp1c2JfZHVtcF9kZXNjKGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy0zOTAtICovXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM6MzkxOnN0YXRpYyBzc2l6ZV90IHVzYl9kZXZpY2VfZHVtcChjaGFyIF9fdXNlciAqKmJ1ZmZlciwgc2l6ZV90ICpuYnl0ZXMsXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtMzkyLVxcdFxcdFxcdCAgICAgICBsb2ZmX3QgKnNraXBfYnl0ZXMsIGxvZmZfdCAqZmlsZV9vZmZzZXQsXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy00OTgtXFx0XFx0dXNiX2xvY2tfZGV2aWNlKGNoaWxkZGV2KTtcXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYzo0OTk6XFx0XFx0cmV0ID0gdXNiX2RldmljZV9kdW1wKGJ1ZmZlciwgbmJ5dGVzLCBza2lwX2J5dGVzLFxcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jLTUwMC1cXHRcXHRcXHRcXHQgICAgICBmaWxlX29mZnNldCwgY2hpbGRkZXYsIGJ1cyxcXG4tLVxcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jPTUxMD1zdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy01MjktXFx0XFx0dXNiX2xvY2tfZGV2aWNlKGJ1cy1cXHUwMDNlcm9vdF9odWIpO1xcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jOjUzMDpcXHRcXHRyZXQgPSB1c2JfZGV2aWNlX2R1bXAoXFx1MDAyNmJ1ZiwgXFx1MDAyNm5ieXRlcywgXFx1MDAyNnNraXBfYnl0ZXMsIHBwb3MsXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTMxLVxcdFxcdFxcdFxcdCAgICAgIGJ1cy1cXHUwMDNlcm9vdF9odWIsIGJ1cywgMCwgMCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA1OjM0LjI1MDc5ODE2NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDM3MDgyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBgdXNiX2RldmljZV9yZWFkYCoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBgdXNiX2RldmljZV9yZWFkYC4gQmFzZWQgb24gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBwZXJ0YWlucyB0byByZWFkaW5nIGRhdGEgZnJvbSB0aGUgYC9zeXMva2VybmVsL2RlYnVnL3VzYi9kZXZpY2VzYCBmaWxlc3lzdGVtIGVudHJ5LiBUaGF0J3MgYSBwcmV0dHkgcmVhc29uYWJsZSBhc3N1bXB0aW9uIGdpdmVuIHRoZSBwYXRoLiBUaGUgZGVidWcgZmlsZXN5c3RlbSBvZnRlbiBleHBvc2VzIGtlcm5lbCBpbnRlcm5hbHMgaW4gYSB1c2VyLXJlYWRhYmxlIGZvcm1hdCwgYW5kIHRoZSBuYW1lIFwidXNiL2RldmljZXNcIiBzdHJvbmdseSBzdWdnZXN0cyBpbmZvcm1hdGlvbiBhYm91dCBhdHRhY2hlZCBVU0IgZGV2aWNlcy4gTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGVpdGhlciBpbnNwZWN0aW5nIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgZGlyZWN0bHkgaWYgSSBoYXZlIGFjY2Vzcywgb3IgcGVyaGFwcyBncmVwcGluZyB0aHJvdWdoIHRoZSBrZXJuZWwgc291cmNlcyBmb3IgYSBmdW5jdGlvbiB3aXRoIHRoYXQgbmFtZSBhbmQgbG9va2luZyBhdCBpdHMgdXNhZ2UgYW5kIGFzc29jaWF0ZWQgZmlsZXMuIEFsdGVybmF0aXZlbHksIEkgY291bGQgdHJ5IHRvIGZpbmQgZG9jdW1lbnRhdGlvbiB0aGF0IHBvaW50cyBtZSB0byB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlscyByZWxhdGVkIHRvIHRoaXMgZGVidWdmcyBlbnRyeSB0byBzZWUgaWYgdGhhdCBjb25maXJtcyBteSBzdXNwaWNpb24gYW5kIGdpdmVzIG1lIG1vcmUgZGV0YWlscy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKmV4YWN0bHkqIHdoYXQgZGF0YSB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciByZXRyaWV2aW5nIGFuZCBob3cgaXQncyBmb3JtYXR0ZWQuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBpdHMgcmVsZXZhbmNlIGFuZCBob3cgdG8gYmVzdCB1c2UgaXQgb3IgYnVpbGQgdXBvbiBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU0MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA1OjM3LjM5NDUwOTc1NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjI4NTgyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNiX2RldmljZV9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jPTM5MT1zdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX2R1bXAoY2hhciBfX3VzZXIgKipidWZmZXIsIHNpemVfdCAqbmJ5dGVzLFxcbi0tXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTA5LVxcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jOjUxMDpzdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTExLVxcdFxcdFxcdCAgICAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYz01NDM9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2Jmc19kZXZpY2VzX2ZvcHMgPSB7XFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTQ0LVxcdC5sbHNlZWsgPVxcdG5vX3NlZWtfZW5kX2xsc2VlayxcXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYzo1NDU6XFx0LnJlYWQgPVxcdFxcdHVzYl9kZXZpY2VfcmVhZCxcXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy01NDYtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDU6MzcuNzU3MzczOTczWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5NTY1NTIxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqUGlucG9pbnRpbmcgdGhlIFVTQkZTIElzc3VlKipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBgdXNiZnNfZGV2aWNlc19mb3BzYC4gVGhhdCdzIGEgc3Ryb25nIGhpbnQg4oCTIGl0IGltbWVkaWF0ZWx5IHplcm9lcyBpbiBvbiB0aGUgdXNlcnNwYWNlIGZpbGVzeXN0ZW0gaW50ZXJmYWNlIGZvciBVU0IgZGV2aWNlcy4gVGhhdCBwb2ludHMgZGlyZWN0bHkgdG8gdGhlIGNvcmUgb2YgdGhlIGlzc3VlLiBOb3csIGxldCdzIHNlZSBpZiB3ZSBjYW4gZmluZCBzb21ldGhpbmcgdGhhdCdzIGNvbm5lY3RlZCB0byB0aGlzIHdpdGhpbiB0aGUgY29kZS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUgZGVidWdnaW5nIHRvb2xzLiBMZXQncyBzZWUgd2hhdCB3ZSBoYXZlIG9uIGBkcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmNgLiBUaGlzIGlzIGEgbG93LWxldmVsIGhvc3QgY29udHJvbGxlciBkcml2ZXIuIEl0J3Mgb2Z0ZW4gdGhlIHBsYWNlIHdoZXJlIHdlIGZpbmQgZGV0YWlsZWQgbG9nZ2luZyBhbmQgcG90ZW50aWFsbHkgZXJyb3IgY29uZGl0aW9ucyByZWxhdGVkIHRvIFVTQiB0cmFuc2ZlcnMuIE9mdGVuIGl0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdoZW4gdGhlcmUgYXJlIGlzc3VlcyBhdCB0aGUgaW50ZXJzZWN0aW9uIG9mIGEgZHJpdmVyIGFuZCBhIGZpbGVzeXN0ZW0gaW50ZXJmYWNlLCBlc3BlY2lhbGx5IHNpbmNlIGB1c2Jmc2AgaXNuJ3QgdmVyeSBoZWxwZnVsIGZvciBkaWFnbm9zaW5nIGlzc3VlcyByZWxhdGVkIHRvIGRldmljZSBjb21tdW5pY2F0aW9uLiBMZXQncyBzdGFydCB3aXRoIHRoaXMgYW5kIHNlZSB3aGF0IHdlIGNhbiB0dXJuIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDk4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDU6NDEuMDUzMDMwOTg0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NDEzMTk4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWxsX2J1ZmZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jPTY2NT1zdGF0aWMgc3RydWN0IGRlYnVnX2J1ZmZlciAqYWxsb2NfYnVmZmVyKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSxcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy02ODAtXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jOjY4MTpzdGF0aWMgaW50IGZpbGxfYnVmZmVyKHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZilcXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNjgyLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYz03MDQ9c3RhdGljIHNzaXplX3QgZGVidWdfb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsXFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNzExLVxcdGlmIChidWYtXFx1MDAzZWNvdW50ID09IDApIHtcXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM6NzEyOlxcdFxcdHJldCA9IGZpbGxfYnVmZmVyKGJ1Zik7XFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTcxMy1cXHRcXHRpZiAocmV0ICE9IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDU6NDEuMzQ3MTcwMDE2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODAwMDAwNTM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFdvcnRoaW5lc3Mgb2YgRnV6emluZyBhIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIGBmaWxsX2J1ZmZlcmAgaXMgY2FsbGVkIGZyb20gYGRlYnVnX291dHB1dGAgaW4gdGhlIG9oY2kgZHJpdmVyIOKAkyB0aGF0J3MgYSBkZWJ1Z2ZzIGZpbGUuIEhtbSwgYXJlIHRob3NlIGRlYnVnZnMgZmlsZXMgYWNjZXNzaWJsZT8gWWVhaCwgdGhleSBzaG91bGQgYmUsIHJvb3QgdXN1YWxseSBtb3VudHMgdGhlbSwgYW5kIFN5emthbGxlciBjYW4gZGVmaW5pdGVseSBnZXQgdG8gdGhlbS4gQnV0IGlzIGl0ICp3b3J0aCogZnV6emluZyB0aGlzIHBhcnRpY3VsYXIgcGF0Y2g/IEl0IGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgc3dhcCBmcm9tIGBfX2dldF9mcmVlX3BhZ2VzYCB0byBga21hbGxvY2AuXG5cbk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRldGVybWluZSB3aGV0aGVyIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgaWYgaXQgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBpbiBhIG1lYW5pbmdmdWwgd2F5LiBEaWZmZXJlbnQgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcy4uLiBga21hbGxvY2AgdmVyc3VzIGBfX2dldF9mcmVlX3BhZ2VzYCBjb3VsZCBoYXZlIGRpZmZlcmVudCBiZWhhdmlvcnMgaW4gdGhlIGZhY2Ugb2Ygb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEtBU0FOIG1pZ2h0IGNhdGNoIGBrbWFsbG9jYCBPT0IgaXNzdWVzIGJldHRlciB0aGFuIHRob3NlIHdpdGggcGFnZS1iYXNlZCBhbGxvY2F0aW9ucy5cblxuQnV0IHdhaXQsIGxldCBtZSBjaGVjayB0aGUgaW5zdHJ1Y3Rpb25zIGFnYWluOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYuLi5cIiBMZXQgbWUgcmV2aWV3IHRoZSBjcml0ZXJpYS4uLiBBaCwgaGVyZSBpdCBpczogZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZy4uLiBvciBudW1lcmljIGNoYW5nZXMgdGhhdCBkb24ndCBjaGFuZ2UgZXhlY3V0aW9uLiBJcyB0aGlzIHN3aXRjaCBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBJdCBkb2VzIGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBzbGlnaHRseSBzaW5jZSBpdCB1c2VzIGEgZGlmZmVyZW50IGFsbG9jYXRvciwgYnV0IGl0IHNlZW1zIGxpa2UgYSByZWZhY3RvcmluZy9jbGVhbnVwIG1vc3RseS5cblxuT2ggd2FpdCwgYGttYWxsb2NgIHdpdGggYFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgMWAgYWxsb2NhdGVzIDhLLCBhbmQgYF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX05PSU8sIDEpYCBhbHNvIGFsbG9jYXRlcyA4SyBpbiBhIDRLIHBhZ2Ugc3lzdGVtLiBTbywgdGhlIGFsbG9jYXRpb24gc2l6ZSBzdGF5cyB0aGUgc2FtZS4gSXMgaXQgd29ydGggZnV6emluZz8gWWVzLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBpdCBtb2RpZmllcyB0aGUga2VybmVsIGxvZ2ljIGFuZCBpdOKAmXMgbm90IGp1c3QgYSBkZWNvcmF0aW9uIG9yIGNvbW1lbnQgb3IgY29uc3RhbnQgY2hhbmdlLlxuXG5Pa2F5LCBub3cgbGV0J3MgbWFrZSBzdXJlIHRoaXMgY29kZSBpcyByZWFjaGFibGUuIGB1c2JfZGV2aWNlX2R1bXBgIGlzIGluIGBkcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuY2AsIGFuZCBgZmlsbF9idWZmZXJgIGlzIGluIGBkcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmNgLiBMZXQncyBjb25maXJtIGBvaGNpLWRiZy5jYCBpcyByZWFjaGFibGUuIE9IQ0kgaXMgYSBVU0IgaG9zdCBjb250cm9sbGVyLiBFeGNlbGxlbnQsIFFFTVUgY2FuIGVtdWxhdGUgT0hDSS4gVGhhdCdzIGdvb2QuIE5vdyBsZXQgbWUgbG9vayBmb3IgdGhlIGNvbmZpZyBmb3IgT0hDSS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYzMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNTo0OS4zNDcxNzc1OTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzE0NTIxNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2hjaS1kYmcub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9ob3N0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDU6NDkuNDU0MzMyNDI3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjk0NjY5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgTWFrZWZpbGU6XG5cbioqRGl2aW5nIGludG8gdGhlIFVTQiBIb3N0IE1ha2VmaWxlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBkcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlYC4gVGhpcyBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIFVTQiBob3N0IGNvbnRyb2xsZXIgc3Vic3lzdGVtIGlzIGJ1aWx0IHdpdGhpbiB0aGlzIGtlcm5lbC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIG9iamVjdCBmaWxlcyBhcmUgb3JnYW5pemVkLCB3aGF0IGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheSwgYW5kIGhvdyB0aGUgY29tcGlsYXRpb24gcHJvY2VzcyBpcyBzdHJ1Y3R1cmVkIGZvciB0aGUgZGlmZmVyZW50IGhvc3QgY29udHJvbGxlciBkcml2ZXJzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgYW55IGNsZXZlciB0cmlja3MgYXJlIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIG9yIGJvYXJkIHN1cHBvcnQgcGFja2FnZXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBiZXR0aW5nIHRoZXJlJ3MgYSBnb29kIGFtb3VudCBvZiBjb21wbGV4aXR5IGhlcmUsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9mIG1vZHVsYXJpdHkgb3IgZWxlZ2FudCBidWlsZCB0ZWNobmlxdWVzIHRoYXQgbWlnaHQgc3BlZWQgdXAgbXkgY29tcHJlaGVuc2lvbi4gSSdtIGFsc28gaG9waW5nIHRoZXJlIGFyZW4ndCB0b28gbWFueSB1bm5lY2Vzc2FyeSBsYXllcnMgb2YgYWJzdHJhY3Rpb24sIGFzIEkga25vdyB0aGF0IGNhbiBiZWNvbWUgYSByZWFsIGhlYWRhY2hlIHRvIG5hdmlnYXRlIHdoZW4geW91IG5lZWQgdG8gdHJhY2sgZG93biBhIHNwZWNpZmljIGhhcmR3YXJlIGlzc3VlLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjMxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDU6NTIuODIzODAyNTkzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQyODIxOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2hjaVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGU9NTQ9b2JqLSQoQ09ORklHX1VTQl9JU1AxMTZYX0hDRClcXHQrPSBpc3AxMTZ4LWhjZC5vXFxuZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZS01NS1cXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjU2Om9iai0kKENPTkZJR19VU0JfT0hDSV9IQ0QpXFx0Kz0gb2hjaS1oY2Qub1xcbmRyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGU6NTc6b2JqLSQoQ09ORklHX1VTQl9PSENJX0hDRF9QQ0kpXFx0Kz0gb2hjaS1wY2kub1xcbmRyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGU6NTg6b2JqLSQoQ09ORklHX1VTQl9PSENJX0hDRF9QTEFURk9STSlcXHQrPSBvaGNpLXBsYXRmb3JtLm9cXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjU5Om9iai0kKENPTkZJR19VU0JfT0hDSV9FWFlOT1MpXFx0Kz0gb2hjaS1leHlub3Mub1xcbmRyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGU6NjA6b2JqLSQoQ09ORklHX1VTQl9PSENJX0hDRF9PTUFQMSlcXHQrPSBvaGNpLW9tYXAub1xcbmRyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGU6NjE6b2JqLSQoQ09ORklHX1VTQl9PSENJX0hDRF9TUEVBUilcXHQrPSBvaGNpLXNwZWFyLm9cXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjYyOm9iai0kKENPTkZJR19VU0JfT0hDSV9IQ0RfU1RJKVxcdCs9IG9oY2ktc3Qub1xcbmRyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX1VTQl9PSENJX0hDRF9BVDkxKVxcdCs9IG9oY2ktYXQ5MS5vXFxuZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfVVNCX09IQ0lfSENEX1MzQzI0MTApXFx0Kz0gb2hjaS1zM2MyNDEwLm9cXG5kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlOjY1Om9iai0kKENPTkZJR19VU0JfT0hDSV9IQ0RfTFBDMzJYWClcXHQrPSBvaGNpLW54cC5vXFxuZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZTo2NjpvYmotJChDT05GSUdfVVNCX09IQ0lfSENEX1BYQTI3WClcXHQrPSBvaGNpLXB4YTI3eC5vXFxuZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZTo2NzpvYmotJChDT05GSUdfVVNCX09IQ0lfSENEX0RBVklOQ0kpXFx0Kz0gb2hjaS1kYTh4eC5vXFxuZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZS02OC1vYmotJChDT05GSUdfVVNCX09DVEVPTl9IQ0QpXFx0Kz0gb2N0ZW9uLWhjZC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA1OjUyLjkyODEzMTMzN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODczMzI4NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgT0hDSSBEZWJ1Z2dpbmcqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgT0hDSSBzdHVmZiwgYW5kIHRoZSBpbmNsdXNpb24gb2YgYG9oY2ktZGJnLmNgIGlzIHByb2JhYmx5IGtleSB0byBteSBpbW1lZGlhdGUgcHJvYmxlbS4gR2l2ZW4gaG93IHRoZXNlIGtlcm5lbCBtb2R1bGVzIGFyZSB0eXBpY2FsbHkgc3RydWN0dXJlZCwgSSdtIGJldHRpbmcgdGhhdCB0aGUgZGVidWdnaW5nIGZ1bmN0aW9uYWxpdGllcywgdGhlIG9uZXMgSSdtIGludGVyZXN0ZWQgaW4gdXNpbmcgb3IgdW5kZXJzdGFuZGluZywgYXJlIGxpa2VseSAqZGVmaW5lZCogd2l0aGluIGBvaGNpLWRiZy5jYCwgYW5kIHRoZW4gKmluY29ycG9yYXRlZCogaW50byB0aGUgbWFpbiBPSENJIEhvc3QgQ29udHJvbGxlciBEcml2ZXIgc291cmNlLCB3aGljaCBpcywgb2YgY291cnNlLCBgb2hjaS1oY2QuY2AuIEl0J3MgYSBwcmV0dHkgc3RhbmRhcmQgYXBwcm9hY2g6IHNlcGFyYXRlIG91dCB0aGUgZGVidWctc3BlY2lmaWMgY29kZSBmb3IgY2xhcml0eSBhbmQgbWFpbnRhaW5hYmlsaXR5LiBUaGlzIG1vZHVsYXJpdHkgbWFrZXMgc2Vuc2U7IGl0IHByZXZlbnRzIGNsdXR0ZXJpbmcgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSB3aXRoIGRlYnVnIHByaW50aW5nIGFuZCBzZXR0aW5ncy4gTm93LCB3aGV0aGVyIGBvaGNpLWhjZC5jYCBpbmNsdWRlcyBpdCBkaXJlY3RseSB3aXRoIGAjaW5jbHVkZWAgb3IgcGVyaGFwcyByZWxpZXMgb24gYnVpbGQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gdG8gbGluayB0aGUgb2JqZWN0IGZpbGVzIHRvZ2V0aGVyIGlzIHNvbWV0aGluZyBJIHNob3VsZCBjaGVjayBidXQgaXQgaXMgbW9zdCBsaWtlbHkgYSBkaXJlY3QgaW5jbHVkZS4gTWFrZXMgc2Vuc2UuIFdoZXJlIHRvIGZpbmQgdGhlIGRlYnVnZ2luZyBzZXR0aW5ncy9mdW5jdGlvbnMgSSBhbSBpbnRlcmVzdGVkIGluLCBob3dldmVyLCBpcyBhIHF1ZXN0aW9uIHdoaWNoIGNhbiBiZSBhbnN3ZXJlZCBieSB0aGUgc291cmNlIGNvZGUgb2YgdGhlIGBvaGNpLWhjZC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ1MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA1OjU2LjgwMTQ2MzEyNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMTc4OTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9oY2ktZGJnLmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvaG9zdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jPTg1PXN0YXRpYyB2b2lkIGlvX3dhdGNoZG9nX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jLTg3LSNpbmNsdWRlIFxcXCJvaGNpLWh1Yi5jXFxcIlxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYzo4ODojaW5jbHVkZSBcXFwib2hjaS1kYmcuY1xcXCJcXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMtODktI2luY2x1ZGUgXFxcIm9oY2ktbWVtLmNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA1OjU2LjkxMTY1MzU4N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTYyMTE5OTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipPSENJIERyaXZlciBJbnF1aXJ5KipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGRvd24gdGhlIE9IQ0kgZHJpdmVyLiBSaWdodCwgSSByZWNhbGwgaXQncyBkZWZpbml0ZWx5IGluY2x1ZGVkIGluIGBvaGNpLWhjZC5jYC4gVGhhdCdzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gTm93LCByZWdhcmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24sIEknbSBwcmV0dHkgc3VyZSB0aGF0IHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uIGlzIGBVU0JfT0hDSV9IQ0RgLiBJJ3ZlIHVzZWQgdGhhdCBiZWZvcmUsIHNvIHRoYXQgcmluZ3MgYSBiZWxsLiBOb3csIHNvbWV0aGluZydzIHRpY2tsaW5nIHRoZSBiYWNrIG9mIG15IGJyYWluIGFib3V0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLi4uIEkgd29uZGVyIGlmIGBvaGNpLWRiZy5jYCBpcyBjb21waWxlZCBiYXNlZCBvbiBzb21lIG90aGVyIHByZXByb2Nlc3NvciBkZWZpbml0aW9uPyBCZXR0ZXIgdG8gYmUgc2FmZSwgSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBiYWNrIGF0IGBvaGNpLWhjZC5jYCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIEkgZG9uJ3Qgd2FudCB0byBtaXNzIGFueXRoaW5nIGNydWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MDQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjowMS44NzM3NzcxMDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NDgxODY1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvaGNpLWRiZy5jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmM9ODU9c3RhdGljIHZvaWQgaW9fd2F0Y2hkb2dfZnVuYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMtODctI2luY2x1ZGUgXFxcIm9oY2ktaHViLmNcXFwiXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jOjg4OiNpbmNsdWRlIFxcXCJvaGNpLWRiZy5jXFxcIlxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYy04OS0jaW5jbHVkZSBcXFwib2hjaS1tZW0uY1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDY6MDIuMjQ4NjA3NzA1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MzU0Mjg0MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIGZvciBQcmVwcm9jZXNzb3IgRGlyZWN0aXZlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc2VjdGlvbiBvZiBjb2RlLiBCZWZvcmUgZGl2aW5nIGluLCBteSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byBjaGVjayBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEkgaGF2ZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmYCBvciBgI2lmbmRlZmAgZGlyZWN0aXZlcyB3cmFwcGluZyB0aGlzIGNvZGUuIEtub3dpbmcgdGhhdCB3aWxsIGdpdmUgbWUgYSBodWdlIGhlYWQgc3RhcnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY29kZSBpcyBpbmNsdWRlZCBpbiBhbGwgYnVpbGRzLCBvciBvbmx5IGluIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG9yIHBsYXRmb3Jtcy4gVGhhdCBjb25kaXRpb25hbCBsb2dpYyBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBhY3R1YWwgYmVoYXZpb3IgSSdtIHNlZWluZy4gSSdsbCBxdWlja2x5IHNjYW4gZm9yIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IGNvdWxkIGJlIGNvbnRyb2xsaW5nIHRoZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIG9mIHRoaXMgc2VjdGlvbi4gVGhhdCdzIHRoZSBmaXJzdCBzdGVwIC0gYWx3YXlzIGxvb2sgZm9yIHRob3NlIGAjaWZkZWZgcyEgSXQnbGwgc2F2ZSBtZSBhIGxvdCBvZiB0aW1lIGluIHRoZSBsb25nIHJ1biwgYW5kIHByZXZlbnQgbWUgZnJvbSBnb2luZyBkb3duIHRoZSB3cm9uZyBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzA3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDY6MDUuMTg0MDM4ODQ4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTExNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdCNpbmNsdWRlIFxcXCJvaGNpLmhcXFwiXFxuICA4MTpcXHQjaW5jbHVkZSBcXFwicGNpLXF1aXJrcy5oXFxcIlxcbiAgODI6XFx0XFxuICA4MzpcXHRzdGF0aWMgdm9pZCBvaGNpX2R1bXAoc3RydWN0IG9oY2lfaGNkICpvaGNpKTtcXG4gIDg0OlxcdHN0YXRpYyB2b2lkIG9oY2lfc3RvcChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTtcXG4gIDg1OlxcdHN0YXRpYyB2b2lkIGlvX3dhdGNoZG9nX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xcbiAgODY6XFx0XFxuICA4NzpcXHQjaW5jbHVkZSBcXFwib2hjaS1odWIuY1xcXCJcXG4gIDg4OlxcdCNpbmNsdWRlIFxcXCJvaGNpLWRiZy5jXFxcIlxcbiAgODk6XFx0I2luY2x1ZGUgXFxcIm9oY2ktbWVtLmNcXFwiXFxuICA5MDpcXHQjaW5jbHVkZSBcXFwib2hjaS1xLmNcXFwiXFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcbiAgOTM6XFx0LypcXG4gIDk0OlxcdCAqIE9uIGFyY2hpdGVjdHVyZXMgd2l0aCBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIHdlIG11c3QgbmV2ZXIgcmV0dXJuXFxuICA5NTpcXHQgKiBJUlFfTk9ORS5cXG4gIDk2OlxcdCAqL1xcbiAgOTc6XFx0I2lmIGRlZmluZWQoQ09ORklHX1NBMTExMSkgIC8qIC4uLiBvciBvdGhlciBlZGdlLXRyaWdnZXJlZCBzeXN0ZW1zICovXFxuICA5ODpcXHQjZGVmaW5lIElSUV9OT1RNSU5FXFx0SVJRX0hBTkRMRURcXG4gIDk5OlxcdCNlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA2OjA1LjE4NjIzNTMyOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzA1MDY4OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipPSENJIERlYnVnZ2luZzogVGhlIENvbmRpdGlvbmFsIENvbXBpbGUgUXVlc3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBjb2RlLiBJJ20gc2VlaW5nIHNvbWV0aGluZyB0aGF0J3MgYWx3YXlzIHByZXNlbnQg4oCTIG9yIGF0IGxlYXN0LCB0aGF0J3MgdGhlIGltcHJlc3Npb24gaXQgZ2l2ZXMuIEJ1dCB0aGVuLCBhIGxpdHRsZSBhbGFybSBiZWxsIGdvZXMgb2ZmLiBJIG5lZWQgdG8gZGlnIGRlZXBlci4gV2FpdCBhIG1pbnV0ZS4uLiB0aGlzIHBhcnRpY3VsYXIgc2VjdGlvbiwgdGhlIG9uZSBJJ20gZm9jdXNlZCBvbiwgcmVzaWRlcyB3aXRoaW4gYG9oY2ktZGJnLmNgLCBkb2Vzbid0IGl0PyBUaGF0J3MgdGhlIGZpbGUgSSBuZWVkIHRvIGxvb2sgYXQuIEFuZCBub3cgSSdtIGFza2luZyBteXNlbGYsIGFuZCB0aGF0J3MgdGhlIGtleSBxdWVzdGlvbiwgaXMgdGhpcyBjb2RlICphY3R1YWxseSogYWx3YXlzIGVuYWJsZWQ/IE9yIGlzIGl0IHdyYXBwZWQgaW4gc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmU/IElzIGl0IGNvbnRyb2xsZWQgYnkgYSBmbGFnLCBhIG1hY3JvLCBvciBzb21ldGhpbmcgZWxzZSB0aGF0IG1pZ2h0IHJlbmRlciBpdCBhY3RpdmUgb3IgaW5hY3RpdmUgZGVwZW5kaW5nIG9uIHRoZSBidWlsZCBjb25maWd1cmF0aW9uPyBUaGF0J3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIEkgbmVlZCB0byByZXNvbHZlIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIHdpdGggbXkgYW5hbHlzaXMuIFRoYXQncyB3aGVyZSBJIHdpbGwgZ28gbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgzNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDY6MDguODkxMzA3NzE0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTEuMCtcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBPSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi5cXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiAoQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyIFxcdTAwM2N3ZWlzc2dAdmllbm5hLmF0XFx1MDAzZVxcbiAgIDY6XFx0ICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDIgRGF2aWQgQnJvd25lbGwgXFx1MDAzY2Ricm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXRcXHUwMDNlXFxuICAgNzpcXHQgKlxcbiAgIDg6XFx0ICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuXFxuICAgOTpcXHQgKi9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cXG4gIDEyOlxcdFxcbiAgMTM6XFx0I2RlZmluZSBlZHN0cmluZyhlZF90eXBlKSAoeyBjaGFyICp0ZW1wOyBcXFxcXFxuICAxNDpcXHRcXHRzd2l0Y2ggKGVkX3R5cGUpIHsgXFxcXFxcbiAgMTU6XFx0XFx0Y2FzZSBQSVBFX0NPTlRST0w6XFx0dGVtcCA9IFxcXCJjdHJsXFxcIjsgYnJlYWs7IFxcXFxcXG4gIDE2OlxcdFxcdGNhc2UgUElQRV9CVUxLOlxcdFxcdHRlbXAgPSBcXFwiYnVsa1xcXCI7IGJyZWFrOyBcXFxcXFxuICAxNzpcXHRcXHRjYXNlIFBJUEVfSU5URVJSVVBUOlxcdHRlbXAgPSBcXFwiaW50clxcXCI7IGJyZWFrOyBcXFxcXFxuICAxODpcXHRcXHRkZWZhdWx0OlxcdFxcdHRlbXAgPSBcXFwiaXNvY1xcXCI7IGJyZWFrOyBcXFxcXFxuICAxOTpcXHRcXHR9IHRlbXA7fSlcXG4gIDIwOlxcdCNkZWZpbmUgcGlwZXN0cmluZyhwaXBlKSBlZHN0cmluZyh1c2JfcGlwZXR5cGUocGlwZSkpXFxuICAyMTpcXHRcXG4gIDIyOlxcdFxcbiAgMjM6XFx0I2RlZmluZSBvaGNpX2RiZ19zdyhvaGNpLCBuZXh0LCBzaXplLCBmb3JtYXQsIGFyZy4uLikgXFxcXFxcbiAgMjQ6XFx0XFx0ZG8geyBcXFxcXFxuICAyNTpcXHRcXHRpZiAobmV4dCAhPSBOVUxMKSB7IFxcXFxcXG4gIDI2OlxcdFxcdFxcdHVuc2lnbmVkIHNfbGVuOyBcXFxcXFxuICAyNzpcXHRcXHRcXHRzX2xlbiA9IHNjbnByaW50ZiAoKm5leHQsICpzaXplLCBmb3JtYXQsICMjIGFyZyApOyBcXFxcXFxuICAyODpcXHRcXHRcXHQqc2l6ZSAtPSBzX2xlbjsgKm5leHQgKz0gc19sZW47IFxcXFxcXG4gIDI5OlxcdFxcdH0gZWxzZSBcXFxcXFxuICAzMDpcXHRcXHRcXHRvaGNpX2RiZyhvaGNpLGZvcm1hdCwgIyMgYXJnICk7IFxcXFxcXG4gIDMxOlxcdFxcdH0gd2hpbGUgKDApO1xcbiAgMzI6XFx0XFxuICAzMzpcXHQvKiBWZXJzaW9uIGZvciB1c2Ugd2hlcmUgXFxcIm5leHRcXFwiIGlzIHRoZSBhZGRyZXNzIG9mIGEgbG9jYWwgdmFyaWFibGUgKi9cXG4gIDM0OlxcdCNkZWZpbmUgb2hjaV9kYmdfbm9zdyhvaGNpLCBuZXh0LCBzaXplLCBmb3JtYXQsIGFyZy4uLikgXFxcXFxcbiAgMzU6XFx0XFx0ZG8geyBcXFxcXFxuICAzNjpcXHRcXHRcXHR1bnNpZ25lZCBzX2xlbjsgXFxcXFxcbiAgMzc6XFx0XFx0XFx0c19sZW4gPSBzY25wcmludGYoKm5leHQsICpzaXplLCBmb3JtYXQsICMjIGFyZyk7IFxcXFxcXG4gIDM4OlxcdFxcdFxcdCpzaXplIC09IHNfbGVuOyAqbmV4dCArPSBzX2xlbjsgXFxcXFxcbiAgMzk6XFx0XFx0fSB3aGlsZSAoMCk7XFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcbiAgNDI6XFx0c3RhdGljIHZvaWQgb2hjaV9kdW1wX2ludHJfbWFzayAoXFxuICA0MzpcXHRcXHRzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksXFxuICA0NDpcXHRcXHRjaGFyICpsYWJlbCxcXG4gIDQ1OlxcdFxcdHUzMiBtYXNrLFxcbiAgNDY6XFx0XFx0Y2hhciAqKm5leHQsXFxuICA0NzpcXHRcXHR1bnNpZ25lZCAqc2l6ZSlcXG4gIDQ4OlxcdHtcXG4gIDQ5OlxcdFxcdG9oY2lfZGJnX3N3IChvaGNpLCBuZXh0LCBzaXplLCBcXFwiJXMgMHglMDh4JXMlcyVzJXMlcyVzJXMlcyVzXFxcXG5cXFwiLFxcbiAgNTA6XFx0XFx0XFx0bGFiZWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA2OjA4Ljg5MTQ0Nzk0NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjg1NTg1MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSwgYW4gZXhwZXJ0LCBhbSB0aGlua2luZyBpdDpcblxuKipMb2NhdGluZyBDcml0aWNhbCBDb2RlIFNlY3Rpb25zKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGxhbmRzY2FwZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHByZWNpc2VseSBtYXBwaW5nIG91dCB0aGUgdXNhZ2UgYW5kIGRlZmluaXRpb24gb2YgYGRlYnVnX291dHB1dGAgYW5kIGBmaWxsX2J1ZmZlcmAuIFVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIGNvbnRleHQgb2Ygd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGFuZCBob3cgdGhleSBpbnRlcmFjdCBpcyBjcnVjaWFsIGZvciBkaWFnbm9zaW5nIHdoYXRldmVyIGlzc3VlIEknbSBjaGFzaW5nIGRvd24gb3Igb3B0aW1pemluZyB3aGF0ZXZlciBJJ20gYnVpbGRpbmcuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgdGhlIHByb3BlciBjb250ZXh0dWFsIGZvdW5kYXRpb24uIFRpbWUgdG8gc3RhcnQgdHJhY2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg3NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDY6MTEuNTc3MDM2MDUyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA0NDY2ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsbF9idWZmZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYz02NjU9c3RhdGljIHN0cnVjdCBkZWJ1Z19idWZmZXIgKmFsbG9jX2J1ZmZlcihzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksXFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNjgwLVxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYzo2ODE6c3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTY4Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM9NzA0PXN0YXRpYyBzc2l6ZV90IGRlYnVnX291dHB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTcxMS1cXHRpZiAoYnVmLVxcdTAwM2Vjb3VudCA9PSAwKSB7XFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jOjcxMjpcXHRcXHRyZXQgPSBmaWxsX2J1ZmZlcihidWYpO1xcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy03MTMtXFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA2OjExLjczNzQ4NzkxMloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzgxODcyMTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZWJ1Z2dpbmcgRGl2ZTogQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnbyBkZWVwZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgY2hhc2luZyBhIGdob3N0LiBGaXJzdCB0aGluZydzIGZpcnN0OiBJcyB0aGlzIGJlaGF2aW9yLCB0aGlzIGJ1ZywgdGhpcyBhbm9tYWx5LCBldmVuICphY3RpdmUqIGluIHRoZSBjdXJyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb24/IEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgXCJIYXMgc29tZW9uZSBjbGV2ZXJseSB3cmFwcGVkIHRoaXMgcHJvYmxlbWF0aWMgY29kZSBzZWN0aW9uIGluIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlP1wiIFlvdSBrbm93LCBzb21ldGhpbmcgbGlrZSBgI2lmZGVmIERFQlVHYCwgYCNpZmRlZiBURVNUSU5HYCwgb3IgbWF5YmUgZXZlbiBzb21ldGhpbmcgY3VzdG9tIHRoYXQgc29tZW9uZSBzZXQgdXAgc3BlY2lmaWNhbGx5IGZvciBhIHNwZWNpZmljIHBsYXRmb3JtIG9yIGJ1aWxkIHRhcmdldC4gQ291bGQgZXZlbiBiZSBzb21ldGhpbmcgbW9yZSBvYnNjdXJlLiBJJ3ZlIGJlZW4gYml0dGVuIGJ5IHRoYXQgYmVmb3JlLiBTbywgYmVmb3JlIEkgc3RhcnQgdW53aW5kaW5nIHRoZSBlbnRpcmUgc3RhY2ssIEknbSBnb2luZyB0byBzY2FuIHRoZSByZWxldmFudCBzb3VyY2UgY29kZSwgYW5kIHBlcmhhcHMgZG8gYSBxdWljayBncmVwLCBmb3IgYW55IG9mIHRob3NlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgaXMgZXZlbiB0aGUgKmFjdGl2ZSogY29kZSBwYXRoIEknbSBsb29raW5nIGF0LiBUaGF0IHdvdWxkIGJlIGEgaHVnZSB0aW1lIHNhdmVyLiBJIG5lZWQgdG8gZWxpbWluYXRlIHRoaXMgcG9zc2liaWxpdHkgYmVmb3JlIEkgaW52ZXN0IHRvbyBtdWNoIGVmZm9ydC4gSXQncyB0aGUgbW9zdCBsaWtlbHkgcXVpY2sgd2luLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjk4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDY6MTUuMTE5MzcxMzg4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjYwOlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKFxcdTAwMjZvaGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIDY2MTpcXHRcXG4gNjYyOlxcdFxcdHJldHVybiBQQUdFX1NJWkUgLSBzaXplO1xcbiA2NjM6XFx0fVxcbiA2NjQ6XFx0XFxuIDY2NTpcXHRzdGF0aWMgc3RydWN0IGRlYnVnX2J1ZmZlciAqYWxsb2NfYnVmZmVyKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSxcXG4gNjY2OlxcdFxcdFxcdFxcdFxcdHNzaXplX3QgKCpmaWxsX2Z1bmMpKHN0cnVjdCBkZWJ1Z19idWZmZXIgKikpXFxuIDY2NzpcXHR7XFxuIDY2ODpcXHRcXHRzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWY7XFxuIDY2OTpcXHRcXG4gNjcwOlxcdFxcdGJ1ZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkZWJ1Z19idWZmZXIpO1xcbiA2NzE6XFx0XFxuIDY3MjpcXHRcXHRpZiAoYnVmKSB7XFxuIDY3MzpcXHRcXHRcXHRidWYtXFx1MDAzZW9oY2kgPSBvaGNpO1xcbiA2NzQ6XFx0XFx0XFx0YnVmLVxcdTAwM2VmaWxsX2Z1bmMgPSBmaWxsX2Z1bmM7XFxuIDY3NTpcXHRcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZidWYtXFx1MDAzZW11dGV4KTtcXG4gNjc2OlxcdFxcdH1cXG4gNjc3OlxcdFxcbiA2Nzg6XFx0XFx0cmV0dXJuIGJ1ZjtcXG4gNjc5OlxcdH1cXG4gNjgwOlxcdFxcbiA2ODE6XFx0c3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXFxuIDY4MjpcXHR7XFxuIDY4MzpcXHRcXHRpbnQgcmV0O1xcbiA2ODQ6XFx0XFxuIDY4NTpcXHRcXHRpZiAoIWJ1Zi1cXHUwMDNlcGFnZSlcXG4gNjg2OlxcdFxcdFxcdGJ1Zi1cXHUwMDNlcGFnZSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG4gNjg3OlxcdFxcbiA2ODg6XFx0XFx0aWYgKCFidWYtXFx1MDAzZXBhZ2UpIHtcXG4gNjg5OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDY5MDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNjkxOlxcdFxcdH1cXG4gNjkyOlxcdFxcbiA2OTM6XFx0XFx0cmV0ID0gYnVmLVxcdTAwM2VmaWxsX2Z1bmMoYnVmKTtcXG4gNjk0OlxcdFxcbiA2OTU6XFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwKSB7XFxuIDY5NjpcXHRcXHRcXHRidWYtXFx1MDAzZWNvdW50ID0gcmV0O1xcbiA2OTc6XFx0XFx0XFx0cmV0ID0gMDtcXG4gNjk4OlxcdFxcdH1cXG4gNjk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjoxNS4xMTk1NzMwNjhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUyMzY0ODczOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhhdCBmaWxlLCBgb2hjaS1kYmcuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGRlYnVnZ2luZyBmZWF0dXJlcyBhcmUgcG90ZW50aWFsbHkgZW5hYmxlZCBvciBkaXNhYmxlZCB3aXRoaW4gaXQuIEFuZCB0aGUgdXN1YWwgc3VzcGVjdCBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbGlrZSB0aGlzIGlzIGAjaWZkZWYgREVCVUdgLiBTbywgSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGNvZGUsIGxvb2tpbmcgZm9yIHRoYXQgc3BlY2lmaWMgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSB0byBjb250cm9sIHRoZSB2aXNpYmlsaXR5IG9yIGJlaGF2aW91ciBvZiB0aGUgZGVidWcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwODAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA2OjE3LjY0MzIyNDcxNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0MjUwNzQzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWYgREVCVUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjoxNy45Mjc0ODM5OTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1MzM4NTEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBteSBkb21haW4gZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIHRoZSBEZWJ1ZyBGaWxlc3lzdGVtIEZsYWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBzZWUgd2UncmUgYXQgYSBwb2ludCB3aGVyZSB3ZSBuZWVkIHRvIGV4YW1pbmUgYENPTkZJR19ERUJVR19GU2AuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgdGhpcyBpcyBhIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbG1vc3QgYWx3YXlzIGEgc2lnbiB3ZSdyZSBnb2luZyB0byBpbnRlcmFjdCB3aXRoIHRoZSBkZWJ1ZyBmaWxlc3lzdGVtLiBUaGlzIHVzdWFsbHkgbWVhbnMgSSdtIHRyb3VibGVzaG9vdGluZywgYW5hbHl6aW5nIGtlcm5lbCBiZWhhdmlvciwgb3IgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgbG93LWxldmVsIGludGVyYWN0aW9ucy4gSSdtIGxpa2VseSBnZWFyaW5nIHVwIHRvIGV4YW1pbmUgd2hhdCBkZWJ1ZyBpbmZvcm1hdGlvbiBoYXMgYmVlbiBlbmFibGVkLCB3aGF0J3MgYmVlbiBleHBvc2VkLCBhbmQgaG93IGl0IG1pZ2h0IGhlbHAgbWUgdW5kZXJzdGFuZCBhIHNwZWNpZmljIGlzc3VlIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0eS4gSXQncyBhIGtleSBmaXJzdCBzdGVwIGluIGRpYWdub3NpbmcgY29tcGxleCBrZXJuZWwgYmVoYXZpb3IsIHNvIGxldCdzIGdldCByaWdodCBvbiBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjoyMC45ODA4NzIzNjVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MTEyOTA1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfREVCVUdfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjoyMS4wNzQ5OTU1NzlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyOTk4MTM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlYnVnZ2luZyBhIFBvc3NpYmxlIENvbXBpbGF0aW9uIElzc3VlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIHJldHJhY2UgbXkgc3RlcHMgYW5kIGNvbnNpZGVyIHNvbWV0aGluZyBwb3RlbnRpYWxseSBzdWJ0bGUgaGVyZS4gSSB3YXMgZm9jdXNpbmcgb24gdGhlIHNwZWNpZmljIGZpbGUsIGJ1dCBJJ20gaGF2aW5nIGEgaHVuY2ggYWJvdXQgc29tZXRoaW5nIG1vcmUgZ2xvYmFsLiBJcyBpdCBwb3NzaWJsZSB0aGF0IHRoZSBjb2RlIGluIGBvaGNpLWRiZy5jYCDigJMgdGhlIGRlYnVnIGZpbGUsIHNwZWNpZmljYWxseSDigJMgaXMgKm5vdCogZGlyZWN0bHkgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIGJpbmFyeT8gSXQncyBjb25jZWl2YWJsZSB0aGF0IHRoZSBwcmVwcm9jZXNzb3IgaXMgaGFuZGxpbmcgdGhpbmdzLCBhbmQgaXQgbWlnaHQgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoaW4gYG9oY2ktaGNkLmNgLiBUaGF0IHdvdWxkIG1lYW4gSSBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdG8gZW5zdXJlIHRoYXQgdGhlIGRlYnVnZ2luZyBvdXRwdXQgSSdtIGV4cGVjdGluZyBpcyBhY3R1YWxseSBlbmFibGVkLiBJdCB3b3VsZCBhbHNvIGV4cGxhaW4gd2h5IEkgY2FuJ3Qgc2VlIHRoZSBkZWJ1ZyBzdGF0ZW1lbnRzIGJlaW5nIHRyaWdnZXJlZC4gSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgY29tcGlsYXRpb24gZmxhZ3MgYW5kIHByZXByb2Nlc3NvciBzeW1ib2xzIHRvIG1ha2Ugc3VyZSB0aGUgZGVidWcgY29kZSBpcyBhY3R1YWxseSBiZWluZyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ2MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA2OjI0LjMwNDk4MDEyNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1Mzk1NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9oY2ktZGJnLmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYz04NT1zdGF0aWMgdm9pZCBpb193YXRjaGRvZ19mdW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYy04Ny0jaW5jbHVkZSBcXFwib2hjaS1odWIuY1xcXCJcXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmM6ODg6I2luY2x1ZGUgXFxcIm9oY2ktZGJnLmNcXFwiXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jLTg5LSNpbmNsdWRlIFxcXCJvaGNpLW1lbS5jXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjoyNC40MTAzODQ5MzhaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzMDY4NTcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgb2hjaS1oY2QuY2AgYXQgTGluZSA4OCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoaXMgaXNzdWUuIEJhc2VkIG9uIHdoYXQgSSd2ZSBzZWVuLCBpdCdzIHBvaW50aW5nIHRvd2FyZHMgYSBwb3RlbnRpYWwgcHJvYmxlbSBpbiB0aGUgT0hDSSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyLiBMZXQncyBzdGFydCB3aXRoIGEgZm9jdXNlZCBsb29rIGFyb3VuZCBsaW5lIDg4IG9mIGBvaGNpLWhjZC5jYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hhdCdzIGJlaW5nIGluaXRpYWxpemVkIG9yIG1vZGlmaWVkIGFyb3VuZCB0aGF0IGFyZWEuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gZWl0aGVyIGRlc2NyaXB0b3Igc2V0dXAsIGludGVycnVwdCBoYW5kbGluZywgb3IgbWF5YmUgZXZlbiByZXNvdXJjZSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGNvbnRleHQgb2YgdGhhdCBjb2RlIHNlY3Rpb24uIElzIHRoaXMgcmVsYXRlZCB0byBlbmRwb2ludCBjb25maWd1cmF0aW9uPyBPciBwb3NzaWJseSBhIERNQSB0cmFuc2ZlciBzZXR1cD8gTGluZSBudW1iZXJzIGFyZSBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gcXVpY2tseSBmaW5kIGEgc3BlY2lmaWMgY29kZSBibG9jaywgYnV0IEknbGwgbmVlZCB0byB1c2UgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgT0hDSSBhcmNoaXRlY3R1cmUgdG8gcGxhY2UgdGhhdCBsaW5lIGluIGEgcmVsZXZhbnQgY29udGV4dC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgY2x1ZXMgdGhhdCBzdWdnZXN0IGEgcmFjZSBjb25kaXRpb24sIGEgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIGEgbWlzY29uZmlndXJhdGlvbiB0aGF0IGNvdWxkIGJlIGNvbnRyaWJ1dGluZyB0byB0aGUgb2JzZXJ2ZWQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODU1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDY6MjcuNzQxMDcyODI3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzA6XFx0I2VuZGlmXFxuICA3MTpcXHRcXG4gIDcyOlxcdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuICA3MzpcXHRcXG4gIDc0OlxcdHN0YXRpYyBjb25zdCBjaGFyXFx0aGNkX25hbWUgW10gPSBcXFwib2hjaV9oY2RcXFwiO1xcbiAgNzU6XFx0XFxuICA3NjpcXHQjZGVmaW5lXFx0U1RBVEVDSEFOR0VfREVMQVlcXHRtc2Vjc190b19qaWZmaWVzKDMwMClcXG4gIDc3OlxcdCNkZWZpbmVcXHRJT19XQVRDSERPR19ERUxBWVxcdG1zZWNzX3RvX2ppZmZpZXMoMjc1KVxcbiAgNzg6XFx0I2RlZmluZVxcdElPX1dBVENIRE9HX09GRlxcdFxcdDB4ZmZmZmZmMDBcXG4gIDc5OlxcdFxcbiAgODA6XFx0I2luY2x1ZGUgXFxcIm9oY2kuaFxcXCJcXG4gIDgxOlxcdCNpbmNsdWRlIFxcXCJwY2ktcXVpcmtzLmhcXFwiXFxuICA4MjpcXHRcXG4gIDgzOlxcdHN0YXRpYyB2b2lkIG9oY2lfZHVtcChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpO1xcbiAgODQ6XFx0c3RhdGljIHZvaWQgb2hjaV9zdG9wKHN0cnVjdCB1c2JfaGNkICpoY2QpO1xcbiAgODU6XFx0c3RhdGljIHZvaWQgaW9fd2F0Y2hkb2dfZnVuYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxuICA4NjpcXHRcXG4gIDg3OlxcdCNpbmNsdWRlIFxcXCJvaGNpLWh1Yi5jXFxcIlxcbiAgODg6XFx0I2luY2x1ZGUgXFxcIm9oY2ktZGJnLmNcXFwiXFxuICA4OTpcXHQjaW5jbHVkZSBcXFwib2hjaS1tZW0uY1xcXCJcXG4gIDkwOlxcdCNpbmNsdWRlIFxcXCJvaGNpLXEuY1xcXCJcXG4gIDkxOlxcdFxcbiAgOTI6XFx0XFxuICA5MzpcXHQvKlxcbiAgOTQ6XFx0ICogT24gYXJjaGl0ZWN0dXJlcyB3aXRoIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMgd2UgbXVzdCBuZXZlciByZXR1cm5cXG4gIDk1OlxcdCAqIElSUV9OT05FLlxcbiAgOTY6XFx0ICovXFxuICA5NzpcXHQjaWYgZGVmaW5lZChDT05GSUdfU0ExMTExKSAgLyogLi4uIG9yIG90aGVyIGVkZ2UtdHJpZ2dlcmVkIHN5c3RlbXMgKi9cXG4gIDk4OlxcdCNkZWZpbmUgSVJRX05PVE1JTkVcXHRJUlFfSEFORExFRFxcbiAgOTk6XFx0I2Vsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDY6MjcuNzQxMjAzOTM3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTAxMjE3NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSdtIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZWJ1Z2dpbmcgRmxhZydzIFNjb3BlKipcblxuSG1tLCBpdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGl0J3MganVzdCBpbmNsdWRlZC4gQnV0IGhhbmcgb24gYSBzZWNvbmQsIGEgbGl0dGxlIGFsYXJtIGJlbGwganVzdCB3ZW50IG9mZi4gV2hhdCBpZiB0aGUgZmlsZSBgb2hjaS1kYmcuY2Ag4oCTIHRoYXQgSSdtIGRlYWxpbmcgd2l0aCBoZXJlIOKAkyAqaXRzZWxmKiBoYXMgYSBgI2lmZGVmIERFQlVHYCBibG9jayB3aXRoaW4gaXQ/IFRoYXQncyB0aGUgcmVhbCBwb3RlbnRpYWwgZ290Y2hhLiBJZiBpdCBkb2VzLCB0aGVuIHRoZSBpbmNsdXNpb24gb2YgYG9oY2ktZGJnLmNgIGFsb25lIG1pZ2h0IG5vdCAqZ3VhcmFudGVlKiB0aGF0IHRoZSBkZWJ1ZyBjb2RlIHdpdGhpbiBpdCBpcyBhY3RpdmUuIFRoZSBuZXN0ZWQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gY291bGQgYmUgYXQgcGxheSBoZXJlLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbnRlbnRzIG9mIHRoYXQgZmlsZS4gSXQgaXNuJ3QgZ29vZCBlbm91Z2ggdG8gYXNzdW1lIGV2ZXJ5dGhpbmcgd2lsbCBiZSBpbiBwbGFjZSB3aXRoIGEgc2ltcGxlIGluY2x1ZGUsIG5vdCB3aGVuIHRoYXQgZmlsZSBtaWdodCBoYXZlIGl0cyBvd24gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHRoZSBzYW1lIG1hY3JvLiBJIG5lZWQgdG8gcnVsZSB0aGlzIG91dCwgYW5kIHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTk5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjozMS4wOTEzMjg2NjVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMS4wK1xcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIE9IQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLlxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIgXFx1MDAzY3dlaXNzZ0B2aWVubmEuYXRcXHUwMDNlXFxuICAgNjpcXHQgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMiBEYXZpZCBCcm93bmVsbCBcXHUwMDNjZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldFxcdTAwM2VcXG4gICA3OlxcdCAqXFxuICAgODpcXHQgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC5cXG4gICA5OlxcdCAqL1xcbiAgMTA6XFx0XFxuICAxMTpcXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xcbiAgMTI6XFx0XFxuICAxMzpcXHQjZGVmaW5lIGVkc3RyaW5nKGVkX3R5cGUpICh7IGNoYXIgKnRlbXA7IFxcXFxcXG4gIDE0OlxcdFxcdHN3aXRjaCAoZWRfdHlwZSkgeyBcXFxcXFxuICAxNTpcXHRcXHRjYXNlIFBJUEVfQ09OVFJPTDpcXHR0ZW1wID0gXFxcImN0cmxcXFwiOyBicmVhazsgXFxcXFxcbiAgMTY6XFx0XFx0Y2FzZSBQSVBFX0JVTEs6XFx0XFx0dGVtcCA9IFxcXCJidWxrXFxcIjsgYnJlYWs7IFxcXFxcXG4gIDE3OlxcdFxcdGNhc2UgUElQRV9JTlRFUlJVUFQ6XFx0dGVtcCA9IFxcXCJpbnRyXFxcIjsgYnJlYWs7IFxcXFxcXG4gIDE4OlxcdFxcdGRlZmF1bHQ6XFx0XFx0dGVtcCA9IFxcXCJpc29jXFxcIjsgYnJlYWs7IFxcXFxcXG4gIDE5OlxcdFxcdH0gdGVtcDt9KVxcbiAgMjA6XFx0I2RlZmluZSBwaXBlc3RyaW5nKHBpcGUpIGVkc3RyaW5nKHVzYl9waXBldHlwZShwaXBlKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDY6MzEuMDkxNDYwNDM1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODUzMTA2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgYG9oY2ktZGJnLmNgIEZpbGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiBzb21ldGhpbmcgc3BlY2lmaWMgd2l0aGluIHRoZSBgb2hjaS1kYmcuY2AgZmlsZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuIEV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBvZnRlbiwgZGVidWctcmVsYXRlZCBmdW5jdGlvbnMgb3IgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCBtaWdodCBiZSBtb3JlIHJlY2VudCBhZGRpdGlvbnMgb3IgaGF2ZSBzcGVjaWZpYyB0ZXN0aW5nIGhvb2tzLCBhcmUgcGxhY2VkIHRvd2FyZHMgdGhlIHRhaWwgZW5kIG9mIHRoZSBzb3VyY2UgZmlsZS4gSXQncyBhIHF1aWNrIHdheSB0byBmaW5kIHRoZSByZWxldmFudCBkZWJ1Z2dpbmcgY29kZSBvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiByZWxhdGVkIHRvIHRoZSBVU0IgT3BlbiBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlLiBMZXQncyBzZWUgd2hhdCdzIGRvd24gdGhlcmUuIFRoaXMgaXMgYSBjb21tb24gc3RhcnRpbmcgcG9pbnQgaW4gdGhpcyB0eXBlIG9mIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxOTUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA2OjM0LjA3Njc3NTU2NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAxNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcyMDpcXHRcXHRyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgbGVuLCBvZmZzZXQsXFxuIDcyMTpcXHRcXHRcXHRcXHRcXHQgICAgICBidWYtXFx1MDAzZXBhZ2UsIGJ1Zi1cXHUwMDNlY291bnQpO1xcbiA3MjI6XFx0XFxuIDcyMzpcXHRvdXQ6XFxuIDcyNDpcXHRcXHRyZXR1cm4gcmV0O1xcbiA3MjU6XFx0XFxuIDcyNjpcXHR9XFxuIDcyNzpcXHRcXG4gNzI4OlxcdHN0YXRpYyBpbnQgZGVidWdfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIDcyOTpcXHR7XFxuIDczMDpcXHRcXHRzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDczMTpcXHRcXG4gNzMyOlxcdFxcdGtmcmVlKGJ1Zi1cXHUwMDNlcGFnZSk7XFxuIDczMzpcXHRcXHRrZnJlZShidWYpO1xcbiA3MzQ6XFx0XFxuIDczNTpcXHRcXHRyZXR1cm4gMDtcXG4gNzM2OlxcdH1cXG4gNzM3OlxcdHN0YXRpYyBpbnQgZGVidWdfYXN5bmNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gNzM4OlxcdHtcXG4gNzM5OlxcdFxcdGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YSA9IGFsbG9jX2J1ZmZlcihpbm9kZS1cXHUwMDNlaV9wcml2YXRlLCBmaWxsX2FzeW5jX2J1ZmZlcik7XFxuIDc0MDpcXHRcXG4gNzQxOlxcdFxcdHJldHVybiBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEgPyAwIDogLUVOT01FTTtcXG4gNzQyOlxcdH1cXG4gNzQzOlxcdFxcbiA3NDQ6XFx0c3RhdGljIGludCBkZWJ1Z19wZXJpb2RpY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiA3NDU6XFx0e1xcbiA3NDY6XFx0XFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gYWxsb2NfYnVmZmVyKGlub2RlLVxcdTAwM2VpX3ByaXZhdGUsXFxuIDc0NzpcXHRcXHRcXHRcXHRcXHRcXHQgIGZpbGxfcGVyaW9kaWNfYnVmZmVyKTtcXG4gNzQ4OlxcdFxcbiA3NDk6XFx0XFx0cmV0dXJuIGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YSA/IDAgOiAtRU5PTUVNO1xcbiA3NTA6XFx0fVxcbiA3NTE6XFx0XFxuIDc1MjpcXHRzdGF0aWMgaW50IGRlYnVnX3JlZ2lzdGVyc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiA3NTM6XFx0e1xcbiA3NTQ6XFx0XFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gYWxsb2NfYnVmZmVyKGlub2RlLVxcdTAwM2VpX3ByaXZhdGUsXFxuIDc1NTpcXHRcXHRcXHRcXHRcXHRcXHQgIGZpbGxfcmVnaXN0ZXJzX2J1ZmZlcik7XFxuIDc1NjpcXHRcXG4gNzU3OlxcdFxcdHJldHVybiBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEgPyAwIDogLUVOT01FTTtcXG4gNzU4OlxcdH1cXG4gNzU5OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBjcmVhdGVfZGVidWdfZmlsZXMgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDY6MzQuMDc2OTA3Njc1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDk2MDIwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBgY3JlYXRlX2RlYnVnX2ZpbGVzYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBiYWNrIGludG8gdGhlIGNvZGUuIE15IGd1dCBmZWVsaW5nIGlzIHRvIGZvY3VzIG9uIHRoYXQgYGNyZWF0ZV9kZWJ1Z19maWxlc2AgZnVuY3Rpb24uIEl04oCZcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHdoZW4gdHJhY2tpbmcgZG93biBwb3RlbnRpYWwgaXNzdWVzIG9yIGRlYnVnZ2luZyBhIG5ldyBzeXN0ZW0sIGJlY2F1c2UgaXQgaXMgc29tZXRoaW5nIEkgY2FuIHNlZSBhIGxvdCBvZiBkZXZlbG9wZXJzIHVzaW5nIHRvIGxvb2sgZm9yIGNsdWVzLCBhbmQgaXMgcHJvYmFibHkgdXNlZCBxdWl0ZSBmcmVxdWVudGx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gY29tZm9ydGFibGUgdGhhdCB0aGUgZmlsZXMgZ2VuZXJhdGVkIG1hdGNoIGV4cGVjdGF0aW9ucy4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGlucHV0cyBpdCB0YWtlcyBhbmQgZXhhY3RseSB3aGF0IGl0IG91dHB1dHMuIEhvcGVmdWxseSwgaXQgaGFzIGRlY2VudCBsb2dnaW5nLCBvciBhdCBsZWFzdCBzb21lIGluZm9ybWF0aXZlIGZpbGVuYW1lcyB0aGF0IGNhbiBsZWFkIG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgaXQncyBjb3JyZWN0bHkgY29uZmlndXJlZCBpbiB0aGUgZmlyc3QgcGxhY2UsIG9yIGlmIHNvbWV0aGluZyBpcyBhY2NpZGVudGFsbHkgb3ZlcnJpZGluZyBpdHMgYmVoYXZpb3IuIEl0IGNhbiBiZSBlYXN5IHRvIGxvc2UgdHJhY2sgb2Ygc2V0dGluZ3MgYXMgd2UgZ28sIHNvIGxldHMgY29uZmlybSB0aGUgc3RhdGUgYW5kIHNldHRpbmdzLiBMZXQncyBzZWUgd2hhdCB0aGF0IHlpZWxkcy4gSXQncyBvZnRlbiB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NzIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA2OjM4LjUyNjUxMzI3NloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc2MDpcXHR7XFxuIDc2MTpcXHRcXHRzdHJ1Y3QgdXNiX2J1cyAqYnVzID0gXFx1MDAyNm9oY2lfdG9faGNkKG9oY2kpLVxcdTAwM2VzZWxmO1xcbiA3NjI6XFx0XFx0c3RydWN0IGRlbnRyeSAqcm9vdDtcXG4gNzYzOlxcdFxcbiA3NjQ6XFx0XFx0cm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihidXMtXFx1MDAzZWJ1c19uYW1lLCBvaGNpX2RlYnVnX3Jvb3QpO1xcbiA3NjU6XFx0XFx0b2hjaS1cXHUwMDNlZGVidWdfZGlyID0gcm9vdDtcXG4gNzY2OlxcdFxcbiA3Njc6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiYXN5bmNcXFwiLCBTX0lSVUdPLCByb290LCBvaGNpLCBcXHUwMDI2ZGVidWdfYXN5bmNfZm9wcyk7XFxuIDc2ODpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJwZXJpb2RpY1xcXCIsIFNfSVJVR08sIHJvb3QsIG9oY2ksXFxuIDc2OTpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmRlYnVnX3BlcmlvZGljX2ZvcHMpO1xcbiA3NzA6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwicmVnaXN0ZXJzXFxcIiwgU19JUlVHTywgcm9vdCwgb2hjaSxcXG4gNzcxOlxcdFxcdFxcdFxcdCAgICBcXHUwMDI2ZGVidWdfcmVnaXN0ZXJzX2ZvcHMpO1xcbiA3NzI6XFx0XFxuIDc3MzpcXHRcXHRvaGNpX2RiZyAob2hjaSwgXFxcImNyZWF0ZWQgZGVidWcgZmlsZXNcXFxcblxcXCIpO1xcbiA3NzQ6XFx0fVxcbiA3NzU6XFx0XFxuIDc3NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX2RlYnVnX2ZpbGVzIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpXFxuIDc3NzpcXHR7XFxuIDc3ODpcXHRcXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUob2hjaS1cXHUwMDNlZGVidWdfZGlyKTtcXG4gNzc5OlxcdH1cXG4gNzgwOlxcdFxcbiA3ODE6XFx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cXG4gNzgyOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjozOC41MjY2NTE5NDZaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0NDQxODYzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gdGhlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgZGVidWdmcyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkRlYnVnZnMsIGh1aD8gSXMgdGhpcyBldmVuIHdvcnRoIHRoZSBlZmZvcnQ/XCIgVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IG9ubHkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIGl0J3MgZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpdmUgY2hhbmdlcywgbm9uLWZ1bmN0aW9uYWwgY29uc3RhbnQgbW9kaWZpY2F0aW9ucywgb3IgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cbkZpcnN0LCBpcyBkZWJ1Z2ZzIHJlYWNoYWJsZT8gWWVzLCBpdCBpcy4gTm93LCBpcyB0aGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U/IEF0IGZpcnN0IGdsYW5jZSwgaXQgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBtZW1vcnkgYWxsb2NhdGlvbiByZWZhY3RvciBmcm9tIGBfX2dldF9mcmVlX3BhZ2VzYCB0byBga21hbGxvY2AgYW5kIGBnZXRfemVyb2VkX3BhZ2VgIHRvIGBremFsbG9jYC4gSGFuZyBvbiwgbGV0J3MgbWFrZSBzdXJlIEkgZGlkbid0IG1pc3MgYW55dGhpbmcuXG5cbk9rYXksIGluIGB1c2JfZGV2aWNlX2R1bXBgLCB0aGUgY2hhbmdlIGlzOlxuXG5gYGBjXG4tXHRwYWdlc19zdGFydCA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlcyhHRlBfTk9JTywgMSk7XG4rXHRwYWdlc19zdGFydCA9IGttYWxsb2MoUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyAxLCBHRlBfTk9JTyk7XG5gYGBcbmFuZFxuYGBgY1xuLVx0XHRcdGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcGFnZXNfc3RhcnQsIDEpO1xuK1x0XHRcdGtmcmVlKHBhZ2VzX3N0YXJ0KTtcbmBgYFxuQW5kIGluIGBvaGNpLWRiZy5jYDpcbmBgYGNcbi1cdFx0YnVmLVx1MDAzZXBhZ2UgPSAoY2hhciAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTtcbitcdFx0YnVmLVx1MDAzZXBhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG5gYGBcbmFuZFxuYGBgY1xuLVx0aWYgKGJ1Zikge1xuLVx0XHRpZiAoYnVmLVx1MDAzZXBhZ2UpXG4tXHRcdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1Zi1cdTAwM2VwYWdlKTtcbi1cdFx0a2ZyZWUoYnVmKTtcbi1cdH1cbitcdGtmcmVlKGJ1Zi1cdTAwM2VwYWdlKTtcbitcdGtmcmVlKGJ1Zik7XG5gYGBcblxuVGhpcyBpcyBlc3NlbnRpYWxseSBhIHN0cmFpZ2h0Zm9yd2FyZCBtZW1vcnkgYWxsb2NhdGlvbiBjaGFuZ2UuIEl0J3MgcmVmYWN0b3JpbmcsIHJlcGxhY2luZyB0aGUgcGFnZSBhbGxvY2F0b3Igd2l0aCB0aGUgc2xhYiBhbGxvY2F0b3IuXG5cbklzIHRoaXMgd29ydGggZnV6emluZz8gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGRpZmZlcmVudCBhbGxvY2F0b3IgaXMgYmVpbmcgdXNlZC4gRXZlbiBpZiBpdCdzICpqdXN0KiByZWZhY3RvcmluZywgaXQgY291bGQgaW50cm9kdWNlIG5ldyB2dWxuZXJhYmlsaXRpZXMuIEJ1dCB3YWl0LCBsZXQncyByZXZpc2l0IHRoZSBwcm9tcHQuIEl0IGRvZXNuJ3QgZXhwbGljaXRseSBtZW50aW9uIHJlZmFjdG9yaW5nLCBidXQgaXQgZG9lcyBzYXkgd2hhdCBpc24ndCB3b3J0aCBmdXp6aW5nLiBUaGUgcHJvbXB0IGxpc3QgKmRvZXMgbm90KiBpbmNsdWRlIHJlZmFjdG9yaW5nLlxuXG5BbHJpZ2h0LCBpcyB0aGUgY29kZSByZWFjaGFibGUgaW4gUUVNVT8gWWVzLiBgL3N5cy9rZXJuZWwvZGVidWcvdXNiL2RldmljZXNgIGlzIHJlYWNoYWJsZSBmb3IgYHVzYl9kZXZpY2VfZHVtcGAuIEFuZCBgb2hjaS1kYmcuY2AgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIGRlYnVnZnMgYXMgd2VsbCwgcHJvdmlkZWQgT0hDSSBpcyBlbmFibGVkLiBDYW4gd2UgZW5hYmxlIE9IQ0kgaW4gUUVNVT8gWWVzLCBRRU1VIGhhcyBgcGNpLW9oY2lgIGFuZCBgc3lzYnVzLW9oY2lgIHdoaWNoIHdlIGNhbiB1c2UgZm9yIGVuYWJsaW5nIE9IQ0kuXG5cblNvLCBpdCdzIHJlYWNoYWJsZSBhbmQgYSBmdW5jdGlvbmFsIGNoYW5nZS4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgc3BlY2lmaWMgY29uZmlnIHJlcXVpcmVtZW50cyBJJ20gbWlzc2luZy4gYHVzYl9kZXZpY2VfZHVtcGAgaXMgaW4gYGRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jYCwgYW5kIEknbGwgY2hlY2sgYGRyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGVgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuXG5cbkJhc2VkIG9uIGFsbCB0aGlzLCBpdCBzZWVtcyByZWFzb25hYmxlIHRoYXQgdGhpcyB3YXJyYW50cyBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYyNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA2OjUwLjk3MDg0MzMxNVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzczMDg3MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmljZXMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGU9MTA9dXNiY29yZS15ICs9IGNvbmZpZy5vIGZpbGUubyBidWZmZXIubyBzeXNmcy5vIGVuZHBvaW50Lm9cXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlOjExOnVzYmNvcmUteSArPSBkZXZpby5vIG5vdGlmeS5vIGdlbmVyaWMubyBxdWlya3MubyBkZXZpY2VzLm9cXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlLTEyLXVzYmNvcmUteSArPSBwaHkubyBwb3J0Lm8gdHJhY2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjo1MS4zNDM5MzU4NzNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExOTQzNTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVVNCIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZXNlIFVTQiBjb21wb25lbnRzIGFyZSBjb25maWd1cmVkLiBSaWdodCwgc28gdGhpcyBgdXNiY29yZWAgdGhpbmcsIHRoYXQncyBkZWZpbml0ZWx5IHVuZGVyIHRoZSB1bWJyZWxsYSBvZiBgQ09ORklHX1VTQmAsIG5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgb2hjaS1kYmcuY2AsIEkgc2VlIGl0J3MgbGlua2VkIHRvIGBvaGNpLWhjZC5jYCwgd2hpY2gsIGluIHR1cm4sIGlzIGNvbnRyb2xsZWQgYnkgYENPTkZJR19VU0JfT0hDSV9IQ0RgLiBIbW0sIGEgcXVpY2sgY2hlY2sgdG8gbWFrZSBzdXJlIEknbSBvbiB0aGUgcmlnaHQgdHJhY2suLi4gSSB3b25kZXIsIGlzIGBvaGNpLWRiZy5jYCBhbHdheXMgY29tcGlsZWQgaW4gd2hlbiBgQ09ORklHX1VTQl9PSENJX0hDRGAgaXMgZW5hYmxlZD8gTmVlZCB0byB2ZXJpZnkgdGhhdCByZWxhdGlvbnNoaXAuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgYG9oY2ktaGNkLmNgIHNvdXJjZSBhZ2FpbiB0byBjb25maXJtIHRoZSBkZXBlbmRlbmN5LiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNzgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjo1NS40NjMzNzU5MTRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4OTM4Mjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9oY2ktZGJnLmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYz04NT1zdGF0aWMgdm9pZCBpb193YXRjaGRvZ19mdW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYy04Ny0jaW5jbHVkZSBcXFwib2hjaS1odWIuY1xcXCJcXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmM6ODg6I2luY2x1ZGUgXFxcIm9oY2ktZGJnLmNcXFwiXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jLTg5LSNpbmNsdWRlIFxcXCJvaGNpLW1lbS5jXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjo1NS41NjIzMjM5ODhaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3NzMxOTA3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFVTQiBPSENJIERlYnVnZ2luZyBDb2RlKipcblxuWWVzLCB0aGF0IG1ha2VzIHNlbnNlIGluIHRoZSBnZW5lcmFsIGNvbnRleHQuIEJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIHRoZSBkZWJ1Z2dpbmcgZnVuY3Rpb25hbGl0eSB3aXRoaW4gYG9oY2ktZGJnLmNgIGRlcGVuZGVudCBvbiB0aGUgYENPTkZJR19ERUJVR19GU2Aga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgdGhlIGRlYnVnZ2luZyBmZWF0dXJlcyBhcmUgY29tcGlsZWQgaW4gb3Igbm90IGJhc2VkIG9uIHRoYXQgZmxhZy4gVGltZSB0byBqdW1wIGludG8gYG9oY2ktZGJnLmNgIGFuZCBzZWFyY2ggZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3Mgb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgcmVsYXRlZCB0byBgQ09ORklHX0RFQlVHX0ZTYC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBlbmFibGVkIGFuZCBkaXNhYmxlZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MjMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNjo1OC42Mzk2NDUyMDJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDcxODM5MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0RFQlVHX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDY6NTguNzUwMzc1OTE2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODQ4ODAyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IHNuaXBwZXQgb2YgdGhvdWdodCwgcmVuZGVyZWQgYXMgaWYgaXQgd2VyZSAqbXkqIGludGVybmFsIG1vbm9sb2d1ZSwgdGFpbG9yZWQgZm9yIGEgZmVsbG93IGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgT0hDSSBEZXRhaWxzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBteSBiZWFyaW5ncyBvbiB0aGlzLiBTZWVtcyBsaWtlIHdlJ3JlIHplcm9pbmcgaW4gb24gYSBwYXJ0aWN1bGFyIHBpZWNlIG9mIHRoZSBwdXp6bGUuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBvaGNpLmhgLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoYXQgYW55IGhhcmR3YXJlIGludGVyYWN0aW9uIHdpbGwgYmUgZGVmaW5lZCwgYXQgbGVhc3QgaW4gcGFydCwgaW4gdGhhdCBoZWFkZXIuIEknbSB0aGlua2luZyByZWdpc3RlciBsYXlvdXRzLCBiaXRmaWVsZHMsIGludGVycnVwdCBkZWZpbml0aW9ucyDigJMgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIHN0cnVjdHVyZSBvZiB0aGUgT3BlbiBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGlzIGdvaW5nIHRvIGJlIGxhaWQgb3V0LCB0aGUgc2tlbGV0b24gb2YgdGhlIGJlYXN0LiBIb3BlZnVsbHksIGl0J3Mgd2VsbC1jb21tZW50ZWQuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgdGhlIGJhc2UgYWRkcmVzcyBvZmZzZXRzIGZvciB0aGUgT0hDSSByZWdpc3RlcnMsIGRhdGEgc3RydWN0dXJlIGRlZmluaXRpb25zLCBpbnRlcnJ1cHQgbnVtYmVycy4uLmFsbCB0aGUgdXN1YWwgc3VzcGVjdHMgdGhhdCBJIG5lZWQgdG8gbWFuaXB1bGF0ZSB0aGlzIGhhcmR3YXJlIHByb3Blcmx5LiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSB3YWl0aW5nIHRvIGJlIHVuZWFydGhlZC4gVGhpcyBmaWxlIGlzIGdvaW5nIHRvIHRlbGwgdGhlIHN0b3J5IG9mIHRoZSBoYXJkd2FyZSdzIGludGVyZmFjZSB0byB0aGUgc29mdHdhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODQyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDc6MDIuMzM1MjU5MzM5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg2MTk2MzIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9oY2ktZGJnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNzowMi40NTM4ODcxNTJaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzMDAwMTkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG9oY2ktaGNkLmNgIGFuZCBEZWJ1Z0ZTKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIE9wZW4gSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSAoT0hDSSkgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBkZWJ1Z2dpbmcuIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgYSBwcmV0dHkgc3RhbmRhcmQgb25lIGluIHRoZXNlIHNpdHVhdGlvbnMsIGlzIHRvIHplcm8gaW4gb24gYG9oY2ktaGNkLmNgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYywgc28gbmF0dXJhbGx5LCB0aGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIFRoZSByZWFsIGtleSBoZXJlIGlzIGdvaW5nIHRvIGJlIHRyYWNpbmcgdGhlIGludGVyYWN0aW9ucyB3aXRoIGBDT05GSUdfREVCVUdfRlNgLiBJJ20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2tzIHRoYXQgYWN0aXZhdGUgZGVidWdnaW5nIGZlYXR1cmVzIHdoZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZC4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IGRlYnVnZnMtcmVsYXRlZCBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9ucyB1c2VkIHdpdGhpbiB0aGlzIGRyaXZlci4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHBpY3R1cmUgb2YgaG93IHRoZSBkZWJ1ZyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYW5kIHdoYXQga2luZCBvZiBpbnNpZ2h0cyBJIGNhbiBnbGVhbiBmcm9tIGl0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMzYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNzowNS41ODM4OTQzNzRaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNDE1OTE1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfREVCVUdfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNzowNS42NzczMzY0MDhaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQwMjM2MDM2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERlYnVnZnMgQ29uZmlndXJhdGlvbiBmb3IgVVNCX09IQ0lfSENEIFRlc3RpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc2VlIGBkZWJ1Z2ZzX2NyZWF0ZV9kaXJgIHVzZWQuIFJpZ2h0IGF3YXksIG15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggZGVidWdmcy4gSWYgYENPTkZJR19ERUJVR19GU2AgaXNuJ3QgZW5hYmxlZCwgaXQncyBqdXN0IGEgc3R1Yiwgc28gaXQncyBub3QgYWN0dWFsbHkgZG9pbmcgYW55dGhpbmcuIFRoYXQncyBhIGNyaXRpY2FsIHBvaW50IHRvIGNvbnNpZGVyIGZvciB0ZXN0aW5nIHRoZSBmaWxlcyB0aGF0IGFyZSBiZWluZyBjcmVhdGVkLlxuXG5TaW5jZSB3ZSBuZWVkIGBDT05GSUdfREVCVUdfRlNgIHRvICphY3R1YWxseSogdGVzdCBhbnl0aGluZyBoZXJlLiBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgd2hhdCBvdGhlciBjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQuIEJ1dCB3YWl0LCBgQ09ORklHX0RFQlVHX0ZTYCBpcyBwcmV0dHkgZ2VuZXJpYywgYW5kIHN5emthbGxlciBwcm9iYWJseSBhbHJlYWR5IGhhcyBpdCBlbmFibGVkIGFueXdheS4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgc2FpZCBub3QgdG8gbGlzdCB0aGUgc3VwZXIgZ2VuZXJpYyBzdHVmZiwgb25seSBjb25maWdzIHNwZWNpZmljIHRvIHRoZSBjaGFuZ2VkIGNvZGUuXG5cblNvLCB0aGUgY29kZSBpcyB1c2luZyBVU0IsIG1lYW5pbmcgSSBzaG91bGQgYmUgbGlzdGluZyBgVVNCX09IQ0lfSENEYC5cblxuSGFuZyBvbiB0aG91Z2guIElzIGl0IGBVU0JfT0hDSV9IQ0RfUENJYCBvciBgVVNCX09IQ0lfSENEX1BMQVRGT1JNYD8gYFVTQl9PSENJX0hDRGAgaXMgYSB0cmlzdGF0ZSwgaXQncyB1c3VhbGx5IHNlbGVjdGVkIGJ5IGVpdGhlciBgVVNCX09IQ0lfSENEX1BDSWAgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4gTGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgYGRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZ2AgZmlsZSBhbmQgY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MTksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDc6MTEuMDc5NzAyMzkyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTUwMTc3OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9PSENJX0hDRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9ob3N0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvaG9zdC9LY29uZmlnPTM5Mj1jb25maWcgVVNCX01BWDM0MjFfSENEXFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDAyLVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo0MDM6Y29uZmlnIFVTQl9PSENJX0hDRFxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00MDQtXFx0dHJpc3RhdGUgXFxcIk9IQ0kgSENEIChVU0IgMS4xKSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnPTQxOT1pZiBVU0JfT0hDSV9IQ0RcXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDIwLVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo0MjE6Y29uZmlnIFVTQl9PSENJX0hDRF9PTUFQMVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00MjItXFx0dHJpc3RhdGUgXFxcIk9IQ0kgc3VwcG9ydCBmb3IgT01BUDEvMiBjaGlwc1xcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00MjctXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjQyODpjb25maWcgVVNCX09IQ0lfSENEX1NQRUFSXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQyOS1cXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgU1QgU1BFQXIgb24tY2hpcCBPSENJIFVTQiBjb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQzNS1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NDM2OmNvbmZpZyBVU0JfT0hDSV9IQ0RfU1RJXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQzNy1cXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgU1QgU1RpSHh4eCBvbi1jaGlwIE9IQ0kgVVNCIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDQ0LVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo0NDU6Y29uZmlnIFVTQl9PSENJX0hDRF9TM0MyNDEwXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQ0Ni1cXHR0cmlzdGF0ZSBcXFwiT0hDSSBzdXBwb3J0IGZvciBTYW1zdW5nIFMzQzY0eHggU29DIHNlcmllc1xcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00NTItXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjQ1Mzpjb25maWcgVVNCX09IQ0lfSENEX0xQQzMyWFhcXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDU0LVxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IGZvciBMUEMgb24tY2hpcCBPSENJIFVTQiBjb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQ2Mi1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NDYzOmNvbmZpZyBVU0JfT0hDSV9IQ0RfUFhBMjdYXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQ2NC1cXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgUFhBMjdYL1BYQTNYWCBvbi1jaGlwIE9IQ0kgVVNCIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDcwLVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo0NzE6Y29uZmlnIFVTQl9PSENJX0hDRF9BVDkxXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQ3Mi1cXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgQXRtZWwgb24tY2hpcCBPSENJIFVTQiBjb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTQ3OC1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NDc5OmNvbmZpZyBVU0JfT0hDSV9IQ0RfT01BUDNcXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDgwLVxcdHRyaXN0YXRlIFxcXCJPSENJIHN1cHBvcnQgZm9yIE9NQVAzIGFuZCBsYXRlciBjaGlwc1xcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy00OTAtXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjQ5MTpjb25maWcgVVNCX09IQ0lfSENEX0RBVklOQ0lcXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNDkyLVxcdHRyaXN0YXRlIFxcXCJPSENJIHN1cHBvcnQgZm9yIFRJIERhVmluY2kgREE4eHhcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNTAxLVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo1MDI6Y29uZmlnIFVTQl9PSENJX0hDRF9QUENfT0ZfQkVcXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNTAzLVxcdGJvb2wgXFxcIk9IQ0kgc3VwcG9ydCBmb3IgT0YgcGxhdGZvcm0gYnVzIChiaWcgZW5kaWFuKVxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy01MTAtXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjUxMTpjb25maWcgVVNCX09IQ0lfSENEX1BQQ19PRl9MRVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy01MTItXFx0Ym9vbCBcXFwiT0hDSSBzdXBwb3J0IGZvciBPRiBwbGF0Zm9ybSBidXMgKGxpdHRsZSBlbmRpYW4pXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTUxOC1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NTE5OmNvbmZpZyBVU0JfT0hDSV9IQ0RfUFBDX09GXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTUyMC1cXHRib29sXFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNTIzLVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo1MjQ6Y29uZmlnIFVTQl9PSENJX0hDRF9QQ0lcXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNTI1LVxcdHRyaXN0YXRlIFxcXCJPSENJIHN1cHBvcnQgZm9yIFBDSS1idXMgVVNCIGNvbnRyb2xsZXJzXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTUzMi1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWc6NTMzOmNvbmZpZyBVU0JfT0hDSV9IQ0RfU1NCXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnLTUzNC1cXHRib29sIFxcXCJPSENJIHN1cHBvcnQgZm9yIEJyb2FkY29tIFNTQiBPSENJIGNvcmUgKERFUFJFQ0FURUQpXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnPTU1MD1jb25maWcgVVNCX09IQ0lfRVhZTk9TXFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L0tjb25maWctNTU2LVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZzo1NTc6Y29uZmlnIFVTQl9PSENJX0hDRF9QTEFURk9STVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy01NTgtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgT0hDSSBkcml2ZXIgZm9yIGEgcGxhdGZvcm0gZGV2aWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNzoxMS4zMzQ3MjUyOTZaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3Nzk1MTIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZW1iZWRkZWQgc3lzdGVtcyBleHBlcnQ6XG5cbioqVVNCIENvbnRyb2xsZXIgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgUUVNVSoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IFVTQiBob3N0IGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbiBmb3IgUUVNVSwgYW5kIHRoZSBpbml0aWFsIGluc3RpbmN0IHBvaW50cyB0b3dhcmRzIGBVU0JfT0hDSV9IQ0RfUENJYC4gVGhhdCByaW5ncyBhIGJlbGwsIEkgb2Z0ZW4gdXNlIHRoYXQgZm9yIGVtdWxhdGluZyBvbGRlciBPSENJIGNvbnRyb2xsZXJzLiBCdXQgaG9sZCBvbiwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZpcnN0LiBUaGUgbWFpbiBjb25maWd1cmF0aW9uIHNlZW1zIHRvIGJlIGBVU0JfT0hDSV9IQ0RgLCBzbyBpdCdzIGJlc3QgcHJhY3RpY2UgdG8gY29uZmlybSB0aGUgZXhhY3QgcHVycG9zZSBvZiBgVVNCX09IQ0lfSENEX1BDSWAuIExldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhbmQgbWFrZSBzdXJlIHRoZXJlIGlzbid0IGEgc3VidGxlIGRpZmZlcmVuY2Ugb3IgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IEknbSBvdmVybG9va2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYFVTQl9PSENJX0hDRF9QQ0lgIGlzIGp1c3QgZW5hYmxpbmcgYSBQQ0ktc3BlY2lmaWMgdmFyaWFudCwgb3IgaWYgdGhlcmUncyBzb21ldGhpbmcgZWxzZSBnb2luZyBvbi4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDc6MTUuNjEyNjgxMjY5WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ1MTY4ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9PSENJX0hDRF9QQ0lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvaG9zdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZz01MTk9Y29uZmlnIFVTQl9PSENJX0hDRF9QUENfT0ZcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy01MjMtXFxuZHJpdmVycy91c2IvaG9zdC9LY29uZmlnOjUyNDpjb25maWcgVVNCX09IQ0lfSENEX1BDSVxcbmRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZy01MjUtXFx0dHJpc3RhdGUgXFxcIk9IQ0kgc3VwcG9ydCBmb3IgUENJLWJ1cyBVU0IgY29udHJvbGxlcnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA3OjE1LjczNzIwNzQ5MVoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzM4NDA1MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVTQiBDb25maWd1cmF0aW9uIFRob3VnaHRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIFVTQiBjb25maWd1cmF0aW9ucyBoZXJlLiBJIHNlZSBgVVNCX09IQ0lfSENEYCBhbmQgYFVTQl9PSENJX0hDRF9QQ0lgIGxpc3RlZCwgd2hpY2ggaXMgd2hhdCBJJ2QgZXhwZWN0IGZvciB0aGUgT0hDSSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyLiBCdXQgSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgZGVidWdnaW5nIGNhcGFiaWxpdGllcy4gV2hhdCBhYm91dCBgdXNiX2RldmljZV9kdW1wYD8gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IGl0J3MgaW4gYGRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdCBmaWxlIGlzIGFsd2F5cyBjb21waWxlZCwgb3IgaWYgaXQncyBjb25kaXRpb25hbCBiYXNlZCBvbiBzb21lIG90aGVyIGNvbmZpZ3VyYXRpb24gc2V0dGluZywgZXNwZWNpYWxseSBpZiBJJ20gcGxhbm5pbmcgYW55IG1vZGlmaWNhdGlvbnMuIExldCdzIGRpZyBpbnRvIHRoZSBgZHJpdmVycy91c2IvY29yZS9NYWtlZmlsZWAgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBydWxlcyB0ZWxsIG1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU5MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA3OjE5LjQ3NTY1MDc0NVoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMDk1NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmljZXMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGU9MTA9dXNiY29yZS15ICs9IGNvbmZpZy5vIGZpbGUubyBidWZmZXIubyBzeXNmcy5vIGVuZHBvaW50Lm9cXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlOjExOnVzYmNvcmUteSArPSBkZXZpby5vIG5vdGlmeS5vIGdlbmVyaWMubyBxdWlya3MubyBkZXZpY2VzLm9cXG5kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlLTEyLXVzYmNvcmUteSArPSBwaHkubyBwb3J0Lm8gdHJhY2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNzoxOS42Mzc3NTY5MTVaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzgwODQ3OTUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRoaXMgUGF0Y2g6IE15IEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiWWVzLCBpdCdzIGRlZmluaXRlbHkgY29tcGlsZWQgaWYgYENPTkZJR19VU0JgIGlzIGVuYWJsZWQuXCIgQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHRoaW5nIGFjdHVhbGx5ICp3b3J0aCogZnV6emluZz8gSXQgbG9va3MgbGlrZSBpdCdzIHJlcGxhY2luZyBgX19nZXRfZnJlZV9wYWdlc2Agd2l0aCBga21hbGxvY2AgYW5kIGBnZXRfemVyb2VkX3BhZ2VgIHdpdGggYGt6YWxsb2NgLiBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYmVjYXVzZSBpdCdzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgdGhlIG1lbW9yeSBhbGxvY2F0b3IuXG5cblRoaXMgY291bGQgZGVmaW5pdGVseSBleHBvc2UgZGlmZmVyZW50IGJ1Z3MhIEZvciBleGFtcGxlLCBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBtaWdodCBiZSBjYXVnaHQgYnkgS0FTQU4gbm93LCBiZWNhdXNlIEtBU0FOIHRyYWNrcyBga21hbGxvY2AgYWxsb2NhdGlvbnMgbW9yZSB0aG9yb3VnaGx5IHRoYW4gcGFnZSBhbGxvY2F0aW9ucywgZGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgY29uZmlnLlxuXG5UaGVuIHRoZXJlJ3MgdGhlIHNpemUgZGlmZmVyZW5jZS4gTGV0IG1lIHNlZS4uLiBgX19nZXRfZnJlZV9wYWdlcyhHRlBfTk9JTywgMSlgIGFsbG9jYXRlcyB0d28gcGFnZXMsIG9yIDgxOTIgYnl0ZXMgb24geDg2LiBXaGlsZSBga21hbGxvYyhQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIDEsIEdGUF9OT0lPKWAgYWxzbyBhbGxvY2F0ZXMgODE5MiBieXRlcy4gYGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKWAgYWxsb2NhdGVzIDQwOTYgYnl0ZXMgYW5kIGBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTClgIGFsc28gYWxsb2NhdGVzIDQwOTYgYnl0ZXMuIFNvLCBzYW1lIHNpemUsIGp1c3QgYSBkaWZmZXJlbnQgYWxsb2NhdG9yLlxuXG5Pa2F5LCBzbyB0aGUgYm90dG9tIGxpbmU6IEkgdGhpbmsgaXQgKmlzKiB3b3J0aCBmdXp6aW5nLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCB0aGUgY29kZSBwYXRoIGlzIHJlYWNoYWJsZS5cblxuTm93LCBsZXQncyBmaWd1cmUgb3V0IHdoYXQgc3ltYm9scyB0byBmb2N1cyBvbi4gSSBzZWUgYHVzYl9kZXZpY2VfZHVtcGAsIGBmaWxsX2J1ZmZlcmAsIGFuZCBgZGVidWdfY2xvc2VgLlxuXG5XYWl0LCBhcmUgdGhvc2Ugc3ltYm9scy4uLiBBaCwgYGZpbGxfYnVmZmVyYCBhbmQgYGRlYnVnX2Nsb3NlYCBhcmUgc3RhdGljIGZ1bmN0aW9ucyBpbiBgb2hjaS1kYmcuY2AuIEFuZCBgdXNiX2RldmljZV9kdW1wYCBpcyBpbiBgZGV2aWNlcy5jYC4gSG1tLCBjYW4gSSB1c2Ugc3RhdGljIGZ1bmN0aW9ucyBhcyBmb2N1cyBzeW1ib2xzPyBZZXMsIHN5emthbGxlciBjYW4gdXNlIHN0YXRpYyBmdW5jdGlvbnMsIHNvIHRoYXQncyBmaW5lLiBCdXQgYGZpbGxfYnVmZmVyYCBpcyBhIHByZXR0eSBnZW5lcmljIG5hbWUuIE1heWJlIHNvbWV0aGluZyBsaWtlIGBkZWJ1Z19vdXRwdXRgIGZyb20gYG9oY2ktZGJnLmNgIHdvdWxkIGJlIGJldHRlcj8gSSBzaG91bGQgZG91YmxlIGNoZWNrIGBvaGNpLWRiZy5jYCB0aG91Z2gsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDc6MjcuNDQ2MjM5MTY0WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIzNjEyNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsbF9idWZmZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYz02NjU9c3RhdGljIHN0cnVjdCBkZWJ1Z19idWZmZXIgKmFsbG9jX2J1ZmZlcihzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksXFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNjgwLVxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYzo2ODE6c3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTY4Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM9NzA0PXN0YXRpYyBzc2l6ZV90IGRlYnVnX291dHB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTcxMS1cXHRpZiAoYnVmLVxcdTAwM2Vjb3VudCA9PSAwKSB7XFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jOjcxMjpcXHRcXHRyZXQgPSBmaWxsX2J1ZmZlcihidWYpO1xcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy03MTMtXFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA3OjI3LjU1ODYwODAzOFoiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjM0NTA4MzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgdXNiX2RldmljZV9kdW1wYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgY2hlY2sgYHVzYl9kZXZpY2VfZHVtcGAuXCIgVGhpcyBzdWdnZXN0cyBJJ20gYWxyZWFkeSBkZWVwIGludG8gdHJvdWJsZXNob290aW5nIG9yIGFuYWx5c2lzIG9mIGEgVVNCLXJlbGF0ZWQgaXNzdWUsIGFuZCBteSBpbnR1aXRpb24gcG9pbnRzIG1lIHRvd2FyZHMgdGhhdCBwYXJ0aWN1bGFyIHV0aWxpdHkuIEl0J3MgbGlrZWx5IGEgZGVidWdnaW5nIHRvb2wsIGEgc2NyaXB0LCBvciBhIHNwZWNpZmljIGZ1bmN0aW9uIHdpdGhpbiBhIGxhcmdlciBVU0IgbWFuYWdlbWVudCBzeXN0ZW0uIEknbSBwcm9iYWJseSBsb29raW5nIGZvciBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgYSBzcGVjaWZpYyBVU0IgZGV2aWNlJ3Mgc3RhdGUsIGNvbmZpZ3VyYXRpb24sIG9yIHBvdGVudGlhbGx5IGV2ZW4gaXRzIGNvbW11bmljYXRpb24gbG9ncy4gVGhpcyBpcyB1c3VhbGx5IHRoZSBnby10byB3aGVuIEknbSBjaGFzaW5nIGRvd24gZHJpdmVyIHByb2JsZW1zLCBidXMgZXJyb3JzLCBvciBkaXNjcmVwYW5jaWVzIGluIGRldmljZSBlbnVtZXJhdGlvbi4gSXQncyB0aGUgZmlyc3QgcGxhY2UgSSdkIGxvb2sgZm9yIGxvdy1sZXZlbCBkZXRhaWxzIGFib3V0IHRoZSBkZXZpY2UgSSdtIHRyb3VibGVzaG9vdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxMDAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNjowNzozMi43OTMxMTk0NjJaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTY0NDYwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2JfZGV2aWNlX2R1bXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM9MzY1PXN0YXRpYyBjaGFyICp1c2JfZHVtcF9kZXNjKGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy0zOTAtICovXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM6MzkxOnN0YXRpYyBzc2l6ZV90IHVzYl9kZXZpY2VfZHVtcChjaGFyIF9fdXNlciAqKmJ1ZmZlciwgc2l6ZV90ICpuYnl0ZXMsXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtMzkyLVxcdFxcdFxcdCAgICAgICBsb2ZmX3QgKnNraXBfYnl0ZXMsIGxvZmZfdCAqZmlsZV9vZmZzZXQsXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy00OTgtXFx0XFx0dXNiX2xvY2tfZGV2aWNlKGNoaWxkZGV2KTtcXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYzo0OTk6XFx0XFx0cmV0ID0gdXNiX2RldmljZV9kdW1wKGJ1ZmZlciwgbmJ5dGVzLCBza2lwX2J5dGVzLFxcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jLTUwMC1cXHRcXHRcXHRcXHQgICAgICBmaWxlX29mZnNldCwgY2hpbGRkZXYsIGJ1cyxcXG4tLVxcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jPTUxMD1zdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy01MjktXFx0XFx0dXNiX2xvY2tfZGV2aWNlKGJ1cy1cXHUwMDNlcm9vdF9odWIpO1xcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jOjUzMDpcXHRcXHRyZXQgPSB1c2JfZGV2aWNlX2R1bXAoXFx1MDAyNmJ1ZiwgXFx1MDAyNm5ieXRlcywgXFx1MDAyNnNraXBfYnl0ZXMsIHBwb3MsXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTMxLVxcdFxcdFxcdFxcdCAgICAgIGJ1cy1cXHUwMDNlcm9vdF9odWIsIGJ1cywgMCwgMCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA3OjMyLjk0NDc2ODUwM1oiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTgzNDUyMTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRnVuY3Rpb24gTmFtZSBDb25mbGljdHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGZ1bmN0aW9ucyB3ZSdyZSBkZWFsaW5nIHdpdGggZm9yIHRoaXMgZGVidWdnaW5nIHNjZW5hcmlvLiBSaWdodCBub3csIEknbSB6ZXJvaW5nIGluIG9uIGB1c2JfZGV2aWNlX2R1bXBgLCB3aGljaCBzZWVtcyBwcmV0dHkgc3BlY2lmaWMuIEhvd2V2ZXIsIEknbSBhIGxpdHRsZSBjb25jZXJuZWQgYWJvdXQgYGZpbGxfYnVmZmVyYCBhbmQgYGRlYnVnX2Nsb3NlYC4gVGhvc2UgYXJlICpleHRyZW1lbHkqIGNvbW1vbiBuYW1lcy4gQW5kLCBnaXZlbiB0aGF0IHdlJ3JlIHRhcmdldGluZyBzeXprYWxsZXIgZm9yIGZ1enppbmcsIEkgbmVlZCB0byBiZSBjYXV0aW91cyBhYm91dCBwb3RlbnRpYWwgbmFtaW5nIGNvbmZsaWN0cy4gSWYgdGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIHRoZSB0b29sIG1pZ2h0IGluYWR2ZXJ0ZW50bHkgbWF0Y2ggb3RoZXIgZnVuY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZXMgaW4gdW5yZWxhdGVkIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoYXQgY291bGQgbGVhZCB0byBzb21lIHNlcmlvdXNseSBtaXNsZWFkaW5nIHJlc3VsdHMsIG9yIHdvcnNlLCB0cmlnZ2VyIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaG93IHVuaXF1ZSB0aGVzZSBuYW1lcyByZWFsbHkgYXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBvbmx5IGRlYWxpbmcgd2l0aCAqbXkqIGBmaWxsX2J1ZmZlcmAgYW5kICpteSogYGRlYnVnX2Nsb3NlYC4gVGltZSB0byBnbyBodW50aW5nIGZvciBvdGhlciBpbnN0YW5jZXMgb2YgdGhvc2UgZnVuY3Rpb24gbmFtZXMgdGhyb3VnaG91dCB0aGUga2VybmVsIHNvdXJjZSBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgY2xlYXJseSBkZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDcwMSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA3OjM3LjUyODIyNTc5NloiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI1MTA1ODc4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW50IGZpbGxfYnVmZmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9mb3RnMjEwL2ZvdGcyMTAtaGNkLmM9NzM2PXN0YXRpYyBzdHJ1Y3QgZGVidWdfYnVmZmVyXFxuLS1cXG5kcml2ZXJzL3VzYi9mb3RnMjEwL2ZvdGcyMTAtaGNkLmMtNzUyLVxcbmRyaXZlcnMvdXNiL2ZvdGcyMTAvZm90ZzIxMC1oY2QuYzo3NTM6c3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXFxuZHJpdmVycy91c2IvZm90ZzIxMC9mb3RnMjEwLWhjZC5jLTc1NC17XFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmM9OTE1PXN0YXRpYyBzdHJ1Y3QgZGVidWdfYnVmZmVyICphbGxvY19idWZmZXIoc3RydWN0IHVzYl9idXMgKmJ1cyxcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYy05MzEtXFxuZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jOjkzMjpzdGF0aWMgaW50IGZpbGxfYnVmZmVyKHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZilcXG5kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMtOTMzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYz02NjU9c3RhdGljIHN0cnVjdCBkZWJ1Z19idWZmZXIgKmFsbG9jX2J1ZmZlcihzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksXFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMtNjgwLVxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYzo2ODE6c3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTY4Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA3OjQwLjc3OTI5MDYxWiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNzc4ODg4ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBmaWxsX2J1ZmZlcmAgaXMgcHJlc2VudCBub3QganVzdCB3aGVyZSBJIGluaXRpYWxseSBzdXNwZWN0ZWQsIGJ1dCBhbHNvIGluIGBlaGNpLWRiZy5jYCBhbmQgYGZvdGcyMTAtaGNkLmNgLiBUaGF0J3MgaW1wb3J0YW50IHRvIG5vdGUgZm9yIGZ1enppbmcgcHVycG9zZXMuXG5cbioqQ29uc2lkZXJpbmcgVGFyZ2V0IFNjb3BlIGZvciBGdXp6aW5nKipcblxuSWYgSSBqdXN0IHRhcmdldCBgZmlsbF9idWZmZXJgIGRpcmVjdGx5LCBJJ2xsIGJlIGhpdHRpbmcgdGhvc2UgKm90aGVyKiBmaWxlcyB0b28uIFRoYXQncyBwb3RlbnRpYWxseSBmaW5lLCBkZXBlbmRpbmcgb24gd2hhdCBJIHdhbnQgdG8gYWNjb21wbGlzaCwgb3IgcGVyaGFwcyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGRvd25zdHJlYW0gZWZmZWN0cywgbGlrZSB0aGUgY29tcGxleGl0eSBpbnRyb2R1Y2VkLiBBbHRlcm5hdGl2ZWx5LCBJJ3ZlIGdvdCBhbm90aGVyIG9wdGlvbiB0aGF0IG1pZ2h0IGJlIG1vcmUgdGFyZ2V0ZWQ6IEkgc2VlIHRoYXQgYGRlYnVnX291dHB1dGAgY2FsbHMgYGZpbGxfYnVmZmVyYC4gU28sIEknbSB0aGlua2luZyBJIGNhbiBzcGVjaWZ5IGBkZWJ1Z19vdXRwdXRgIGluc3RlYWQuIFRoaXMgbGlrZWx5IGxpbWl0cyB0aGUgZnV6emluZyB0byAqb25seSogd2hlcmUgYGRlYnVnX291dHB1dGAgaXMgdXNlZCwgd2hpY2ggY2FsbHMgdGhlIHRoaW5nIEknbSBhY3R1YWxseSBpbnRlcmVzdGVkIGluLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgYGRlYnVnX291dHB1dGAgZXhpc3RzIGluIGBvaGNpLWRiZy5jYCB0byBnZXQgYSBtb3JlIGNvbmNyZXRlIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBpdCBsb29rcyBsaWtlIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM4MSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA3OjQ1Ljg1NzE4MzI1M1oiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY4OTIyMDk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgc3NpemVfdCBkZWJ1Z19vdXRwdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rZXJuZWwvZGVidWcuYz03MD1zdGF0aWMgaW50IGRlYnVnX2luaXQodm9pZCk7XFxuYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jOjcxOnN0YXRpYyBzc2l6ZV90IGRlYnVnX291dHB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxcbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYy03Mi1cXHRcXHRcXHQgICAgc2l6ZV90IHVzZXJfbGVuLCBsb2ZmX3QgKm9mZnNldCk7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmM9NjIxPXN0YXRpYyBib29sIGRlYnVnX21vdmVfZW50cnkoZmlsZV9wcml2YXRlX2luZm9fdCAqcF9pbmZvLCBib29sIHJldmVyc2UpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMtNjMzLSAqL1xcbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYzo2MzQ6c3RhdGljIHNzaXplX3QgZGVidWdfb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLFxcdFxcdC8qIGZpbGUgZGVzY3JpcHRvciAqL1xcbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYy02MzUtXFx0XFx0XFx0ICAgIGNoYXIgX191c2VyICp1c2VyX2J1ZixcXHQvKiB1c2VyIGJ1ZmZlciAqL1xcbi0tXFxuZHJpdmVycy91c2IvZm90ZzIxMC9mb3RnMjEwLWhjZC5jPTI4ND1zdGF0aWMgaW50IGRlYnVnX2FzeW5jX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopO1xcbmRyaXZlcnMvdXNiL2ZvdGcyMTAvZm90ZzIxMC1oY2QuYy0yODUtXFxuZHJpdmVycy91c2IvZm90ZzIxMC9mb3RnMjEwLWhjZC5jOjI4NjpzdGF0aWMgc3NpemVfdCBkZWJ1Z19vdXRwdXQoc3RydWN0IGZpbGUqLCBjaGFyIF9fdXNlciosIHNpemVfdCwgbG9mZl90Kik7XFxuZHJpdmVycy91c2IvZm90ZzIxMC9mb3RnMjEwLWhjZC5jLTI4Ny1zdGF0aWMgaW50IGRlYnVnX2Nsb3NlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2ZvdGcyMTAvZm90ZzIxMC1oY2QuYz03NTM9c3RhdGljIGludCBmaWxsX2J1ZmZlcihzdHJ1Y3QgZGVidWdfYnVmZmVyICpidWYpXFxuLS1cXG5kcml2ZXJzL3VzYi9mb3RnMjEwL2ZvdGcyMTAtaGNkLmMtNzc1LVxcbmRyaXZlcnMvdXNiL2ZvdGcyMTAvZm90ZzIxMC1oY2QuYzo3NzY6c3RhdGljIHNzaXplX3QgZGVidWdfb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsXFxuZHJpdmVycy91c2IvZm90ZzIxMC9mb3RnMjEwLWhjZC5jLTc3Ny1cXHRcXHRzaXplX3QgbGVuLCBsb2ZmX3QgKm9mZnNldClcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYz0yOTQ9c3RhdGljIGludCBkZWJ1Z19yZWdpc3RlcnNfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7XFxuZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jLTI5NS1cXG5kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmM6Mjk2OnN0YXRpYyBzc2l6ZV90IGRlYnVnX291dHB1dChzdHJ1Y3QgZmlsZSosIGNoYXIgX191c2VyKiwgc2l6ZV90LCBsb2ZmX3QqKTtcXG5kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMtMjk3LXN0YXRpYyBpbnQgZGVidWdfY2xvc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopO1xcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jPTkzMj1zdGF0aWMgaW50IGZpbGxfYnVmZmVyKHN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYy05NTQtXFxuZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jOjk1NTpzdGF0aWMgc3NpemVfdCBkZWJ1Z19vdXRwdXQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZixcXG5kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMtOTU2LVxcdFxcdHNpemVfdCBsZW4sIGxvZmZfdCAqb2Zmc2V0KVxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jPTM2Mz1zdGF0aWMgaW50IGRlYnVnX2FzeW5jX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopO1xcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYzozNjQ6c3RhdGljIHNzaXplX3QgZGVidWdfb3V0cHV0KHN0cnVjdCBmaWxlKiwgY2hhciBfX3VzZXIqLCBzaXplX3QsIGxvZmZfdCopO1xcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy0zNjUtc3RhdGljIGludCBkZWJ1Z19jbG9zZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7XFxuLS1cXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM9NjgxPXN0YXRpYyBpbnQgZmlsbF9idWZmZXIoc3RydWN0IGRlYnVnX2J1ZmZlciAqYnVmKVxcbi0tXFxuZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jLTcwMy1cXG5kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmM6NzA0OnN0YXRpYyBzc2l6ZV90IGRlYnVnX291dHB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxcbmRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYy03MDUtXFx0XFx0XFx0c2l6ZV90IGxlbiwgbG9mZl90ICpvZmZzZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA3OjQ5LjU0NjQxMDgzMVoiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDU4MzMzNjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFwcHJvYWNoIHRvIERlYnVnZ2luZyB0aGUgVVNCIFN5c3RlbSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBJIGNhbiBzdHJlYW1saW5lIHRoaXMgZGVidWdnaW5nIHByb2Nlc3MuIEknbGwganVzdCBsZXZlcmFnZSBgZmlsbF9idWZmZXJgIGFuZCBgZGVidWdfY2xvc2VgLiBJdCdzIG5vdCBhIGNvbmNlcm4gaWYgSSBoYXBwZW4gdG8gaGl0IHRoZSBFSENJIGFuZCBGT1RHMjEwIGluc3RhbmNlcyB3aXRoIHRob3NlLCBhcyB0aGVpciBkZWJ1Z2ZzIGZpbGVzIGFyZSBwcmV0dHkgc2ltaWxhciBhbnl3YXkuIFxuXG5Ib3dldmVyLCBgdXNiX2RldmljZV9kdW1wYCDigJMgdGhhdCBvbmUgaXMgdW5pcXVlLiBJdCdzIHRoZSBrZXkgaGVyZS5cblxuU28sIHRoZSBjcml0aWNhbCBzeW1ib2xzIEknbSB0YXJnZXRpbmcgYXJlOiBgdXNiX2RldmljZV9kdW1wYCwgYGZpbGxfYnVmZmVyYCwgYW5kIGBkZWJ1Z19jbG9zZWAuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYHVzYl9kZXZpY2VfZHVtcGAgaXMgaW5kZWVkIHVuaXF1ZSBpbiB0aGlzIGNvbnRleHQuIEl0J3Mgd29ydGggYSBzZWNvbmQgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3NTgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTY6MDc6NTMuMDA0NzQ4ODUyWiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgwMzE0MjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYl9kZXZpY2VfZHVtcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM9MzY1PXN0YXRpYyBjaGFyICp1c2JfZHVtcF9kZXNjKGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy0zOTAtICovXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmM6MzkxOnN0YXRpYyBzc2l6ZV90IHVzYl9kZXZpY2VfZHVtcChjaGFyIF9fdXNlciAqKmJ1ZmZlciwgc2l6ZV90ICpuYnl0ZXMsXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtMzkyLVxcdFxcdFxcdCAgICAgICBsb2ZmX3QgKnNraXBfYnl0ZXMsIGxvZmZfdCAqZmlsZV9vZmZzZXQsXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy00OTgtXFx0XFx0dXNiX2xvY2tfZGV2aWNlKGNoaWxkZGV2KTtcXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYzo0OTk6XFx0XFx0cmV0ID0gdXNiX2RldmljZV9kdW1wKGJ1ZmZlciwgbmJ5dGVzLCBza2lwX2J5dGVzLFxcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jLTUwMC1cXHRcXHRcXHRcXHQgICAgICBmaWxlX29mZnNldCwgY2hpbGRkZXYsIGJ1cyxcXG4tLVxcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jPTUxMD1zdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYy01MjktXFx0XFx0dXNiX2xvY2tfZGV2aWNlKGJ1cy1cXHUwMDNlcm9vdF9odWIpO1xcbmRyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jOjUzMDpcXHRcXHRyZXQgPSB1c2JfZGV2aWNlX2R1bXAoXFx1MDAyNmJ1ZiwgXFx1MDAyNm5ieXRlcywgXFx1MDAyNnNraXBfYnl0ZXMsIHBwb3MsXFxuZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMtNTMxLVxcdFxcdFxcdFxcdCAgICAgIGJ1cy1cXHUwMDNlcm9vdF9odWIsIGJ1cywgMCwgMCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA3OjU3Ljc4NTI0OTQ3NFoiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDA1MDI4MTE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEl0J3MgbWFraW5nIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIHN3YXBwaW5nIHBhZ2UgYWxsb2NhdG9yIGNhbGxzIChgX19nZXRfZnJlZV9wYWdlc2AsIGBnZXRfemVyb2VkX3BhZ2VgKSB3aXRoIHNsYWIgYWxsb2NhdG9yIGNhbGxzIChga21hbGxvY2AsIGBremFsbG9jYCkuIFRoYXQncyBpbW1lZGlhdGVseSBhIHJlZCBmbGFnLCBpbiBhIGdvb2Qgd2F5LCBmb3IgZnV6emluZyBwb3RlbnRpYWwuIEl0J3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gbWVtb3J5IGFsbG9jYXRpb24sIHdoaWNoIG1lYW5zIHdlIGNvdWxkIHVuY292ZXIgc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgdGhhdCB3ZXJlbid0IGRldGVjdGFibGUgYmVmb3JlLiBLQVNBTiwgZm9yIGluc3RhbmNlLCBtaWdodCBiZSBhYmxlIHRvIGNhdGNoIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgbm93IHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIHNsYWIgb2JqZWN0cyBtb3JlIGNvbnNpc3RlbnRseS5cblxuTGV0IG1lIHF1aWNrbHkgZW5zdXJlIEknbSBnZXR0aW5nIHRoZSByaWdodCBjb25maWd1cmF0aW9ucy4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYFVTQl9PSENJX0hDRGAgYW5kIGBVU0JfT0hDSV9IQ0RfUENJYCBhcmUgdGhlIHJpZ2h0IG9uZXMuIGBVU0JfT0hDSV9IQ0RgIGlzIHRoZSBjb3JlLCBhbmQgSSdsbCBkZWZpbml0ZWx5IGluY2x1ZGUgaXQuICBUaGVuIHRoZXJlJ3MgYFVTQl9PSENJX0hDRF9QQ0lgLiBJdCBzZWVtcyBsaWtlIFFFTVUgcHJvdmlkZXMgYSBgcGNpLW9oY2lgIG9wdGlvbiwgc28gaW5jbHVkaW5nIGBVU0JfT0hDSV9IQ0RfUENJYCBnaXZlcyB1cyB0aGUgYXBwcm9wcmlhdGUgaGFyZHdhcmUgdG8gdGVzdC4gSXQncyBhbHNvIHdvcnRoIG5vdGluZyB0aGUgdHJpc3RhdGUgbmF0dXJlIG9mIGBVU0JfT0hDSV9IQ0RgLCBqdXN0IGluIGNhc2UuIEFsc28sIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gaXRlbXMgYFVTQmAgYW5kIGBERUJVR19GU2AgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC5cblxuVGhlIHBhdGNoJ3MgbW9kaWZpY2F0aW9ucyBhcmUgd2l0aGluIGB1c2JfZGV2aWNlX2R1bXBgLCBgZmlsbF9idWZmZXJgLCBhbmQgYGRlYnVnX2Nsb3NlYC4gU3BlY2lmaWNhbGx5LCB3aXRoaW4gdGhlIE9IQ0kgZGVidWdmcyBjb2RlLiBUaGUgY29kZSBpdHNlbGYgaXMgcmVhY2hhYmxlIGluIFFFTVUsIHRocm91Z2ggYC9zeXMva2VybmVsL2RlYnVnL3VzYi9kZXZpY2VzYCBhbmQgc2ltaWxhciBkZWJ1Z2ZzIGZpbGVzLiBUaGlzIGNoYW5nZSBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBpbiBvdXIgdGVzdGluZyBlbnZpcm9ubWVudC5cblxuSSdtIHJldmlld2luZyB0aGUgcnVsZXMgYWdhaW4gdG8gY29uZmlybSBpZiB0aGlzIHBhdGNoIG1lZXRzIHRoZSBjcml0ZXJpYSBmb3IgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIi4gTm8sIGl0IGRvZXNuJ3QuIFRoaXMgaXNuJ3QganVzdCBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIG9yIGRlY29yYXRpdmUgbG9nZ2luZywgbm9yIGlzIGl0IGEgbWlub3IgbnVtZXJpYyBjb25zdGFudCBjaGFuZ2UuIFRoaXMgaXMgYSBsZWdpdGltYXRlIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIG1lbW9yeSBhbGxvY2F0aW9uLiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkFuZCBqdXN0IHRvIGJlIGV4dHJhIHRob3JvdWdoLCBJJ2xsIGFsc28gYWRkIGBVU0JfT0hDSV9IQ0RfUExBVEZPUk1gIHNpbmNlIFFFTVUgc3VwcG9ydHMgdGhlIGBzeXNidXMtb2hjaWAgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0MTksIk91dHB1dFRva2VucyI6MTg3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE2OjA4OjA3LjgzNTUzMzYwN1oiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDQ4NTIyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX09IQ0lfSENEXCIsXG4gICAgXCJVU0JfT0hDSV9IQ0RfUENJXCIsXG4gICAgXCJVU0JfT0hDSV9IQ0RfUExBVEZPUk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2JfZGV2aWNlX2R1bXBcIixcbiAgICBcImZpbGxfYnVmZmVyXCIsXG4gICAgXCJkZWJ1Z19jbG9zZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHBhZ2UgYWxsb2NhdG9yIGNhbGxzIChfX2dldF9mcmVlX3BhZ2VzLCBnZXRfemVyb2VkX3BhZ2UpIHdpdGggc2xhYiBhbGxvY2F0b3IgY2FsbHMgKGttYWxsb2MsIGt6YWxsb2MpIGluIFVTQiBkZXZpY2UgZHVtcCBhbmQgT0hDSSBkZWJ1Z2ZzIGNvZGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBhbmQgY2FuIHBvdGVudGlhbGx5IGV4cG9zZSBkaWZmZXJlbnQgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAoZS5nLiwgS0FTQU4gY2FuIGJldHRlciBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvbiBzbGFiIG9iamVjdHMpLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIC9zeXMva2VybmVsL2RlYnVnL3VzYi9kZXZpY2VzIGFuZCBPSENJIGRlYnVnZnMgZmlsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX09IQ0lfSENEXCIsXG4gICAgXCJVU0JfT0hDSV9IQ0RfUENJXCIsXG4gICAgXCJVU0JfT0hDSV9IQ0RfUExBVEZPUk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2JfZGV2aWNlX2R1bXBcIixcbiAgICBcImZpbGxfYnVmZmVyXCIsXG4gICAgXCJkZWJ1Z19jbG9zZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHBhZ2UgYWxsb2NhdG9yIGNhbGxzIChfX2dldF9mcmVlX3BhZ2VzLCBnZXRfemVyb2VkX3BhZ2UpIHdpdGggc2xhYiBhbGxvY2F0b3IgY2FsbHMgKGttYWxsb2MsIGt6YWxsb2MpIGluIFVTQiBkZXZpY2UgZHVtcCBhbmQgT0hDSSBkZWJ1Z2ZzIGNvZGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBhbmQgY2FuIHBvdGVudGlhbGx5IGV4cG9zZSBkaWZmZXJlbnQgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyAoZS5nLiwgS0FTQU4gY2FuIGJldHRlciBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvbiBzbGFiIG9iamVjdHMpLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIC9zeXMva2VybmVsL2RlYnVnL3VzYi9kZXZpY2VzIGFuZCBPSENJIGRlYnVnZnMgZmlsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqrpps[1] Phase: Succeeded StartedAt: 2026-07-01 16:08:20 +0000 UTC FinishedAt: 2026-07-01 16:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-01 16:08:20 +0000 UTC FinishedAt: 2026-07-01 16:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[2] Phase: Succeeded StartedAt: 2026-07-01 16:08:20 +0000 UTC FinishedAt: 2026-07-01 20:49:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-01 16:08:21 +0000 UTC FinishedAt: 2026-07-01 20:49:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-01 16:08:21 +0000 UTC FinishedAt: 2026-07-01 16:09:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-01 16:08:21 +0000 UTC FinishedAt: 2026-07-01 16:08:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqrpps/series-workflowqrpps-convert-artifact-3241501709/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-01 16:09:00 +0000 UTC FinishedAt: 2026-07-01 17:05:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-01 16:09:00 +0000 UTC FinishedAt: 2026-07-01 17:05:17 +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:*41b113ba-3003-43e3-81b3-03f33c80ef1a,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-workflowqrpps/series-workflowqrpps-convert-artifact-3241501709/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": "e948ea7f-d106-4663-80a9-0667dc6c0f1d", "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-workflowqrpps/series-workflowqrpps-build-action-368024454/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Failed StartedAt: 2026-07-01 16:09:00 +0000 UTC FinishedAt: 2026-07-01 16:11:20 +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:*41b113ba-3003-43e3-81b3-03f33c80ef1a,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-workflowqrpps/series-workflowqrpps-convert-artifact-3241501709/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(1) Phase: Succeeded StartedAt: 2026-07-01 16:20:11 +0000 UTC FinishedAt: 2026-07-01 17:04:55 +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:*41b113ba-3003-43e3-81b3-03f33c80ef1a,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-workflowqrpps/series-workflowqrpps-convert-artifact-3241501709/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": "e948ea7f-d106-4663-80a9-0667dc6c0f1d", "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-workflowqrpps/series-workflowqrpps-build-action-368024454/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-01 17:05:17 +0000 UTC FinishedAt: 2026-07-01 17:05:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-01 17:05:17 +0000 UTC FinishedAt: 2026-07-01 17:05:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-01 17:05:17 +0000 UTC FinishedAt: 2026-07-01 17:05:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-01 17:05:17 +0000 UTC FinishedAt: 2026-07-01 17:05:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqrpps/series-workflowqrpps-convert-artifact-1310836840/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-01 17:05:27 +0000 UTC FinishedAt: 2026-07-01 17:07:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-01 17:05:27 +0000 UTC FinishedAt: 2026-07-01 17:07:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e948ea7f-d106-4663-80a9-0667dc6c0f1d,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-workflowqrpps/series-workflowqrpps-build-action-368024454/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-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-01 17:07:44 +0000 UTC FinishedAt: 2026-07-01 17:07:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-01 17:07:44 +0000 UTC FinishedAt: 2026-07-01 17:07:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-01 17:07:44 +0000 UTC FinishedAt: 2026-07-01 17:44:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-01 17:07:44 +0000 UTC FinishedAt: 2026-07-01 17:44:41 +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:*41b113ba-3003-43e3-81b3-03f33c80ef1a,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-workflowqrpps/series-workflowqrpps-convert-artifact-1310836840/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": "083204a8-8a0a-452c-a32d-14dccb79c547", "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-workflowqrpps/series-workflowqrpps-build-action-1980661780/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-01 17:07:44 +0000 UTC FinishedAt: 2026-07-01 17:44:30 +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:*41b113ba-3003-43e3-81b3-03f33c80ef1a,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-workflowqrpps/series-workflowqrpps-convert-artifact-1310836840/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": "083204a8-8a0a-452c-a32d-14dccb79c547", "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-workflowqrpps/series-workflowqrpps-build-action-1980661780/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-01 17:44:41 +0000 UTC FinishedAt: 2026-07-01 17:44:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-01 17:44:41 +0000 UTC FinishedAt: 2026-07-01 17:44:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-01 17:44:41 +0000 UTC FinishedAt: 2026-07-01 17:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-01 17:44:41 +0000 UTC FinishedAt: 2026-07-01 17:46:55 +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:*083204a8-8a0a-452c-a32d-14dccb79c547,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-workflowqrpps/series-workflowqrpps-build-action-1980661780/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-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-01 17:47:05 +0000 UTC FinishedAt: 2026-07-01 20:49:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-01 17:47:05 +0000 UTC FinishedAt: 2026-07-01 20:49:28 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},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:*e948ea7f-d106-4663-80a9-0667dc6c0f1d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*083204a8-8a0a-452c-a32d-14dccb79c547,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-workflowqrpps/series-workflowqrpps-build-action-368024454/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-workflowqrpps/series-workflowqrpps-build-action-1980661780/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-01 17:47:05 +0000 UTC FinishedAt: 2026-07-01 17:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-01 17:47:05 +0000 UTC FinishedAt: 2026-07-01 17:47:13 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},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-workflowqrpps/series-workflowqrpps-convert-artifact-2679641505/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-01 17:47:05 +0000 UTC FinishedAt: 2026-07-01 17:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-01 17:47:05 +0000 UTC FinishedAt: 2026-07-01 17:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-01 17:47:05 +0000 UTC FinishedAt: 2026-07-01 17:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-01 17:47:15 +0000 UTC FinishedAt: 2026-07-01 20:49:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrpps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["usb_device_dump","fill_buffer","debug_close"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_OHCI_HCD","USB_OHCI_HCD_PCI","USB_OHCI_HCD_PLATFORM"],"series_id":"cd22e6b5-7a29-417f-a9ad-b146e2f0dac9","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-01 17:47:15 +0000 UTC FinishedAt: 2026-07-01 20:49:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e948ea7f-d106-4663-80a9-0667dc6c0f1d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*083204a8-8a0a-452c-a32d-14dccb79c547,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-workflowqrpps/series-workflowqrpps-build-action-368024454/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-workflowqrpps/series-workflowqrpps-build-action-1980661780/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-workflowqrpps/series-workflowqrpps-convert-artifact-2679641505/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,}