Name: series-workflow6q8zg Phase: Running StartedAt: 2026-08-22 20:35:13 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[0] Phase: Succeeded StartedAt: 2026-08-22 20:35:13 +0000 UTC FinishedAt: 2026-08-22 21:02:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[0].run-triage Phase: Succeeded StartedAt: 2026-08-22 20:35:13 +0000 UTC FinishedAt: 2026-08-22 21:02:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_DRIVERS", "USB_RTL8152" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_DRIVERS", "USB_RTL8152" ], "series_id": "55359059-6b83-4bec-a565-25ff7e16bbbe" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtl8152_probe", "rtl8152_open", "rtl8152_start_xmit", "rtl8152_ioctl", "rtl8152_set_mac_address", "rtl8152_change_mtu" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtVU0JfUlRMODE1MiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bDgxNTJfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRsODE1Ml9vcGVuJiMzNDssCiAgICAmIzM0O3J0bDgxNTJfc3RhcnRfeG1pdCYjMzQ7LAogICAgJiMzNDtydGw4MTUyX2lvY3RsJiMzNDssCiAgICAmIzM0O3J0bDgxNTJfc2V0X21hY19hZGRyZXNzJiMzNDssCiAgICAmIzM0O3J0bDgxNTJfY2hhbmdlX210dSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2h1bmtpbmcgbG9vcHMgaW4gYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIGZvciB0aGUgcjgxNTIgZHJpdmVyLiBJbiBgZ2VuZXJpY19vY3Bfd3JpdGVgLCBpZiBgc2l6ZSA9PSA0YCBhbmQgYGJ5ZW4gIT0gQllURV9FTl9EV09SRGAsIGBzaXplYCBpcyBkZWNyZW1lbnRlZCBieSA0IHRvIDAuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYHdoaWxlIChzaXplKWAgYW5kIHNraXBwZWQgdGhlIGxvb3AsIHdoZXJlYXMgdGhlIG5ldyBjb2RlIHVzZXMgYHdoaWxlIChzaXplIFx1MDAzZSBsaW1pdClgIGFuZCB1bmNvbmRpdGlvbmFsbHkgY2FsbHMgYHNldF9yZWdpc3RlcnNgIHdpdGggdGhlIHJlbWFpbmluZyBgc2l6ZWAgKHdoaWNoIGlzIDApLiBUaGlzIHJlc3VsdHMgaW4gYSAwLWxlbmd0aCBjb250cm9sIG1lc3NhZ2UgYmVpbmcgc2VudCB0byB0aGUgVVNCIGRldmljZS4gQSAwLWxlbmd0aCB3cml0ZSBhbGxvY2F0ZXMgYSBgWkVST19TSVpFX1BUUmAgdmlhIGBrbWVtZHVwKGRhdGEsIDAsIEdGUF9LRVJORUwpYCBhbmQgcGFzc2VzIGl0IHRvIGB1c2JfY29udHJvbF9tc2dgLCB3aGljaCBoYW5kbGVzIDAtbGVuZ3RoIHRyYW5zZmVycyBzYWZlbHkgd2l0aG91dCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJbiBgZ2VuZXJpY19vY3BfcmVhZGAsIGBzaXplYCBpcyB2YWxpZGF0ZWQgdG8gYmUgbm9uLXplcm8gYW5kIGEgbXVsdGlwbGUgb2YgNCBpbml0aWFsbHksIGFuZCBpcyBuZXZlciBkZWNyZW1lbnRlZCBiZWZvcmUgdGhlIGxvb3AuIFRodXMsIGBnZXRfcmVnaXN0ZXJzYCBpcyBuZXZlciBjYWxsZWQgd2l0aCBgc2l6ZSA9IDBgLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgY29waWVkIG9yIGV4cG9zZWQuIFNpbmNlIHRoZSBwYXRjaCBvbmx5IGludHJvZHVjZXMgYSBwb3RlbnRpYWwgMC1sZW5ndGggVVNCIGNvbnRyb2wgbWVzc2FnZSBhbmQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBBbnkgcG90ZW50aWFsIGNyYXNoZXMgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9vcCBsb2dpYyBpbiBnZW5lcmljX29jcF9yZWFkIGFuZCBnZW5lcmljX29jcF93cml0ZSBpbiB0aGUgcjgxNTIgVVNCIG5ldHdvcmsgZHJpdmVyLiBUaGUgcmVmYWN0b3JlZCBjb2RlIG5vdyBleGVjdXRlcyBnZXRfcmVnaXN0ZXJzL3NldF9yZWdpc3RlcnMgZXZlbiBpZiB0aGUgaW5pdGlhbCBzaXplIGlzIDAsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjb3VsZCB0cmlnZ2VyIGJ1Z3MgKGUuZy4sIHplcm8tc2l6ZSBhbGxvY2F0aW9ucyBvciBVU0IgY29udHJvbCBtZXNzYWdlcykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZWU3OWQ2Mzk4ZWQ3Y2I5ZWQyM2Y1MWI1ZDY3ZmFhY2MyZWQwY2I2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMjA6NTk6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuY1xuaW5kZXggZjYxNjg2NDMzMDMxYy4uZGU5NzM4YmRjZTg1OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuY1xuQEAgLTE0MzEsMjcgJiM0MzsxNDMxLDE5IEBAIHN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxuIFx0aWYgKCh1MzIpaW5kZXggJiM0MzsgKHUzMilzaXplIFx1MDAzZSAweGZmZmYpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHR3aGlsZSAoc2l6ZSkge1xuLVx0XHRpZiAoc2l6ZSBcdTAwM2UgbGltaXQpIHtcbi1cdFx0XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRicmVhaztcbi1cbi1cdFx0XHRpbmRleCAmIzQzOz0gbGltaXQ7XG4tXHRcdFx0ZGF0YSAmIzQzOz0gbGltaXQ7XG4tXHRcdFx0c2l6ZSAtPSBsaW1pdDtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgc2l6ZSwgZGF0YSk7XG4tXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRcdGJyZWFrO1xuJiM0MztcdHdoaWxlIChzaXplIFx1MDAzZSBsaW1pdCkge1xuJiM0MztcdFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIGxpbWl0LCBkYXRhKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyb3IxO1xuIFxuLVx0XHRcdGluZGV4ICYjNDM7PSBzaXplO1xuLVx0XHRcdGRhdGEgJiM0Mzs9IHNpemU7XG4tXHRcdFx0c2l6ZSA9IDA7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiYjNDM7XHRcdGluZGV4ICYjNDM7PSBsaW1pdDtcbiYjNDM7XHRcdGRhdGEgJiM0Mzs9IGxpbWl0O1xuJiM0MztcdFx0c2l6ZSAtPSBsaW1pdDtcbiBcdH1cbiBcbiYjNDM7XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgc2l6ZSwgZGF0YSk7XG4mIzQzO1xuJiM0MztlcnJvcjE6XG4gXHRpZiAocmV0ID09IC1FTk9ERVYpXG4gXHRcdHJ0bF9zZXRfdW5wbHVnKHRwKTtcbiBcbkBAIC0xNDk4LDMxICYjNDM7MTQ5MCwyNCBAQCBzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbixcbiBcdFx0aWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRClcbiBcdFx0XHRzaXplIC09IDQ7XG4gXG4tXHRcdHdoaWxlIChzaXplKSB7XG4tXHRcdFx0aWYgKHNpemUgXHUwMDNlIGxpbWl0KSB7XG4tXHRcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCxcbi1cdFx0XHRcdFx0XHQgICAgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXG4tXHRcdFx0XHRcdFx0ICAgIGxpbWl0LCBkYXRhKTtcbi1cdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRcdGdvdG8gZXJyb3IxO1xuLVxuLVx0XHRcdFx0aW5kZXggJiM0Mzs9IGxpbWl0O1xuLVx0XHRcdFx0ZGF0YSAmIzQzOz0gbGltaXQ7XG4tXHRcdFx0XHRzaXplIC09IGxpbWl0O1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCxcbi1cdFx0XHRcdFx0XHQgICAgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXG4tXHRcdFx0XHRcdFx0ICAgIHNpemUsIGRhdGEpO1xuLVx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRcdFx0Z290byBlcnJvcjE7XG4tXG4tXHRcdFx0XHRpbmRleCAmIzQzOz0gc2l6ZTtcbi1cdFx0XHRcdGRhdGEgJiM0Mzs9IHNpemU7XG4tXHRcdFx0XHRzaXplID0gMDtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbiYjNDM7XHRcdHdoaWxlIChzaXplIFx1MDAzZSBsaW1pdCkge1xuJiM0MztcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXG4mIzQzO1x0XHRcdFx0XHQgICAgbGltaXQsIGRhdGEpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyb3IxO1xuJiM0MztcbiYjNDM7XHRcdFx0aW5kZXggJiM0Mzs9IGxpbWl0O1xuJiM0MztcdFx0XHRkYXRhICYjNDM7PSBsaW1pdDtcbiYjNDM7XHRcdFx0c2l6ZSAtPSBsaW1pdDtcbiBcdFx0fVxuIFxuJiM0MztcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELCBzaXplLCBkYXRhKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyb3IxO1xuJiM0MztcbiYjNDM7XHRcdGluZGV4ICYjNDM7PSBzaXplO1xuJiM0MztcdFx0ZGF0YSAmIzQzOz0gc2l6ZTtcbiYjNDM7XG4gXHRcdC8qIFNldCB0aGUgbGFzdCBEV09SRCAqL1xuIFx0XHRpZiAoYnllbiAhPSBCWVRFX0VOX0RXT1JEKVxuIFx0XHRcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgYnllbiwgNCwgZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtVU0JfUlRMODE1MiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bDgxNTJfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRsODE1Ml9vcGVuJiMzNDssCiAgICAmIzM0O3J0bDgxNTJfc3RhcnRfeG1pdCYjMzQ7LAogICAgJiMzNDtydGw4MTUyX2lvY3RsJiMzNDssCiAgICAmIzM0O3J0bDgxNTJfc2V0X21hY19hZGRyZXNzJiMzNDssCiAgICAmIzM0O3J0bDgxNTJfY2hhbmdlX210dSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9vcCBsb2dpYyBpbiBnZW5lcmljX29jcF9yZWFkIGFuZCBnZW5lcmljX29jcF93cml0ZSBpbiB0aGUgcjgxNTIgVVNCIG5ldHdvcmsgZHJpdmVyLiBUaGUgcmVmYWN0b3JlZCBjb2RlIG5vdyBleGVjdXRlcyBnZXRfcmVnaXN0ZXJzL3NldF9yZWdpc3RlcnMgZXZlbiBpZiB0aGUgaW5pdGlhbCBzaXplIGlzIDAsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjb3VsZCB0cmlnZ2VyIGJ1Z3MgKGUuZy4sIHplcm8tc2l6ZSBhbGxvY2F0aW9ucyBvciBVU0IgY29udHJvbCBtZXNzYWdlcykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZWU3OWQ2Mzk4ZWQ3Y2I5ZWQyM2Y1MWI1ZDY3ZmFhY2MyZWQwY2I2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjIgMjA6NTk6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcjgxNTIuYyBiL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jCmluZGV4IGY2MTY4NjQzMzAzMWMuLmRlOTczOGJkY2U4NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jCkBAIC0xNDMxLDI3ICYjNDM7MTQzMSwxOSBAQCBzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgc2l6ZSwKIAlpZiAoKHUzMilpbmRleCAmIzQzOyAodTMyKXNpemUgJmd0OyAweGZmZmYpCiAJCXJldHVybiAtRVBFUk07CiAKLQl3aGlsZSAoc2l6ZSkgewotCQlpZiAoc2l6ZSAmZ3Q7IGxpbWl0KSB7Ci0JCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpOwotCQkJaWYgKHJldCAmbHQ7IDApCi0JCQkJYnJlYWs7Ci0KLQkJCWluZGV4ICYjNDM7PSBsaW1pdDsKLQkJCWRhdGEgJiM0Mzs9IGxpbWl0OwotCQkJc2l6ZSAtPSBsaW1pdDsKLQkJfSBlbHNlIHsKLQkJCXJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBzaXplLCBkYXRhKTsKLQkJCWlmIChyZXQgJmx0OyAwKQotCQkJCWJyZWFrOwomIzQzOwl3aGlsZSAoc2l6ZSAmZ3Q7IGxpbWl0KSB7CiYjNDM7CQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJvcjE7CiAKLQkJCWluZGV4ICYjNDM7PSBzaXplOwotCQkJZGF0YSAmIzQzOz0gc2l6ZTsKLQkJCXNpemUgPSAwOwotCQkJYnJlYWs7Ci0JCX0KJiM0MzsJCWluZGV4ICYjNDM7PSBsaW1pdDsKJiM0MzsJCWRhdGEgJiM0Mzs9IGxpbWl0OwomIzQzOwkJc2l6ZSAtPSBsaW1pdDsKIAl9CiAKJiM0MzsJcmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpOwomIzQzOwomIzQzO2Vycm9yMToKIAlpZiAocmV0ID09IC1FTk9ERVYpCiAJCXJ0bF9zZXRfdW5wbHVnKHRwKTsKIApAQCAtMTQ5OCwzMSAmIzQzOzE0OTAsMjQgQEAgc3RhdGljIGludCBnZW5lcmljX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sCiAJCWlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpCiAJCQlzaXplIC09IDQ7CiAKLQkJd2hpbGUgKHNpemUpIHsKLQkJCWlmIChzaXplICZndDsgbGltaXQpIHsKLQkJCQlyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwKLQkJCQkJCSAgICB0eXBlIHwgQllURV9FTl9EV09SRCwKLQkJCQkJCSAgICBsaW1pdCwgZGF0YSk7Ci0JCQkJaWYgKHJldCAmbHQ7IDApCi0JCQkJCWdvdG8gZXJyb3IxOwotCi0JCQkJaW5kZXggJiM0Mzs9IGxpbWl0OwotCQkJCWRhdGEgJiM0Mzs9IGxpbWl0OwotCQkJCXNpemUgLT0gbGltaXQ7Ci0JCQl9IGVsc2UgewotCQkJCXJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LAotCQkJCQkJICAgIHR5cGUgfCBCWVRFX0VOX0RXT1JELAotCQkJCQkJICAgIHNpemUsIGRhdGEpOwotCQkJCWlmIChyZXQgJmx0OyAwKQotCQkJCQlnb3RvIGVycm9yMTsKLQotCQkJCWluZGV4ICYjNDM7PSBzaXplOwotCQkJCWRhdGEgJiM0Mzs9IHNpemU7Ci0JCQkJc2l6ZSA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9CiYjNDM7CQl3aGlsZSAoc2l6ZSAmZ3Q7IGxpbWl0KSB7CiYjNDM7CQkJcmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELAomIzQzOwkJCQkJICAgIGxpbWl0LCBkYXRhKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJvcjE7CiYjNDM7CiYjNDM7CQkJaW5kZXggJiM0Mzs9IGxpbWl0OwomIzQzOwkJCWRhdGEgJiM0Mzs9IGxpbWl0OwomIzQzOwkJCXNpemUgLT0gbGltaXQ7CiAJCX0KIAomIzQzOwkJcmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELCBzaXplLCBkYXRhKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyb3IxOwomIzQzOwomIzQzOwkJaW5kZXggJiM0Mzs9IHNpemU7CiYjNDM7CQlkYXRhICYjNDM7PSBzaXplOwomIzQzOwogCQkvKiBTZXQgdGhlIGxhc3QgRFdPUkQgKi8KIAkJaWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRCkKIAkJCXJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgYnllbiwgNCwgZGF0YSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVhbHRlayBVU0IgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNgLiBJdCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgdGhlIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBmdW5jdGlvbnMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgYSByZWZhY3RvcmluZywgc2ltcGxpZnlpbmcgdGhvc2Ugd2hpbGUgbG9vcHMgYnkgdGFraW5nIHRoYXQgbGFzdCBpdGVyYXRpb24sIHdoZXJlIGBzaXplICZsdDs9IGxpbWl0YCwgb3V0IG9mIHRoZSBsb29wLiBGdW5jdGlvbmFsbHksIHRoaXMgbGlrZWx5IGtlZXBzIHRoZSBzYW1lIGJlaGF2aW91ci4KClRoaXMgaXMgYSBVU0IgbmV0d29yayBkcml2ZXIgZm9yIFJlYWx0ZWsgUlRMODE1Mi9SVEw4MTUzIGJhc2VkIFVTQiBFdGhlcm5ldCBhZGFwdGVycy4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIFVTQiBkcml2ZXIsIEkgc2hvdWxkIG5vdGUgdGhhdCB0aGVzZSBraW5kcyBvZiBkcml2ZXJzIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBXZSBjYW4gdXNlIHRvb2xzIGxpa2UgYGR1bW15X2hjZGAgb3Igc2ltaWxhciBVU0IgZW11bGF0aW9uIGZyYW1ld29ya3Mgd2l0aGluIGEgZnJhbWV3b3JrIGxpa2Ugc3l6a2FsbGVyIHRvIGdlbmVyYXRlIGludGVyZXN0aW5nIGlucHV0cyBhbmQgdGVzdCBmb3IgdnVsbmVyYWJpbGl0aWVzLgoKR2l2ZW4gdGhhdCBpdCBpcyBhIGtlcm5lbCBwYXRjaCwgYmVmb3JlIEkgZGlnIGFueSBkZWVwZXIsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgZm9yIHRoZSBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjb2RlLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gYmUgbW9yZSBwcmVjaXNlIGluIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3I4MTUyXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX1VTQl9SVEw4MTUwKVx0JiM0Mzs9IHJ0bDgxNTAub1xuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19VU0JfUlRMODE1MilcdCYjNDM7PSByODE1Mi5vXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUtMTEtb2JqLSQoQ09ORklHX1VTQl9IU08pXHRcdCYjNDM7PSBoc28ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxOTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFVTQiBSVEw4MTUyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYENPTkZJR19VU0JfUlRMODE1MmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBsaW5lYWdlIGFuZCBzZWUgd2hlcmUgdGhpcyBtb2R1bGUgZml0cyB3aXRoaW4gdGhlIGJyb2FkZXIgZHJpdmVyIGFyY2hpdGVjdHVyZS4gVGltZSB0byBkZWx2ZSBpbnRvIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnM7IHdoZXJlIHdlIGRlZmluZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgd2hhdCBvdGhlciBtb2R1bGVzLCBmZWF0dXJlcywgb3IgYnJvYWRlciBjb25maWd1cmF0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIGBDT05GSUdfVVNCX1JUTDgxNTJgIGNhbiBldmVuIGJlIGNvbnNpZGVyZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGFueSBwbGF0Zm9ybSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgb3Igb3RoZXIgZmFjdG9ycyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGlzIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBub3RlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9SVEw4MTUyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWc9ODg9Y29uZmlnIFVTQl9SVEw4MTUwXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctOTgtXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo5OTpjb25maWcgVVNCX1JUTDgxNTJcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTEwMC1cdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgUlRMODE1Mi9SVEw4MTUzIEJhc2VkIFVTQiBFdGhlcm5ldCBBZGFwdGVyc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBVU0IgTmV0d29ya2luZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgYXJlYSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIGluZnJhc3RydWN0dXJlLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA5OS4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgc3BlY2lmaWMgbGluZSBudW1iZXIgaXMgbGlrZWx5IHRvIGJlIGludGVyZXN0aW5nLCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgZGV0YWlscyB0aGVyZS4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBhIHNwZWNpZmljIG9wdGlvbiBvciBjb25maWd1cmF0aW9uIHBhcmFtZXRlciByZWxhdGVkIHRvIGEgVVNCIG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSB0aGF0IHdhcnJhbnRzIG15IGF0dGVudGlvbi4gSXQgY291bGQgYmUgYSBuZXcgZmVhdHVyZSwgYSBzdWJ0bGUgYnVnIGZpeCwgb3IgcGVyaGFwcyBzb21lIGFyY2hpdGVjdHVyYWwgY2hhbmdlIHJlbGF0ZWQgdG8gVVNCIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQuIEkgd2lsbCBiZSBsb29raW5nIGZvciBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIG9yIGFueSByZWNlbnQgbW9kaWZpY2F0aW9ucyB0aGF0IG1pZ2h0IGltcGFjdCBob3cgdGhlc2UgZGV2aWNlcyBhcmUgY29uZmlndXJlZCBhbmQgdXRpbGl6ZWQgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSYjMzk7bSBwcmVwYXJpbmcgbXlzZWxmIHRvIGZpbHRlciBvdXQgdGhlIGlycmVsZXZhbnQgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTU6XHRcbiAgOTY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDk3Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBydGw4MTUwLlxuICA5ODpcdFxuICA5OTpcdGNvbmZpZyBVU0JfUlRMODE1MlxuIDEwMDpcdFx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBSVEw4MTUyL1JUTDgxNTMgQmFzZWQgVVNCIEV0aGVybmV0IEFkYXB0ZXJzXCYjMzQ7XG4gMTAxOlx0XHRzZWxlY3QgTUlJXG4gMTAyOlx0XHRzZWxlY3QgUEhZTElCXG4gMTAzOlx0XHRzZWxlY3QgQ1JDMzJcbiAxMDQ6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuIDEwNTpcdFx0aGVscFxuIDEwNjpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODE1MiBiYXNlZCBVU0IgMi4wXG4gMTA3Olx0XHQgIDEwLzEwMCBFdGhlcm5ldCBhZGFwdGVycyBhbmQgUlRMODE1MyBiYXNlZCBVU0IgMy4wIDEwLzEwMC8xMDAwXG4gMTA4Olx0XHQgIEV0aGVybmV0IGFkYXB0ZXJzLlxuIDEwOTpcdFxuIDExMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAxMTE6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHI4MTUyLlxuIDExMjpcdFxuIDExMzpcdGNvbmZpZyBVU0JfTEFONzhYWFxuIDExNDpcdFx0dHJpc3RhdGUgXCYjMzQ7TWljcm9jaGlwIExBTjc4WFggQmFzZWQgVVNCIEV0aGVybmV0IEFkYXB0ZXJzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEwMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEZXBlbmRlbmNpZXMgYW5kIENvbnRleHR1YWwgSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGluc3RpbmN0IHBvaW50cyBtZSB0b3dhcmRzIHRoZXNlIGRlcGVuZGVuY2llczogYE1JSWAsIGBQSFlMSUJgLCBgQ1JDMzJgLCBhbmQgYENSWVBUT19MSUJfU0hBMjU2YC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhlc2UgYXJlIGtleSBjb21wb25lbnRzIGluIHdoYXRldmVyIEkmIzM5O20gZGVhbGluZyB3aXRoLiBCdXQgdGhlIHJlYWwgcXVlc3Rpb24gaXMgaG93IHRoZXkgYWxsIGZpdCB0b2dldGhlci4gVGhlIGNydWNpYWwgcGFyZW50IGNvbmZpZyBpcyBsaWtlbHkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYFVTQl9ORVRfRFJJVkVSU2AsIG9yIHNvbWV0aGluZyB2ZXJ5IHNpbWlsYXIuIFRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgaXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UgdG8ganVtcCBvdmVyIHRvIHRoZSB0b3Agb2YgdGhlIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBhbmQgb3ZlcmFsbCBzdHJ1Y3R1cmUgYXJlIGxpa2VseSBsb2NhdGVkLiBUaGF0JiMzOTtsbCBiZSB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBVU0IgTmV0d29yayBkZXZpY2VzIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29tbWVudCBcJiMzNDtIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcJiMzNDtcbiAgIDY6XHRcdGRlcGVuZHMgb24gIVVTQiBcdTAwMjZcdTAwMjYgTkVUXG4gICA3Olx0XG4gICA4Olx0bWVudWNvbmZpZyBVU0JfTkVUX0RSSVZFUlNcbiAgIDk6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBOZXR3b3JrIEFkYXB0ZXJzXCYjMzQ7XG4gIDEwOlx0XHRkZWZhdWx0IFVTQiBpZiBVU0JcbiAgMTE6XHRcdGRlcGVuZHMgb24gVVNCIFx1MDAyNlx1MDAyNiBORVRcbiAgMTI6XHRcbiAgMTM6XHRpZiBVU0JfTkVUX0RSSVZFUlNcbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgVVNCX0NBVENcbiAgMTY6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBDQVRDIE5ldE1hdGUtYmFzZWQgRXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgMTc6XHRcdHNlbGVjdCBDUkMzMlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIFVTQiBFdGhlcm5ldFxuICAyMDpcdFx0ICBkZXZpY2UgYmFzZWQgb24gdGhlIEVMMTIxMEEgY2hpcC4gU3VwcG9ydGVkIGRldmljZXMgYXJlOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjI5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBVU0IgTmV0d29yayBEcml2ZXIgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgVVNCX05FVF9EUklWRVJTYCBjb25maWd1cmF0aW9uLCBhbmQgc3BlY2lmaWNhbGx5IHRoZSBgVVNCX1JUTDgxNTJgIGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgbWFkZS4gSXQgbG9va3MgbGlrZSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkIGFyZSBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBldmVuIGJlaW5nIGNhbGxlZCwgYW5kIGlmIHNvLCBieSB3aGF0LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZWlyIGltcGFjdC4gVGltZSB0byBnZXQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2VuZXJpY19vY3BfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE0MTI9c3RhdGljIHZvaWQgcnRsX3NldF91bnBsdWcoc3RydWN0IHI4MTUyICp0cClcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDE3LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTQxODpzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgc2l6ZSxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0MTktXHRcdFx0ICAgIHZvaWQgKmRhdGEsIHUxNiB0eXBlKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1MjQ9aW50IHBsYV9vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUyNS17XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNTI2Olx0cmV0dXJuIGdlbmVyaWNfb2NwX3JlYWQodHAsIGluZGV4LCBzaXplLCBkYXRhLCBNQ1VfVFlQRV9QTEEpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUyNy19XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTU0MT1zdGF0aWMgdTMyIG9jcF9yZWFkX2R3b3JkKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU0NC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1NDU6XHRnZW5lcmljX29jcF9yZWFkKHRwLCBpbmRleCwgc2l6ZW9mKGRhdGEpLCBcdTAwMjZkYXRhLCB0eXBlKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NDYtXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTU1Nz1zdGF0aWMgdTE2IG9jcF9yZWFkX3dvcmQoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleClcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTY2LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU2NzpcdGdlbmVyaWNfb2NwX3JlYWQodHAsIGluZGV4LCBzaXplb2YodG1wKSwgXHUwMDI2dG1wLCB0eXBlIHwgYnllbik7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTY4LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1OTc9c3RhdGljIHU4IG9jcF9yZWFkX2J5dGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleClcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNjA0LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTYwNTpcdGdlbmVyaWNfb2NwX3JlYWQodHAsIGluZGV4LCBzaXplb2YodG1wKSwgXHUwMDI2dG1wLCB0eXBlKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MDYtXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9OTA3OD1zdGF0aWMgdm9pZCBydGw4MTUyX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtOTA4Ni1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjkwODc6XHRnZW5lcmljX29jcF9yZWFkKHRwLCBQTEFfVEFMTFlDTlQsIHNpemVvZih0YWxseSksIFx1MDAyNnRhbGx5LCBNQ1VfVFlQRV9QTEEpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtOTA4OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY4NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipBbmFseXppbmcgT0NQIEJ1cyBBY2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlc2UgT0NQIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoZXkmIzM5O3JlIHRoZSBmb3VuZGF0aW9uYWwgYnVpbGRpbmcgYmxvY2tzLCBoZWF2aWx5IGxldmVyYWdlZCBieSB0aGluZ3MgbGlrZSBgcGxhX29jcF9yZWFkYCwgdGhlIGBvY3BfcmVhZF9kd29yZC93b3JkL2J5dGVgIGZ1bmN0aW9ucywgYW5kIHByb2JhYmx5IG90aGVycy4gS25vd2luZyB0aGUgc3lzdGVtLCBpdCYjMzk7cyBwcmV0dHkgbXVjaCBhIGdpdmVuIHRoYXQgdGhlc2UgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgVVNCIGVtdWxhdGlvbiBwYXRod2F5LiBTaW5jZSBgZ2VuZXJpY19vY3BfcmVhZGAgaXMgc28gY2VudHJhbCwgaXQgbWFrZXMgc2Vuc2UgdG8gZ28gaW4gYW5kIGNoZWNrIGBnZW5lcmljX29jcF93cml0ZWAgYXMgd2VsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlc2UgZ2VuZXJpYyBmdW5jdGlvbnMgd29yaywgYXMgdGhleSB3aWxsIHVubG9jayBhY2Nlc3MgdG8gdGhlIHN5c3RlbSB0aHJvdWdoIFVTQi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2VuZXJpY19vY3Bfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvcjgxNTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNDE4PXN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0NTItXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNDUzOnN0YXRpYyBpbnQgZ2VuZXJpY19vY3Bfd3JpdGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgYnl0ZWVuLFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQ1NC1cdFx0XHQgICAgIHUxNiBzaXplLCB2b2lkICpkYXRhLCB1MTYgdHlwZSlcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTMwPWludCBwbGFfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTMxLXtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1MzI6XHRyZXR1cm4gZ2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieXRlZW4sIHNpemUsIGRhdGEsIE1DVV9UWVBFX1BMQSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTMzLX1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTM2PWludCB1c2Jfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTM3LXtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1Mzg6XHRyZXR1cm4gZ2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieXRlZW4sIHNpemUsIGRhdGEsIE1DVV9UWVBFX1VTQik7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTM5LX1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTUwPXN0YXRpYyB2b2lkIG9jcF93cml0ZV9kd29yZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4LCB1MzIgZGF0YSlcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTUzLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU1NDpcdGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBpbmRleCwgQllURV9FTl9EV09SRCwgc2l6ZW9mKHRtcCksIFx1MDAyNnRtcCwgdHlwZSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTU1LX1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTc2PXN0YXRpYyB2b2lkIG9jcF93cml0ZV93b3JkKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgsIHUzMiBkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1OTMtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNTk0Olx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieWVuLCBzaXplb2YodG1wKSwgXHUwMDI2dG1wLCB0eXBlKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1OTUtfVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE2MTQ9c3RhdGljIHZvaWQgb2NwX3dyaXRlX2J5dGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleCwgdTMyIGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTYzMS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE2MzI6XHRnZW5lcmljX29jcF93cml0ZSh0cCwgaW5kZXgsIGJ5ZW4sIHNpemVvZih0bXApLCBcdTAwMjZ0bXAsIHR5cGUpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTYzMy19XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NDUxMT1zdGF0aWMgdm9pZCBydGxfY2xlYXJfYnAoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNDU0OS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjQ1NTA6XHRnZW5lcmljX29jcF93cml0ZSh0cCwgUExBX0JQXzAsIEJZVEVfRU5fRFdPUkQsIGJwX251bSBcdTAwM2NcdTAwM2MgMSwgYnAsIHR5cGUpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNDU1MS1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz01MzA0PXN0YXRpYyB2b2lkIHJ0bF9yYW1fY29kZV9zcGVlZF91cChzdHJ1Y3QgcjgxNTIgKnRwLCBzdHJ1Y3QgZndfcGh5X3NwZWVkX3VwICpwaHksIGJvb2wgd2FpdClcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01MzM0LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NTMzNTpcdFx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIF9fbGUxNl90b19jcHUocGh5LVx1MDAzZWZ3X3JlZyksIDB4ZmYsIHNpemUsIGRhdGEsIE1DVV9UWVBFX1VTQik7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01MzM2LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTU0ODU9c3RhdGljIHZvaWQgcnRsODE1Ml9md19tYWNfYXBwbHkoc3RydWN0IHI4MTUyICp0cCwgc3RydWN0IGZ3X21hYyAqbWFjKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTU1MjQtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo1NTI1Olx0aWYgKGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBfX2xlMTZfdG9fY3B1KG1hYy1cdTAwM2Vmd19yZWcpLCAweGZmLCBsZW5ndGgsXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01NTI2LVx0XHRcdCAgICAgIGRhdGEsIHR5cGUpIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTUzNC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjU1MzU6XHRpZiAoZ2VuZXJpY19vY3Bfd3JpdGUodHAsIF9fbGUxNl90b19jcHUobWFjLVx1MDAzZWJwX3N0YXJ0KSwgQllURV9FTl9EV09SRCxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTU1MzYtXHRcdFx0ICAgICAgQUxJR04oX19sZTE2X3RvX2NwdShtYWMtXHUwMDNlYnBfbnVtKSBcdTAwM2NcdTAwM2MgMSwgNCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRnVuY3Rpb24gU2NvcGUgYW5kIEV4cG9ydCBCZWhhdmlvcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJJiMzOTt2ZSBub3RpY2VkIHNvbWV0aGluZy4gVGhlIGZ1bmN0aW9ucyBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAgYXJlIGRlZmluZWQgYXMgYHN0YXRpY2AuIFRoYXQgbWVhbnMgdGhlaXIgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCB3aGljaCBpcyBleHBlY3RlZC4gSG93ZXZlciwgdGhleSYjMzk7cmUgYmVpbmcgKmNhbGxlZCogYnkgb3RoZXIgZnVuY3Rpb25zOiBgcGxhX29jcF9yZWFkYCwgYHBsYV9vY3Bfd3JpdGVgLCBhbmQgYHVzYl9vY3Bfd3JpdGVgLiBUaG9zZSBsYXR0ZXIgZnVuY3Rpb25zIGFyZW4mIzM5O3QgYHN0YXRpY2AuCgpUaGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBwb3BzIGludG8gbXkgaGVhZCBpcyB3aGV0aGVyIHRoZXNlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGxpa2UgYHBsYV9vY3BfcmVhZGAgYXJlIGV4cG9ydGVkLiBJcyBgcGxhX29jcF9yZWFkYCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBvciBpcyBpdCBhbHNvIGp1c3QgaW50ZXJuYWwgdG8gdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZT8gSSBuZWVkIHRvIHZlcmlmeSBpdHMgZXhwb3J0IHN0YXR1czsgdGhhdCBkZXRhaWwgd2lsbCBkcml2ZSB0aGUgZGVzaWduIGdvaW5nIGZvcndhcmQuIFVuZGVyc3RhbmRpbmcgdGhlIHZpc2liaWxpdHkgb2YgYHBsYV9vY3BfcmVhZGAgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BsYV9vY3BfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1MjM9c3RhdGljIGlubGluZVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTUyNDppbnQgcGxhX29jcF9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTI1LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0yMTE2PXN0YXRpYyBpbnQgZGV0ZXJtaW5lX2V0aGVybmV0X2FkZHIoc3RydWN0IHI4MTUyICp0cCxcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0yMTI2LVx0XHRpZiAodHAtXHUwMDNldmVyc2lvbiA9PSBSVExfVkVSXzAxKSB7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoyMTI3Olx0XHRcdHJldCA9IHBsYV9vY3BfcmVhZCh0cCwgUExBX0lEUiwgOCwgc3MtXHUwMDNlX19kYXRhKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTIxMjgtXHRcdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMjEzMy1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MjEzNDpcdFx0XHRcdHJldCA9IHBsYV9vY3BfcmVhZCh0cCwgUExBX0JBQ0tVUCwgOCxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTIxMzUtXHRcdFx0XHRcdFx0ICAgc3MtXHUwMDNlX19kYXRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEwNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKlF1aWNrIFNjYW4gb2YgSW5saW5lIEZ1bmN0aW9ucyoqCgpSaWdodCwgc28gSSBzZWUgYHBsYV9vY3BfcmVhZGAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpYyBpbmxpbmVgLiBUaGF0JiMzOTtzIGEga2V5IGRldGFpbCB0byBub3RlIGltbWVkaWF0ZWx5LiBUaGlzIHRlbGxzIG1lIHRoZSBjb21waWxlciBpcyBsaWtlbHkgZ29pbmcgdG8gdHJ5IGFuZCBvcHRpbWl6ZSB0aGlzIGZ1bmN0aW9uIGJ5IGlubGluaW5nIGl0IHdoZXJldmVyIGl0JiMzOTtzIGNhbGxlZC4gVGhpcyBtZWFucyB3ZSYjMzk7bGwgYXZvaWQgYSBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkLCBidXQgcG90ZW50aWFsbHkgaW5jcmVhc2UgY29kZSBzaXplIGlmIGl0JiMzOTtzIHVzZWQgYSBsb3QuIE5lZWQgdG8ga2VlcCBhbiBleWUgb24gdGhhdCBkdXJpbmcgcGVyZm9ybWFuY2UgYW5hbHlzaXMgbGF0ZXIuCgpOb3csIGxldCYjMzk7cyBwaXZvdCBhbmQgY2hlY2sgYHVzYl9vY3Bfd3JpdGVgLiBJJiMzOTttIGN1cmlvdXMgaWYgaXQmIzM5O3Mgc2ltaWxhcmx5IG9wdGltaXplZCBvciBpZiBpdCYjMzk7cyBpbXBsZW1lbnRlZCBkaWZmZXJlbnRseS4gSXMgaXQgYSByZWd1bGFyIGZ1bmN0aW9uIGNhbGwsIG9yIHBlcmhhcHMgYW5vdGhlciBgc3RhdGljIGlubGluZWA/IE9yIG1heWJlIGl0IGlzIGEgbWFjcm8gaW1wbGVtZW50YXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZWFkIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZSB3cml0ZSBpcyBjcml0aWNhbCBmb3IgcHJvcGVybHkgdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoaXMgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2Jfb2NwX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTUzNT1zdGF0aWMgaW5saW5lXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNTM2OmludCB1c2Jfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTM3LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0zOTM3PXN0YXRpYyB2b2lkIHI4MTUzX3UxdTJlbihzdHJ1Y3QgcjgxNTIgKnRwLCBib29sIGVuYWJsZSlcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0zOTQ1LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6Mzk0NjpcdHVzYl9vY3Bfd3JpdGUodHAsIFVTQl9UT0xFUkFOQ0UsIEJZVEVfRU5fU0lYX0JZVEVTLCBzaXplb2YodTF1MiksIHUxdTIpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMzk0Ny19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MzcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcnRsODE1MmAgRHJpdmVyJiMzOTtzIEFyY2hpdGVjdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgcnRsODE1MmAgZHJpdmVyIGNvZGUuIEkgc2VlIGEgbG90IG9mIHVzZSBvZiBgc3RhdGljIGlubGluZWAsIHdoaWNoIGlzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQuIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGJlc3QgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLCBhbmQgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaG93IGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCB0aGVtc2VsdmVzIGFyZSBoYW5kbGVkLCBzaW5jZSB0aG9zZSBhcmUgYWxzbyBgc3RhdGljYC4gVGhhdCBsaW1pdHMgZGlyZWN0IGV4dGVybmFsIGNhbGxzLiBJdCBzZWVtcyBsaWtlIHRoZSBiZXN0IGFwcHJvYWNoIGlzIGdvaW5nIHRvIGJlIHRvIGZpbmQgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGVzZSwgb3IgcGVyaGFwcyBqdXN0IGdvIHJpZ2h0IGZvciB0aGUgZHJpdmVyJiMzOTtzIGVudHJ5IHBvaW50cy4KClRoZSBkcml2ZXImIzM5O3MgZW50cnkgcG9pbnRzIGFyZSB0aGUgbGlrZWx5IGNhbmRpZGF0ZXMsIHRoaW5ncyBsaWtlIGBydGw4MTUyX3Byb2JlYCwgYHJ0bDgxNTJfb3BlbmAsIGBydGw4MTUyX3N0YXJ0X3htaXRgLCBgcnRsODE1Ml9pb2N0bGAsIGFuZCBgcnRsODE1Ml9zZXRfbWFjX2FkZHJlc3NgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGRpZ2dpbmcuCgpIb3dldmVyLCBhIHF1aWNrIHNjYW4gc2hvd3MgdGhhdCBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAgYXJlIGNhbGxlZCBmcm9tICpuZWFybHkqIGV2ZXJ5d2hlcmUgd2l0aGluIHRoZSBkcml2ZXIuIFNvLCBJIG5lZWQgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3MgZm9jdXMgb24gYHJ0bDgxNTJfcHJvYmVgIGZvciBub3cuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hlcmUgdGhhdCBsZWFkcy4gSXQmIzM5O3MgdGhlIG5hdHVyYWwgZmlyc3Qgc3RlcCB3aGVuIGEgZGV2aWNlIGlzIGluaXRpYWxpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydGw4MTUyX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTAwODg9c3RhdGljIGJvb2wgcnRsODE1Ml9zdXBwb3J0c19sZW5vdm9fbWFjcGFzc3RocnUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTAxMTMtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxMDExNDpzdGF0aWMgaW50IHJ0bDgxNTJfcHJvYmVfb25jZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwMTE1LVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCwgdTggdmVyc2lvbilcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDMzMC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjEwMzMxOnN0YXRpYyBpbnQgcnRsODE1Ml9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwMzMyLVx0XHRcdCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTAzNDgtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVEw4MTUyX1BST0JFX1RSSUVTOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTAzNDk6XHRcdHJldCA9IHJ0bDgxNTJfcHJvYmVfb25jZShpbnRmLCBpZCwgdmVyc2lvbik7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDM1MC1cdFx0aWYgKHJldCAhPSAtRUFHQUlOKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTEwNDI3PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBydGw4MTUyX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDQyOS1cdC5pZF90YWJsZSA9XHRydGw4MTUyX3RhYmxlLFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTA0MzA6XHQucHJvYmUgPVx0cnRsODE1Ml9wcm9iZSxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwNDMxLVx0LmRpc2Nvbm5lY3QgPVx0cnRsODE1Ml9kaXNjb25uZWN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjcwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFJUTDgxNTIgRHJpdmVyKioKCk9rYXksIGBydGw4MTUyX3Byb2JlYCBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBrZWVwIG15IGZvY3VzIHRoZXJlIGFzIEkgc3RhcnQgYW5hbHl6aW5nIHRoaXMgY29kZS4gTm93LCBJJiMzOTttIGdvaW5nIHRvIHNoaWZ0IGdlYXJzIGFuZCBleGFtaW5lIGBydGw4MTUyX29wZW5gLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IHJvdXRpbmUgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGRyaXZlciBsaWZlY3ljbGU7IHRoaXMgcm91dGluZSBpcyBnb2luZyB0byBiZSB2aXRhbCBmb3IgaW5pdGlhbGl6YXRpb24uIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHJlc291cmNlcyBpdCBhY3F1aXJlcywgdGhlIGRldmljZSBzZXR0aW5ncyBpdCBlc3RhYmxpc2hlcywgYW5kIGFueSBlcnJvciBoYW5kbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRsODE1Ml9vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NzA3Nj1zdGF0aWMgaW50IHJ0bF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbixcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy03MTAxLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NzEwMjpzdGF0aWMgaW50IHJ0bDgxNTJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNzEwMy17XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9OTY0Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bDgxNTJfbmV0ZGV2X29wcyA9IHtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjk2NDQ6XHQubmRvX29wZW5cdFx0PSBydGw4MTUyX29wZW4sXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05NjQ1LVx0Lm5kb19zdG9wXHRcdD0gcnRsODE1Ml9jbG9zZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMTMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgUlRMODE1MiBEcml2ZXIqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIFJUTDgxNTIgZHJpdmVyLiBHb29kLCBgcnRsODE1Ml9vcGVuYCBpcyBhIHNvbGlkIGZ1bmN0aW9uIHRvIHN0YXJ0IHdpdGgsIGJ1dCBpdCYjMzk7cyBub3QgdGhlIGNyaXRpY2FsIHBpZWNlIHJpZ2h0IG5vdy4gTXkgZm9jdXMgaXMgb24gZGF0YSB0cmFuc21pc3Npb24uIE5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUgdHJhbnNtaXNzaW9uIHBhdGguIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGBydGw4MTUyX3N0YXJ0X3htaXRgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGFjdGlvbiBoYXBwZW5zLCB0aGUgbml0dHktZ3JpdHR5IG9mIGdldHRpbmcgcGFja2V0cyBvdXQgdGhlIGRvb3IuIFRoYXQmIzM5O3Mgd2hlcmUgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGFyZSBsaWtlbHkgdG8gYmUuIFRpbWUgdG8gZGlnIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydGw4MTUyX3N0YXJ0X3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvcjgxNTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvcjgxNTIuYz0zMzU1PXJ0bDgxNTJfZmVhdHVyZXNfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0zMzc1LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MzM3NjpzdGF0aWMgbmV0ZGV2X3R4X3QgcnRsODE1Ml9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0zMzc3LVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz05NjQzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsODE1Ml9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTk2NDYtXHQubmRvX2V0aF9pb2N0bFx0XHQ9IHJ0bDgxNTJfaW9jdGwsXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo5NjQ3Olx0Lm5kb19zdGFydF94bWl0XHRcdD0gcnRsODE1Ml9zdGFydF94bWl0LFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtOTY0OC1cdC5uZG9fdHhfdGltZW91dFx0XHQ9IHJ0bDgxNTJfdHhfdGltZW91dCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFJUTDgxNTIgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBSVEw4MTUyIGRyaXZlciBhZ2Fpbi4gSSYjMzk7dmUgYmVlbiB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSB0cmFuc21pdCBwYXRoLiBNeSBpbml0aWFsIGltcHJlc3Npb24gb2YgYHJ0bDgxNTJfc3RhcnRfeG1pdGAgaXMgdGhhdCBpdCBsb29rcyBwcmV0dHkgc29saWQ7IHRoZSBnZW5lcmFsIGFwcHJvYWNoIHNlZW1zIGxvZ2ljYWwgYW5kIGVmZmljaWVudC4gTm93LCBJJiMzOTttIHNoaWZ0aW5nIG15IGZvY3VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIGRyaXZlciBpcyB3b3JraW5nIHNvIG15IGF0dGVudGlvbiBpcyB0dXJuaW5nIHRvIGBydGw4MTUyX2lvY3RsYC4gSSBrbm93IHRoYXQmIzM5O3Mgd2hlcmUgYSBsb3Qgb2YgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wgaGFwcGVuLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb2YgaG93IHRoYXQgaW50ZXJhY3Rpb24gd2lsbCB3b3JrIGFuZCBob3cgaXQgd2lsbCBpbmZsdWVuY2UgYW5kIGFmZmVjdCB0aGUgdHJhbnNtaXNzaW9uIHByb2Nlc3MuIFRoaXMgbmVlZHMgc29tZSBzZXJpb3VzIGluc3BlY3Rpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydGw4MTUyX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9OTUyND1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05NTUwLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6OTU1MTpzdGF0aWMgaW50IHJ0bDgxNTJfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZClcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTk1NTIte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTk2NDM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGw4MTUyX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtOTY0NS1cdC5uZG9fc3RvcFx0XHQ9IHJ0bDgxNTJfY2xvc2UsXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo5NjQ2Olx0Lm5kb19ldGhfaW9jdGxcdFx0PSBydGw4MTUyX2lvY3RsLFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtOTY0Ny1cdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IHJ0bDgxNTJfc3RhcnRfeG1pdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExOTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBNb2RpZmljYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzIGluIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCwgYW5kIHRoZXkgc2VlbSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBsb29wIGl0ZXJhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyB3ZSBoYW5kbGUgcmVhZHMvd3JpdGVzIHdoZW4gdGhlIHJlcXVlc3RlZCBzaXplIGlzIGxhcmdlciB0aGFuIHNvbWUgbGltaXQuIFRoZSBvbGQgY29kZSBoYWQgdGhpcyBuZXN0ZWQgYGlmL2Vsc2VgIHN0cnVjdHVyZSB3aXRoaW4gdGhlIGB3aGlsZWAgbG9vcCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLiBUaGUgbmV3IGNvZGUsIGhvd2V2ZXIsIHNpbXBsaWZpZXMgdGhpbmdzLiBJdCBleHBsaWNpdGx5IGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgYHNpemVgIGlzIGdyZWF0ZXIgdGhhbiBgbGltaXRgIGluIHRoZSBgd2hpbGVgIGxvb3AsIGFuZCB0aGVuIG91dHNpZGUgdGhlIGxvb3AsIGl0IGFsd2F5cyBjYWxscyBgZ2V0X3JlZ2lzdGVyc2Agd2l0aCB0aGUgcmVtYWluaW5nIGBzaXplYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQuIFRoZSBsb29wIGRvZXMgdGhlIGNodW5rZWQgb3BlcmF0aW9ucy4gVGhlIGtleSBkaWZmZXJlbmNlIEkgc3BvdCBpcyBpbiB0aGUgZWRnZSBjYXNlIHdoZXJlIGBzaXplYCBpcyBpbml0aWFsbHkgemVyby4gSW4gdGhlIG9sZCBjb2RlLCBpZiBgc2l6ZWAgd2FzIHplcm8gYXQgdGhlIHN0YXJ0LCB0aGUgYGdldF9yZWdpc3RlcnNgIGZ1bmN0aW9uIHdvdWxkbiYjMzk7dCBoYXZlIGJlZW4gY2FsbGVkIGF0IGFsbC4gVGhlIGVudGlyZSB3aGlsZSBsb29wIHdvdWxkbiYjMzk7dCBleGVjdXRlLCBhbmQgY29udHJvbCB3b3VsZCBtb3ZlIG9uLiBJbiB0aGUgbmV3IGNvZGUsIGV2ZW4gaWYgYHNpemVgIGlzIHplcm8gaW5pdGlhbGx5LCBgZ2V0X3JlZ2lzdGVyc2AgZ2V0cyBjYWxsZWQgd2l0aCBgc2l6ZSA9IDBgLiBIbW0sIHRoYXQmIzM5O3MgYSBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGRpZmZlcmVuY2UuCgpOb3csIG15IG1pbmQgZ29lcyB0bywgJiMzNDtJcyBgc2l6ZSA9PSAwYCBhIHZhbGlkIHNjZW5hcmlvIGhlcmU/JiMzNDsgV2UgbmVlZCB0byBrbm93IGlmIHRoaXMgY29kZSBwYXRoIGlzICpldmVyKiByZWFjaGVkIHdpdGggYSB6ZXJvIHNpemUgcmVxdWVzdC4gSWYgaXQgaXMsIHRoZW4gdGhlIGJlaGF2aW9yIGNoYW5nZSBpcywgd2VsbCwgYSBjaGFuZ2UhIFdlIG5lZWQgdG8gZXhhbWluZSBgZ2V0X3JlZ2lzdGVyc2AgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGNhbGwsIHdpdGggYHNpemUgPSAwYCwgaXMgYSBoYXJtbGVzcyBuby1vcCwgYW4gZXJyb3IgY29uZGl0aW9uLCBvciBzb21ldGhpbmcgaW4gYmV0d2Vlbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGBnZXRfcmVnaXN0ZXJzYCBhY3R1YWxseSAqZG9lcyouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9yZWdpc3RlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvcjgxNTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xMzY5PXN0YXRpY1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTM3MDppbnQgZ2V0X3JlZ2lzdGVycyhzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMzcxLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNDE4PXN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0MzQtXHR3aGlsZSAoc2l6ZSBcdTAwM2UgbGltaXQpIHtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE0MzU6XHRcdHJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBsaW1pdCwgZGF0YSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDM2LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0NDMtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNDQ0Olx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQ0NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzMzQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgZ2V0X3JlZ2lzdGVyc2AgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBnZXRfcmVnaXN0ZXJzYCB3b3Jrcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBsb29rcyBsaWtlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgY29yZSBsb2dpYy4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIGl0cyBhc3N1bXB0aW9ucywgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIG9yIHNvZnR3YXJlIGNvbXBvbmVudHMuIEnigJlsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgcmVnaXN0ZXIgdHlwZXMsIGFueSBlcnJvciBoYW5kbGluZywgYW5kIGhvdyBlZmZpY2llbnQgaXQgaXMgd2l0aCBpdHMgb3BlcmF0aW9ucy4gVGhlIGdvYWwgaXMgdG8gZGV2ZWxvcCBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiBpdHMgZnVuY3Rpb25hbGl0eSBzbyB0aGF0IEkgY2FuIG1vZGlmeSBvciBkZWJ1ZyBpdCBsYXRlciBvbiwgaWYgbmVjZXNzYXJ5LiBMZXQmIzM5O3MgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzY5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzNjk6XHRzdGF0aWNcbjEzNzA6XHRpbnQgZ2V0X3JlZ2lzdGVycyhzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG4xMzcxOlx0e1xuMTM3MjpcdFx0aW50IHJldDtcbjEzNzM6XHRcdHZvaWQgKnRtcDtcbjEzNzQ6XHRcbjEzNzU6XHRcdHRtcCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XG4xMzc2Olx0XHRpZiAoIXRtcClcbjEzNzc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMzc4Olx0XG4xMzc5Olx0XHRyZXQgPSByODE1Ml9jb250cm9sX21zZyh0cCwgdHAtXHUwMDNlcGlwZV9jdHJsX2luLFxuMTM4MDpcdFx0XHRcdFx0UlRMODE1Ml9SRVFfR0VUX1JFR1MsIFJUTDgxNTJfUkVRVF9SRUFELFxuMTM4MTpcdFx0XHRcdFx0dmFsdWUsIGluZGV4LCB0bXAsIHNpemUsIFwmIzM0O3JlYWRcJiMzNDspO1xuMTM4MjpcdFxuMTM4MzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEzODQ6XHRcdFx0bWVtc2V0KGRhdGEsIDB4ZmYsIHNpemUpO1xuMTM4NTpcdFx0ZWxzZVxuMTM4NjpcdFx0XHRtZW1jcHkoZGF0YSwgdG1wLCBzaXplKTtcbjEzODc6XHRcbjEzODg6XHRcdGtmcmVlKHRtcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODU5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEJ1ZyBpbiB0aGUgcjgxNTIgRHJpdmVyKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nOiBJZiB0aGUgYHNpemVgIGlzIHplcm8sIGBrbWFsbG9jKDAsIEdGUF9LRVJORUwpYCByZXR1cm5zIGBaRVJPX1NJWkVfUFRSYC4gVGhpcyBpcyBzdGFuZGFyZCwgYnV0IHRoZSBjcnVjaWFsIHBhcnQgaXMgdGhhdCBgcjgxNTJfY29udHJvbF9tc2dgIGlzIHRoZW4gY2FsbGVkIHdpdGggdGhpcyBgc2l6ZSA9IDBgIGFuZCBgdG1wID0gWkVST19TSVpFX1BUUmAuIEhtbSwgdGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgaXQgKmNvdWxkKiBkZWZpbml0ZWx5IG9wZW4gdGhlIGRvb3IgdG8gc29tZSBuYXN0eSBidWdzIGlmIGBzaXplYCBiZWluZyB6ZXJvIGlzbiYjMzk7dCBoYW5kbGVkIGNvcnJlY3RseSBkb3duIHRoZSBsaW5lLiBJJiMzOTt2ZSBzZWVuIHRoaW5ncyBsaWtlIHRoaXMgYmVmb3JlOyBpdCYjMzk7cyBzdWJ0bGUsIGJ1dCBpdCYjMzk7cyB0aGUga2luZCBvZiB0aGluZyB0aGF0IGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIHBvdGVudGlhbGx5IGV4cGxvaXRhYmxlIGNyYXNoZXMuIFBsdXMsIEkgbm90aWNlZCB0aGUgbG9vcCBsb2dpYyBnb3Qgc2ltcGxpZmllZCwgc28gdGhlcmUgbWF5IGJlIG90aGVyIGJ1Z3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2hhbmdlLgoKVGhpcyB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZywgbm8gcXVlc3Rpb24uIEkgc2hvdWxkIGZvY3VzIG15IGVmZm9ydHMgb24gdGhlc2Ugc3ltYm9sczogYHJ0bDgxNTJfcHJvYmVgLCBgcnRsODE1Ml9vcGVuYCwgYHJ0bDgxNTJfc3RhcnRfeG1pdGAsIGFuZCBgcnRsODE1Ml9pb2N0bGAuIFRob3NlIHNlZW0gbGlrZSB0aGUgbGlrZWx5IHBsYWNlcyB3aGVyZSB0aGlzIHplcm8tc2l6ZSBzY2VuYXJpbyB3b3VsZCBtYW5pZmVzdC4KClJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBhIGZldyBrZXJuZWwgb3B0aW9ucyB0byBnZXQgdGhpcyBkcml2ZXIgY29tcGlsZWQgaW4uIE9idmlvdXNseSwgYFVTQl9SVEw4MTUyYCBpcyBlc3NlbnRpYWwsIGFuZCBhcyBhIHByZWNhdXRpb24gSSYjMzk7bGwgaGF2ZSBgVVNCX05FVF9EUklWRVJTYCBlbmFibGVkIHRvbywganVzdCBpbiBjYXNlLiBJJiMzOTtsbCBuZWVkIGBNSUlgLCBgUEhZTElCYCwgYENSQzMyYCwgYW5kIGBDUllQVE9fTElCX1NIQTI1NmAgYXMgd2VsbCwgYnV0IGl0IGxvb2tzIGxpa2UgYFVTQl9SVEw4MTUyYCBzZWxlY3RzIHRob3NlIGF1dG9tYXRpY2FsbHksIHNvIHRoYXQmIzM5O3MgZ29vZC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlLWNoZWNrIGBVU0JfTkVUX0RSSVZFUlNgIGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUuIFl1cCwgaXQmIzM5O3MgYSBtZW51Y29uZmlnLCB3aGljaCBtZWFucyBpdCBkb2VzbiYjMzk7dCBkaXJlY3RseSBlbmFibGUgdGhlIGRyaXZlciBpdHNlbGYgYnV0IHJhdGhlciBwcm92aWRlcyBhIGNhdGVnb3J5IGluIGBtZW51Y29uZmlnYC4gR3JlYXQsIGl0IGxvb2tzIGxpa2UganVzdCBlbmFibGluZyBgVVNCX1JUTDgxNTJgIHdpbGwgYmUgc3VmZmljaWVudCB0byBnZXQgZXZlcnl0aGluZyBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgVVNCX05FVF9EUklWRVJTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NT1jb21tZW50IFwmIzM0O0hvc3Qtc2lkZSBVU0Igc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTctXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo4Om1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy05LVx0dHJpc3RhdGUgXCYjMzQ7VVNCIE5ldHdvcmsgQWRhcHRlcnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3OTYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBXb3JrZmxvdyoqCgpPa2F5LCBzbyBgVVNCX05FVF9EUklWRVJTYCBpcyBkZWZpbml0ZWx5IGEgbWVudWNvbmZpZyBvcHRpb24g4oCTIGEgY29uZmlndXJhdGlvbiBpdGVtIHRoYXQgbmVlZHMgdG8gYmUgZXhwbGljaXRseSBlbmFibGVkIGluIHRoZSBidWlsZCBzeXN0ZW0uIEdvdCBpdC4gU28sIEkgbmVlZCB0byBpbmNvcnBvcmF0ZSBib3RoIGBVU0JfTkVUX0RSSVZFUlNgIGFuZCB0aGUgc3BlY2lmaWMgYFVTQl9SVEw4MTUyYCBkcml2ZXIgaW50byBteSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLgoKTm93LCBsZXQgbWUganVzdCBxdWlja2x5IHJldmlldyB0aG9zZSBjcnVjaWFsIHN5bWJvbHMgcmVsYXRlZCB0byB0aGUgUlRMODE1MiBkcml2ZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGNyaXRpY2FsIGVudHJ5IHBvaW50cy4gSSYjMzk7dmUgZ290IGBydGw4MTUyX3Byb2JlYCwgYHJ0bDgxNTJfb3BlbmAsIGBydGw4MTUyX3N0YXJ0X3htaXRgLCBhbmQgYHJ0bDgxNTJfaW9jdGxgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGNvcmUgZnVuY3Rpb25zLCBidXQgSSB3YW50IHRvIGJlIHRob3JvdWdoLiBBcmUgdGhlcmUgYW55IG90aGVyIGVxdWFsbHkgc2lnbmlmaWNhbnQgZW50cnkgcG9pbnRzIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nIHdpdGhpbiB0aGlzIGRyaXZlcj8gSSBuZWVkIHRvIGJlIGNlcnRhaW4gSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRsODE1Ml9uZXRkZXZfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9OTU5NT1zdGF0aWMgaW50IHJ0bDgxNTJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05NjQyLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6OTY0MzpzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bDgxNTJfbmV0ZGV2X29wcyA9IHtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTk2NDQtXHQubmRvX29wZW5cdFx0PSBydGw4MTUyX29wZW4sXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTAxMTQ9c3RhdGljIGludCBydGw4MTUyX3Byb2JlX29uY2Uoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTAxNzEtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxMDE3MjpcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2cnRsODE1Ml9uZXRkZXZfb3BzO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTAxNzMtXHRuZXRkZXYtXHUwMDNld2F0Y2hkb2dfdGltZW8gPSBSVEw4MTUyX1RYX1RJTUVPVVQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDY1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGBydGw4MTUyX25ldGRldl9vcHNgIHN0cnVjdHVyZS4gSSBrbm93IHRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBkcml2ZXIsIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgUmVhbHRlayA4MTUyIFVTQiBldGhlcm5ldCBhZGFwdGVyIGFuZCB0aGUgbmV0d29yayBzdGFjay4gSSYjMzk7bSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggbmV0ZGV2X29wcyBpbiBnZW5lcmFsLCBvZiBjb3Vyc2UsIGJ1dCBJIG5lZWQgdG8gc2VlICp0aGlzKiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gV2hhdCBkaWQgdGhleSBjaG9vc2UgdG8gZG8gaGVyZSwgd2hhdCB0cmlja3MgZGlkIHRoZXkgdXNlPyBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBrZXkgZnVuY3Rpb25zOiBgbmRvX29wZW5gLCBgbmRvX3N0b3BgLCBgbmRvX3N0YXJ0X3htaXRgLCBgbmRvX3NldF9tYWNfYWRkcmVzc2AsIHRoZSB3aG9sZSBzaGViYW5nLiBVbmRlcnN0YW5kaW5nIHRoZXNlIHdpbGwgaW1tZWRpYXRlbHkgdGVsbCBtZSBob3cgdGhlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uLCB0cmFuc21pc3Npb24sIHJlY2VwdGlvbiwgYW5kIG1hbmFnZW1lbnQgYXJlIGhhbmRsZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5JiMzOTt2ZSBoYW5kbGVkIHRoZSBVU0IgaW50ZXJhY3Rpb25zLCBETUEsIGJ1ZmZlciBtYW5hZ2VtZW50LCBhbmQgaW50ZXJydXB0IGhhbmRsaW5nIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGlzIHNwZWNpZmljIGNoaXAuIEFyZSB0aGV5IHVzaW5nIHRoZSBzdGFuZGFyZCBVU0IgZHJpdmVycyBlZmZpY2llbnRseT8gQXJlIHRoZXJlIGFueSBjdXN0b20gb3B0aW1pemF0aW9ucz8gVGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NjQzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozk2NDM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bDgxNTJfbmV0ZGV2X29wcyA9IHtcbjk2NDQ6XHRcdC5uZG9fb3Blblx0XHQ9IHJ0bDgxNTJfb3Blbixcbjk2NDU6XHRcdC5uZG9fc3RvcFx0XHQ9IHJ0bDgxNTJfY2xvc2UsXG45NjQ2Olx0XHQubmRvX2V0aF9pb2N0bFx0XHQ9IHJ0bDgxNTJfaW9jdGwsXG45NjQ3Olx0XHQubmRvX3N0YXJ0X3htaXRcdFx0PSBydGw4MTUyX3N0YXJ0X3htaXQsXG45NjQ4Olx0XHQubmRvX3R4X3RpbWVvdXRcdFx0PSBydGw4MTUyX3R4X3RpbWVvdXQsXG45NjQ5Olx0XHQubmRvX3NldF9mZWF0dXJlc1x0PSBydGw4MTUyX3NldF9mZWF0dXJlcyxcbjk2NTA6XHRcdC5uZG9fc2V0X3J4X21vZGVcdD0gcnRsODE1Ml9zZXRfcnhfbW9kZSxcbjk2NTE6XHRcdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IHJ0bDgxNTJfc2V0X21hY19hZGRyZXNzLFxuOTY1MjpcdFx0Lm5kb19jaGFuZ2VfbXR1XHRcdD0gcnRsODE1Ml9jaGFuZ2VfbXR1LFxuOTY1MzpcdFx0Lm5kb192YWxpZGF0ZV9hZGRyXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxuOTY1NDpcdFx0Lm5kb19mZWF0dXJlc19jaGVja1x0PSBydGw4MTUyX2ZlYXR1cmVzX2NoZWNrLFxuOTY1NTpcdH07XG45NjU2Olx0XG45NjU3Olx0c3RhdGljIHZvaWQgcnRsODE1Ml91bmxvYWQoc3RydWN0IHI4MTUyICp0cClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwOTQKCQkJCQkJCW91dHB1dDogMTk2CgkJCQkJCQl0aG91Z2h0czogNjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiByODE1MiBVU0IgTmV0d29yayBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSByODE1MiBkcml2ZXIsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCB0b3VjaGVzIHNldmVyYWwga2V5IGZ1bmN0aW9uczogYHJ0bDgxNTJfcHJvYmVgLCBgcnRsODE1Ml9vcGVuYCwgYHJ0bDgxNTJfc3RhcnRfeG1pdGAsIGBydGw4MTUyX2lvY3RsYCwgYHJ0bDgxNTJfc2V0X21hY19hZGRyZXNzYCwgYW5kIGBydGw4MTUyX2NoYW5nZV9tdHVgLiBUaGVzZSBhbGwgc2VlbSBsaWtlIGxvZ2ljYWwgYWRkaXRpb25zIGZvciBhIHBhdGNoIG9mIHRoaXMgc2NvcGUsIGdpdmVuIHRoYXQgYHJ0bDgxNTJfc2V0X2ZlYXR1cmVzYCwgYHJ0bDgxNTJfc2V0X3J4X21vZGVgLCBgcnRsODE1Ml9zZXRfbWFjX2FkZHJlc3NgLCBhbmQgYHJ0bDgxNTJfY2hhbmdlX210dWAgYXJlIGFscmVhZHkgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNoYW5nZXMuCgpIb3dldmVyLCB0aGUgY29yZSBvZiB0aGUgbWF0dGVyIHNlZW1zIHRvIGJlIGluIHRoZSBtb2RpZmljYXRpb25zIHRvIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYC4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsOyB0aGV5JiMzOTtyZSB1c2VkIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIGNvbmZpZ3VyYXRpb24sIGFuZCB0aHJvdWdob3V0IHRoZSBkZXZpY2UmIzM5O3Mgb3BlcmF0aW9uYWwgbGlmZXRpbWUuIFRoZSBjaGFuZ2VzIHNpbXBsaWZ5IHRoZSBsb29wIGxvZ2ljIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcgZm9yIG1lLiBBbnkgYWx0ZXJhdGlvbiB0byBjb3JlIGxvdy1sZXZlbCBvcGVyYXRpb25zIGxpa2UgdGhlc2UsIGVzcGVjaWFsbHkgaW52b2x2aW5nIHJlZ2lzdGVyIHJlYWRzIGFuZCB3cml0ZXMsIHdhcnJhbnRzIGNsb3NlIHNjcnV0aW55LgoKVGhlIHNpbXBsaWZpY2F0aW9uIGludm9sdmVzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgY2hhbmdlIGluIGJlaGF2aW9yLiBUaGUgb2xkIGNvZGUgd2FzIGhhbmRsaW5nIGNhc2VzIHdoZXJlIHRoZSBgc2l6ZWAgYXJndW1lbnQgd2FzIGEgbXVsdGlwbGUgb2YgYGxpbWl0YCBkaWZmZXJlbnRseS4gVGhlIGtleSBkaWZmZXJlbmNlIEkmIzM5O20gc2VlaW5nIGlzIGhvdyB0aGUgbmV3IGNvZGUgaGFuZGxlcyB0aGUgc2NlbmFyaW8gd2hlcmUgdGhlIGluaXRpYWwgYHNpemVgIGlzIHplcm8uIEluIHRoZSBvbGQgY29kZSwgaWYgYHNpemVgIHdhcyBpbml0aWFsbHkgemVybywgdGhlIGxvb3Agd291bGRuJiMzOTt0IHJ1bi4gVGhlIG5ldyBjb2RlLCBob3dldmVyLCAqZG9lcyogZXhlY3V0ZSB0aGUgYGdldF9yZWdpc3RlcnNgIChvciBgc2V0X3JlZ2lzdGVyc2ApIGZ1bmN0aW9uIHdpdGggYSBgc2l6ZWAgb2YgemVybyBpbiB0aGlzIGNhc2UuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEEgY2xlYXIgYW5kIGRpcmVjdCBhbHRlcmF0aW9uIG9mIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgcmVnYXJkbGVzcyBvZiBob3cgbWlub3IgaXQgYXBwZWFycy4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgdmFyaWV0eSBvZiBpc3N1ZXMsIHN1Y2ggYXMgemVyby1zaXplIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5leHBlY3RlZCBiZWhhdmlvciBmcm9tIFVTQiBjb250cm9sIG1lc3NhZ2VzLCBvciBvdGhlciBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzLgoKR2l2ZW4gdGhpcywgSSYjMzk7bSBjYWxsaW5nIGl0OiBXb3J0aEZ1enppbmc6IHRydWUuIFRoZSByZWFzb24gaXMgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlIEkmIzM5O3ZlIGlkZW50aWZpZWQgaW4gYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgLCBwYXJ0aWN1bGFybHkgdGhlIGhhbmRsaW5nIG9mIGEgemVybyBgc2l6ZWAgYXJndW1lbnQuIFRvIGJlIHByZWNpc2UsIEkmIzM5O20gdGFyZ2V0aW5nIHRoZSBmdW5jdGlvbnMgSSBwcmV2aW91c2x5IGlkZW50aWZpZWQgZm9yIHRlc3Rpbmc6IGBydGw4MTUyX3Byb2JlYCwgYHJ0bDgxNTJfb3BlbmAsIGBydGw4MTUyX3N0YXJ0X3htaXRgLCBgcnRsODE1Ml9pb2N0bGAsIGBydGw4MTUyX3NldF9tYWNfYWRkcmVzc2AsIGFuZCBgcnRsODE1Ml9jaGFuZ2VfbXR1YC4gQW5kIG9mIGNvdXJzZSwgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIHdvdWxkIGJlIGBVU0JfTkVUX0RSSVZFUlNgIGFuZCBgVVNCX1JUTDgxNTJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQl9SVEw4MTUyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRsODE1Ml9wcm9iZSYjMzQ7LAogICAgJiMzNDtydGw4MTUyX29wZW4mIzM0OywKICAgICYjMzQ7cnRsODE1Ml9zdGFydF94bWl0JiMzNDssCiAgICAmIzM0O3J0bDgxNTJfaW9jdGwmIzM0OywKICAgICYjMzQ7cnRsODE1Ml9zZXRfbWFjX2FkZHJlc3MmIzM0OywKICAgICYjMzQ7cnRsODE1Ml9jaGFuZ2VfbXR1JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGxvZ2ljIGluIGdlbmVyaWNfb2NwX3JlYWQgYW5kIGdlbmVyaWNfb2NwX3dyaXRlIGluIHRoZSByODE1MiBVU0IgbmV0d29yayBkcml2ZXIuIFRoZSByZWZhY3RvcmVkIGNvZGUgbm93IGV4ZWN1dGVzIGdldF9yZWdpc3RlcnMvc2V0X3JlZ2lzdGVycyBldmVuIGlmIHRoZSBpbml0aWFsIHNpemUgaXMgMCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNvdWxkIHRyaWdnZXIgYnVncyAoZS5nLiwgemVyby1zaXplIGFsbG9jYXRpb25zIG9yIFVTQiBjb250cm9sIG1lc3NhZ2VzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQl9SVEw4MTUyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRsODE1Ml9wcm9iZSYjMzQ7LAogICAgJiMzNDtydGw4MTUyX29wZW4mIzM0OywKICAgICYjMzQ7cnRsODE1Ml9zdGFydF94bWl0JiMzNDssCiAgICAmIzM0O3J0bDgxNTJfaW9jdGwmIzM0OywKICAgICYjMzQ7cnRsODE1Ml9zZXRfbWFjX2FkZHJlc3MmIzM0OywKICAgICYjMzQ7cnRsODE1Ml9jaGFuZ2VfbXR1JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGxvZ2ljIGluIGdlbmVyaWNfb2NwX3JlYWQgYW5kIGdlbmVyaWNfb2NwX3dyaXRlIGluIHRoZSByODE1MiBVU0IgbmV0d29yayBkcml2ZXIuIFRoZSByZWZhY3RvcmVkIGNvZGUgbm93IGV4ZWN1dGVzIGdldF9yZWdpc3RlcnMvc2V0X3JlZ2lzdGVycyBldmVuIGlmIHRoZSBpbml0aWFsIHNpemUgaXMgMCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNvdWxkIHRyaWdnZXIgYnVncyAoZS5nLiwgemVyby1zaXplIGFsbG9jYXRpb25zIG9yIFVTQiBjb250cm9sIG1lc3NhZ2VzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNodW5raW5nIGxvb3BzIGluIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBmb3IgdGhlIHI4MTUyIGRyaXZlci4gSW4gYGdlbmVyaWNfb2NwX3dyaXRlYCwgaWYgYHNpemUgPT0gNGAgYW5kIGBieWVuICE9IEJZVEVfRU5fRFdPUkRgLCBgc2l6ZWAgaXMgZGVjcmVtZW50ZWQgYnkgNCB0byAwLiBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGB3aGlsZSAoc2l6ZSlgIGFuZCBza2lwcGVkIHRoZSBsb29wLCB3aGVyZWFzIHRoZSBuZXcgY29kZSB1c2VzIGB3aGlsZSAoc2l6ZSBcdTAwM2UgbGltaXQpYCBhbmQgdW5jb25kaXRpb25hbGx5IGNhbGxzIGBzZXRfcmVnaXN0ZXJzYCB3aXRoIHRoZSByZW1haW5pbmcgYHNpemVgICh3aGljaCBpcyAwKS4gVGhpcyByZXN1bHRzIGluIGEgMC1sZW5ndGggY29udHJvbCBtZXNzYWdlIGJlaW5nIHNlbnQgdG8gdGhlIFVTQiBkZXZpY2UuIEEgMC1sZW5ndGggd3JpdGUgYWxsb2NhdGVzIGEgYFpFUk9fU0laRV9QVFJgIHZpYSBga21lbWR1cChkYXRhLCAwLCBHRlBfS0VSTkVMKWAgYW5kIHBhc3NlcyBpdCB0byBgdXNiX2NvbnRyb2xfbXNnYCwgd2hpY2ggaGFuZGxlcyAwLWxlbmd0aCB0cmFuc2ZlcnMgc2FmZWx5IHdpdGhvdXQgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSW4gYGdlbmVyaWNfb2NwX3JlYWRgLCBgc2l6ZWAgaXMgdmFsaWRhdGVkIHRvIGJlIG5vbi16ZXJvIGFuZCBhIG11bHRpcGxlIG9mIDQgaW5pdGlhbGx5LCBhbmQgaXMgbmV2ZXIgZGVjcmVtZW50ZWQgYmVmb3JlIHRoZSBsb29wLiBUaHVzLCBgZ2V0X3JlZ2lzdGVyc2AgaXMgbmV2ZXIgY2FsbGVkIHdpdGggYHNpemUgPSAwYCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGNvcGllZCBvciBleHBvc2VkLiBTaW5jZSB0aGUgcGF0Y2ggb25seSBpbnRyb2R1Y2VzIGEgcG90ZW50aWFsIDAtbGVuZ3RoIFVTQiBjb250cm9sIG1lc3NhZ2UgYW5kIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gQW55IHBvdGVudGlhbCBjcmFzaGVzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGVlNzlkNjM5OGVkN2NiOWVkMjNmNTFiNWQ2N2ZhYWNjMmVkMGNiNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDIwOjU5OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuYwppbmRleCBmNjE2ODY0MzMwMzFjLi5kZTk3MzhiZGNlODU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvcjgxNTIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuYwpAQCAtMTQzMSwyNyAmIzQzOzE0MzEsMTkgQEAgc3RhdGljIGludCBnZW5lcmljX29jcF9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IHNpemUsCiAJaWYgKCh1MzIpaW5kZXggJiM0MzsgKHUzMilzaXplICZndDsgMHhmZmZmKQogCQlyZXR1cm4gLUVQRVJNOwogCi0Jd2hpbGUgKHNpemUpIHsKLQkJaWYgKHNpemUgJmd0OyBsaW1pdCkgewotCQkJcmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIGxpbWl0LCBkYXRhKTsKLQkJCWlmIChyZXQgJmx0OyAwKQotCQkJCWJyZWFrOwotCi0JCQlpbmRleCAmIzQzOz0gbGltaXQ7Ci0JCQlkYXRhICYjNDM7PSBsaW1pdDsKLQkJCXNpemUgLT0gbGltaXQ7Ci0JCX0gZWxzZSB7Ci0JCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgc2l6ZSwgZGF0YSk7Ci0JCQlpZiAocmV0ICZsdDsgMCkKLQkJCQlicmVhazsKJiM0MzsJd2hpbGUgKHNpemUgJmd0OyBsaW1pdCkgewomIzQzOwkJcmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIGxpbWl0LCBkYXRhKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyb3IxOwogCi0JCQlpbmRleCAmIzQzOz0gc2l6ZTsKLQkJCWRhdGEgJiM0Mzs9IHNpemU7Ci0JCQlzaXplID0gMDsKLQkJCWJyZWFrOwotCQl9CiYjNDM7CQlpbmRleCAmIzQzOz0gbGltaXQ7CiYjNDM7CQlkYXRhICYjNDM7PSBsaW1pdDsKJiM0MzsJCXNpemUgLT0gbGltaXQ7CiAJfQogCiYjNDM7CXJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBzaXplLCBkYXRhKTsKJiM0MzsKJiM0MztlcnJvcjE6CiAJaWYgKHJldCA9PSAtRU5PREVWKQogCQlydGxfc2V0X3VucGx1Zyh0cCk7CiAKQEAgLTE0OTgsMzEgJiM0MzsxNDkwLDI0IEBAIHN0YXRpYyBpbnQgZ2VuZXJpY19vY3Bfd3JpdGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgYnl0ZWVuLAogCQlpZiAoYnllbiAhPSBCWVRFX0VOX0RXT1JEKQogCQkJc2l6ZSAtPSA0OwogCi0JCXdoaWxlIChzaXplKSB7Ci0JCQlpZiAoc2l6ZSAmZ3Q7IGxpbWl0KSB7Ci0JCQkJcmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsCi0JCQkJCQkgICAgdHlwZSB8IEJZVEVfRU5fRFdPUkQsCi0JCQkJCQkgICAgbGltaXQsIGRhdGEpOwotCQkJCWlmIChyZXQgJmx0OyAwKQotCQkJCQlnb3RvIGVycm9yMTsKLQotCQkJCWluZGV4ICYjNDM7PSBsaW1pdDsKLQkJCQlkYXRhICYjNDM7PSBsaW1pdDsKLQkJCQlzaXplIC09IGxpbWl0OwotCQkJfSBlbHNlIHsKLQkJCQlyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwKLQkJCQkJCSAgICB0eXBlIHwgQllURV9FTl9EV09SRCwKLQkJCQkJCSAgICBzaXplLCBkYXRhKTsKLQkJCQlpZiAocmV0ICZsdDsgMCkKLQkJCQkJZ290byBlcnJvcjE7Ci0KLQkJCQlpbmRleCAmIzQzOz0gc2l6ZTsKLQkJCQlkYXRhICYjNDM7PSBzaXplOwotCQkJCXNpemUgPSAwOwotCQkJCWJyZWFrOwotCQkJfQomIzQzOwkJd2hpbGUgKHNpemUgJmd0OyBsaW1pdCkgewomIzQzOwkJCXJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgQllURV9FTl9EV09SRCwKJiM0MzsJCQkJCSAgICBsaW1pdCwgZGF0YSk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyb3IxOwomIzQzOwomIzQzOwkJCWluZGV4ICYjNDM7PSBsaW1pdDsKJiM0MzsJCQlkYXRhICYjNDM7PSBsaW1pdDsKJiM0MzsJCQlzaXplIC09IGxpbWl0OwogCQl9CiAKJiM0MzsJCXJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgQllURV9FTl9EV09SRCwgc2l6ZSwgZGF0YSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycm9yMTsKJiM0MzsKJiM0MzsJCWluZGV4ICYjNDM7PSBzaXplOwomIzQzOwkJZGF0YSAmIzQzOz0gc2l6ZTsKJiM0MzsKIAkJLyogU2V0IHRoZSBsYXN0IERXT1JEICovCiAJCWlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpCiAJCQlyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSB8IGJ5ZW4sIDQsIGRhdGEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlZ2lzdGVyIFJlYWQvV3JpdGUgUmVmYWN0b3JpbmcgaW4gYHI4MTUyLmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgcjgxNTIuY2AsIGFuZCBpdCYjMzk7cyB0b3VjaGluZyB0aGUgYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIHJlZmFjdG9yIHRoZSB3YXkgdGhlIHJlZ2lzdGVyIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyBoYW5kbGUgZGF0YSBpbiBjaHVua3MuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYHdoaWxlYCBsb29wcyB0byBwcm9jZXNzIHRoZSBkYXRhIGluIHRoZXNlIGNodW5rcy4KClNwZWNpZmljYWxseSwgaW4gYGdlbmVyaWNfb2NwX3JlYWRgLCBJJiMzOTttIHNlZWluZyBhIGNoYW5nZSB0byB0aGlzIGNodW5rLXJlYWRpbmcgbG9vcC4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgYHdoaWxlIChzaXplKWAgbG9vcCB3aXRoIGFuIGBpZi9lbHNlYCB0aGF0IG1hbmFnZWQgdGhlIGNodW5rIHNpemUuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgc2ltcGxpZmllZCBpdCwgbm93IHVzaW5nIGEgYHdoaWxlIChzaXplICZndDsgbGltaXQpYCBzdHJ1Y3R1cmUuCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIHdoYXQgaWYgYHNpemVgICppcyogemVybz8mIzM0OyBUaGUgb3JpZ2luYWwgY29kZSB3b3VsZG4mIzM5O3QgaGF2ZSBlbnRlcmVkIHRoZSBsb29wIGlmIGBzaXplYCB3YXMgMCBiZWNhdXNlIG9mIHRoZSBgd2hpbGUgKHNpemUpYCBjb25kaXRpb24uIE5vdywgd2l0aCB0aGUgbmV3IGB3aGlsZSAoc2l6ZSAmZ3Q7IGxpbWl0KWAgY29uZGl0aW9uIGFuZCBhc3N1bWluZyBgbGltaXRgIGlzIHBvc2l0aXZlLCB0aGUgbG9vcCAqd291bGQqIGJlIHNraXBwZWQgaWYgYHNpemVgIGlzIDAuIEhvd2V2ZXIsIHRoZSBjb2RlICppbW1lZGlhdGVseSBhZnRlciB0aGUgbG9vcCogY2FsbHMgYGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBzaXplLCBkYXRhKTtgIHdpdGggdGhlIGN1cnJlbnQgdmFsdWUgb2YgYHNpemVgLCB3aGljaCBjb3VsZCBiZSAwLiBUaGF0JiMzOTtzIGEgcG90ZW50aWFsIGFyZWEgb2YgY29uY2Vybi4gSXMgYHNpemVgIGV2ZXIgYWN0dWFsbHkgemVybyBpbiBwcmFjdGljZT8KClRoZSBtYWluIHBvaW50IG9mIGNvbmNlcm4gaXMgdGhhdCBgZ2VuZXJpY19vY3BfcmVhZGAgaXMgdXNlZCB0byByZWFkIGRhdGEgZnJvbSB0aGUgZGV2aWNlIGludG8gYGRhdGFgLiBJZiBgZ2V0X3JlZ2lzdGVyc2AgaXMgY2FsbGVkIHdpdGggYSBgc2l6ZSA9IDBgLCB3aGF0IGhhcHBlbnM/IEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGludG8gdGhlIGBnZXRfcmVnaXN0ZXJzYCBmdW5jdGlvbiBpdHNlbGYgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCBkZXRlcm1pbmUgaWYgdGhlIGNvZGUgaXMgaGFuZGxpbmcgdGhlIHplcm8tc2l6ZWQgcmVhZCBjb3JyZWN0bHkuIFRoaXMgcmVmYWN0b3IgaXMgdHJ5aW5nIHRvIGFkZHJlc3Mgc29tZXRoaW5nIGJ1dCB0aGlzIGVkZ2UgY2FzZSBjb3VsZCBiZSBpbnRyb2R1Y2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfcmVnaXN0ZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTM2OT1zdGF0aWNcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjEzNzA6aW50IGdldF9yZWdpc3RlcnMoc3RydWN0IHI4MTUyICp0cCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTM3MS17XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTQxOD1zdGF0aWMgaW50IGdlbmVyaWNfb2NwX3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgc2l6ZSxcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDM0LVx0d2hpbGUgKHNpemUgXHUwMDNlIGxpbWl0KSB7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNDM1Olx0XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQzNi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDQzLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTQ0NDpcdHJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBzaXplLCBkYXRhKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0NDUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NDQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgUmVnaXN0ZXIgUmV0cmlldmFsIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgZ2V0X3JlZ2lzdGVyc2AgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBob3cgaXQmIzM5O3Mgc3RydWN0dXJlZC4gSSYjMzk7bSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFyZWFzIHdoZXJlIG9wdGltaXphdGlvbnMgbWlnaHQgYmUgcG9zc2libGUsIGFuZCwgY3JpdGljYWxseSwgYW55IGFyZWFzIHRoYXQgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIGJ1Z3MuIEkmIzM5O20gZXhwZWN0aW5nIGEgY2xlYW4sIGVmZmljaWVudCBhcHByb2FjaCwgZ2l2ZW4gdGhlIGxpa2VseSBwZXJmb3JtYW5jZSBkZW1hbmRzIG9mIHJlZ2lzdGVyIGFjY2VzcywgYnV0IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbjogdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIHN0b3JlIHRoZSByZWdpc3RlciB2YWx1ZXMgKGFyZSB0aGV5IGFwcHJvcHJpYXRlIGZvciB0aGUgc2NhbGU/KSwgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBlbXBsb3llZCAoaWYgYW55LCBhbmQgYXJlIHRoZXkgc3VmZmljaWVudCBmb3IgdGhlIGV4cGVjdGVkIGNvbmN1cnJlbmN5PyksIGFuZCBhbnkgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLiBJJiMzOTttIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCB0cnlpbmcgdG8gYW50aWNpcGF0ZSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBhbnkgY2FjaGluZyBvciBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVnaWVzIHRoYXQgbWlnaHQgYmUgaW4gcGxhY2UgZWxzZXdoZXJlIGluIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM2OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzY5Olx0c3RhdGljXG4xMzcwOlx0aW50IGdldF9yZWdpc3RlcnMoc3RydWN0IHI4MTUyICp0cCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxuMTM3MTpcdHtcbjEzNzI6XHRcdGludCByZXQ7XG4xMzczOlx0XHR2b2lkICp0bXA7XG4xMzc0Olx0XG4xMzc1Olx0XHR0bXAgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpO1xuMTM3NjpcdFx0aWYgKCF0bXApXG4xMzc3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTM3ODpcdFxuMTM3OTpcdFx0cmV0ID0gcjgxNTJfY29udHJvbF9tc2codHAsIHRwLVx1MDAzZXBpcGVfY3RybF9pbixcbjEzODA6XHRcdFx0XHRcdFJUTDgxNTJfUkVRX0dFVF9SRUdTLCBSVEw4MTUyX1JFUVRfUkVBRCxcbjEzODE6XHRcdFx0XHRcdHZhbHVlLCBpbmRleCwgdG1wLCBzaXplLCBcJiMzNDtyZWFkXCYjMzQ7KTtcbjEzODI6XHRcbjEzODM6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMzg0Olx0XHRcdG1lbXNldChkYXRhLCAweGZmLCBzaXplKTtcbjEzODU6XHRcdGVsc2VcbjEzODY6XHRcdFx0bWVtY3B5KGRhdGEsIHRtcCwgc2l6ZSk7XG4xMzg3Olx0XG4xMzg4Olx0XHRrZnJlZSh0bXApO1xuMTM4OTpcdFxuMTM5MDpcdFx0cmV0dXJuIHJldDtcbjEzOTE6XHR9XG4xMzkyOlx0XG4xMzkzOlx0c3RhdGljXG4xMzk0Olx0aW50IHNldF9yZWdpc3RlcnMoc3RydWN0IHI4MTUyICp0cCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxuMTM5NTpcdHtcbjEzOTY6XHRcdGludCByZXQ7XG4xMzk3Olx0XHR2b2lkICp0bXA7XG4xMzk4Olx0XG4xMzk5Olx0XHR0bXAgPSBrbWVtZHVwKGRhdGEsIHNpemUsIEdGUF9LRVJORUwpO1xuMTQwMDpcdFx0aWYgKCF0bXApXG4xNDAxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTQwMjpcdFxuMTQwMzpcdFx0cmV0ID0gcjgxNTJfY29udHJvbF9tc2codHAsIHRwLVx1MDAzZXBpcGVfY3RybF9vdXQsXG4xNDA0Olx0XHRcdFx0XHRSVEw4MTUyX1JFUV9TRVRfUkVHUywgUlRMODE1Ml9SRVFUX1dSSVRFLFxuMTQwNTpcdFx0XHRcdFx0dmFsdWUsIGluZGV4LCB0bXAsIHNpemUsIFwmIzM0O3dyaXRlXCYjMzQ7KTtcbjE0MDY6XHRcbjE0MDc6XHRcdGtmcmVlKHRtcCk7XG4xNDA4Olx0XG4xNDA5Olx0XHRyZXR1cm4gcmV0O1xuMTQxMDpcdH1cbjE0MTE6XHRcbjE0MTI6XHRzdGF0aWMgdm9pZCBydGxfc2V0X3VucGx1ZyhzdHJ1Y3QgcjgxNTIgKnRwKVxuMTQxMzpcdHtcbjE0MTQ6XHRcdGlmICh0cC1cdTAwM2V1ZGV2LVx1MDAzZXN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRClcbjE0MTU6XHRcdFx0cnRsX3NldF9pbmFjY2Vzc2libGUodHApO1xuMTQxNjpcdH1cbjE0MTc6XHRcbjE0MTg6XHRzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgc2l6ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkyNwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDU5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFplcm8tU2l6ZSBUcmFuc2ZlcnMgaW4gcjgxNTIgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcjgxNTIgZHJpdmVyIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyBpdCBoYW5kbGVzIHplcm8tc2l6ZSB0cmFuc2ZlcnMuIFRoZSBpbml0aWFsIHRob3VnaHQgaGVyZSBpcywgaWYgdGhlIGBzaXplYCBwYXNzZWQgdG8gYGttYWxsb2NgIGlzIDAsIHdlIGdldCBgWkVST19TSVpFX1BUUmAuIE5vIGJpZyBkZWFsLCByaWdodD8gQnV0IHRoZW4gYHI4MTUyX2NvbnRyb2xfbXNnYCBnZXRzIGNhbGxlZCB3aXRoIGEgYHNpemVgIG9mIDAuIGBtZW1jcHlgIG9mIHNpemUgemVybyBpcyBhIG5vLW9wLCB3aGljaCBzaG91bGRuJiMzOTt0IGJlIGEgYmlnIGRlYWwgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuCgpCdXQgSSYjMzk7bSB3b25kZXJpbmcsIGlzIGBnZW5lcmljX29jcF9yZWFkYCBldmVyIGNhbGxlZCB3aXRoIGEgemVybyBzaXplPyBUaGF0IG5lZWRzIGNoZWNraW5nLiBPa2F5LCBsZXQmIzM5O3MgbG9vayBhdCBgZ2VuZXJpY19vY3Bfd3JpdGVgIGluc3RlYWQuIEkgc2VlIGl0IHVzZXMgYSBgd2hpbGUgKHNpemUgJmd0OyBsaW1pdClgIGxvb3AuIElmIGBzaXplYCBpcyB6ZXJvIHdoZW4gdGhlIGxvb3Agc3RhcnRzLCB3ZSBnbyByaWdodCBwYXN0IGl0LiBFdmVudHVhbGx5LCBgc2V0X3JlZ2lzdGVyc2AgaXMgY2FsbGVkLiBJdCBsb29rcyBsaWtlIGl0IGNvdWxkIGJlIGNhbGxlZCB3aXRoIHNpemUgMCwgZGVwZW5kaW5nIG9uIHRoZSBvdGhlciBjb25kaXRpb25zLgoKSGFuZyBvbiwgdGhlcmUmIzM5O3MgYSBtb2RpZmljYXRpb24gdG8gYHNpemVgICpiZWZvcmUqIHRoZSBsb29wOiBgaWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRCkgc2l6ZSAtPSA0O2AuIFNvLCBpZiBgc2l6ZWAgc3RhcnRzIGF0IDQsIGFuZCBgYnllbmAgaXMgbm90IGVxdWFsIHRvIGBCWVRFX0VOX0RXT1JEYCwgYHNpemVgIGJlY29tZXMgemVybyBiZWZvcmUgdGhlIGxvb3AgaXMgZXZlbiBlbnRlcmVkLiBBbmQgdGhhdCB3aG9sZSBgd2hpbGUgKHNpemUpYCBsb29wIGlzIHNraXBwZWQuIEludGVyZXN0aW5nLiBTbywgYHNldF9yZWdpc3RlcnNgIHdpbGwgYmUgY2FsbGVkIHdpdGggYHNpemUgPSAwYC4KCk5vdywgZG9lcyB0aGF0IHBvc2UgYSBwcm9ibGVtPyBMZXQmIzM5O3MgY2hlY2sgd2hhdCBgc2V0X3JlZ2lzdGVyc2AgZG9lcyB3aXRoIGBzaXplID0gMGAuIEl0IGNhbGxzIGBrbWVtZHVwKGRhdGEsIDAsIEdGUF9LRVJORUwpYCwgd2hpY2ggYWxzbyByZXR1cm5zIGBaRVJPX1NJWkVfUFRSYC4gQW5kIGByODE1Ml9jb250cm9sX21zZ2AgaXMgc3RpbGwgYmVpbmcgY2FsbGVkIHdpdGggc2l6ZSB6ZXJvLiBXaGljaCBtYWtlcyBtZSBuZXJ2b3VzIGJlY2F1c2UgYHI4MTUyX2NvbnRyb2xfbXNnYCBpcyBhIHdyYXBwZXIgYXJvdW5kIGB1c2JfY29udHJvbF9tc2dgLiBJJiMzOTttIHVuc3VyZSBpZiBgdXNiX2NvbnRyb2xfbXNnYCBoYW5kbGVzIGBaRVJPX1NJWkVfUFRSYC4gVGhhdCBjb3VsZCBiZSBhIHByb2JsZW0sIGRlcGVuZGluZyBvbiB3aGF0IGByODE1Ml9jb250cm9sX21zZ2AgZG9lcyBzcGVjaWZpY2FsbHkuIEkgc2hvdWxkIHZlcmlmeS4gSSBuZWVkIHRvIGNoZWNrIGByODE1Ml9jb250cm9sX21zZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3I4MTUyX2NvbnRyb2xfbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTI5Nz1zdGF0aWNcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjEyOTg6aW50IHI4MTUyX2NvbnRyb2xfbXNnKHN0cnVjdCByODE1MiAqdHAsIHVuc2lnbmVkIGludCBwaXBlLCBfX3U4IHJlcXVlc3QsXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMjk5LVx0XHQgICAgICBfX3U4IHJlcXVlc3R0eXBlLCBfX3UxNiB2YWx1ZSwgX191MTYgaW5kZXgsIHZvaWQgKmRhdGEsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTM3MD1pbnQgZ2V0X3JlZ2lzdGVycyhzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTM3OC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjEzNzk6XHRyZXQgPSByODE1Ml9jb250cm9sX21zZyh0cCwgdHAtXHUwMDNlcGlwZV9jdHJsX2luLFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTM4MC1cdFx0XHRcdFJUTDgxNTJfUkVRX0dFVF9SRUdTLCBSVEw4MTUyX1JFUVRfUkVBRCxcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xMzk0PWludCBzZXRfcmVnaXN0ZXJzKHN0cnVjdCByODE1MiAqdHAsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCB1MTYgc2l6ZSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDAyLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTQwMzpcdHJldCA9IHI4MTUyX2NvbnRyb2xfbXNnKHRwLCB0cC1cdTAwM2VwaXBlX2N0cmxfb3V0LFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQwNC1cdFx0XHRcdFJUTDgxNTJfUkVRX1NFVF9SRUdTLCBSVEw4MTUyX1JFUVRfV1JJVEUsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9OTk4MD1zdGF0aWMgdTggX19ydGxfZ2V0X2h3X3ZlcihzdHJ1Y3QgdXNiX2RldmljZSAqdWRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05OTkzLVx0ICogc2luY2UgcmV0cnlpbmcgYSByZWFkIG9mIHRoZSB2ZXJzaW9uIGlzIGFsd2F5cyBzYWZlIGFuZCB0aGlzXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo5OTk0Olx0ICogZnVuY3Rpb24gZG9lc24mIzM5O3QgdGFrZSBhZHZhbnRhZ2Ugb2YgcjgxNTJfY29udHJvbF9tc2coKS5cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTk5OTUtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY2MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGByODE1Ml9jb250cm9sX21zZ2AgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGByODE1Ml9jb250cm9sX21zZ2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjb250ZXh0dWFsaXplIGl0LiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIFJlYWx0ZWsgcjgxNTIgZHJpdmVyLCBzbyBuZXR3b3JraW5nIGFuZCBzcGVjaWZpY2FsbHkgRXRoZXJuZXQgY29udHJvbCBtZXNzYWdlcyBhcmUgdGhlIG5hbWUgb2YgdGhlIGdhbWUuIEnigJltIGFscmVhZHkgbWVudGFsbHkgc2V0dGluZyBleHBlY3RhdGlvbnMgZm9yIHdoYXQgSeKAmWxsIGJlIGxvb2tpbmcgYXQ6IHJlZ2lzdGVyIGFjY2Vzc2VzLCBwb3NzaWJseSBETUEgc2V0dXBzLCBhbmQgbGlrZWx5IHNvbWUgc29ydCBvZiBtZXNzYWdlIGZyYW1pbmcgb3IgZGVzY3JpcHRvciBwcm9jZXNzaW5nLiBHaXZlbiBpdCYjMzk7cyBhICYjMzQ7Y29udHJvbCYjMzQ7IG1lc3NhZ2UsIGl0JiMzOTtzIHByb2JhYmx5ICpub3QqIGhhbmRsaW5nIHRoZSBkYXRhIHBhdGggZGlyZWN0bHksIGJ1dCByYXRoZXIgdGhpbmdzIGxpa2UgbGluayBzdGF0dXMsIE1BQyBhZGRyZXNzIGNvbmZpZ3VyYXRpb24sIHBvd2VyIG1hbmFnZW1lbnQsIG9yIHBvc3NpYmx5IGZsb3cgY29udHJvbCBzZXR0aW5ncy4gSSBzaG91bGQgZXhwZWN0IHRvIGZpbmQgc29tZSBjcml0aWNhbCBzZWN0aW9ucyBvciBsb2NraW5nIGludm9sdmVkLCBwYXJ0aWN1bGFybHkgaWYgaXQmIzM5O3Mgb3BlcmF0aW5nIG9uIHNoYXJlZCBoYXJkd2FyZSByZXNvdXJjZXMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gc3RvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjk3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyOTc6XHRzdGF0aWNcbjEyOTg6XHRpbnQgcjgxNTJfY29udHJvbF9tc2coc3RydWN0IHI4MTUyICp0cCwgdW5zaWduZWQgaW50IHBpcGUsIF9fdTggcmVxdWVzdCxcbjEyOTk6XHRcdFx0ICAgICAgX191OCByZXF1ZXN0dHlwZSwgX191MTYgdmFsdWUsIF9fdTE2IGluZGV4LCB2b2lkICpkYXRhLFxuMTMwMDpcdFx0XHQgICAgICBfX3UxNiBzaXplLCBjb25zdCBjaGFyICptc2dfdGFnKVxuMTMwMTpcdHtcbjEzMDI6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gdHAtXHUwMDNldWRldjtcbjEzMDM6XHRcdGludCByZXQ7XG4xMzA0Olx0XG4xMzA1Olx0XHRpZiAodGVzdF9iaXQoUlRMODE1Ml9JTkFDQ0VTU0lCTEUsIFx1MDAyNnRwLVx1MDAzZWZsYWdzKSlcbjEzMDY6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4xMzA3Olx0XG4xMzA4Olx0XHRyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgcGlwZSwgcmVxdWVzdCwgcmVxdWVzdHR5cGUsXG4xMzA5Olx0XHRcdFx0ICAgICAgdmFsdWUsIGluZGV4LCBkYXRhLCBzaXplLFxuMTMxMDpcdFx0XHRcdCAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTtcbjEzMTE6XHRcbjEzMTI6XHRcdC8qIE5vIG5lZWQgdG8gaXNzdWUgYSByZXNldCB0byByZXBvcnQgYW4gZXJyb3IgaWYgdGhlIFVTQiBkZXZpY2UgZ290XG4xMzEzOlx0XHQgKiB1bnBsdWdnZWQ7IGp1c3QgcmV0dXJuIGltbWVkaWF0ZWx5LlxuMTMxNDpcdFx0ICovXG4xMzE1Olx0XHRpZiAocmV0ID09IC1FTk9ERVYpXG4xMzE2Olx0XHRcdHJldHVybiByZXQ7XG4xMzE3Olx0XG4xMzE4Olx0XHQvKiBJZiB0aGUgd3JpdGUgd2FzIHN1Y2Nlc3NmdWwgdGhlbiB3ZSYjMzk7cmUgZG9uZSAqL1xuMTMxOTpcdFx0aWYgKHJldCBcdTAwM2U9IDApIHtcbjEzMjA6XHRcdFx0dHAtXHUwMDNlcmVnX2FjY2Vzc19yZXNldF9jb3VudCA9IDA7XG4xMzIxOlx0XHRcdHJldHVybiByZXQ7XG4xMzIyOlx0XHR9XG4xMzIzOlx0XG4xMzI0Olx0XHRkZXZfZXJyKFx1MDAyNnVkZXYtXHUwMDNlZGV2LFxuMTMyNTpcdFx0XHRcJiMzNDtGYWlsZWQgdG8gJXMgJWQgYnl0ZXMgYXQgJSMwNngvJSMwNnggKCVkKVxcblwmIzM0OyxcbjEzMjY6XHRcdFx0bXNnX3RhZywgc2l6ZSwgdmFsdWUsIGluZGV4LCByZXQpO1xuMTMyNzpcdFxuMTMyODpcdFx0LyogQmxvY2sgYWxsIGZ1dHVyZSByZWdpc3RlciBhY2Nlc3MgdW50aWwgd2UgcmVzZXQuIE11Y2ggb2YgdGhlIGNvZGVcbjEzMjk6XHRcdCAqIGluIHRoZSBkcml2ZXIgZG9lc24mIzM5O3QgY2hlY2sgZm9yIGVycm9ycy4gTm90YWJseSwgbWFueSBwYXJ0cyBvZiB0aGVcbjEzMzA6XHRcdCAqIGRyaXZlciBkbyBhIHJlYWQvbW9kaWZ5L3dyaXRlIG9mIGEgcmVnaXN0ZXIgdmFsdWUgd2l0aG91dFxuMTMzMTpcdFx0ICogY29uZmlybWluZyB0aGF0IHRoZSByZWFkIHN1Y2NlZWRlZC4gV3JpdGluZyBiYWNrIG1vZGlmaWVkIGdhcmJhZ2VcbjEzMzI6XHRcdCAqIGxpa2UgdGhpcyBjYW4gZnVsbHkgd2VkZ2UgdGhlIGFkYXB0ZXIsIHJlcXVpcmluZyBhIHBvd2VyIGN5Y2xlLlxuMTMzMzpcdFx0ICovXG4xMzM0Olx0XHRydGxfc2V0X2luYWNjZXNzaWJsZSh0cCk7XG4xMzM1Olx0XG4xMzM2Olx0XHQvKiBJZiBwcm9iZSBoYXNuJiMzOTt0IHlldCBmaW5pc2hlZCwgdGhlbiB3ZSYjMzk7bGwgcmVxdWVzdCBhIHJldHJ5IG9mIHRoZVxuMTMzNzpcdFx0ICogd2hvbGUgcHJvYmUgcm91dGluZSBpZiB3ZSBnZXQgYW55IGNvbnRyb2wgdHJhbnNmZXIgZXJyb3JzLiBXZVxuMTMzODpcdFx0ICogbmV2ZXIgaGF2ZSB0byBjbGVhciB0aGlzIGJpdCBzaW5jZSB3ZSBmcmVlL3JlYWxsb2NhdGUgdGhlIHdob2xlIFwmIzM0O3RwXCYjMzQ7XG4xMzM5Olx0XHQgKiBzdHJ1Y3R1cmUgaWYgd2UgcmV0cnkgcHJvYmUuXG4xMzQwOlx0XHQgKi9cbjEzNDE6XHRcdGlmICghdGVzdF9iaXQoUFJPQkVEX1dJVEhfTk9fRVJST1JTLCBcdTAwMjZ0cC1cdTAwM2VmbGFncykpIHtcbjEzNDI6XHRcdFx0c2V0X2JpdChQUk9CRV9TSE9VTERfUkVUUlksIFx1MDAyNnRwLVx1MDAzZWZsYWdzKTtcbjEzNDM6XHRcdFx0cmV0dXJuIHJldDtcbjEzNDQ6XHRcdH1cbjEzNDU6XHRcbjEzNDY6XHRcdC8qIEZhaWxpbmcgdG8gYWNjZXNzIHJlZ2lzdGVycyBpbiBwcmUtcmVzZXQgaXMgbm90IHN1cnByaXNpbmcgc2luY2Ugd2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc2OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHVzYl9jb250cm9sX21zZyBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgYSB6ZXJvLXNpemVkIHRyYW5zZmVyLiBUaGUgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtpZiBgc2l6ZWAgaXMgMCwgdGhlbiBgdXNiX2NvbnRyb2xfbXNnYCBpcyBnb2luZyB0byBiZSBjYWxsZWQgd2l0aCBgc2l6ZSA9IDBgIGFuZCBgZGF0YSA9IFpFUk9fU0laRV9QVFJgLiBXYWl0LCBpcyB0aGF0IHNhZmU/IENvdWxkIGB1c2JfY29udHJvbF9tc2dgIGNyYXNoIG9yIHJldHVybiBhbiBlcnJvciBpZiBpdCBnZXRzIGBaRVJPX1NJWkVfUFRSYCBhcyB0aGUgZGF0YSBwb2ludGVyIHdoZW4gdGhlIHNpemUgaXMgemVybz8gT3IsIGlmIGBzaXplYCBpcyB6ZXJvLCBtYXliZSBgdXNiX2NvbnRyb2xfbXNnYCBpcyBqdXN0IG1lYW50IHRvIHNlbmQgYSB6ZXJvLWxlbmd0aCBjb250cm9sIG1lc3NhZ2U/JiMzNDsKCkFuZCB0aGVuIEkgc2F3IHRoYXQgYFpFUk9fU0laRV9QVFJgIGlzIGFjdHVhbGx5IGAodm9pZCAqKTE2YC4gVGhhdCYjMzk7cyBub3QgdGhlIHNhbWUgYXMgYE5VTExgISBTbyBpcyBgdXNiX2NvbnRyb2xfbXNnYCBzYWZlIHdpdGggdGhpcyBjb25zdHJ1Y3Q/CgpUaGUgbmV4dCB0aGluZyBJIGNvbnNpZGVyZWQgd2FzIHRoZSBpbnRlcm5hbCBoYW5kbGluZzogSSB3YXMgdGhpbmtpbmcsICYjMzQ7SWYgYHNpemVgIGlzIDAsIHRoZW4gYHVzYl9jb250cm9sX21zZ2AgaXMgcGFzc2luZyBpdCB0byBzb21ldGhpbmcgbGlrZSBgdXNiX2NvbnRyb2xfbXNnX3NlbmRgLCB3aGljaCBhbGxvY2F0ZXMgYSBVUkIgdG8gaGFuZGxlIHRoZSB0cmFuc21pc3Npb24uJiMzNDsgQnV0IHRoZW4gSSByZW1lbWJlcmVkIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSB0aG91Z2h0IEkga25ldyB0aGUgY29kZSwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBJICp0aG91Z2h0KiB0aGF0IHRoZSBjb2RlIGRpZCBzb21ldGhpbmcgbGlrZToKCmBgYGMKCWlmIChzaXplID09IDApCgkJZGF0YSA9IE5VTEw7CmBgYAoKQnV0IEkgbmVlZCB0byBjb25maXJtIHRoaXMuIFdhaXQsIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LCBiZWNhdXNlIEkgcmVtZW1iZXIgdGhhdCAqYHVzYl9jb250cm9sX21zZ2AgZG9lcyBub3QgY2hlY2sgZm9yIGBaRVJPX1NJWkVfUFRSYCohCgpOb3csIGhvbGQgb24uIFdhaXQsIGl0JiMzOTtzIHN0YXJ0aW5nIHRvIGNvbWUgYmFjayB0byBtZS4gTm93IEkgcmVtZW1iZXIuIEl0IGRvZXMgc29tZXRoaW5nIGxpa2UgdGhpczoKCmBgYGMKCWlmIChzaXplKSB7CgkJdGJ1ZiA9IGttZW1kdXAoZGF0YSwgc2l6ZSwgR0ZQX05PSU8pOwoJCWlmICghdGJ1ZikKCQkJcmV0dXJuIC1FTk9NRU07Cgl9CmBgYAoKU28sIGl0ICpkb2VzbiYjMzk7dCogYWN0dWFsbHkgdXNlIHRoZSBgZGF0YWAgcG9pbnRlciBpZiBgc2l6ZWAgaXMgemVyby4gSXQmIzM5O3MgYWN0dWFsbHkgY29weWluZyB0aGUgZGF0YSB0byBhIG5ldyBidWZmZXIgaWYgc2l6ZSBpcyBub3QgemVybywgb3RoZXJ3aXNlLCBub3RoaW5nIGhhcHBlbnMgd2l0aCBkYXRhLgoKT2theSwgSSB0aGluayBJIGhhdmUgaXQgbm93LiBCdXQsIEkgc2hvdWxkIGNoZWNrIHRoaXMuIFRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZywgSSYjMzk7bGwgZ28gbG9vayBhdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGZvciBgdXNiX2NvbnRyb2xfbXNnYCBpbiBgZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmNgIHRvIGJlIHN1cmUuIEl0JiMzOTtzIGJlc3QgdG8gdmVyaWZ5IGFzc3VtcHRpb25zIHdpdGggdGhlIHNvdXJjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHVzYl9jb250cm9sX21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jPTEwMT1zdGF0aWMgaW50IHVzYl9pbnRlcm5hbF9jb250cm9sX21zZyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2Rldixcbi0tXG5kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYy0xNDktICovXG5kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYzoxNTA6aW50IHVzYl9jb250cm9sX21zZyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSwgX191OCByZXF1ZXN0LFxuZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMtMTUxLVx0XHQgICAgX191OCByZXF1ZXN0dHlwZSwgX191MTYgdmFsdWUsIF9fdTE2IGluZGV4LCB2b2lkICpkYXRhLFxuLS1cbmRyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jPTE3Nz1FWFBPUlRfU1lNQk9MX0dQTCh1c2JfY29udHJvbF9tc2cpO1xuLS1cbmRyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jLTIxMC0gKi9cbmRyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jOjIxMTppbnQgdXNiX2NvbnRyb2xfbXNnX3NlbmQoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgX191OCBlbmRwb2ludCwgX191OCByZXF1ZXN0LFxuZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMtMjEyLVx0XHRcdCBfX3U4IHJlcXVlc3R0eXBlLCBfX3UxNiB2YWx1ZSwgX191MTYgaW5kZXgsXG4tLVxuZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmM9MjM1PUVYUE9SVF9TWU1CT0xfR1BMKHVzYl9jb250cm9sX21zZ19zZW5kKTtcbi0tXG5kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYy0yNzQtICovXG5kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYzoyNzU6aW50IHVzYl9jb250cm9sX21zZ19yZWN2KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIF9fdTggZW5kcG9pbnQsIF9fdTggcmVxdWVzdCxcbmRyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jLTI3Ni1cdFx0XHQgX191OCByZXF1ZXN0dHlwZSwgX191MTYgdmFsdWUsIF9fdTE2IGluZGV4LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDU1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGB1c2JfY29udHJvbF9tc2dgLCBkaXN0aWxsZWQgaW50byBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgdXNiX2NvbnRyb2xfbXNnYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgYHVzYl9jb250cm9sX21zZ2AuIFJpZ2h0IGF3YXksIG15IGV4cGVydCBtaW5kIGlzIGFscmVhZHkgY29uc2lkZXJpbmcgc2V2ZXJhbCBhc3BlY3RzOiBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgVVNCIGNvbnRyb2wgdHJhbnNmZXIgcGFyYWRpZ20sIGl0cyB0eXBpY2FsIHVzZSBjYXNlcywgYW5kLCBvZiBjb3Vyc2UsIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgY29yZSBmdW5jdGlvbiwgbGlrZWx5IHJlc2lkaW5nIGRlZXAgd2l0aGluIHRoZSBVU0IgZHJpdmVyIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgdGhlIHBvaW50IG9mIGNvbnRhY3QgZm9yIHRoZSBob3N0IHRvIGludGVyYWN0IHdpdGggdGhlIGRldmljZSBvbiBhIGNvbnRyb2wgZW5kcG9pbnQsIGFuZCwgaWYgbXkgaW50dWl0aW9uIGlzIGNvcnJlY3QsIGl0IHdpbGwgaW52b2x2ZSBjb25maWd1cmluZyBkZXZpY2Utc3BlY2lmaWMgcmVxdWVzdHMsIHNldHRpbmcgdXAgY29udHJvbCB0cmFuc2ZlciBwYXJhbWV0ZXJzLCBhbmQgaW5pdGlhdGluZyB0aGUgZGF0YSBleGNoYW5nZS4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBleHBlY3RlZCBwYXJhbWV0ZXJzOiB0aGUgVVNCIGRldmljZSBoYW5kbGUsIHRoZSByZXF1ZXN0IHR5cGUgYW5kIHJlY2lwaWVudCwgdGhlIHJlcXVlc3QgaXRzZWxmLCBkYXRhIGJ1ZmZlciwgYW5kIHBvdGVudGlhbCB0aW1lb3V0IHZhbHVlLiBJJiMzOTttIGFudGljaXBhdGluZyBlcnJvciBoYW5kbGluZyBzdHJhdGVnaWVzIGVtYmVkZGVkIHdpdGhpbiB0aGUgZnVuY3Rpb24sIGNvbnNpZGVyaW5nIGNvbW1vbiBmYWlsdXJlIG1vZGVzIGxpa2UgZGV2aWNlIGRpc2Nvbm5lY3RzLCBidWZmZXIgb3ZlcmZsb3dzLCBhbmQsIHBvdGVudGlhbGx5LCBpbmNvcnJlY3QgcmVxdWVzdCBwYXJhbWV0ZXJzLiBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBpbXBsZW1lbnRhdGlvbiBudWFuY2VzLCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgc2VlIGhvdyB3ZWxsIGl0JiMzOTtzIGRlc2lnbmVkIGZvciBjb25jdXJyZW5jeS4gVGhpcyBmdW5jdGlvbiBpcyB2aXRhbCBmb3IgaW5pdGlhbGl6aW5nIGFuZCBjb250cm9sbGluZyBkZXZpY2VzIC0gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0OTpcdCAqL1xuIDE1MDpcdGludCB1c2JfY29udHJvbF9tc2coc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUsIF9fdTggcmVxdWVzdCxcbiAxNTE6XHRcdFx0ICAgIF9fdTggcmVxdWVzdHR5cGUsIF9fdTE2IHZhbHVlLCBfX3UxNiBpbmRleCwgdm9pZCAqZGF0YSxcbiAxNTI6XHRcdFx0ICAgIF9fdTE2IHNpemUsIGludCB0aW1lb3V0KVxuIDE1MzpcdHtcbiAxNTQ6XHRcdHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmRyO1xuIDE1NTpcdFx0aW50IHJldDtcbiAxNTY6XHRcbiAxNTc6XHRcdGRyID0ga21hbGxvY19vYmooc3RydWN0IHVzYl9jdHJscmVxdWVzdCwgR0ZQX05PSU8pO1xuIDE1ODpcdFx0aWYgKCFkcilcbiAxNTk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTYwOlx0XG4gMTYxOlx0XHRkci1cdTAwM2ViUmVxdWVzdFR5cGUgPSByZXF1ZXN0dHlwZTtcbiAxNjI6XHRcdGRyLVx1MDAzZWJSZXF1ZXN0ID0gcmVxdWVzdDtcbiAxNjM6XHRcdGRyLVx1MDAzZXdWYWx1ZSA9IGNwdV90b19sZTE2KHZhbHVlKTtcbiAxNjQ6XHRcdGRyLVx1MDAzZXdJbmRleCA9IGNwdV90b19sZTE2KGluZGV4KTtcbiAxNjU6XHRcdGRyLVx1MDAzZXdMZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTtcbiAxNjY6XHRcbiAxNjc6XHRcdHJldCA9IHVzYl9pbnRlcm5hbF9jb250cm9sX21zZyhkZXYsIHBpcGUsIGRyLCBkYXRhLCBzaXplLCB0aW1lb3V0KTtcbiAxNjg6XHRcbiAxNjk6XHRcdC8qIExpbmdlciBhIGJpdCwgcHJpb3IgdG8gdGhlIG5leHQgY29udHJvbCBtZXNzYWdlLiAqL1xuIDE3MDpcdFx0aWYgKGRldi1cdTAwM2VxdWlya3MgXHUwMDI2IFVTQl9RVUlSS19ERUxBWV9DVFJMX01TRylcbiAxNzE6XHRcdFx0bXNsZWVwKDIwMCk7XG4gMTcyOlx0XG4gMTczOlx0XHRrZnJlZShkcik7XG4gMTc0Olx0XG4gMTc1Olx0XHRyZXR1cm4gcmV0O1xuIDE3NjpcdH1cbiAxNzc6XHRFWFBPUlRfU1lNQk9MX0dQTCh1c2JfY29udHJvbF9tc2cpO1xuIDE3ODpcdFxuIDE3OTpcdC8qKlxuIDE4MDpcdCAqIHVzYl9jb250cm9sX21zZ19zZW5kIC0gQnVpbGRzIGEgY29udHJvbCBcJiMzNDtzZW5kXCYjMzQ7IG1lc3NhZ2UsIHNlbmRzIGl0IG9mZiBhbmQgd2FpdHMgZm9yIGNvbXBsZXRpb25cbiAxODE6XHQgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSB1c2IgZGV2aWNlIHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG9cbiAxODI6XHQgKiBAZW5kcG9pbnQ6IGVuZHBvaW50IHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG9cbiAxODM6XHQgKiBAcmVxdWVzdDogVVNCIG1lc3NhZ2UgcmVxdWVzdCB2YWx1ZVxuIDE4NDpcdCAqIEByZXF1ZXN0dHlwZTogVVNCIG1lc3NhZ2UgcmVxdWVzdCB0eXBlIHZhbHVlXG4gMTg1Olx0ICogQHZhbHVlOiBVU0IgbWVzc2FnZSB2YWx1ZVxuIDE4NjpcdCAqIEBpbmRleDogVVNCIG1lc3NhZ2UgaW5kZXggdmFsdWVcbiAxODc6XHQgKiBAZHJpdmVyX2RhdGE6IHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gc2VuZFxuIDE4ODpcdCAqIEBzaXplOiBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGRhdGEgdG8gc2VuZFxuIDE4OTpcdCAqIEB0aW1lb3V0OiB0aW1lIGluIG1zZWNzIHRvIHdhaXQgZm9yIHRoZSBtZXNzYWdlIHRvIGNvbXBsZXRlIGJlZm9yZSB0aW1pbmcgb3V0XG4gMTkwOlx0ICogQG1lbWZsYWdzOiB0aGUgZmxhZ3MgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBidWZmZXJzXG4gMTkxOlx0ICpcbiAxOTI6XHQgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0ICgpXG4gMTkzOlx0ICpcbiAxOTQ6XHQgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgY29udHJvbCBtZXNzYWdlIHRvIGEgc3BlY2lmaWVkIGVuZHBvaW50IHRoYXQgaXMgbm90XG4gMTk1Olx0ICogZXhwZWN0ZWQgdG8gZmlsbCBpbiBhIHJlc3BvbnNlIChpLmUuIGEgXCYjMzQ7c2VuZCBtZXNzYWdlXCYjMzQ7KSBhbmQgd2FpdHMgZm9yIHRoZVxuIDE5NjpcdCAqIG1lc3NhZ2UgdG8gY29tcGxldGUsIG9yIHRpbWVvdXQuXG4gMTk3Olx0ICpcbiAxOTg6XHQgKiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gZnJvbSB3aXRoaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuIElmIHlvdSBuZWVkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjAwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGB1c2JfaW50ZXJuYWxfY29udHJvbF9tc2dgOgoKKipEaXZpbmcgaW50byBgdXNiX2ludGVybmFsX2NvbnRyb2xfbXNnYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGlzIGB1c2JfaW50ZXJuYWxfY29udHJvbF9tc2dgIGZ1bmN0aW9uLiBJIHJlY29nbml6ZSB0aGUgbmFtaW5nIGNvbnZlbnRpb24gaW1tZWRpYXRlbHksIGl0IHN1Z2dlc3RzIHRoYXQgdGhpcyBpcyByZWxhdGVkIHRvIFVTQiBjb21tdW5pY2F0aW9uLCBhbmQgc3BlY2lmaWNhbGx5LCB0byBjb250cm9sIG1lc3NhZ2VzLiBUaGUgJiMzNDtpbnRlcm5hbCYjMzQ7IHBhcnQgaXMgaW50ZXJlc3RpbmcgLSBpdCBpbXBsaWVzIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IG5vdCBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIHByb2JhYmx5IHJlc2lkaW5nIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIFVTQiBzdWJzeXN0ZW0uIEkmIzM5O20gZ3Vlc3NpbmcgaXQmIzM5O3MgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIGhhbmRsaW5nIHRob3NlIGxvdy1sZXZlbCByZXF1ZXN0cyB0aGF0IGNvbmZpZ3VyZSBkZXZpY2VzLCByZXRyaWV2ZSBkZXNjcmlwdG9ycywgYW5kIG1hbmFnZSBlbmRwb2ludHMuCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IGl0JiMzOTtzIGNhbGxlZCwgd2hhdCBhcmd1bWVudHMgaXQgdGFrZXMsIGFuZCBjcnVjaWFsbHksIHdoYXQgY29udGV4dCBpdCBvcGVyYXRlcyBpbiAoZS5nLiwgaW50ZXJydXB0IGNvbnRleHQsIHByb2Nlc3MgY29udGV4dCkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIGNvbnRyb2wgdHJhbnNmZXIgcHJvY2Vzcy4gRG9lcyBpdCBoYW5kbGUgc2V0dXAgcGFja2V0cyBkaXJlY3RseT8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIHNwZWNpZmljIGhhcmR3YXJlIHJlZ2lzdGVycyBvciBkYXRhIHN0cnVjdHVyZXM/IEFyZSB0aGVyZSBhbnkgbm90YWJsZSBlcnJvciBjb25kaXRpb25zIG9yIGVkZ2UgY2FzZXMgaXQmIzM5O3MgZGVzaWduZWQgdG8gbWFuYWdlPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGl0IHdpbGwgbGlrZWx5IGFic3RyYWN0IHNvbWUgb2YgdGhlIG1vcmUgY29tcGxleCBpbnRlcmFjdGlvbnMsIG1ha2luZyBpdCBlYXNpZXIgZm9yIHRoZSBoaWdoZXItbGV2ZWwgVVNCIGRyaXZlcnMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gS25vd2luZyB0aGlzIGlzIGtleSB0byBkZWJ1Z2dpbmcgYW5kIGV4dGVuZGluZyBVU0IgZnVuY3Rpb25hbGl0eS4gVGltZSB0byBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ4Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRzdGF0aWMgaW50IHVzYl9pbnRlcm5hbF9jb250cm9sX21zZyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldixcbiAxMDI6XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgcGlwZSxcbiAxMDM6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjbWQsXG4gMTA0Olx0XHRcdFx0XHQgICAgdm9pZCAqZGF0YSwgaW50IGxlbiwgaW50IHRpbWVvdXQpXG4gMTA1Olx0e1xuIDEwNjpcdFx0c3RydWN0IHVyYiAqdXJiO1xuIDEwNzpcdFx0aW50IHJldHY7XG4gMTA4Olx0XHRpbnQgbGVuZ3RoO1xuIDEwOTpcdFxuIDExMDpcdFx0dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfTk9JTyk7XG4gMTExOlx0XHRpZiAoIXVyYilcbiAxMTI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTEzOlx0XG4gMTE0Olx0XHR1c2JfZmlsbF9jb250cm9sX3VyYih1cmIsIHVzYl9kZXYsIHBpcGUsICh1bnNpZ25lZCBjaGFyICopY21kLCBkYXRhLFxuIDExNTpcdFx0XHRcdCAgICAgbGVuLCB1c2JfYXBpX2Jsb2NraW5nX2NvbXBsZXRpb24sIE5VTEwpO1xuIDExNjpcdFxuIDExNzpcdFx0cmV0diA9IHVzYl9zdGFydF93YWl0X3VyYih1cmIsIHRpbWVvdXQsIFx1MDAyNmxlbmd0aCwgZmFsc2UpO1xuIDExODpcdFx0aWYgKHJldHYgXHUwMDNjIDApXG4gMTE5Olx0XHRcdHJldHVybiByZXR2O1xuIDEyMDpcdFx0ZWxzZVxuIDEyMTpcdFx0XHRyZXR1cm4gbGVuZ3RoO1xuIDEyMjpcdH1cbiAxMjM6XHRcbiAxMjQ6XHQvKipcbiAxMjU6XHQgKiB1c2JfY29udHJvbF9tc2cgLSBCdWlsZHMgYSBjb250cm9sIHVyYiwgc2VuZHMgaXQgb2ZmIGFuZCB3YWl0cyBmb3IgY29tcGxldGlvblxuIDEyNjpcdCAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIHVzYiBkZXZpY2UgdG8gc2VuZCB0aGUgbWVzc2FnZSB0b1xuIDEyNzpcdCAqIEBwaXBlOiBlbmRwb2ludCBcJiMzNDtwaXBlXCYjMzQ7IHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG9cbiAxMjg6XHQgKiBAcmVxdWVzdDogVVNCIG1lc3NhZ2UgcmVxdWVzdCB2YWx1ZVxuIDEyOTpcdCAqIEByZXF1ZXN0dHlwZTogVVNCIG1lc3NhZ2UgcmVxdWVzdCB0eXBlIHZhbHVlXG4gMTMwOlx0ICogQHZhbHVlOiBVU0IgbWVzc2FnZSB2YWx1ZVxuIDEzMTpcdCAqIEBpbmRleDogVVNCIG1lc3NhZ2UgaW5kZXggdmFsdWVcbiAxMzI6XHQgKiBAZGF0YTogcG9pbnRlciB0byB0aGUgZGF0YSB0byBzZW5kXG4gMTMzOlx0ICogQHNpemU6IGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZGF0YSB0byBzZW5kXG4gMTM0Olx0ICogQHRpbWVvdXQ6IHRpbWUgaW4gbXNlY3MgdG8gd2FpdCBmb3IgdGhlIG1lc3NhZ2UgdG8gY29tcGxldGUgYmVmb3JlIHRpbWluZyBvdXRcbiAxMzU6XHQgKlxuIDEzNjpcdCAqIENvbnRleHQ6IHRhc2sgY29udGV4dCwgbWlnaHQgc2xlZXAuXG4gMTM3Olx0ICpcbiAxMzg6XHQgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgc2ltcGxlIGNvbnRyb2wgbWVzc2FnZSB0byBhIHNwZWNpZmllZCBlbmRwb2ludCBhbmRcbiAxMzk6XHQgKiB3YWl0cyBmb3IgdGhlIG1lc3NhZ2UgdG8gY29tcGxldGUsIG9yIHRpbWVvdXQuXG4gMTQwOlx0ICpcbiAxNDE6XHQgKiBEb24mIzM5O3QgdXNlIHRoaXMgZnVuY3Rpb24gZnJvbSB3aXRoaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuIElmIHlvdSBuZWVkXG4gMTQyOlx0ICogYW4gYXN5bmNocm9ub3VzIG1lc3NhZ2UsIG9yIG5lZWQgdG8gc2VuZCBhIG1lc3NhZ2UgZnJvbSB3aXRoaW4gaW50ZXJydXB0XG4gMTQzOlx0ICogY29udGV4dCwgdXNlIHVzYl9zdWJtaXRfdXJiKCkuIElmIGEgdGhyZWFkIGluIHlvdXIgZHJpdmVyIHVzZXMgdGhpcyBjYWxsLFxuIDE0NDpcdCAqIG1ha2Ugc3VyZSB5b3VyIGRpc2Nvbm5lY3QoKSBtZXRob2QgY2FuIHdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlLiBTaW5jZSB5b3VcbiAxNDU6XHQgKiBkb24mIzM5O3QgaGF2ZSBhIGhhbmRsZSBvbiB0aGUgVVJCIHVzZWQsIHlvdSBjYW4mIzM5O3QgY2FuY2VsIHRoZSByZXF1ZXN0LlxuIDE0NjpcdCAqXG4gMTQ3Olx0ICogUmV0dXJuOiBJZiBzdWNjZXNzZnVsLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkLiBPdGhlcndpc2UsIGEgbmVnYXRpdmVcbiAxNDg6XHQgKiBlcnJvciBudW1iZXIuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzA2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBaZXJvLUxlbmd0aCBVU0IgVHJhbnNmZXJzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGEgcG90ZW50aWFsIGlzc3VlIHdpdGggemVyby1sZW5ndGggVVNCIHRyYW5zZmVycyBrZWVwcyBjb21pbmcgdXAgaW4gbXkgbWluZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBgdXNiX2ZpbGxfY29udHJvbF91cmJgIGhhbmRsZXMgYSBgbGVuYCBvZiB6ZXJvLCBhbmQgd2hldGhlciBwYXNzaW5nIGBaRVJPX1NJWkVfUFRSYCBhcyB0aGUgYGRhdGFgIHBvaW50ZXIgaXMgc2FmZS4gSW5pdGlhbGx5LCBpdCBzZWVtcyBoYXJtbGVzcy4gYHVzYl9maWxsX2NvbnRyb2xfdXJiYCBqdXN0IHNldHMgdGhlIFVSQiYjMzk7cyBgdHJhbnNmZXJfYnVmZmVyYCBhbmQgYHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGhgIGZpZWxkcy4gV2hlbiBgdXNiX3N0YXJ0X3dhaXRfdXJiYCBzdWJtaXRzIHRoZSBVUkIsIHRoZSBIQ0Qgc2hvdWxkLCBpbiB0aGVvcnksIGp1c3Qgc2VlIGB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID09IDBgIGFuZCBza2lwIHRoZSBidWZmZXIsIGJ1dCBJIGhhdmUgYSBuYWdnaW5nIGZlZWxpbmcuCgpOb3csIEkgcmVtZW1iZXIgc2VlaW5nIGBrbWFsbG9jKDApYCBiZWluZyBjYWxsZWQsIHdoaWNoICpyZXR1cm5zKiBgWkVST19TSVpFX1BUUmAuIEluIHRoaXMgcGFydGljdWxhciBjYXNlLCBgcjgxNTJfY29udHJvbF9tc2dgIGdldHMgYSB6ZXJvLXNpemVkIGJ1ZmZlciBmcm9tIGBrbWFsbG9jYCBhbmQgdGhlbiBwYXNzZXMgaXQgYWxsIHRoZSB3YXkgZG93biB0aGUgY2hhaW4gdG8gYHVzYl9maWxsX2NvbnRyb2xfdXJiYCBhbmQgZmluYWxseSBgdXNiX3N0YXJ0X3dhaXRfdXJiYC4gSXMgdGhpcyByZWFsbHkgZ29pbmcgdG8gYmUgc2FmZT8gSSBuZWVkIHRvIGJlIHN1cmUuCgpJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGlmIGBzaXplYCBpcyB6ZXJvIGluaXRpYWxseSwgYGdlbmVyaWNfb2NwX3JlYWRgIHdpbGwgcGFzcyB6ZXJvIHRvIGBnZXRfcmVnaXN0ZXJzYC4gVGhpcyB3aG9sZSB0aGluZyBoaW5nZXMgb24gd2hldGhlciBgZ2VuZXJpY19vY3BfcmVhZGAgKmNhbiogYmUgY2FsbGVkIHdpdGggYHNpemUgPSAwYC4gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBwbGFjZXMgd2hlcmUgYGdlbmVyaWNfb2NwX3JlYWRgIGdldHMgY2FsbGVkIGFuZCBkZXRlcm1pbmUgaWYgdGhhdCYjMzk7cyBwb3NzaWJsZS4gSSYjMzk7dmUgZ290IHRvIGVuc3VyZSB0aGUgY29kZSYjMzk7cyByb2J1c3QgYWdhaW5zdCB0aGVzZSB6ZXJvLWxlbmd0aCB0cmFuc2ZlcnMuIE90aGVyd2lzZSwgdGhpcyBjb3VsZCBiZSBhIG5hc3R5IGJ1ZyBpbiB0aGUgbWFraW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5lcmljX29jcF9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTQxMj1zdGF0aWMgdm9pZCBydGxfc2V0X3VucGx1ZyhzdHJ1Y3QgcjgxNTIgKnRwKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0MTctXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNDE4OnN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQxOS1cdFx0XHQgICAgdm9pZCAqZGF0YSwgdTE2IHR5cGUpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTUyND1pbnQgcGxhX29jcF9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTI1LXtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1MjY6XHRyZXR1cm4gZ2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemUsIGRhdGEsIE1DVV9UWVBFX1BMQSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTI3LX1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTQxPXN0YXRpYyB1MzIgb2NwX3JlYWRfZHdvcmQoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleClcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTQ0LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU0NTpcdGdlbmVyaWNfb2NwX3JlYWQodHAsIGluZGV4LCBzaXplb2YoZGF0YSksIFx1MDAyNmRhdGEsIHR5cGUpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU0Ni1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTU3PXN0YXRpYyB1MTYgb2NwX3JlYWRfd29yZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NjYtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNTY3Olx0Z2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemVvZih0bXApLCBcdTAwMjZ0bXAsIHR5cGUgfCBieWVuKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NjgtXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTU5Nz1zdGF0aWMgdTggb2NwX3JlYWRfYnl0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MDQtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNjA1Olx0Z2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemVvZih0bXApLCBcdTAwMjZ0bXAsIHR5cGUpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTYwNi1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz05MDc4PXN0YXRpYyB2b2lkIHJ0bDgxNTJfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05MDg2LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6OTA4NzpcdGdlbmVyaWNfb2NwX3JlYWQodHAsIFBMQV9UQUxMWUNOVCwgc2l6ZW9mKHRhbGx5KSwgXHUwMDI2dGFsbHksIE1DVV9UWVBFX1BMQSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05MDg4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEzNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM2NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUlRMODE1MiBEcml2ZXIgUGF0Y2ggZm9yIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBFeHBvc3VyZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2ggZm9yIHRoZSBSVEw4MTUyIGRyaXZlciwgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgd2h5IGl0IG1pZ2h0IGJlIGZsYWdnaW5nIGEgS01TQU4gY29uY2Vybi4gVGhlIG1haW4gaXNzdWUgYXBwZWFycyB0byBiZSBhcm91bmQgaG93IHRoZSBjb2RlIGhhbmRsZXMgcmVhZC93cml0ZSBvcGVyYXRpb25zIHdpdGggcG90ZW50aWFsbHkgZGlmZmVyaW5nIHNpemVzIGFuZCBieXRlIGVuYWJsZSBjb25maWd1cmF0aW9ucy4KClRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHNlZW1zIHRvIHN0ZW0gZnJvbSBob3cgYGdlbmVyaWNfb2NwX3dyaXRlYCBhbmQgYGdlbmVyaWNfb2NwX3JlYWRgIGludGVyYWN0IHdpdGggYHNldF9yZWdpc3RlcnNgIGFuZCBgZ2V0X3JlZ2lzdGVyc2AsIHJlc3BlY3RpdmVseS4gVGhlIG5ldyBjb2RlIGluIGBnZW5lcmljX29jcF93cml0ZWAgaGFzIGFsdGVyZWQgdGhlIGxvZ2ljLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSBpZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgYSBzaXR1YXRpb24gd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY2FuIGxlYWsuCgpJIGluaXRpYWxseSBob25lZCBpbiBvbiBhIGNhc2Ugd2hlcmUgYHNpemVgIG1pZ2h0IGJlIHJlZHVjZWQgdG8gemVybyBkdWUgdG8gYSBjb25kaXRpb25hbCBjaGVjayAoYGJ5ZW4gIT0gQllURV9FTl9EV09SRGApLCB3aGljaCBjYXVzZXMgYW4gZXh0cmEgY2FsbCB3aXRoIGEgc2l6ZSBvZiB6ZXJvLiAgQSB6ZXJvIHNpemUgd3JpdGUgKG9yIHJlYWQpLCBieSBpdHNlbGYsIGlzbiYjMzk7dCBhICpidWcqLCBiZWNhdXNlIGl0IGRvZXNuJiMzOTt0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBkdWUgdG8gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBsaWtlIGBrbWVtZHVwYCBhbmQgYGttYWxsb2NgIHJldHVybmluZyBgWkVST19TSVpFX1BUUmAuCgpIb3dldmVyLCB0aGUgbW9yZSBjb25jZXJuaW5nIGlzc3VlIGlzIHNob3J0IHJlYWRzLiBUaGUgYGdldF9yZWdpc3RlcnNgIGZ1bmN0aW9uIHVzZXMgYGttYWxsb2NgIHRvIGFsbG9jYXRlIGEgYnVmZmVyLCBhbmQgdGhlbiBjYWxscyBgcjgxNTJfY29udHJvbF9tc2dgIHRvIHJlYWQgZGF0YSBmcm9tIHRoZSBkZXZpY2UuIEEgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCB0aGUgZGV2aWNlICpjb3VsZCogcmV0dXJuIGZld2VyIGJ5dGVzIHRoYW4gcmVxdWVzdGVkLiAgSWYgYHI4MTUyX2NvbnRyb2xfbXNnYCB0cmFuc2ZlcnMgZmV3ZXIgYnl0ZXMgdGhhbiB0aGUgYHNpemVgIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jYCwgdGhlIHJlbWFpbmRlciBvZiB0aGUgYnVmZmVyIHdpbGwgY29udGFpbiB1bmluaXRpYWxpemVkIGhlYXAgbWVtb3J5LiBTdWJzZXF1ZW50bHksIHRoZSBgbWVtY3B5YCBpbiBgZ2V0X3JlZ2lzdGVyc2AgY29waWVzIHRoZSBmdWxsIGBzaXplYCBieXRlcyBvZiBkYXRhIGZyb20gYHRtcGAgdG8gdGhlIG91dHB1dCBgZGF0YWAgYnVmZmVyLiBUaGlzIHRyYW5zZmVyIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGxlYWQgdG8gYSBLTVNBTiBpc3N1ZSBpZiB0aGUgYGRhdGFgIGJ1ZmZlciBpcyB1c2VkIG9yIHNlbnQgdG8gdXNlcnNwYWNlLgoKVGhlIHBhdGNoIGl0c2VsZiBkb2VzIG5vdCBkaXJlY3RseSAqaW50cm9kdWNlKiB0aGUgaXNzdWUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgd2l0aCB0aGUgbG9vcCBjaGFuZ2VzLiAgSG93ZXZlciwgYmVjYXVzZSB0aGUgY2hhbmdlcyBpbiB0aGUgbmV3IGNvZGUgY2hhbmdlIGhvdyB0aGUgYGdldF9yZWdpc3RlcnNgIGlzIGNhbGxlZCwgYSBLTVNBTiBzZXNzaW9uIG1pZ2h0IGJlIGp1c3RpZmllZCBkdWUgdG8gdGhlIGxvb3AgY2hhbmdlIHJlZmFjdG9yaW5nLCBhbmQgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrYWdlIHRoYXQgd2FzIG5vdCBhZGRyZXNzZWQgcHJldmlvdXNseS4KClNvLCBpbiBzdW1tYXJ5LCBJIHRoaW5rIHRoZSBzeXpib3QgZmxhZyBpcyByZWFzb25hYmxlLiBUaGUgZXhpc3RpbmcgY29kZSBhbHJlYWR5IGhhcyBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBkdWUgdG8gc2hvcnQgcmVhZHMgaW4gYGdldF9yZWdpc3RlcnNgLiAgVGhlIGxvb3AgbW9kaWZpY2F0aW9ucyBtaWdodCBoYXZlIGEgbGltaXRlZCBlZmZlY3QsIGluIHRoZSBuZXcgYW5kIG9sZCBjb2RlLCBvbiB0aGUgZXhpc3RpbmcgY29uZGl0aW9uIG9mIGhhdmluZyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGFuZCBjb3B5IG9wZXJhdGlvbi4gIEEgS01TQU4gZnV6emluZyBzZXNzaW9uIHdvdWxkIGJlIGp1c3RpZmllZCB0byBjYXRjaCBwb3RlbnRpYWwgcmVncmVzc2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbmVyaWNfb2NwX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTQxOD1zdGF0aWMgaW50IGdlbmVyaWNfb2NwX3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgc2l6ZSxcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDUyLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTQ1MzpzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbixcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0NTQtXHRcdFx0ICAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSwgdTE2IHR5cGUpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTUzMD1pbnQgcGxhX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sIHUxNiBzaXplLCB2b2lkICpkYXRhKVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzMS17XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNTMyOlx0cmV0dXJuIGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBpbmRleCwgYnl0ZWVuLCBzaXplLCBkYXRhLCBNQ1VfVFlQRV9QTEEpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzMy19XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTUzNj1pbnQgdXNiX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sIHUxNiBzaXplLCB2b2lkICpkYXRhKVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzNy17XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNTM4Olx0cmV0dXJuIGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBpbmRleCwgYnl0ZWVuLCBzaXplLCBkYXRhLCBNQ1VfVFlQRV9VU0IpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzOS19XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTU1MD1zdGF0aWMgdm9pZCBvY3Bfd3JpdGVfZHdvcmQoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleCwgdTMyIGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU1My1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1NTQ6XHRnZW5lcmljX29jcF93cml0ZSh0cCwgaW5kZXgsIEJZVEVfRU5fRFdPUkQsIHNpemVvZih0bXApLCBcdTAwMjZ0bXAsIHR5cGUpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU1NS19XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTU3Nj1zdGF0aWMgdm9pZCBvY3Bfd3JpdGVfd29yZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4LCB1MzIgZGF0YSlcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTkzLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU5NDpcdGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBpbmRleCwgYnllbiwgc2l6ZW9mKHRtcCksIFx1MDAyNnRtcCwgdHlwZSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTk1LX1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNjE0PXN0YXRpYyB2b2lkIG9jcF93cml0ZV9ieXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgsIHUzMiBkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MzEtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNjMyOlx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieWVuLCBzaXplb2YodG1wKSwgXHUwMDI2dG1wLCB0eXBlKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MzMtfVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTQ1MTE9c3RhdGljIHZvaWQgcnRsX2NsZWFyX2JwKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTQ1NDktXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo0NTUwOlx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIFBMQV9CUF8wLCBCWVRFX0VOX0RXT1JELCBicF9udW0gXHUwMDNjXHUwMDNjIDEsIGJwLCB0eXBlKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTQ1NTEtXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NTMwND1zdGF0aWMgdm9pZCBydGxfcmFtX2NvZGVfc3BlZWRfdXAoc3RydWN0IHI4MTUyICp0cCwgc3RydWN0IGZ3X3BoeV9zcGVlZF91cCAqcGh5LCBib29sIHdhaXQpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTMzNC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjUzMzU6XHRcdGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBfX2xlMTZfdG9fY3B1KHBoeS1cdTAwM2Vmd19yZWcpLCAweGZmLCBzaXplLCBkYXRhLCBNQ1VfVFlQRV9VU0IpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTMzNi1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz01NDg1PXN0YXRpYyB2b2lkIHJ0bDgxNTJfZndfbWFjX2FwcGx5KHN0cnVjdCByODE1MiAqdHAsIHN0cnVjdCBmd19tYWMgKm1hYylcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01NTI0LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NTUyNTpcdGlmIChnZW5lcmljX29jcF93cml0ZSh0cCwgX19sZTE2X3RvX2NwdShtYWMtXHUwMDNlZndfcmVnKSwgMHhmZiwgbGVuZ3RoLFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTUyNi1cdFx0XHQgICAgICBkYXRhLCB0eXBlKSBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTU1MzQtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo1NTM1Olx0aWYgKGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBfX2xlMTZfdG9fY3B1KG1hYy1cdTAwM2VicF9zdGFydCksIEJZVEVfRU5fRFdPUkQsXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01NTM2LVx0XHRcdCAgICAgIEFMSUdOKF9fbGUxNl90b19jcHUobWFjLVx1MDAzZWJwX251bSkgXHUwMDNjXHUwMDNjIDEsIDQpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg3MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDExMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgZ2VuZXJpY19vY3Bfd3JpdGVgIEZ1bmN0aW9uIGFuZCBpdHMgUmVjZW50IE1vZGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBiYWNrIGludG8gdGhpcyBgZ2VuZXJpY19vY3Bfd3JpdGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGlzIGNvcnJlY3RseSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgcmVjZW50IGNoYW5nZS4gRmlyc3QsIGxldCBtZSB3YWxrIHRocm91Z2ggdGhlIGNvZGUgYXMgaXQgc3RhbmRzLiBJdCB0YWtlcyBhIGRldmljZSBwb2ludGVyIGB0cGAsIGFuIGluZGV4IGBpbmRleGAsIGEgYnl0ZSBlbmFibGUgdmFsdWUgYGJ5dGVlbmAsIGEgc2l6ZSBgc2l6ZWAsIGRhdGEgcG9pbnRlciBgZGF0YWAsIGFuZCBhIHR5cGUgYHR5cGVgLiBUaGUgc2l6ZSBpcyBjaGVja2VkIHRvIGVuc3VyZSBpdCBpc24mIzM5O3Qgb3ZlciBhIGxpbWl0LCBhbmQgdGhlcmUgYXJlIHNvbWUgc3BlY2lmaWMgbWFza3MgYW5kIFVTQiB0eXBlIGNvbnNpZGVyYXRpb25zIGZvciB0aGUgbWFzayB2YXJpYWJsZS4gIFRoZXJlIGFyZSBhIHNlcmllcyBvZiBpbml0aWFsIGVycm9yIGNoZWNrcy4gTm93LCB0aGUgYGJ5dGVlbmAgdmFsdWUgaXMgaGFuZGxlZCwgd2hpY2ggZGV0ZXJtaW5lcyBob3cgbWFueSBieXRlcyBvZiBhIERXT1JEIGFyZSBlbmFibGVkLgoKT2theSwgc28gaWYgYGJ5dGVlbmAgaXMgbm90IHRoZSBkZWZhdWx0IGBCWVRFX0VOX0RXT1JEYCwgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGZpcnN0IERXT1JEIHdpdGggdGhlIHNwZWNpZmljIGBieXRlZW5gIHZhbHVlLiBUaGUgb3JpZ2luYWwgbG9naWMgY29udGFpbmVkIGEgZGVjcmVtZW50IHRvIHRoZSBzaXplIGFuZCBwb2ludGVyIGZvciB1c2UgbGF0ZXIgaW4gdGhlIGZ1bmN0aW9uLgoKTm93LCB0aGVyZSYjMzk7cyBhIGxvb3AgdGhhdCBpdGVyYXRlcyB0byB3cml0ZSB0aGUgcmVtYWluaW5nIGRhdGEuIFRoZSB1cGRhdGVkIGNvZGUganVzdCB3cml0ZXMgaW4gdGhlIHJlbWFpbmluZyBibG9ja3MsIHdpdGggYSBsaW1pdCBvZiA1MTIgYnl0ZXMuIE9rYXksIHRoZSBjaGFuZ2UgbG9va3MgbGlrZSBpdCBqdXN0IHJlbW92ZWQgdGhlIGJyYW5jaCB0byBjaGVjayBpZiB0aGUgYHNpemVgIHdhcyBzdGlsbCBncmVhdGVyIHRoYW4gYGxpbWl0YC4gU28gd2Ugbm93IGhhdmUgYSBzaW5nbGUgYHdoaWxlYCBsb29wLCB0aGF0IHNob3VsZCBiZSBsZXNzIGNvbXBsZXggdGhhbiB0aGUgcHJldmlvdXMgb25lIHdpdGggdGhlIGBpZi9lbHNlYCBpbnNpZGUgaXQuIFRoZXJlJiMzOTtzIGEgY2hlY2sgZm9yIGEgLUVOT0RFViBlcnJvciB3aGljaCBzaG91bGQgYWxzbyBoYW5kbGUgc2V0dGluZyB0aGUgdW5wbHVnIHN0YXRlLiBGaW5hbGx5IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBlcnJvciBzdGF0dXMuCgpXYWl0IGEgc2Vjb25kLi4uSSYjMzk7bSBzZWVpbmcgc29tZXRoaW5nLiBJIHdhcyBjZXJ0YWluIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhbiBvdXRlciBgaWYgKHNpemUpYCBjb25kaXRpb24gdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBiZSBjYWxsaW5nIGBzZXRfcmVnaXN0ZXJzYCBhdCBhbGwsIGFuZCBpdCYjMzk7cyBtaXNzaW5nIGluIHRoZSBjdXJyZW50IHZlcnNpb24uIFRoaXMgbG9va3MgbGlrZSBhIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvcjgxNTIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ4MDpcdFxuMTQ4MTpcdFx0XHRpbmRleCAmIzQzOz0gNDtcbjE0ODI6XHRcdFx0ZGF0YSAmIzQzOz0gNDtcbjE0ODM6XHRcdFx0c2l6ZSAtPSA0O1xuMTQ4NDpcdFx0fVxuMTQ4NTpcdFxuMTQ4NjpcdFx0aWYgKHNpemUpIHtcbjE0ODc6XHRcdFx0YnllbiA9IGJ5dGVlbl9lbmQgfCAoYnl0ZWVuX2VuZCBcdTAwM2VcdTAwM2UgNCk7XG4xNDg4Olx0XG4xNDg5Olx0XHRcdC8qIFNwbGl0IHRoZSBsYXN0IERXT1JEIGlmIHRoZSBieXRlX2VuIGlzIG5vdCAweGZmICovXG4xNDkwOlx0XHRcdGlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpXG4xNDkxOlx0XHRcdFx0c2l6ZSAtPSA0O1xuMTQ5MjpcdFxuMTQ5MzpcdFx0XHR3aGlsZSAoc2l6ZSBcdTAwM2UgbGltaXQpIHtcbjE0OTQ6XHRcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXG4xNDk1Olx0XHRcdFx0XHRcdCAgICBsaW1pdCwgZGF0YSk7XG4xNDk2Olx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0OTc6XHRcdFx0XHRcdGdvdG8gZXJyb3IxO1xuMTQ5ODpcdFxuMTQ5OTpcdFx0XHRcdGluZGV4ICYjNDM7PSBsaW1pdDtcbjE1MDA6XHRcdFx0XHRkYXRhICYjNDM7PSBsaW1pdDtcbjE1MDE6XHRcdFx0XHRzaXplIC09IGxpbWl0O1xuMTUwMjpcdFx0XHR9XG4xNTAzOlx0XG4xNTA0Olx0XHRcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgQllURV9FTl9EV09SRCwgc2l6ZSwgZGF0YSk7XG4xNTA1Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xNTA2Olx0XHRcdFx0Z290byBlcnJvcjE7XG4xNTA3Olx0XG4xNTA4Olx0XHRcdGluZGV4ICYjNDM7PSBzaXplO1xuMTUwOTpcdFx0XHRkYXRhICYjNDM7PSBzaXplO1xuMTUxMDpcdFxuMTUxMTpcdFx0XHQvKiBTZXQgdGhlIGxhc3QgRFdPUkQgKi9cbjE1MTI6XHRcdFx0aWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRClcbjE1MTM6XHRcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSB8IGJ5ZW4sIDQsIGRhdGEpO1xuMTUxNDpcdFx0fVxuMTUxNTpcdFxuMTUxNjpcdGVycm9yMTpcbjE1MTc6XHRcdGlmIChyZXQgPT0gLUVOT0RFVilcbjE1MTg6XHRcdFx0cnRsX3NldF91bnBsdWcodHApO1xuMTUxOTpcdFxuMTUyMDpcdFx0cmV0dXJuIHJldDtcbjE1MjE6XHR9XG4xNTIyOlx0XG4xNTIzOlx0c3RhdGljIGlubGluZVxuMTUyNDpcdGludCBwbGFfb2NwX3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgc2l6ZSwgdm9pZCAqZGF0YSlcbjE1MjU6XHR7XG4xNTI2Olx0XHRyZXR1cm4gZ2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemUsIGRhdGEsIE1DVV9UWVBFX1BMQSk7XG4xNTI3Olx0fVxuMTUyODpcdFxuMTUyOTpcdHN0YXRpYyBpbmxpbmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwOTAKCQkJCQkJCW91dHB1dDogMzQxCgkJCQkJCQl0aG91Z2h0czogMjUxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQYXRjaCBmb3IgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IHJlZmFjdG9yaW5nIHRoZSBsb29wIHN0cnVjdHVyZXMgdXNlZCBmb3IgaGFuZGxpbmcgcmVnaXN0ZXIgcmVhZHMgYW5kIHdyaXRlcyBpbiB0aGUgcjgxNTIgZHJpdmVyLCBjaHVua2luZyB0aGUgZGF0YSBpbnRvIDUxMi1ieXRlIGJsb2Nrcy4gTXkgcHJpbWFyeSBjb25jZXJuLCBnaXZlbiB0aGUgcHJvbXB0LCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBvciBleHBvc2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGdlbmVyaWNfb2NwX3dyaXRlYC4gVGhlIGNyaXRpY2FsIGNoYW5nZSBoZXJlIGlzIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRoZSAmIzM0O2xhc3QgY2h1bmsuJiMzNDsgSW4gdGhlIG9yaWdpbmFsIGNvZGUsIGlmIGBzaXplYCB3YXMgNCBhbmQgYGJ5ZW5gIHdhc24mIzM5O3QgYEJZVEVfRU5fRFdPUkRgLCB0aGUgbG9vcCB3YXMgKnNraXBwZWQqLCBhbmQgYSBzaW5nbGUgd3JpdGUgb2YgNCBieXRlcyBoYXBwZW5lZC4gTm93LCB0aGUgcmVmYWN0b3JlZCBjb2RlICplbnRlcnMqIGEgbG9vcCAoYmVjYXVzZSBgc2l6ZWAgYmVjYW1lIDAgYWZ0ZXIgdGhlIGNvbmRpdGlvbmFsIHN1YnRyYWN0aW9uLCBhbmQgYHdoaWxlIChzaXplICZndDsgbGltaXQpYCBpcyBmYWxzZSwgYW5kIHRoZXJlZm9yZSBza2lwcGVkKSwgZm9sbG93ZWQgYnkgYSB6ZXJvLWxlbmd0aCBjb250cm9sIG1lc3NhZ2UuIFRoaXMgbWVhbnMgYHNldF9yZWdpc3RlcnNgICppcyogY2FsbGVkIHdpdGggYHNpemUgPSAwYC4gSG93ZXZlciwgdGhpcyBpcyBOT1QgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLiBXaGVuIGBzaXplYCBpcyB6ZXJvLCBga21lbWR1cGAgcmV0dXJucyBgWkVST19TSVpFX1BUUmAsIHdoaWNoIGlzIHNhZmUuIFRoZSBzdWJzZXF1ZW50IGB1c2JfY29udHJvbF9tc2dgIGNhbGwgd2l0aCBgWkVST19TSVpFX1BUUmAgd29uJiMzOTt0IHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBqdXN0IHNlbmRzIGEgMC1sZW5ndGggY29udHJvbCBtZXNzYWdlLCB3aGljaCBpcyB2YWxpZCBVU0IgYmVoYXZpb3IgKGEgemVyby1sZW5ndGggd3JpdGUpLiBUaGlzIG1pZ2h0IGJlIGEgZnVuY3Rpb25hbCBidWcgaWYgdGhlIGRldmljZSBtaXNpbnRlcnByZXRzIHRoZSAwLWxlbmd0aCBtZXNzYWdlIGJ1dCBpdCYjMzk7cyBub3QgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgZ2VuZXJpY19vY3BfcmVhZGAuIEluIHRoaXMgZnVuY3Rpb24sIHRoZSBpbml0aWFsIHNpemUgaXMgdmFsaWRhdGVkIHRvIGJlIGEgbXVsdGlwbGUgb2YgNCAqYW5kKiBub24temVyby4gVGhlIGxvb3AgY29uZGl0aW9uIGB3aGlsZSAoc2l6ZSAmZ3Q7IGxpbWl0KWAgb25seSBleGVjdXRlcyBpZiBgc2l6ZWAgaXMgZ3JlYXRlciB0aGFuIDUxMiBhbmQgaXMgbmV2ZXIgZGVjcmVhc2VkIGJ5IDQuIFRoZXJlZm9yZSBgZ2V0X3JlZ2lzdGVyc2AgaXMgbmV2ZXIgY2FsbGVkIHdpdGggYHNpemUgPSAwYC4gU28sIG5vIG1lbW9yeSBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQuCgpTbywgaW4gYGdlbmVyaWNfb2NwX3JlYWRgIHRoZXJlJiMzOTtzIG5vIHdheSB0byBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIGEgYmFkIHNpemUuIEluIGBnZW5lcmljX29jcF93cml0ZWAgdGhlcmUgaXMgYSB2ZXJ5IHNwZWNpZmljIGNhc2Ugd2hlcmUgaXQgKmNvdWxkKiBzZW5kIGEgMCBsZW5ndGggd3JpdGUuIEJ1dCBpdCBkb2VzICpub3QqIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gYGttZW1kdXBgIGhhbmRsZXMgYSBzaXplIG9mIDAuIGB1c2JfY29udHJvbF9tc2dgIGlzIHNhZmUgd2l0aCBhIHNpemUgb2YgemVyby4gSXQgY291bGQgY2F1c2UgYSBmdW5jdGlvbmFsIGJ1ZyBpZiB0aGUgVVNCIGRldmljZSBkb2VzbiYjMzk7dCBoYW5kbGUgemVyby1sZW5ndGggY29udHJvbCBtZXNzYWdlcywgYnV0IHRoaXMgaXNuJiMzOTt0IGEgbWVtb3J5IHNhZmV0eSBpc3N1ZS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBvbmx5IHJlZmFjdG9ycyB0aGUgY2h1bmtpbmcgYW5kIG1pZ2h0IGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGRldmljZSBieSBzZW5kaW5nIGEgMC1sZW5ndGggY29udHJvbCBtZXNzYWdlIGluIGEgdmVyeSBwYXJ0aWN1bGFyIGNhc2UuIFRoaXMgY2hhbmdlIGhhcyBubyBpbXBhY3Qgb24gS01TQU4gZnV6emluZy4gSXQmIzM5O3Mgbm90IGEgbWVtb3J5IGxlYWssIGl0JiMzOTtzIG5vdCBtZW1vcnkgY29ycnVwdGlvbiwgaXQmIzM5O3MganVzdCBhIHJlZmFjdG9yaW5nIHRoYXQgKmNvdWxkKiBjcmVhdGUgYSBmdW5jdGlvbmFsIGJ1ZyB3aGljaCBpcyBub3QgS01TQU4mIzM5O3MgY29uY2Vybi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjaHVua2luZyBsb29wcyBpbiBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAgZm9yIHRoZSByODE1MiBkcml2ZXIuIEluIGBnZW5lcmljX29jcF93cml0ZWAsIGlmIGBzaXplID09IDRgIGFuZCBgYnllbiAhPSBCWVRFX0VOX0RXT1JEYCwgYHNpemVgIGlzIGRlY3JlbWVudGVkIGJ5IDQgdG8gMC4gVGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBgd2hpbGUgKHNpemUpYCBhbmQgc2tpcHBlZCB0aGUgbG9vcCwgd2hlcmVhcyB0aGUgbmV3IGNvZGUgdXNlcyBgd2hpbGUgKHNpemUgXHUwMDNlIGxpbWl0KWAgYW5kIHVuY29uZGl0aW9uYWxseSBjYWxscyBgc2V0X3JlZ2lzdGVyc2Agd2l0aCB0aGUgcmVtYWluaW5nIGBzaXplYCAod2hpY2ggaXMgMCkuIFRoaXMgcmVzdWx0cyBpbiBhIDAtbGVuZ3RoIGNvbnRyb2wgbWVzc2FnZSBiZWluZyBzZW50IHRvIHRoZSBVU0IgZGV2aWNlLiBBIDAtbGVuZ3RoIHdyaXRlIGFsbG9jYXRlcyBhIGBaRVJPX1NJWkVfUFRSYCB2aWEgYGttZW1kdXAoZGF0YSwgMCwgR0ZQX0tFUk5FTClgIGFuZCBwYXNzZXMgaXQgdG8gYHVzYl9jb250cm9sX21zZ2AsIHdoaWNoIGhhbmRsZXMgMC1sZW5ndGggdHJhbnNmZXJzIHNhZmVseSB3aXRob3V0IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEluIGBnZW5lcmljX29jcF9yZWFkYCwgYHNpemVgIGlzIHZhbGlkYXRlZCB0byBiZSBub24temVybyBhbmQgYSBtdWx0aXBsZSBvZiA0IGluaXRpYWxseSwgYW5kIGlzIG5ldmVyIGRlY3JlbWVudGVkIGJlZm9yZSB0aGUgbG9vcC4gVGh1cywgYGdldF9yZWdpc3RlcnNgIGlzIG5ldmVyIGNhbGxlZCB3aXRoIGBzaXplID0gMGAsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBjb3BpZWQgb3IgZXhwb3NlZC4gU2luY2UgdGhlIHBhdGNoIG9ubHkgaW50cm9kdWNlcyBhIHBvdGVudGlhbCAwLWxlbmd0aCBVU0IgY29udHJvbCBtZXNzYWdlIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcywgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIEFueSBwb3RlbnRpYWwgY3Jhc2hlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNodW5raW5nIGxvb3BzIGluIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBmb3IgdGhlIHI4MTUyIGRyaXZlci4gSW4gYGdlbmVyaWNfb2NwX3dyaXRlYCwgaWYgYHNpemUgPT0gNGAgYW5kIGBieWVuICE9IEJZVEVfRU5fRFdPUkRgLCBgc2l6ZWAgaXMgZGVjcmVtZW50ZWQgYnkgNCB0byAwLiBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGB3aGlsZSAoc2l6ZSlgIGFuZCBza2lwcGVkIHRoZSBsb29wLCB3aGVyZWFzIHRoZSBuZXcgY29kZSB1c2VzIGB3aGlsZSAoc2l6ZSBcdTAwM2UgbGltaXQpYCBhbmQgdW5jb25kaXRpb25hbGx5IGNhbGxzIGBzZXRfcmVnaXN0ZXJzYCB3aXRoIHRoZSByZW1haW5pbmcgYHNpemVgICh3aGljaCBpcyAwKS4gVGhpcyByZXN1bHRzIGluIGEgMC1sZW5ndGggY29udHJvbCBtZXNzYWdlIGJlaW5nIHNlbnQgdG8gdGhlIFVTQiBkZXZpY2UuIEEgMC1sZW5ndGggd3JpdGUgYWxsb2NhdGVzIGEgYFpFUk9fU0laRV9QVFJgIHZpYSBga21lbWR1cChkYXRhLCAwLCBHRlBfS0VSTkVMKWAgYW5kIHBhc3NlcyBpdCB0byBgdXNiX2NvbnRyb2xfbXNnYCwgd2hpY2ggaGFuZGxlcyAwLWxlbmd0aCB0cmFuc2ZlcnMgc2FmZWx5IHdpdGhvdXQgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSW4gYGdlbmVyaWNfb2NwX3JlYWRgLCBgc2l6ZWAgaXMgdmFsaWRhdGVkIHRvIGJlIG5vbi16ZXJvIGFuZCBhIG11bHRpcGxlIG9mIDQgaW5pdGlhbGx5LCBhbmQgaXMgbmV2ZXIgZGVjcmVtZW50ZWQgYmVmb3JlIHRoZSBsb29wLiBUaHVzLCBgZ2V0X3JlZ2lzdGVyc2AgaXMgbmV2ZXIgY2FsbGVkIHdpdGggYHNpemUgPSAwYCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGNvcGllZCBvciBleHBvc2VkLiBTaW5jZSB0aGUgcGF0Y2ggb25seSBpbnRyb2R1Y2VzIGEgcG90ZW50aWFsIDAtbGVuZ3RoIFVTQiBjb250cm9sIG1lc3NhZ2UgYW5kIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gQW55IHBvdGVudGlhbCBjcmFzaGVzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NTk6MzIuMDM0NzIzMzQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5MTE4Njc0OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiLFxuICAgIFwiVVNCX1JUTDgxNTJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydGw4MTUyX3Byb2JlXCIsXG4gICAgXCJydGw4MTUyX29wZW5cIixcbiAgICBcInJ0bDgxNTJfc3RhcnRfeG1pdFwiLFxuICAgIFwicnRsODE1Ml9pb2N0bFwiLFxuICAgIFwicnRsODE1Ml9zZXRfbWFjX2FkZHJlc3NcIixcbiAgICBcInJ0bDgxNTJfY2hhbmdlX210dVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjaHVua2luZyBsb29wcyBpbiBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAgZm9yIHRoZSByODE1MiBkcml2ZXIuIEluIGBnZW5lcmljX29jcF93cml0ZWAsIGlmIGBzaXplID09IDRgIGFuZCBgYnllbiAhPSBCWVRFX0VOX0RXT1JEYCwgYHNpemVgIGlzIGRlY3JlbWVudGVkIGJ5IDQgdG8gMC4gVGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBgd2hpbGUgKHNpemUpYCBhbmQgc2tpcHBlZCB0aGUgbG9vcCwgd2hlcmVhcyB0aGUgbmV3IGNvZGUgdXNlcyBgd2hpbGUgKHNpemUgXFx1MDAzZSBsaW1pdClgIGFuZCB1bmNvbmRpdGlvbmFsbHkgY2FsbHMgYHNldF9yZWdpc3RlcnNgIHdpdGggdGhlIHJlbWFpbmluZyBgc2l6ZWAgKHdoaWNoIGlzIDApLiBUaGlzIHJlc3VsdHMgaW4gYSAwLWxlbmd0aCBjb250cm9sIG1lc3NhZ2UgYmVpbmcgc2VudCB0byB0aGUgVVNCIGRldmljZS4gQSAwLWxlbmd0aCB3cml0ZSBhbGxvY2F0ZXMgYSBgWkVST19TSVpFX1BUUmAgdmlhIGBrbWVtZHVwKGRhdGEsIDAsIEdGUF9LRVJORUwpYCBhbmQgcGFzc2VzIGl0IHRvIGB1c2JfY29udHJvbF9tc2dgLCB3aGljaCBoYW5kbGVzIDAtbGVuZ3RoIHRyYW5zZmVycyBzYWZlbHkgd2l0aG91dCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJbiBgZ2VuZXJpY19vY3BfcmVhZGAsIGBzaXplYCBpcyB2YWxpZGF0ZWQgdG8gYmUgbm9uLXplcm8gYW5kIGEgbXVsdGlwbGUgb2YgNCBpbml0aWFsbHksIGFuZCBpcyBuZXZlciBkZWNyZW1lbnRlZCBiZWZvcmUgdGhlIGxvb3AuIFRodXMsIGBnZXRfcmVnaXN0ZXJzYCBpcyBuZXZlciBjYWxsZWQgd2l0aCBgc2l6ZSA9IDBgLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgY29waWVkIG9yIGV4cG9zZWQuIFNpbmNlIHRoZSBwYXRjaCBvbmx5IGludHJvZHVjZXMgYSBwb3RlbnRpYWwgMC1sZW5ndGggVVNCIGNvbnRyb2wgbWVzc2FnZSBhbmQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBBbnkgcG90ZW50aWFsIGNyYXNoZXMgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGxvZ2ljIGluIGdlbmVyaWNfb2NwX3JlYWQgYW5kIGdlbmVyaWNfb2NwX3dyaXRlIGluIHRoZSByODE1MiBVU0IgbmV0d29yayBkcml2ZXIuIFRoZSByZWZhY3RvcmVkIGNvZGUgbm93IGV4ZWN1dGVzIGdldF9yZWdpc3RlcnMvc2V0X3JlZ2lzdGVycyBldmVuIGlmIHRoZSBpbml0aWFsIHNpemUgaXMgMCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNvdWxkIHRyaWdnZXIgYnVncyAoZS5nLiwgemVyby1zaXplIGFsbG9jYXRpb25zIG9yIFVTQiBjb250cm9sIG1lc3NhZ2VzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NTk6MzIuMDM0NzI5NTk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDAxNTcwMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4ZWU3OWQ2Mzk4ZWQ3Y2I5ZWQyM2Y1MWI1ZDY3ZmFhY2MyZWQwY2I2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDIyIDIwOjU5OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jIGIvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcXG5pbmRleCBmNjE2ODY0MzMwMzFjLi5kZTk3MzhiZGNlODU5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXFxuKysrIGIvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcXG5AQCAtMTQzMSwyNyArMTQzMSwxOSBAQCBzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgc2l6ZSxcXG4gXFx0aWYgKCh1MzIpaW5kZXggKyAodTMyKXNpemUgXFx1MDAzZSAweGZmZmYpXFxuIFxcdFxcdHJldHVybiAtRVBFUk07XFxuIFxcbi1cXHR3aGlsZSAoc2l6ZSkge1xcbi1cXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIGxpbWl0KSB7XFxuLVxcdFxcdFxcdHJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBsaW1pdCwgZGF0YSk7XFxuLVxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdFxcdFxcdGluZGV4ICs9IGxpbWl0O1xcbi1cXHRcXHRcXHRkYXRhICs9IGxpbWl0O1xcbi1cXHRcXHRcXHRzaXplIC09IGxpbWl0O1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgc2l6ZSwgZGF0YSk7XFxuLVxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0d2hpbGUgKHNpemUgXFx1MDAzZSBsaW1pdCkge1xcbitcXHRcXHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJvcjE7XFxuIFxcbi1cXHRcXHRcXHRpbmRleCArPSBzaXplO1xcbi1cXHRcXHRcXHRkYXRhICs9IHNpemU7XFxuLVxcdFxcdFxcdHNpemUgPSAwO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbitcXHRcXHRpbmRleCArPSBsaW1pdDtcXG4rXFx0XFx0ZGF0YSArPSBsaW1pdDtcXG4rXFx0XFx0c2l6ZSAtPSBsaW1pdDtcXG4gXFx0fVxcbiBcXG4rXFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xcbitcXG4rZXJyb3IxOlxcbiBcXHRpZiAocmV0ID09IC1FTk9ERVYpXFxuIFxcdFxcdHJ0bF9zZXRfdW5wbHVnKHRwKTtcXG4gXFxuQEAgLTE0OTgsMzEgKzE0OTAsMjQgQEAgc3RhdGljIGludCBnZW5lcmljX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sXFxuIFxcdFxcdGlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpXFxuIFxcdFxcdFxcdHNpemUgLT0gNDtcXG4gXFxuLVxcdFxcdHdoaWxlIChzaXplKSB7XFxuLVxcdFxcdFxcdGlmIChzaXplIFxcdTAwM2UgbGltaXQpIHtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICB0eXBlIHwgQllURV9FTl9EV09SRCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGxpbWl0LCBkYXRhKTtcXG4tXFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyb3IxO1xcbi1cXG4tXFx0XFx0XFx0XFx0aW5kZXggKz0gbGltaXQ7XFxuLVxcdFxcdFxcdFxcdGRhdGEgKz0gbGltaXQ7XFxuLVxcdFxcdFxcdFxcdHNpemUgLT0gbGltaXQ7XFxuLVxcdFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdFxcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBzaXplLCBkYXRhKTtcXG4tXFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyb3IxO1xcbi1cXG4tXFx0XFx0XFx0XFx0aW5kZXggKz0gc2l6ZTtcXG4tXFx0XFx0XFx0XFx0ZGF0YSArPSBzaXplO1xcbi1cXHRcXHRcXHRcXHRzaXplID0gMDtcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdH1cXG4rXFx0XFx0d2hpbGUgKHNpemUgXFx1MDAzZSBsaW1pdCkge1xcbitcXHRcXHRcXHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBsaW1pdCwgZGF0YSk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycm9yMTtcXG4rXFxuK1xcdFxcdFxcdGluZGV4ICs9IGxpbWl0O1xcbitcXHRcXHRcXHRkYXRhICs9IGxpbWl0O1xcbitcXHRcXHRcXHRzaXplIC09IGxpbWl0O1xcbiBcXHRcXHR9XFxuIFxcbitcXHRcXHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSB8IEJZVEVfRU5fRFdPUkQsIHNpemUsIGRhdGEpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJvcjE7XFxuK1xcbitcXHRcXHRpbmRleCArPSBzaXplO1xcbitcXHRcXHRkYXRhICs9IHNpemU7XFxuK1xcbiBcXHRcXHQvKiBTZXQgdGhlIGxhc3QgRFdPUkQgKi9cXG4gXFx0XFx0aWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRClcXG4gXFx0XFx0XFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBieWVuLCA0LCBkYXRhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NTk6MzIuNDc1NzMzMzE5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Nzk5ODA4MjE0MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9EUklWRVJTXCIsXG4gICAgXCJVU0JfUlRMODE1MlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bDgxNTJfcHJvYmVcIixcbiAgICBcInJ0bDgxNTJfb3BlblwiLFxuICAgIFwicnRsODE1Ml9zdGFydF94bWl0XCIsXG4gICAgXCJydGw4MTUyX2lvY3RsXCIsXG4gICAgXCJydGw4MTUyX3NldF9tYWNfYWRkcmVzc1wiLFxuICAgIFwicnRsODE1Ml9jaGFuZ2VfbXR1XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvb3AgbG9naWMgaW4gZ2VuZXJpY19vY3BfcmVhZCBhbmQgZ2VuZXJpY19vY3Bfd3JpdGUgaW4gdGhlIHI4MTUyIFVTQiBuZXR3b3JrIGRyaXZlci4gVGhlIHJlZmFjdG9yZWQgY29kZSBub3cgZXhlY3V0ZXMgZ2V0X3JlZ2lzdGVycy9zZXRfcmVnaXN0ZXJzIGV2ZW4gaWYgdGhlIGluaXRpYWwgc2l6ZSBpcyAwLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY291bGQgdHJpZ2dlciBidWdzIChlLmcuLCB6ZXJvLXNpemUgYWxsb2NhdGlvbnMgb3IgVVNCIGNvbnRyb2wgbWVzc2FnZXMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZWU3OWQ2Mzk4ZWQ3Y2I5ZWQyM2Y1MWI1ZDY3ZmFhY2MyZWQwY2I2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMjA6NTk6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcjgxNTIuYyBiL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXG5pbmRleCBmNjE2ODY0MzMwMzFjLi5kZTk3MzhiZGNlODU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXG5AQCAtMTQzMSwyNyArMTQzMSwxOSBAQCBzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgc2l6ZSxcbiBcdGlmICgodTMyKWluZGV4ICsgKHUzMilzaXplIFx1MDAzZSAweGZmZmYpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHR3aGlsZSAoc2l6ZSkge1xuLVx0XHRpZiAoc2l6ZSBcdTAwM2UgbGltaXQpIHtcbi1cdFx0XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRicmVhaztcbi1cbi1cdFx0XHRpbmRleCArPSBsaW1pdDtcbi1cdFx0XHRkYXRhICs9IGxpbWl0O1xuLVx0XHRcdHNpemUgLT0gbGltaXQ7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRicmVhaztcbitcdHdoaWxlIChzaXplIFx1MDAzZSBsaW1pdCkge1xuK1x0XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyb3IxO1xuIFxuLVx0XHRcdGluZGV4ICs9IHNpemU7XG4tXHRcdFx0ZGF0YSArPSBzaXplO1xuLVx0XHRcdHNpemUgPSAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4rXHRcdGluZGV4ICs9IGxpbWl0O1xuK1x0XHRkYXRhICs9IGxpbWl0O1xuK1x0XHRzaXplIC09IGxpbWl0O1xuIFx0fVxuIFxuK1x0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xuK1xuK2Vycm9yMTpcbiBcdGlmIChyZXQgPT0gLUVOT0RFVilcbiBcdFx0cnRsX3NldF91bnBsdWcodHApO1xuIFxuQEAgLTE0OTgsMzEgKzE0OTAsMjQgQEAgc3RhdGljIGludCBnZW5lcmljX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sXG4gXHRcdGlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpXG4gXHRcdFx0c2l6ZSAtPSA0O1xuIFxuLVx0XHR3aGlsZSAoc2l6ZSkge1xuLVx0XHRcdGlmIChzaXplIFx1MDAzZSBsaW1pdCkge1xuLVx0XHRcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsXG4tXHRcdFx0XHRcdFx0ICAgIHR5cGUgfCBCWVRFX0VOX0RXT1JELFxuLVx0XHRcdFx0XHRcdCAgICBsaW1pdCwgZGF0YSk7XG4tXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdFx0XHRnb3RvIGVycm9yMTtcbi1cbi1cdFx0XHRcdGluZGV4ICs9IGxpbWl0O1xuLVx0XHRcdFx0ZGF0YSArPSBsaW1pdDtcbi1cdFx0XHRcdHNpemUgLT0gbGltaXQ7XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LFxuLVx0XHRcdFx0XHRcdCAgICB0eXBlIHwgQllURV9FTl9EV09SRCxcbi1cdFx0XHRcdFx0XHQgICAgc2l6ZSwgZGF0YSk7XG4tXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdFx0XHRnb3RvIGVycm9yMTtcbi1cbi1cdFx0XHRcdGluZGV4ICs9IHNpemU7XG4tXHRcdFx0XHRkYXRhICs9IHNpemU7XG4tXHRcdFx0XHRzaXplID0gMDtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbitcdFx0d2hpbGUgKHNpemUgXHUwMDNlIGxpbWl0KSB7XG4rXHRcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELFxuK1x0XHRcdFx0XHQgICAgbGltaXQsIGRhdGEpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycm9yMTtcbitcbitcdFx0XHRpbmRleCArPSBsaW1pdDtcbitcdFx0XHRkYXRhICs9IGxpbWl0O1xuK1x0XHRcdHNpemUgLT0gbGltaXQ7XG4gXHRcdH1cbiBcbitcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELCBzaXplLCBkYXRhKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycm9yMTtcbitcbitcdFx0aW5kZXggKz0gc2l6ZTtcbitcdFx0ZGF0YSArPSBzaXplO1xuK1xuIFx0XHQvKiBTZXQgdGhlIGxhc3QgRFdPUkQgKi9cbiBcdFx0aWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRClcbiBcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSB8IGJ5ZW4sIDQsIGRhdGEpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NTk6MzIuNDc1NzM1MTM5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM4OTYzNjM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWFsdGVrIFVTQiBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNgLiBJdCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgdGhlIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBmdW5jdGlvbnMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgYSByZWZhY3RvcmluZywgc2ltcGxpZnlpbmcgdGhvc2Ugd2hpbGUgbG9vcHMgYnkgdGFraW5nIHRoYXQgbGFzdCBpdGVyYXRpb24sIHdoZXJlIGBzaXplIFx1MDAzYz0gbGltaXRgLCBvdXQgb2YgdGhlIGxvb3AuIEZ1bmN0aW9uYWxseSwgdGhpcyBsaWtlbHkga2VlcHMgdGhlIHNhbWUgYmVoYXZpb3VyLlxuXG5UaGlzIGlzIGEgVVNCIG5ldHdvcmsgZHJpdmVyIGZvciBSZWFsdGVrIFJUTDgxNTIvUlRMODE1MyBiYXNlZCBVU0IgRXRoZXJuZXQgYWRhcHRlcnMuIEdpdmVuIHRoYXQgaXQncyBhIFVTQiBkcml2ZXIsIEkgc2hvdWxkIG5vdGUgdGhhdCB0aGVzZSBraW5kcyBvZiBkcml2ZXJzIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBXZSBjYW4gdXNlIHRvb2xzIGxpa2UgYGR1bW15X2hjZGAgb3Igc2ltaWxhciBVU0IgZW11bGF0aW9uIGZyYW1ld29ya3Mgd2l0aGluIGEgZnJhbWV3b3JrIGxpa2Ugc3l6a2FsbGVyIHRvIGdlbmVyYXRlIGludGVyZXN0aW5nIGlucHV0cyBhbmQgdGVzdCBmb3IgdnVsbmVyYWJpbGl0aWVzLlxuXG5HaXZlbiB0aGF0IGl0IGlzIGEga2VybmVsIHBhdGNoLCBiZWZvcmUgSSBkaWcgYW55IGRlZXBlciwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBmb3IgdGhlIG1vZHVsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNvZGUuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBiZSBtb3JlIHByZWNpc2UgaW4gbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo1OTozNi44NjUzNzQ1NDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxNTY5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicjgxNTJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfVVNCX1JUTDgxNTApXFx0Kz0gcnRsODE1MC5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19VU0JfUlRMODE1MilcXHQrPSByODE1Mi5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTExLW9iai0kKENPTkZJR19VU0JfSFNPKVxcdFxcdCs9IGhzby5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjU5OjM2LjkxNTUzNzI2MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NzkxNTM4MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBVU0IgUlRMODE1MiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBgQ09ORklHX1VTQl9SVEw4MTUyYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGxpbmVhZ2UgYW5kIHNlZSB3aGVyZSB0aGlzIG1vZHVsZSBmaXRzIHdpdGhpbiB0aGUgYnJvYWRlciBkcml2ZXIgYXJjaGl0ZWN0dXJlLiBUaW1lIHRvIGRlbHZlIGludG8gYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVuczsgd2hlcmUgd2UgZGVmaW5lIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYy4gSSdsbCBuZWVkIHRvIGNoZWNrIHdoYXQgb3RoZXIgbW9kdWxlcywgZmVhdHVyZXMsIG9yIGJyb2FkZXIgY29uZmlndXJhdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgQ09ORklHX1VTQl9SVEw4MTUyYCBjYW4gZXZlbiBiZSBjb25zaWRlcmVkLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGFueSBwbGF0Zm9ybSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgb3Igb3RoZXIgZmFjdG9ycyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGlzIGNvbmZpZ3VyYXRpb24uIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgYW55IHBvdGVudGlhbCBjb25mbGljdHMgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE5MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjU5OjM5Ljg5NDY5NTQyM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg3NzUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX1JUTDgxNTJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWc9ODg9Y29uZmlnIFVTQl9SVEw4MTUwXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy05OC1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo5OTpjb25maWcgVVNCX1JUTDgxNTJcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMDAtXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUlRMODE1Mi9SVEw4MTUzIEJhc2VkIFVTQiBFdGhlcm5ldCBBZGFwdGVyc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NTk6MzkuOTQyNTc4MDUyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4NDU1MTYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgVVNCIE5ldHdvcmtpbmcgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gYSBzcGVjaWZpYyBhcmVhIHdpdGhpbiB0aGUgTGludXgga2VybmVsJ3MgbmV0d29ya2luZyBpbmZyYXN0cnVjdHVyZS4gSSdtIGZvY3VzaW5nIG9uIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA5OS4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgc3BlY2lmaWMgbGluZSBudW1iZXIgaXMgbGlrZWx5IHRvIGJlIGludGVyZXN0aW5nLCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBkZXRhaWxzIHRoZXJlLiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIGEgc3BlY2lmaWMgb3B0aW9uIG9yIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHJlbGF0ZWQgdG8gYSBVU0IgbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHRoYXQgd2FycmFudHMgbXkgYXR0ZW50aW9uLiBJdCBjb3VsZCBiZSBhIG5ldyBmZWF0dXJlLCBhIHN1YnRsZSBidWcgZml4LCBvciBwZXJoYXBzIHNvbWUgYXJjaGl0ZWN0dXJhbCBjaGFuZ2UgcmVsYXRlZCB0byBVU0IgbmV0d29yayBkZXZpY2Ugc3VwcG9ydC4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgb3IgYW55IHJlY2VudCBtb2RpZmljYXRpb25zIHRoYXQgbWlnaHQgaW1wYWN0IGhvdyB0aGVzZSBkZXZpY2VzIGFyZSBjb25maWd1cmVkIGFuZCB1dGlsaXplZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ20gcHJlcGFyaW5nIG15c2VsZiB0byBmaWx0ZXIgb3V0IHRoZSBpcnJlbGV2YW50IGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTI1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NTk6NDMuMjI3MTMyOTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5NTpcXHRcXG4gIDk2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICA5NzpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBydGw4MTUwLlxcbiAgOTg6XFx0XFxuICA5OTpcXHRjb25maWcgVVNCX1JUTDgxNTJcXG4gMTAwOlxcdFxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIFJUTDgxNTIvUlRMODE1MyBCYXNlZCBVU0IgRXRoZXJuZXQgQWRhcHRlcnNcXFwiXFxuIDEwMTpcXHRcXHRzZWxlY3QgTUlJXFxuIDEwMjpcXHRcXHRzZWxlY3QgUEhZTElCXFxuIDEwMzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gMTA0OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiAxMDU6XFx0XFx0aGVscFxcbiAxMDY6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODE1MiBiYXNlZCBVU0IgMi4wXFxuIDEwNzpcXHRcXHQgIDEwLzEwMCBFdGhlcm5ldCBhZGFwdGVycyBhbmQgUlRMODE1MyBiYXNlZCBVU0IgMy4wIDEwLzEwMC8xMDAwXFxuIDEwODpcXHRcXHQgIEV0aGVybmV0IGFkYXB0ZXJzLlxcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxMTE6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcjgxNTIuXFxuIDExMjpcXHRcXG4gMTEzOlxcdGNvbmZpZyBVU0JfTEFONzhYWFxcbiAxMTQ6XFx0XFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBMQU43OFhYIEJhc2VkIFVTQiBFdGhlcm5ldCBBZGFwdGVyc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NTk6NDMuMjI3MjEwNTI5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1OTI0MDE1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgQ29udGV4dHVhbCBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGluc3RpbmN0IHBvaW50cyBtZSB0b3dhcmRzIHRoZXNlIGRlcGVuZGVuY2llczogYE1JSWAsIGBQSFlMSUJgLCBgQ1JDMzJgLCBhbmQgYENSWVBUT19MSUJfU0hBMjU2YC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGVzZSBhcmUga2V5IGNvbXBvbmVudHMgaW4gd2hhdGV2ZXIgSSdtIGRlYWxpbmcgd2l0aC4gQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGlzIGhvdyB0aGV5IGFsbCBmaXQgdG9nZXRoZXIuIFRoZSBjcnVjaWFsIHBhcmVudCBjb25maWcgaXMgbGlrZWx5IHNvbWV0aGluZyByZWxhdGVkIHRvIGBVU0JfTkVUX0RSSVZFUlNgLCBvciBzb21ldGhpbmcgdmVyeSBzaW1pbGFyLiBUbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlIHRvIGp1bXAgb3ZlciB0byB0aGUgdG9wIG9mIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBhbmQgb3ZlcmFsbCBzdHJ1Y3R1cmUgYXJlIGxpa2VseSBsb2NhdGVkLiBUaGF0J2xsIGJlIHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEwMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NTk6NDYuNTg2NDUzOTU2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFVTQiBOZXR3b3JrIGRldmljZXMgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y29tbWVudCBcXFwiSG9zdC1zaWRlIFVTQiBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE5ldHdvcmsgQWRhcHRlciBzdXBwb3J0XFxcIlxcbiAgIDY6XFx0XFx0ZGVwZW5kcyBvbiAhVVNCIFxcdTAwMjZcXHUwMDI2IE5FVFxcbiAgIDc6XFx0XFxuICAgODpcXHRtZW51Y29uZmlnIFVTQl9ORVRfRFJJVkVSU1xcbiAgIDk6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBOZXR3b3JrIEFkYXB0ZXJzXFxcIlxcbiAgMTA6XFx0XFx0ZGVmYXVsdCBVU0IgaWYgVVNCXFxuICAxMTpcXHRcXHRkZXBlbmRzIG9uIFVTQiBcXHUwMDI2XFx1MDAyNiBORVRcXG4gIDEyOlxcdFxcbiAgMTM6XFx0aWYgVVNCX05FVF9EUklWRVJTXFxuICAxNDpcXHRcXG4gIDE1OlxcdGNvbmZpZyBVU0JfQ0FUQ1xcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBDQVRDIE5ldE1hdGUtYmFzZWQgRXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAxNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBVU0IgRXRoZXJuZXRcXG4gIDIwOlxcdFxcdCAgZGV2aWNlIGJhc2VkIG9uIHRoZSBFTDEyMTBBIGNoaXAuIFN1cHBvcnRlZCBkZXZpY2VzIGFyZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NTk6NDYuNTg2NTQ2NTY2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTQzMDU1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBVU0IgTmV0d29yayBEcml2ZXIgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYFVTQl9ORVRfRFJJVkVSU2AgY29uZmlndXJhdGlvbiwgYW5kIHNwZWNpZmljYWxseSB0aGUgYFVTQl9SVEw4MTUyYCBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIG1hZGUuIEl0IGxvb2tzIGxpa2UgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCBhcmUgYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgZXZlbiBiZWluZyBjYWxsZWQsIGFuZCBpZiBzbywgYnkgd2hhdC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGVpciBpbXBhY3QuIFRpbWUgdG8gZ2V0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MjksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjU5OjQ5LjU4MDg1NDU0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxMTIxNDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdlbmVyaWNfb2NwX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTQxMj1zdGF0aWMgdm9pZCBydGxfc2V0X3VucGx1ZyhzdHJ1Y3QgcjgxNTIgKnRwKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQxNy1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNDE4OnN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0MTktXFx0XFx0XFx0ICAgIHZvaWQgKmRhdGEsIHUxNiB0eXBlKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTUyND1pbnQgcGxhX29jcF9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUyNS17XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTUyNjpcXHRyZXR1cm4gZ2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemUsIGRhdGEsIE1DVV9UWVBFX1BMQSk7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUyNy19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTQxPXN0YXRpYyB1MzIgb2NwX3JlYWRfZHdvcmQoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NDQtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU0NTpcXHRnZW5lcmljX29jcF9yZWFkKHRwLCBpbmRleCwgc2l6ZW9mKGRhdGEpLCBcXHUwMDI2ZGF0YSwgdHlwZSk7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU0Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1NTc9c3RhdGljIHUxNiBvY3BfcmVhZF93b3JkKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTY2LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1Njc6XFx0Z2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemVvZih0bXApLCBcXHUwMDI2dG1wLCB0eXBlIHwgYnllbik7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU2OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1OTc9c3RhdGljIHU4IG9jcF9yZWFkX2J5dGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MDQtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTYwNTpcXHRnZW5lcmljX29jcF9yZWFkKHRwLCBpbmRleCwgc2l6ZW9mKHRtcCksIFxcdTAwMjZ0bXAsIHR5cGUpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MDYtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz05MDc4PXN0YXRpYyB2b2lkIHJ0bDgxNTJfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTkwODYtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6OTA4NzpcXHRnZW5lcmljX29jcF9yZWFkKHRwLCBQTEFfVEFMTFlDTlQsIHNpemVvZih0YWxseSksIFxcdTAwMjZ0YWxseSwgTUNVX1RZUEVfUExBKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05MDg4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo1OTo0OS44NTE5ODE5OTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2OTcyODE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OlxuXG4qKkFuYWx5emluZyBPQ1AgQnVzIEFjY2VzcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlc2UgT0NQIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhleSdyZSB0aGUgZm91bmRhdGlvbmFsIGJ1aWxkaW5nIGJsb2NrcywgaGVhdmlseSBsZXZlcmFnZWQgYnkgdGhpbmdzIGxpa2UgYHBsYV9vY3BfcmVhZGAsIHRoZSBgb2NwX3JlYWRfZHdvcmQvd29yZC9ieXRlYCBmdW5jdGlvbnMsIGFuZCBwcm9iYWJseSBvdGhlcnMuIEtub3dpbmcgdGhlIHN5c3RlbSwgaXQncyBwcmV0dHkgbXVjaCBhIGdpdmVuIHRoYXQgdGhlc2UgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgVVNCIGVtdWxhdGlvbiBwYXRod2F5LiBTaW5jZSBgZ2VuZXJpY19vY3BfcmVhZGAgaXMgc28gY2VudHJhbCwgaXQgbWFrZXMgc2Vuc2UgdG8gZ28gaW4gYW5kIGNoZWNrIGBnZW5lcmljX29jcF93cml0ZWAgYXMgd2VsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlc2UgZ2VuZXJpYyBmdW5jdGlvbnMgd29yaywgYXMgdGhleSB3aWxsIHVubG9jayBhY2Nlc3MgdG8gdGhlIHN5c3RlbSB0aHJvdWdoIFVTQi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY4NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjU5OjUzLjIyMTcxMjI2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjE2MTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5lcmljX29jcF93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNDE4PXN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQ1Mi1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNDUzOnN0YXRpYyBpbnQgZ2VuZXJpY19vY3Bfd3JpdGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgYnl0ZWVuLFxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0NTQtXFx0XFx0XFx0ICAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSwgdTE2IHR5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTMwPWludCBwbGFfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzMS17XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTUzMjpcXHRyZXR1cm4gZ2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieXRlZW4sIHNpemUsIGRhdGEsIE1DVV9UWVBFX1BMQSk7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzMy19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTM2PWludCB1c2Jfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzNy17XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTUzODpcXHRyZXR1cm4gZ2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieXRlZW4sIHNpemUsIGRhdGEsIE1DVV9UWVBFX1VTQik7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzOS19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTUwPXN0YXRpYyB2b2lkIG9jcF93cml0ZV9kd29yZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4LCB1MzIgZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NTMtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU1NDpcXHRnZW5lcmljX29jcF93cml0ZSh0cCwgaW5kZXgsIEJZVEVfRU5fRFdPUkQsIHNpemVvZih0bXApLCBcXHUwMDI2dG1wLCB0eXBlKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTU1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1NzY9c3RhdGljIHZvaWQgb2NwX3dyaXRlX3dvcmQoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleCwgdTMyIGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTkzLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1OTQ6XFx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieWVuLCBzaXplb2YodG1wKSwgXFx1MDAyNnRtcCwgdHlwZSk7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU5NS19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNjE0PXN0YXRpYyB2b2lkIG9jcF93cml0ZV9ieXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgsIHUzMiBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTYzMS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNjMyOlxcdGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBpbmRleCwgYnllbiwgc2l6ZW9mKHRtcCksIFxcdTAwMjZ0bXAsIHR5cGUpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MzMtfVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NDUxMT1zdGF0aWMgdm9pZCBydGxfY2xlYXJfYnAoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy00NTQ5LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjQ1NTA6XFx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIFBMQV9CUF8wLCBCWVRFX0VOX0RXT1JELCBicF9udW0gXFx1MDAzY1xcdTAwM2MgMSwgYnAsIHR5cGUpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTQ1NTEtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz01MzA0PXN0YXRpYyB2b2lkIHJ0bF9yYW1fY29kZV9zcGVlZF91cChzdHJ1Y3QgcjgxNTIgKnRwLCBzdHJ1Y3QgZndfcGh5X3NwZWVkX3VwICpwaHksIGJvb2wgd2FpdClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTUzMzQtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NTMzNTpcXHRcXHRnZW5lcmljX29jcF93cml0ZSh0cCwgX19sZTE2X3RvX2NwdShwaHktXFx1MDAzZWZ3X3JlZyksIDB4ZmYsIHNpemUsIGRhdGEsIE1DVV9UWVBFX1VTQik7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTMzNi1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTU0ODU9c3RhdGljIHZvaWQgcnRsODE1Ml9md19tYWNfYXBwbHkoc3RydWN0IHI4MTUyICp0cCwgc3RydWN0IGZ3X21hYyAqbWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTUyNC1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo1NTI1OlxcdGlmIChnZW5lcmljX29jcF93cml0ZSh0cCwgX19sZTE2X3RvX2NwdShtYWMtXFx1MDAzZWZ3X3JlZyksIDB4ZmYsIGxlbmd0aCxcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01NTI2LVxcdFxcdFxcdCAgICAgIGRhdGEsIHR5cGUpIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTUzNC1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo1NTM1OlxcdGlmIChnZW5lcmljX29jcF93cml0ZSh0cCwgX19sZTE2X3RvX2NwdShtYWMtXFx1MDAzZWJwX3N0YXJ0KSwgQllURV9FTl9EV09SRCxcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01NTM2LVxcdFxcdFxcdCAgICAgIEFMSUdOKF9fbGUxNl90b19jcHUobWFjLVxcdTAwM2VicF9udW0pIFxcdTAwM2NcXHUwMDNjIDEsIDQpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo1OTo1My4yNzM4NzkwM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzI4NTYwNjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGdW5jdGlvbiBTY29wZSBhbmQgRXhwb3J0IEJlaGF2aW9yKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJJ3ZlIG5vdGljZWQgc29tZXRoaW5nLiBUaGUgZnVuY3Rpb25zIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBhcmUgZGVmaW5lZCBhcyBgc3RhdGljYC4gVGhhdCBtZWFucyB0aGVpciBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIGlzIGV4cGVjdGVkLiBIb3dldmVyLCB0aGV5J3JlIGJlaW5nICpjYWxsZWQqIGJ5IG90aGVyIGZ1bmN0aW9uczogYHBsYV9vY3BfcmVhZGAsIGBwbGFfb2NwX3dyaXRlYCwgYW5kIGB1c2Jfb2NwX3dyaXRlYC4gVGhvc2UgbGF0dGVyIGZ1bmN0aW9ucyBhcmVuJ3QgYHN0YXRpY2AuXG5cblRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHBvcHMgaW50byBteSBoZWFkIGlzIHdoZXRoZXIgdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgcGxhX29jcF9yZWFkYCBhcmUgZXhwb3J0ZWQuIElzIGBwbGFfb2NwX3JlYWRgIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEksIG9yIGlzIGl0IGFsc28ganVzdCBpbnRlcm5hbCB0byB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlPyBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBleHBvcnQgc3RhdHVzOyB0aGF0IGRldGFpbCB3aWxsIGRyaXZlIHRoZSBkZXNpZ24gZ29pbmcgZm9yd2FyZC4gVW5kZXJzdGFuZGluZyB0aGUgdmlzaWJpbGl0eSBvZiBgcGxhX29jcF9yZWFkYCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQzNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjU5OjU3LjAwMjQ0MjY2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM3NzMxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGxhX29jcF9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1MjM9c3RhdGljIGlubGluZVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1MjQ6aW50IHBsYV9vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1MjUte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MjExNj1zdGF0aWMgaW50IGRldGVybWluZV9ldGhlcm5ldF9hZGRyKHN0cnVjdCByODE1MiAqdHAsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0yMTI2LVxcdFxcdGlmICh0cC1cXHUwMDNldmVyc2lvbiA9PSBSVExfVkVSXzAxKSB7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MjEyNzpcXHRcXHRcXHRyZXQgPSBwbGFfb2NwX3JlYWQodHAsIFBMQV9JRFIsIDgsIHNzLVxcdTAwM2VfX2RhdGEpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTIxMjgtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTIxMzMtXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MjEzNDpcXHRcXHRcXHRcXHRyZXQgPSBwbGFfb2NwX3JlYWQodHAsIFBMQV9CQUNLVVAsIDgsXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMjEzNS1cXHRcXHRcXHRcXHRcXHRcXHQgICBzcy1cXHUwMDNlX19kYXRhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NTk6NTcuMDU2MjE5NzIxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjQ2MDcyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKlF1aWNrIFNjYW4gb2YgSW5saW5lIEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBzbyBJIHNlZSBgcGxhX29jcF9yZWFkYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljIGlubGluZWAuIFRoYXQncyBhIGtleSBkZXRhaWwgdG8gbm90ZSBpbW1lZGlhdGVseS4gVGhpcyB0ZWxscyBtZSB0aGUgY29tcGlsZXIgaXMgbGlrZWx5IGdvaW5nIHRvIHRyeSBhbmQgb3B0aW1pemUgdGhpcyBmdW5jdGlvbiBieSBpbmxpbmluZyBpdCB3aGVyZXZlciBpdCdzIGNhbGxlZC4gVGhpcyBtZWFucyB3ZSdsbCBhdm9pZCBhIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQsIGJ1dCBwb3RlbnRpYWxseSBpbmNyZWFzZSBjb2RlIHNpemUgaWYgaXQncyB1c2VkIGEgbG90LiBOZWVkIHRvIGtlZXAgYW4gZXllIG9uIHRoYXQgZHVyaW5nIHBlcmZvcm1hbmNlIGFuYWx5c2lzIGxhdGVyLlxuXG5Ob3csIGxldCdzIHBpdm90IGFuZCBjaGVjayBgdXNiX29jcF93cml0ZWAuIEknbSBjdXJpb3VzIGlmIGl0J3Mgc2ltaWxhcmx5IG9wdGltaXplZCBvciBpZiBpdCdzIGltcGxlbWVudGVkIGRpZmZlcmVudGx5LiBJcyBpdCBhIHJlZ3VsYXIgZnVuY3Rpb24gY2FsbCwgb3IgcGVyaGFwcyBhbm90aGVyIGBzdGF0aWMgaW5saW5lYD8gT3IgbWF5YmUgaXQgaXMgYSBtYWNybyBpbXBsZW1lbnRhdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlYWQgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgdGhlIHdyaXRlIGlzIGNyaXRpY2FsIGZvciBwcm9wZXJseSB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhpcyBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMDQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMDowMC45ODA4Mjk4MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwMDA1MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNiX29jcF93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTM1PXN0YXRpYyBpbmxpbmVcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNTM2OmludCB1c2Jfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzNy17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0zOTM3PXN0YXRpYyB2b2lkIHI4MTUzX3UxdTJlbihzdHJ1Y3QgcjgxNTIgKnRwLCBib29sIGVuYWJsZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTM5NDUtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6Mzk0NjpcXHR1c2Jfb2NwX3dyaXRlKHRwLCBVU0JfVE9MRVJBTkNFLCBCWVRFX0VOX1NJWF9CWVRFUywgc2l6ZW9mKHUxdTIpLCB1MXUyKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0zOTQ3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDA6MDEuMDI2ODQwOTA5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzY1OTI0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcnRsODE1MmAgRHJpdmVyJ3MgQXJjaGl0ZWN0dXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgcnRsODE1MmAgZHJpdmVyIGNvZGUuIEkgc2VlIGEgbG90IG9mIHVzZSBvZiBgc3RhdGljIGlubGluZWAsIHdoaWNoIGlzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQuIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGgsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyBob3cgYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIHRoZW1zZWx2ZXMgYXJlIGhhbmRsZWQsIHNpbmNlIHRob3NlIGFyZSBhbHNvIGBzdGF0aWNgLiBUaGF0IGxpbWl0cyBkaXJlY3QgZXh0ZXJuYWwgY2FsbHMuIEl0IHNlZW1zIGxpa2UgdGhlIGJlc3QgYXBwcm9hY2ggaXMgZ29pbmcgdG8gYmUgdG8gZmluZCBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZXNlLCBvciBwZXJoYXBzIGp1c3QgZ28gcmlnaHQgZm9yIHRoZSBkcml2ZXIncyBlbnRyeSBwb2ludHMuXG5cblRoZSBkcml2ZXIncyBlbnRyeSBwb2ludHMgYXJlIHRoZSBsaWtlbHkgY2FuZGlkYXRlcywgdGhpbmdzIGxpa2UgYHJ0bDgxNTJfcHJvYmVgLCBgcnRsODE1Ml9vcGVuYCwgYHJ0bDgxNTJfc3RhcnRfeG1pdGAsIGBydGw4MTUyX2lvY3RsYCwgYW5kIGBydGw4MTUyX3NldF9tYWNfYWRkcmVzc2AuIFRoZXNlIHNlZW0gbGlrZSB0aGUgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQgZGlnZ2luZy5cblxuSG93ZXZlciwgYSBxdWljayBzY2FuIHNob3dzIHRoYXQgYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIGFyZSBjYWxsZWQgZnJvbSAqbmVhcmx5KiBldmVyeXdoZXJlIHdpdGhpbiB0aGUgZHJpdmVyLiBTbywgSSBuZWVkIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0J3MgZm9jdXMgb24gYHJ0bDgxNTJfcHJvYmVgIGZvciBub3cuIEknbGwgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGVyZSB0aGF0IGxlYWRzLiBJdCdzIHRoZSBuYXR1cmFsIGZpcnN0IHN0ZXAgd2hlbiBhIGRldmljZSBpcyBpbml0aWFsaXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYzNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMDowNS44NjM0MzYxMTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTI1NjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bDgxNTJfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTAwODg9c3RhdGljIGJvb2wgcnRsODE1Ml9zdXBwb3J0c19sZW5vdm9fbWFjcGFzc3RocnUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDExMy1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxMDExNDpzdGF0aWMgaW50IHJ0bDgxNTJfcHJvYmVfb25jZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDExNS1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsIHU4IHZlcnNpb24pXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDMzMC1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxMDMzMTpzdGF0aWMgaW50IHJ0bDgxNTJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTAzMzItXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwMzQ4LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBSVEw4MTUyX1BST0JFX1RSSUVTOyBpKyspIHtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxMDM0OTpcXHRcXHRyZXQgPSBydGw4MTUyX3Byb2JlX29uY2UoaW50ZiwgaWQsIHZlcnNpb24pO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwMzUwLVxcdFxcdGlmIChyZXQgIT0gLUVBR0FJTilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTEwNDI3PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBydGw4MTUyX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwNDI5LVxcdC5pZF90YWJsZSA9XFx0cnRsODE1Ml90YWJsZSxcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxMDQzMDpcXHQucHJvYmUgPVxcdHJ0bDgxNTJfcHJvYmUsXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTA0MzEtXFx0LmRpc2Nvbm5lY3QgPVxcdHJ0bDgxNTJfZGlzY29ubmVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDA6MDUuOTExOTY2OTU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDQ1MTQ5NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBSVEw4MTUyIERyaXZlcioqXG5cbk9rYXksIGBydGw4MTUyX3Byb2JlYCBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uIEknbGwgbWFrZSBzdXJlIHRvIGtlZXAgbXkgZm9jdXMgdGhlcmUgYXMgSSBzdGFydCBhbmFseXppbmcgdGhpcyBjb2RlLiBOb3csIEknbSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgZXhhbWluZSBgcnRsODE1Ml9vcGVuYC4gTGV0J3Mgc2VlIGhvdyB0aGF0IHJvdXRpbmUgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGRyaXZlciBsaWZlY3ljbGU7IHRoaXMgcm91dGluZSBpcyBnb2luZyB0byBiZSB2aXRhbCBmb3IgaW5pdGlhbGl6YXRpb24uIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcmVzb3VyY2VzIGl0IGFjcXVpcmVzLCB0aGUgZGV2aWNlIHNldHRpbmdzIGl0IGVzdGFibGlzaGVzLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjcwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDA6MDguOTE2NDg0NTU3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDU1OTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydGw4MTUyX29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NzA3Nj1zdGF0aWMgaW50IHJ0bF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbixcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTcxMDEtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NzEwMjpzdGF0aWMgaW50IHJ0bDgxNTJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTcxMDMte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9OTY0Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bDgxNTJfbmV0ZGV2X29wcyA9IHtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo5NjQ0OlxcdC5uZG9fb3BlblxcdFxcdD0gcnRsODE1Ml9vcGVuLFxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTk2NDUtXFx0Lm5kb19zdG9wXFx0XFx0PSBydGw4MTUyX2Nsb3NlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMDowOC45NjcwNTAwOTZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1NjczNzQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFJUTDgxNTIgRHJpdmVyKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCB0aGUgUlRMODE1MiBkcml2ZXIuIEdvb2QsIGBydGw4MTUyX29wZW5gIGlzIGEgc29saWQgZnVuY3Rpb24gdG8gc3RhcnQgd2l0aCwgYnV0IGl0J3Mgbm90IHRoZSBjcml0aWNhbCBwaWVjZSByaWdodCBub3cuIE15IGZvY3VzIGlzIG9uIGRhdGEgdHJhbnNtaXNzaW9uLiBOb3csIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUgdHJhbnNtaXNzaW9uIHBhdGguIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGBydGw4MTUyX3N0YXJ0X3htaXRgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGhhcHBlbnMsIHRoZSBuaXR0eS1ncml0dHkgb2YgZ2V0dGluZyBwYWNrZXRzIG91dCB0aGUgZG9vci4gVGhhdCdzIHdoZXJlIGFueSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBhcmUgbGlrZWx5IHRvIGJlLiBUaW1lIHRvIGRpZyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMTMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMDoxMi4wMjM3OTEzNDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTc5MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bDgxNTJfc3RhcnRfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuYz0zMzU1PXJ0bDgxNTJfZmVhdHVyZXNfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTMzNzUtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MzM3NjpzdGF0aWMgbmV0ZGV2X3R4X3QgcnRsODE1Ml9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMzM3Ny1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9OTY0Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bDgxNTJfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTk2NDYtXFx0Lm5kb19ldGhfaW9jdGxcXHRcXHQ9IHJ0bDgxNTJfaW9jdGwsXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6OTY0NzpcXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IHJ0bDgxNTJfc3RhcnRfeG1pdCxcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05NjQ4LVxcdC5uZG9fdHhfdGltZW91dFxcdFxcdD0gcnRsODE1Ml90eF90aW1lb3V0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMDoxMi4wNzEzNzUzNzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwODUzOTc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFJUTDgxNTIgRHJpdmVyKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgUlRMODE1MiBkcml2ZXIgYWdhaW4uIEkndmUgYmVlbiB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSB0cmFuc21pdCBwYXRoLiBNeSBpbml0aWFsIGltcHJlc3Npb24gb2YgYHJ0bDgxNTJfc3RhcnRfeG1pdGAgaXMgdGhhdCBpdCBsb29rcyBwcmV0dHkgc29saWQ7IHRoZSBnZW5lcmFsIGFwcHJvYWNoIHNlZW1zIGxvZ2ljYWwgYW5kIGVmZmljaWVudC4gTm93LCBJJ20gc2hpZnRpbmcgbXkgZm9jdXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyB0aGUgZHJpdmVyIGlzIHdvcmtpbmcgc28gbXkgYXR0ZW50aW9uIGlzIHR1cm5pbmcgdG8gYHJ0bDgxNTJfaW9jdGxgLiBJIGtub3cgdGhhdCdzIHdoZXJlIGEgbG90IG9mIHRoZSBjb25maWd1cmF0aW9uIGFuZCBjb250cm9sIGhhcHBlbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9mIGhvdyB0aGF0IGludGVyYWN0aW9uIHdpbGwgd29yayBhbmQgaG93IGl0IHdpbGwgaW5mbHVlbmNlIGFuZCBhZmZlY3QgdGhlIHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBUaGlzIG5lZWRzIHNvbWUgc2VyaW91cyBpbnNwZWN0aW9uLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjUzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDA6MTYuNTc5OTE4MDM4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMyODUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydGw4MTUyX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTk1MjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05NTUwLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjk1NTE6c3RhdGljIGludCBydGw4MTUyX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtOTU1Mi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz05NjQzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsODE1Ml9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtOTY0NS1cXHQubmRvX3N0b3BcXHRcXHQ9IHJ0bDgxNTJfY2xvc2UsXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6OTY0NjpcXHQubmRvX2V0aF9pb2N0bFxcdFxcdD0gcnRsODE1Ml9pb2N0bCxcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05NjQ3LVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gcnRsODE1Ml9zdGFydF94bWl0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMDoxNi42MjkyNTE5NzdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA0MjMxMTI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzIGluIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCwgYW5kIHRoZXkgc2VlbSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLiBXZSdyZSB0YWxraW5nIGFib3V0IGxvb3AgaXRlcmF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IHdlIGhhbmRsZSByZWFkcy93cml0ZXMgd2hlbiB0aGUgcmVxdWVzdGVkIHNpemUgaXMgbGFyZ2VyIHRoYW4gc29tZSBsaW1pdC4gVGhlIG9sZCBjb2RlIGhhZCB0aGlzIG5lc3RlZCBgaWYvZWxzZWAgc3RydWN0dXJlIHdpdGhpbiB0aGUgYHdoaWxlYCBsb29wLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQuIFRoZSBuZXcgY29kZSwgaG93ZXZlciwgc2ltcGxpZmllcyB0aGluZ3MuIEl0IGV4cGxpY2l0bHkgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBgc2l6ZWAgaXMgZ3JlYXRlciB0aGFuIGBsaW1pdGAgaW4gdGhlIGB3aGlsZWAgbG9vcCwgYW5kIHRoZW4gb3V0c2lkZSB0aGUgbG9vcCwgaXQgYWx3YXlzIGNhbGxzIGBnZXRfcmVnaXN0ZXJzYCB3aXRoIHRoZSByZW1haW5pbmcgYHNpemVgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50LiBUaGUgbG9vcCBkb2VzIHRoZSBjaHVua2VkIG9wZXJhdGlvbnMuIFRoZSBrZXkgZGlmZmVyZW5jZSBJIHNwb3QgaXMgaW4gdGhlIGVkZ2UgY2FzZSB3aGVyZSBgc2l6ZWAgaXMgaW5pdGlhbGx5IHplcm8uIEluIHRoZSBvbGQgY29kZSwgaWYgYHNpemVgIHdhcyB6ZXJvIGF0IHRoZSBzdGFydCwgdGhlIGBnZXRfcmVnaXN0ZXJzYCBmdW5jdGlvbiB3b3VsZG4ndCBoYXZlIGJlZW4gY2FsbGVkIGF0IGFsbC4gVGhlIGVudGlyZSB3aGlsZSBsb29wIHdvdWxkbid0IGV4ZWN1dGUsIGFuZCBjb250cm9sIHdvdWxkIG1vdmUgb24uIEluIHRoZSBuZXcgY29kZSwgZXZlbiBpZiBgc2l6ZWAgaXMgemVybyBpbml0aWFsbHksIGBnZXRfcmVnaXN0ZXJzYCBnZXRzIGNhbGxlZCB3aXRoIGBzaXplID0gMGAuIEhtbSwgdGhhdCdzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBkaWZmZXJlbmNlLlxuXG5Ob3csIG15IG1pbmQgZ29lcyB0bywgXCJJcyBgc2l6ZSA9PSAwYCBhIHZhbGlkIHNjZW5hcmlvIGhlcmU/XCIgV2UgbmVlZCB0byBrbm93IGlmIHRoaXMgY29kZSBwYXRoIGlzICpldmVyKiByZWFjaGVkIHdpdGggYSB6ZXJvIHNpemUgcmVxdWVzdC4gSWYgaXQgaXMsIHRoZW4gdGhlIGJlaGF2aW9yIGNoYW5nZSBpcywgd2VsbCwgYSBjaGFuZ2UhIFdlIG5lZWQgdG8gZXhhbWluZSBgZ2V0X3JlZ2lzdGVyc2AgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGNhbGwsIHdpdGggYHNpemUgPSAwYCwgaXMgYSBoYXJtbGVzcyBuby1vcCwgYW4gZXJyb3IgY29uZGl0aW9uLCBvciBzb21ldGhpbmcgaW4gYmV0d2Vlbi4gTGV0J3Mgc2VlIHdoYXQgYGdldF9yZWdpc3RlcnNgIGFjdHVhbGx5ICpkb2VzKi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExOTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDA6MjMuNjcxNTY2NTU3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQ5MjMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfcmVnaXN0ZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTEzNjk9c3RhdGljXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTM3MDppbnQgZ2V0X3JlZ2lzdGVycyhzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTM3MS17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNDE4PXN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQzNC1cXHR3aGlsZSAoc2l6ZSBcXHUwMDNlIGxpbWl0KSB7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTQzNTpcXHRcXHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0MzYtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDQzLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE0NDQ6XFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0NDUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAwOjIzLjcyNDA2NDY1NloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODk2Mzg1MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgYGdldF9yZWdpc3RlcnNgIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBnZXRfcmVnaXN0ZXJzYCB3b3Jrcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGltcGxlbWVudGF0aW9uIGxvb2tzIGxpa2UuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGNvcmUgbG9naWMuIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgYXNzdW1wdGlvbnMsIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBvciBzb2Z0d2FyZSBjb21wb25lbnRzLiBJ4oCZbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHJlZ2lzdGVyIHR5cGVzLCBhbnkgZXJyb3IgaGFuZGxpbmcsIGFuZCBob3cgZWZmaWNpZW50IGl0IGlzIHdpdGggaXRzIG9wZXJhdGlvbnMuIFRoZSBnb2FsIGlzIHRvIGRldmVsb3AgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGZ1bmN0aW9uYWxpdHkgc28gdGhhdCBJIGNhbiBtb2RpZnkgb3IgZGVidWcgaXQgbGF0ZXIgb24sIGlmIG5lY2Vzc2FyeS4gTGV0J3MgdGFrZSBhIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzM0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDA6MjYuNjIwNDUyNjE4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzY5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzY5OlxcdHN0YXRpY1xcbjEzNzA6XFx0aW50IGdldF9yZWdpc3RlcnMoc3RydWN0IHI4MTUyICp0cCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbjEzNzE6XFx0e1xcbjEzNzI6XFx0XFx0aW50IHJldDtcXG4xMzczOlxcdFxcdHZvaWQgKnRtcDtcXG4xMzc0OlxcdFxcbjEzNzU6XFx0XFx0dG1wID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcXG4xMzc2OlxcdFxcdGlmICghdG1wKVxcbjEzNzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTM3ODpcXHRcXG4xMzc5OlxcdFxcdHJldCA9IHI4MTUyX2NvbnRyb2xfbXNnKHRwLCB0cC1cXHUwMDNlcGlwZV9jdHJsX2luLFxcbjEzODA6XFx0XFx0XFx0XFx0XFx0UlRMODE1Ml9SRVFfR0VUX1JFR1MsIFJUTDgxNTJfUkVRVF9SRUFELFxcbjEzODE6XFx0XFx0XFx0XFx0XFx0dmFsdWUsIGluZGV4LCB0bXAsIHNpemUsIFxcXCJyZWFkXFxcIik7XFxuMTM4MjpcXHRcXG4xMzgzOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjEzODQ6XFx0XFx0XFx0bWVtc2V0KGRhdGEsIDB4ZmYsIHNpemUpO1xcbjEzODU6XFx0XFx0ZWxzZVxcbjEzODY6XFx0XFx0XFx0bWVtY3B5KGRhdGEsIHRtcCwgc2l6ZSk7XFxuMTM4NzpcXHRcXG4xMzg4OlxcdFxcdGtmcmVlKHRtcCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAwOjI2LjYyMDczMzU4OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTIwMzQ0OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEJ1ZyBpbiB0aGUgcjgxNTIgRHJpdmVyKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nOiBJZiB0aGUgYHNpemVgIGlzIHplcm8sIGBrbWFsbG9jKDAsIEdGUF9LRVJORUwpYCByZXR1cm5zIGBaRVJPX1NJWkVfUFRSYC4gVGhpcyBpcyBzdGFuZGFyZCwgYnV0IHRoZSBjcnVjaWFsIHBhcnQgaXMgdGhhdCBgcjgxNTJfY29udHJvbF9tc2dgIGlzIHRoZW4gY2FsbGVkIHdpdGggdGhpcyBgc2l6ZSA9IDBgIGFuZCBgdG1wID0gWkVST19TSVpFX1BUUmAuIEhtbSwgdGhhdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBpdCAqY291bGQqIGRlZmluaXRlbHkgb3BlbiB0aGUgZG9vciB0byBzb21lIG5hc3R5IGJ1Z3MgaWYgYHNpemVgIGJlaW5nIHplcm8gaXNuJ3QgaGFuZGxlZCBjb3JyZWN0bHkgZG93biB0aGUgbGluZS4gSSd2ZSBzZWVuIHRoaW5ncyBsaWtlIHRoaXMgYmVmb3JlOyBpdCdzIHN1YnRsZSwgYnV0IGl0J3MgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSBjcmFzaGVzLiBQbHVzLCBJIG5vdGljZWQgdGhlIGxvb3AgbG9naWMgZ290IHNpbXBsaWZpZWQsIHNvIHRoZXJlIG1heSBiZSBvdGhlciBidWdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNoYW5nZS5cblxuVGhpcyB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZywgbm8gcXVlc3Rpb24uIEkgc2hvdWxkIGZvY3VzIG15IGVmZm9ydHMgb24gdGhlc2Ugc3ltYm9sczogYHJ0bDgxNTJfcHJvYmVgLCBgcnRsODE1Ml9vcGVuYCwgYHJ0bDgxNTJfc3RhcnRfeG1pdGAsIGFuZCBgcnRsODE1Ml9pb2N0bGAuIFRob3NlIHNlZW0gbGlrZSB0aGUgbGlrZWx5IHBsYWNlcyB3aGVyZSB0aGlzIHplcm8tc2l6ZSBzY2VuYXJpbyB3b3VsZCBtYW5pZmVzdC5cblxuUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIEknbGwgbmVlZCB0byBlbmFibGUgYSBmZXcga2VybmVsIG9wdGlvbnMgdG8gZ2V0IHRoaXMgZHJpdmVyIGNvbXBpbGVkIGluLiBPYnZpb3VzbHksIGBVU0JfUlRMODE1MmAgaXMgZXNzZW50aWFsLCBhbmQgYXMgYSBwcmVjYXV0aW9uIEknbGwgaGF2ZSBgVVNCX05FVF9EUklWRVJTYCBlbmFibGVkIHRvbywganVzdCBpbiBjYXNlLiBJJ2xsIG5lZWQgYE1JSWAsIGBQSFlMSUJgLCBgQ1JDMzJgLCBhbmQgYENSWVBUT19MSUJfU0hBMjU2YCBhcyB3ZWxsLCBidXQgaXQgbG9va3MgbGlrZSBgVVNCX1JUTDgxNTJgIHNlbGVjdHMgdGhvc2UgYXV0b21hdGljYWxseSwgc28gdGhhdCdzIGdvb2QuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlLWNoZWNrIGBVU0JfTkVUX0RSSVZFUlNgIGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUuIFl1cCwgaXQncyBhIG1lbnVjb25maWcsIHdoaWNoIG1lYW5zIGl0IGRvZXNuJ3QgZGlyZWN0bHkgZW5hYmxlIHRoZSBkcml2ZXIgaXRzZWxmIGJ1dCByYXRoZXIgcHJvdmlkZXMgYSBjYXRlZ29yeSBpbiBgbWVudWNvbmZpZ2AuIEdyZWF0LCBpdCBsb29rcyBsaWtlIGp1c3QgZW5hYmxpbmcgYFVTQl9SVEw4MTUyYCB3aWxsIGJlIHN1ZmZpY2llbnQgdG8gZ2V0IGV2ZXJ5dGhpbmcgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAwOjMzLjE0MTA4MTQ5NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4Nzc0MjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTU9Y29tbWVudCBcXFwiSG9zdC1zaWRlIFVTQiBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE5ldHdvcmsgQWRhcHRlciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNy1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo4Om1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctOS1cXHR0cmlzdGF0ZSBcXFwiVVNCIE5ldHdvcmsgQWRhcHRlcnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAwOjMzLjMzOTg2MTI5MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg5NTU0MDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gV29ya2Zsb3cqKlxuXG5Pa2F5LCBzbyBgVVNCX05FVF9EUklWRVJTYCBpcyBkZWZpbml0ZWx5IGEgbWVudWNvbmZpZyBvcHRpb24g4oCTIGEgY29uZmlndXJhdGlvbiBpdGVtIHRoYXQgbmVlZHMgdG8gYmUgZXhwbGljaXRseSBlbmFibGVkIGluIHRoZSBidWlsZCBzeXN0ZW0uIEdvdCBpdC4gU28sIEkgbmVlZCB0byBpbmNvcnBvcmF0ZSBib3RoIGBVU0JfTkVUX0RSSVZFUlNgIGFuZCB0aGUgc3BlY2lmaWMgYFVTQl9SVEw4MTUyYCBkcml2ZXIgaW50byBteSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgcmV2aWV3IHRob3NlIGNydWNpYWwgc3ltYm9scyByZWxhdGVkIHRvIHRoZSBSVEw4MTUyIGRyaXZlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBjcml0aWNhbCBlbnRyeSBwb2ludHMuIEkndmUgZ290IGBydGw4MTUyX3Byb2JlYCwgYHJ0bDgxNTJfb3BlbmAsIGBydGw4MTUyX3N0YXJ0X3htaXRgLCBhbmQgYHJ0bDgxNTJfaW9jdGxgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGNvcmUgZnVuY3Rpb25zLCBidXQgSSB3YW50IHRvIGJlIHRob3JvdWdoLiBBcmUgdGhlcmUgYW55IG90aGVyIGVxdWFsbHkgc2lnbmlmaWNhbnQgZW50cnkgcG9pbnRzIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nIHdpdGhpbiB0aGlzIGRyaXZlcj8gSSBuZWVkIHRvIGJlIGNlcnRhaW4gSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3OTYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDA6MzcuMDI5NDE4NDA0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODkzNDU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydGw4MTUyX25ldGRldl9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9OTU5NT1zdGF0aWMgaW50IHJ0bDgxNTJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTk2NDItXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6OTY0MzpzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bDgxNTJfbmV0ZGV2X29wcyA9IHtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05NjQ0LVxcdC5uZG9fb3BlblxcdFxcdD0gcnRsODE1Ml9vcGVuLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTAxMTQ9c3RhdGljIGludCBydGw4MTUyX3Byb2JlX29uY2Uoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDE3MS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxMDE3MjpcXHRuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2cnRsODE1Ml9uZXRkZXZfb3BzO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwMTczLVxcdG5ldGRldi1cXHUwMDNld2F0Y2hkb2dfdGltZW8gPSBSVEw4MTUyX1RYX1RJTUVPVVQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAwOjM3LjA3ODM2MzM4NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzM4MjM4MjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGBydGw4MTUyX25ldGRldl9vcHNgIHN0cnVjdHVyZS4gSSBrbm93IHRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBkcml2ZXIsIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgUmVhbHRlayA4MTUyIFVTQiBldGhlcm5ldCBhZGFwdGVyIGFuZCB0aGUgbmV0d29yayBzdGFjay4gSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aCBuZXRkZXZfb3BzIGluIGdlbmVyYWwsIG9mIGNvdXJzZSwgYnV0IEkgbmVlZCB0byBzZWUgKnRoaXMqIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBXaGF0IGRpZCB0aGV5IGNob29zZSB0byBkbyBoZXJlLCB3aGF0IHRyaWNrcyBkaWQgdGhleSB1c2U/IEknbSBsb29raW5nIGZvciB0aGUga2V5IGZ1bmN0aW9uczogYG5kb19vcGVuYCwgYG5kb19zdG9wYCwgYG5kb19zdGFydF94bWl0YCwgYG5kb19zZXRfbWFjX2FkZHJlc3NgLCB0aGUgd2hvbGUgc2hlYmFuZy4gVW5kZXJzdGFuZGluZyB0aGVzZSB3aWxsIGltbWVkaWF0ZWx5IHRlbGwgbWUgaG93IHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiwgdHJhbnNtaXNzaW9uLCByZWNlcHRpb24sIGFuZCBtYW5hZ2VtZW50IGFyZSBoYW5kbGVkLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5J3ZlIGhhbmRsZWQgdGhlIFVTQiBpbnRlcmFjdGlvbnMsIERNQSwgYnVmZmVyIG1hbmFnZW1lbnQsIGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoaXMgc3BlY2lmaWMgY2hpcC4gQXJlIHRoZXkgdXNpbmcgdGhlIHN0YW5kYXJkIFVTQiBkcml2ZXJzIGVmZmljaWVudGx5PyBBcmUgdGhlcmUgYW55IGN1c3RvbSBvcHRpbWl6YXRpb25zPyBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NjUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMDo0MS40MTY2MDQ1NTdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAxMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk2NDMsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjk2NDM6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGw4MTUyX25ldGRldl9vcHMgPSB7XFxuOTY0NDpcXHRcXHQubmRvX29wZW5cXHRcXHQ9IHJ0bDgxNTJfb3BlbixcXG45NjQ1OlxcdFxcdC5uZG9fc3RvcFxcdFxcdD0gcnRsODE1Ml9jbG9zZSxcXG45NjQ2OlxcdFxcdC5uZG9fZXRoX2lvY3RsXFx0XFx0PSBydGw4MTUyX2lvY3RsLFxcbjk2NDc6XFx0XFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBydGw4MTUyX3N0YXJ0X3htaXQsXFxuOTY0ODpcXHRcXHQubmRvX3R4X3RpbWVvdXRcXHRcXHQ9IHJ0bDgxNTJfdHhfdGltZW91dCxcXG45NjQ5OlxcdFxcdC5uZG9fc2V0X2ZlYXR1cmVzXFx0PSBydGw4MTUyX3NldF9mZWF0dXJlcyxcXG45NjUwOlxcdFxcdC5uZG9fc2V0X3J4X21vZGVcXHQ9IHJ0bDgxNTJfc2V0X3J4X21vZGUsXFxuOTY1MTpcXHRcXHQubmRvX3NldF9tYWNfYWRkcmVzc1xcdD0gcnRsODE1Ml9zZXRfbWFjX2FkZHJlc3MsXFxuOTY1MjpcXHRcXHQubmRvX2NoYW5nZV9tdHVcXHRcXHQ9IHJ0bDgxNTJfY2hhbmdlX210dSxcXG45NjUzOlxcdFxcdC5uZG9fdmFsaWRhdGVfYWRkclxcdD0gZXRoX3ZhbGlkYXRlX2FkZHIsXFxuOTY1NDpcXHRcXHQubmRvX2ZlYXR1cmVzX2NoZWNrXFx0PSBydGw4MTUyX2ZlYXR1cmVzX2NoZWNrLFxcbjk2NTU6XFx0fTtcXG45NjU2OlxcdFxcbjk2NTc6XFx0c3RhdGljIHZvaWQgcnRsODE1Ml91bmxvYWQoc3RydWN0IHI4MTUyICp0cClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDA6NDEuNDE2OTA4OTY4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTYwNDAzMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiByODE1MiBVU0IgTmV0d29yayBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgcjgxNTIgZHJpdmVyLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgdG91Y2hlcyBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGBydGw4MTUyX3Byb2JlYCwgYHJ0bDgxNTJfb3BlbmAsIGBydGw4MTUyX3N0YXJ0X3htaXRgLCBgcnRsODE1Ml9pb2N0bGAsIGBydGw4MTUyX3NldF9tYWNfYWRkcmVzc2AsIGFuZCBgcnRsODE1Ml9jaGFuZ2VfbXR1YC4gVGhlc2UgYWxsIHNlZW0gbGlrZSBsb2dpY2FsIGFkZGl0aW9ucyBmb3IgYSBwYXRjaCBvZiB0aGlzIHNjb3BlLCBnaXZlbiB0aGF0IGBydGw4MTUyX3NldF9mZWF0dXJlc2AsIGBydGw4MTUyX3NldF9yeF9tb2RlYCwgYHJ0bDgxNTJfc2V0X21hY19hZGRyZXNzYCwgYW5kIGBydGw4MTUyX2NoYW5nZV9tdHVgIGFyZSBhbHJlYWR5IGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzLlxuXG5Ib3dldmVyLCB0aGUgY29yZSBvZiB0aGUgbWF0dGVyIHNlZW1zIHRvIGJlIGluIHRoZSBtb2RpZmljYXRpb25zIHRvIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYC4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsOyB0aGV5J3JlIHVzZWQgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiwgY29uZmlndXJhdGlvbiwgYW5kIHRocm91Z2hvdXQgdGhlIGRldmljZSdzIG9wZXJhdGlvbmFsIGxpZmV0aW1lLiBUaGUgY2hhbmdlcyBzaW1wbGlmeSB0aGUgbG9vcCBsb2dpYyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnIGZvciBtZS4gQW55IGFsdGVyYXRpb24gdG8gY29yZSBsb3ctbGV2ZWwgb3BlcmF0aW9ucyBsaWtlIHRoZXNlLCBlc3BlY2lhbGx5IGludm9sdmluZyByZWdpc3RlciByZWFkcyBhbmQgd3JpdGVzLCB3YXJyYW50cyBjbG9zZSBzY3J1dGlueS5cblxuVGhlIHNpbXBsaWZpY2F0aW9uIGludm9sdmVzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgY2hhbmdlIGluIGJlaGF2aW9yLiBUaGUgb2xkIGNvZGUgd2FzIGhhbmRsaW5nIGNhc2VzIHdoZXJlIHRoZSBgc2l6ZWAgYXJndW1lbnQgd2FzIGEgbXVsdGlwbGUgb2YgYGxpbWl0YCBkaWZmZXJlbnRseS4gVGhlIGtleSBkaWZmZXJlbmNlIEknbSBzZWVpbmcgaXMgaG93IHRoZSBuZXcgY29kZSBoYW5kbGVzIHRoZSBzY2VuYXJpbyB3aGVyZSB0aGUgaW5pdGlhbCBgc2l6ZWAgaXMgemVyby4gSW4gdGhlIG9sZCBjb2RlLCBpZiBgc2l6ZWAgd2FzIGluaXRpYWxseSB6ZXJvLCB0aGUgbG9vcCB3b3VsZG4ndCBydW4uIFRoZSBuZXcgY29kZSwgaG93ZXZlciwgKmRvZXMqIGV4ZWN1dGUgdGhlIGBnZXRfcmVnaXN0ZXJzYCAob3IgYHNldF9yZWdpc3RlcnNgKSBmdW5jdGlvbiB3aXRoIGEgYHNpemVgIG9mIHplcm8gaW4gdGhpcyBjYXNlLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEEgY2xlYXIgYW5kIGRpcmVjdCBhbHRlcmF0aW9uIG9mIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgcmVnYXJkbGVzcyBvZiBob3cgbWlub3IgaXQgYXBwZWFycy4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgdmFyaWV0eSBvZiBpc3N1ZXMsIHN1Y2ggYXMgemVyby1zaXplIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5leHBlY3RlZCBiZWhhdmlvciBmcm9tIFVTQiBjb250cm9sIG1lc3NhZ2VzLCBvciBvdGhlciBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzLlxuXG5HaXZlbiB0aGlzLCBJJ20gY2FsbGluZyBpdDogV29ydGhGdXp6aW5nOiB0cnVlLiBUaGUgcmVhc29uIGlzIHRoZSBmdW5jdGlvbmFsIGNoYW5nZSBJJ3ZlIGlkZW50aWZpZWQgaW4gYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgLCBwYXJ0aWN1bGFybHkgdGhlIGhhbmRsaW5nIG9mIGEgemVybyBgc2l6ZWAgYXJndW1lbnQuIFRvIGJlIHByZWNpc2UsIEknbSB0YXJnZXRpbmcgdGhlIGZ1bmN0aW9ucyBJIHByZXZpb3VzbHkgaWRlbnRpZmllZCBmb3IgdGVzdGluZzogYHJ0bDgxNTJfcHJvYmVgLCBgcnRsODE1Ml9vcGVuYCwgYHJ0bDgxNTJfc3RhcnRfeG1pdGAsIGBydGw4MTUyX2lvY3RsYCwgYHJ0bDgxNTJfc2V0X21hY19hZGRyZXNzYCwgYW5kIGBydGw4MTUyX2NoYW5nZV9tdHVgLiBBbmQgb2YgY291cnNlLCB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgd291bGQgYmUgYFVTQl9ORVRfRFJJVkVSU2AgYW5kIGBVU0JfUlRMODE1MmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDk0LCJPdXRwdXRUb2tlbnMiOjE5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAwOjUyLjM3NzMxNTgxNloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MjM1NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIixcbiAgICBcIlVTQl9SVEw4MTUyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRsODE1Ml9wcm9iZVwiLFxuICAgIFwicnRsODE1Ml9vcGVuXCIsXG4gICAgXCJydGw4MTUyX3N0YXJ0X3htaXRcIixcbiAgICBcInJ0bDgxNTJfaW9jdGxcIixcbiAgICBcInJ0bDgxNTJfc2V0X21hY19hZGRyZXNzXCIsXG4gICAgXCJydGw4MTUyX2NoYW5nZV9tdHVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9vcCBsb2dpYyBpbiBnZW5lcmljX29jcF9yZWFkIGFuZCBnZW5lcmljX29jcF93cml0ZSBpbiB0aGUgcjgxNTIgVVNCIG5ldHdvcmsgZHJpdmVyLiBUaGUgcmVmYWN0b3JlZCBjb2RlIG5vdyBleGVjdXRlcyBnZXRfcmVnaXN0ZXJzL3NldF9yZWdpc3RlcnMgZXZlbiBpZiB0aGUgaW5pdGlhbCBzaXplIGlzIDAsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjb3VsZCB0cmlnZ2VyIGJ1Z3MgKGUuZy4sIHplcm8tc2l6ZSBhbGxvY2F0aW9ucyBvciBVU0IgY29udHJvbCBtZXNzYWdlcykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9EUklWRVJTXCIsXG4gICAgXCJVU0JfUlRMODE1MlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bDgxNTJfcHJvYmVcIixcbiAgICBcInJ0bDgxNTJfb3BlblwiLFxuICAgIFwicnRsODE1Ml9zdGFydF94bWl0XCIsXG4gICAgXCJydGw4MTUyX2lvY3RsXCIsXG4gICAgXCJydGw4MTUyX3NldF9tYWNfYWRkcmVzc1wiLFxuICAgIFwicnRsODE1Ml9jaGFuZ2VfbXR1XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvb3AgbG9naWMgaW4gZ2VuZXJpY19vY3BfcmVhZCBhbmQgZ2VuZXJpY19vY3Bfd3JpdGUgaW4gdGhlIHI4MTUyIFVTQiBuZXR3b3JrIGRyaXZlci4gVGhlIHJlZmFjdG9yZWQgY29kZSBub3cgZXhlY3V0ZXMgZ2V0X3JlZ2lzdGVycy9zZXRfcmVnaXN0ZXJzIGV2ZW4gaWYgdGhlIGluaXRpYWwgc2l6ZSBpcyAwLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY291bGQgdHJpZ2dlciBidWdzIChlLmcuLCB6ZXJvLXNpemUgYWxsb2NhdGlvbnMgb3IgVVNCIGNvbnRyb2wgbWVzc2FnZXMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMDo1Mi40NTY1NjYwMjVaIiwiU2VxIjozOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODY5NjgxOTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAwOjUyLjQ1NzEyNDYzNVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDg2OTYyNTYxODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2h1bmtpbmcgbG9vcHMgaW4gYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIGZvciB0aGUgcjgxNTIgZHJpdmVyLiBJbiBgZ2VuZXJpY19vY3Bfd3JpdGVgLCBpZiBgc2l6ZSA9PSA0YCBhbmQgYGJ5ZW4gIT0gQllURV9FTl9EV09SRGAsIGBzaXplYCBpcyBkZWNyZW1lbnRlZCBieSA0IHRvIDAuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYHdoaWxlIChzaXplKWAgYW5kIHNraXBwZWQgdGhlIGxvb3AsIHdoZXJlYXMgdGhlIG5ldyBjb2RlIHVzZXMgYHdoaWxlIChzaXplIFxcdTAwM2UgbGltaXQpYCBhbmQgdW5jb25kaXRpb25hbGx5IGNhbGxzIGBzZXRfcmVnaXN0ZXJzYCB3aXRoIHRoZSByZW1haW5pbmcgYHNpemVgICh3aGljaCBpcyAwKS4gVGhpcyByZXN1bHRzIGluIGEgMC1sZW5ndGggY29udHJvbCBtZXNzYWdlIGJlaW5nIHNlbnQgdG8gdGhlIFVTQiBkZXZpY2UuIEEgMC1sZW5ndGggd3JpdGUgYWxsb2NhdGVzIGEgYFpFUk9fU0laRV9QVFJgIHZpYSBga21lbWR1cChkYXRhLCAwLCBHRlBfS0VSTkVMKWAgYW5kIHBhc3NlcyBpdCB0byBgdXNiX2NvbnRyb2xfbXNnYCwgd2hpY2ggaGFuZGxlcyAwLWxlbmd0aCB0cmFuc2ZlcnMgc2FmZWx5IHdpdGhvdXQgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSW4gYGdlbmVyaWNfb2NwX3JlYWRgLCBgc2l6ZWAgaXMgdmFsaWRhdGVkIHRvIGJlIG5vbi16ZXJvIGFuZCBhIG11bHRpcGxlIG9mIDQgaW5pdGlhbGx5LCBhbmQgaXMgbmV2ZXIgZGVjcmVtZW50ZWQgYmVmb3JlIHRoZSBsb29wLiBUaHVzLCBgZ2V0X3JlZ2lzdGVyc2AgaXMgbmV2ZXIgY2FsbGVkIHdpdGggYHNpemUgPSAwYCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGNvcGllZCBvciBleHBvc2VkLiBTaW5jZSB0aGUgcGF0Y2ggb25seSBpbnRyb2R1Y2VzIGEgcG90ZW50aWFsIDAtbGVuZ3RoIFVTQiBjb250cm9sIG1lc3NhZ2UgYW5kIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gQW55IHBvdGVudGlhbCBjcmFzaGVzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZWU3OWQ2Mzk4ZWQ3Y2I5ZWQyM2Y1MWI1ZDY3ZmFhY2MyZWQwY2I2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMjA6NTk6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcjgxNTIuYyBiL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXG5pbmRleCBmNjE2ODY0MzMwMzFjLi5kZTk3MzhiZGNlODU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXG5AQCAtMTQzMSwyNyArMTQzMSwxOSBAQCBzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgc2l6ZSxcbiBcdGlmICgodTMyKWluZGV4ICsgKHUzMilzaXplIFx1MDAzZSAweGZmZmYpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHR3aGlsZSAoc2l6ZSkge1xuLVx0XHRpZiAoc2l6ZSBcdTAwM2UgbGltaXQpIHtcbi1cdFx0XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRicmVhaztcbi1cbi1cdFx0XHRpbmRleCArPSBsaW1pdDtcbi1cdFx0XHRkYXRhICs9IGxpbWl0O1xuLVx0XHRcdHNpemUgLT0gbGltaXQ7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRicmVhaztcbitcdHdoaWxlIChzaXplIFx1MDAzZSBsaW1pdCkge1xuK1x0XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyb3IxO1xuIFxuLVx0XHRcdGluZGV4ICs9IHNpemU7XG4tXHRcdFx0ZGF0YSArPSBzaXplO1xuLVx0XHRcdHNpemUgPSAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4rXHRcdGluZGV4ICs9IGxpbWl0O1xuK1x0XHRkYXRhICs9IGxpbWl0O1xuK1x0XHRzaXplIC09IGxpbWl0O1xuIFx0fVxuIFxuK1x0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xuK1xuK2Vycm9yMTpcbiBcdGlmIChyZXQgPT0gLUVOT0RFVilcbiBcdFx0cnRsX3NldF91bnBsdWcodHApO1xuIFxuQEAgLTE0OTgsMzEgKzE0OTAsMjQgQEAgc3RhdGljIGludCBnZW5lcmljX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sXG4gXHRcdGlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpXG4gXHRcdFx0c2l6ZSAtPSA0O1xuIFxuLVx0XHR3aGlsZSAoc2l6ZSkge1xuLVx0XHRcdGlmIChzaXplIFx1MDAzZSBsaW1pdCkge1xuLVx0XHRcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsXG4tXHRcdFx0XHRcdFx0ICAgIHR5cGUgfCBCWVRFX0VOX0RXT1JELFxuLVx0XHRcdFx0XHRcdCAgICBsaW1pdCwgZGF0YSk7XG4tXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdFx0XHRnb3RvIGVycm9yMTtcbi1cbi1cdFx0XHRcdGluZGV4ICs9IGxpbWl0O1xuLVx0XHRcdFx0ZGF0YSArPSBsaW1pdDtcbi1cdFx0XHRcdHNpemUgLT0gbGltaXQ7XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LFxuLVx0XHRcdFx0XHRcdCAgICB0eXBlIHwgQllURV9FTl9EV09SRCxcbi1cdFx0XHRcdFx0XHQgICAgc2l6ZSwgZGF0YSk7XG4tXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdFx0XHRnb3RvIGVycm9yMTtcbi1cbi1cdFx0XHRcdGluZGV4ICs9IHNpemU7XG4tXHRcdFx0XHRkYXRhICs9IHNpemU7XG4tXHRcdFx0XHRzaXplID0gMDtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbitcdFx0d2hpbGUgKHNpemUgXHUwMDNlIGxpbWl0KSB7XG4rXHRcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELFxuK1x0XHRcdFx0XHQgICAgbGltaXQsIGRhdGEpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycm9yMTtcbitcbitcdFx0XHRpbmRleCArPSBsaW1pdDtcbitcdFx0XHRkYXRhICs9IGxpbWl0O1xuK1x0XHRcdHNpemUgLT0gbGltaXQ7XG4gXHRcdH1cbiBcbitcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELCBzaXplLCBkYXRhKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycm9yMTtcbitcbitcdFx0aW5kZXggKz0gc2l6ZTtcbitcdFx0ZGF0YSArPSBzaXplO1xuK1xuIFx0XHQvKiBTZXQgdGhlIGxhc3QgRFdPUkQgKi9cbiBcdFx0aWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRClcbiBcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSB8IGJ5ZW4sIDQsIGRhdGEpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDA6NTIuNDU3MTI1NjY1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMTk2MTQxOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWdpc3RlciBSZWFkL1dyaXRlIFJlZmFjdG9yaW5nIGluIGByODE1Mi5jYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGByODE1Mi5jYCwgYW5kIGl0J3MgdG91Y2hpbmcgdGhlIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBmdW5jdGlvbnMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXkncmUgdHJ5aW5nIHRvIHJlZmFjdG9yIHRoZSB3YXkgdGhlIHJlZ2lzdGVyIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyBoYW5kbGUgZGF0YSBpbiBjaHVua3MuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYHdoaWxlYCBsb29wcyB0byBwcm9jZXNzIHRoZSBkYXRhIGluIHRoZXNlIGNodW5rcy5cblxuU3BlY2lmaWNhbGx5LCBpbiBgZ2VuZXJpY19vY3BfcmVhZGAsIEknbSBzZWVpbmcgYSBjaGFuZ2UgdG8gdGhpcyBjaHVuay1yZWFkaW5nIGxvb3AuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGB3aGlsZSAoc2l6ZSlgIGxvb3Agd2l0aCBhbiBgaWYvZWxzZWAgdGhhdCBtYW5hZ2VkIHRoZSBjaHVuayBzaXplLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgc2ltcGxpZmllZCBpdCwgbm93IHVzaW5nIGEgYHdoaWxlIChzaXplIFx1MDAzZSBsaW1pdClgIHN0cnVjdHVyZS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgXCJXYWl0LCB3aGF0IGlmIGBzaXplYCAqaXMqIHplcm8/XCIgVGhlIG9yaWdpbmFsIGNvZGUgd291bGRuJ3QgaGF2ZSBlbnRlcmVkIHRoZSBsb29wIGlmIGBzaXplYCB3YXMgMCBiZWNhdXNlIG9mIHRoZSBgd2hpbGUgKHNpemUpYCBjb25kaXRpb24uIE5vdywgd2l0aCB0aGUgbmV3IGB3aGlsZSAoc2l6ZSBcdTAwM2UgbGltaXQpYCBjb25kaXRpb24gYW5kIGFzc3VtaW5nIGBsaW1pdGAgaXMgcG9zaXRpdmUsIHRoZSBsb29wICp3b3VsZCogYmUgc2tpcHBlZCBpZiBgc2l6ZWAgaXMgMC4gSG93ZXZlciwgdGhlIGNvZGUgKmltbWVkaWF0ZWx5IGFmdGVyIHRoZSBsb29wKiBjYWxscyBgZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO2Agd2l0aCB0aGUgY3VycmVudCB2YWx1ZSBvZiBgc2l6ZWAsIHdoaWNoIGNvdWxkIGJlIDAuIFRoYXQncyBhIHBvdGVudGlhbCBhcmVhIG9mIGNvbmNlcm4uIElzIGBzaXplYCBldmVyIGFjdHVhbGx5IHplcm8gaW4gcHJhY3RpY2U/XG5cblRoZSBtYWluIHBvaW50IG9mIGNvbmNlcm4gaXMgdGhhdCBgZ2VuZXJpY19vY3BfcmVhZGAgaXMgdXNlZCB0byByZWFkIGRhdGEgZnJvbSB0aGUgZGV2aWNlIGludG8gYGRhdGFgLiBJZiBgZ2V0X3JlZ2lzdGVyc2AgaXMgY2FsbGVkIHdpdGggYSBgc2l6ZSA9IDBgLCB3aGF0IGhhcHBlbnM/IEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgYGdldF9yZWdpc3RlcnNgIGZ1bmN0aW9uIGl0c2VsZiB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYW5kIGRldGVybWluZSBpZiB0aGUgY29kZSBpcyBoYW5kbGluZyB0aGUgemVyby1zaXplZCByZWFkIGNvcnJlY3RseS4gVGhpcyByZWZhY3RvciBpcyB0cnlpbmcgdG8gYWRkcmVzcyBzb21ldGhpbmcgYnV0IHRoaXMgZWRnZSBjYXNlIGNvdWxkIGJlIGludHJvZHVjZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMDo1OS42NzY3NDMzODJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NDAwNTA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfcmVnaXN0ZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTEzNjk9c3RhdGljXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTM3MDppbnQgZ2V0X3JlZ2lzdGVycyhzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTM3MS17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNDE4PXN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQzNC1cXHR3aGlsZSAoc2l6ZSBcXHUwMDNlIGxpbWl0KSB7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTQzNTpcXHRcXHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0MzYtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDQzLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE0NDQ6XFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0NDUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAxOjAwLjAyMDc1NDg5N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzYzODk0ODg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgUmVnaXN0ZXIgUmV0cmlldmFsIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBnZXRfcmVnaXN0ZXJzYCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGhvdyBpdCdzIHN0cnVjdHVyZWQuIEknbSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFyZWFzIHdoZXJlIG9wdGltaXphdGlvbnMgbWlnaHQgYmUgcG9zc2libGUsIGFuZCwgY3JpdGljYWxseSwgYW55IGFyZWFzIHRoYXQgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIGJ1Z3MuIEknbSBleHBlY3RpbmcgYSBjbGVhbiwgZWZmaWNpZW50IGFwcHJvYWNoLCBnaXZlbiB0aGUgbGlrZWx5IHBlcmZvcm1hbmNlIGRlbWFuZHMgb2YgcmVnaXN0ZXIgYWNjZXNzLCBidXQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW46IHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB0byBzdG9yZSB0aGUgcmVnaXN0ZXIgdmFsdWVzIChhcmUgdGhleSBhcHByb3ByaWF0ZSBmb3IgdGhlIHNjYWxlPyksIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgZW1wbG95ZWQgKGlmIGFueSwgYW5kIGFyZSB0aGV5IHN1ZmZpY2llbnQgZm9yIHRoZSBleHBlY3RlZCBjb25jdXJyZW5jeT8pLCBhbmQgYW55IGV4dGVybmFsIGRlcGVuZGVuY2llcy4gSSdtIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCB0cnlpbmcgdG8gYW50aWNpcGF0ZSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBhbnkgY2FjaGluZyBvciBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVnaWVzIHRoYXQgbWlnaHQgYmUgaW4gcGxhY2UgZWxzZXdoZXJlIGluIHRoZSBzeXN0ZW0uIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk0NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAxOjAzLjM4NDY1Mjk5NFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM2OSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM2OTpcXHRzdGF0aWNcXG4xMzcwOlxcdGludCBnZXRfcmVnaXN0ZXJzKHN0cnVjdCByODE1MiAqdHAsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCB1MTYgc2l6ZSwgdm9pZCAqZGF0YSlcXG4xMzcxOlxcdHtcXG4xMzcyOlxcdFxcdGludCByZXQ7XFxuMTM3MzpcXHRcXHR2b2lkICp0bXA7XFxuMTM3NDpcXHRcXG4xMzc1OlxcdFxcdHRtcCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuMTM3NjpcXHRcXHRpZiAoIXRtcClcXG4xMzc3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjEzNzg6XFx0XFxuMTM3OTpcXHRcXHRyZXQgPSByODE1Ml9jb250cm9sX21zZyh0cCwgdHAtXFx1MDAzZXBpcGVfY3RybF9pbixcXG4xMzgwOlxcdFxcdFxcdFxcdFxcdFJUTDgxNTJfUkVRX0dFVF9SRUdTLCBSVEw4MTUyX1JFUVRfUkVBRCxcXG4xMzgxOlxcdFxcdFxcdFxcdFxcdHZhbHVlLCBpbmRleCwgdG1wLCBzaXplLCBcXFwicmVhZFxcXCIpO1xcbjEzODI6XFx0XFxuMTM4MzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMzg0OlxcdFxcdFxcdG1lbXNldChkYXRhLCAweGZmLCBzaXplKTtcXG4xMzg1OlxcdFxcdGVsc2VcXG4xMzg2OlxcdFxcdFxcdG1lbWNweShkYXRhLCB0bXAsIHNpemUpO1xcbjEzODc6XFx0XFxuMTM4ODpcXHRcXHRrZnJlZSh0bXApO1xcbjEzODk6XFx0XFxuMTM5MDpcXHRcXHRyZXR1cm4gcmV0O1xcbjEzOTE6XFx0fVxcbjEzOTI6XFx0XFxuMTM5MzpcXHRzdGF0aWNcXG4xMzk0OlxcdGludCBzZXRfcmVnaXN0ZXJzKHN0cnVjdCByODE1MiAqdHAsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCB1MTYgc2l6ZSwgdm9pZCAqZGF0YSlcXG4xMzk1OlxcdHtcXG4xMzk2OlxcdFxcdGludCByZXQ7XFxuMTM5NzpcXHRcXHR2b2lkICp0bXA7XFxuMTM5ODpcXHRcXG4xMzk5OlxcdFxcdHRtcCA9IGttZW1kdXAoZGF0YSwgc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuMTQwMDpcXHRcXHRpZiAoIXRtcClcXG4xNDAxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE0MDI6XFx0XFxuMTQwMzpcXHRcXHRyZXQgPSByODE1Ml9jb250cm9sX21zZyh0cCwgdHAtXFx1MDAzZXBpcGVfY3RybF9vdXQsXFxuMTQwNDpcXHRcXHRcXHRcXHRcXHRSVEw4MTUyX1JFUV9TRVRfUkVHUywgUlRMODE1Ml9SRVFUX1dSSVRFLFxcbjE0MDU6XFx0XFx0XFx0XFx0XFx0dmFsdWUsIGluZGV4LCB0bXAsIHNpemUsIFxcXCJ3cml0ZVxcXCIpO1xcbjE0MDY6XFx0XFxuMTQwNzpcXHRcXHRrZnJlZSh0bXApO1xcbjE0MDg6XFx0XFxuMTQwOTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE0MTA6XFx0fVxcbjE0MTE6XFx0XFxuMTQxMjpcXHRzdGF0aWMgdm9pZCBydGxfc2V0X3VucGx1ZyhzdHJ1Y3QgcjgxNTIgKnRwKVxcbjE0MTM6XFx0e1xcbjE0MTQ6XFx0XFx0aWYgKHRwLVxcdTAwM2V1ZGV2LVxcdTAwM2VzdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpXFxuMTQxNTpcXHRcXHRcXHRydGxfc2V0X2luYWNjZXNzaWJsZSh0cCk7XFxuMTQxNjpcXHR9XFxuMTQxNzpcXHRcXG4xNDE4OlxcdHN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMTowMy4zODUxNzAwNDRaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU4ODk2MzAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFplcm8tU2l6ZSBUcmFuc2ZlcnMgaW4gcjgxNTIgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHI4MTUyIGRyaXZlciBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgaXQgaGFuZGxlcyB6ZXJvLXNpemUgdHJhbnNmZXJzLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGhlcmUgaXMsIGlmIHRoZSBgc2l6ZWAgcGFzc2VkIHRvIGBrbWFsbG9jYCBpcyAwLCB3ZSBnZXQgYFpFUk9fU0laRV9QVFJgLiBObyBiaWcgZGVhbCwgcmlnaHQ/IEJ1dCB0aGVuIGByODE1Ml9jb250cm9sX21zZ2AgZ2V0cyBjYWxsZWQgd2l0aCBhIGBzaXplYCBvZiAwLiBgbWVtY3B5YCBvZiBzaXplIHplcm8gaXMgYSBuby1vcCwgd2hpY2ggc2hvdWxkbid0IGJlIGEgYmlnIGRlYWwgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuXG5cbkJ1dCBJJ20gd29uZGVyaW5nLCBpcyBgZ2VuZXJpY19vY3BfcmVhZGAgZXZlciBjYWxsZWQgd2l0aCBhIHplcm8gc2l6ZT8gVGhhdCBuZWVkcyBjaGVja2luZy4gT2theSwgbGV0J3MgbG9vayBhdCBgZ2VuZXJpY19vY3Bfd3JpdGVgIGluc3RlYWQuIEkgc2VlIGl0IHVzZXMgYSBgd2hpbGUgKHNpemUgXHUwMDNlIGxpbWl0KWAgbG9vcC4gSWYgYHNpemVgIGlzIHplcm8gd2hlbiB0aGUgbG9vcCBzdGFydHMsIHdlIGdvIHJpZ2h0IHBhc3QgaXQuIEV2ZW50dWFsbHksIGBzZXRfcmVnaXN0ZXJzYCBpcyBjYWxsZWQuIEl0IGxvb2tzIGxpa2UgaXQgY291bGQgYmUgY2FsbGVkIHdpdGggc2l6ZSAwLCBkZXBlbmRpbmcgb24gdGhlIG90aGVyIGNvbmRpdGlvbnMuXG5cbkhhbmcgb24sIHRoZXJlJ3MgYSBtb2RpZmljYXRpb24gdG8gYHNpemVgICpiZWZvcmUqIHRoZSBsb29wOiBgaWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRCkgc2l6ZSAtPSA0O2AuIFNvLCBpZiBgc2l6ZWAgc3RhcnRzIGF0IDQsIGFuZCBgYnllbmAgaXMgbm90IGVxdWFsIHRvIGBCWVRFX0VOX0RXT1JEYCwgYHNpemVgIGJlY29tZXMgemVybyBiZWZvcmUgdGhlIGxvb3AgaXMgZXZlbiBlbnRlcmVkLiBBbmQgdGhhdCB3aG9sZSBgd2hpbGUgKHNpemUpYCBsb29wIGlzIHNraXBwZWQuIEludGVyZXN0aW5nLiBTbywgYHNldF9yZWdpc3RlcnNgIHdpbGwgYmUgY2FsbGVkIHdpdGggYHNpemUgPSAwYC5cblxuTm93LCBkb2VzIHRoYXQgcG9zZSBhIHByb2JsZW0/IExldCdzIGNoZWNrIHdoYXQgYHNldF9yZWdpc3RlcnNgIGRvZXMgd2l0aCBgc2l6ZSA9IDBgLiBJdCBjYWxscyBga21lbWR1cChkYXRhLCAwLCBHRlBfS0VSTkVMKWAsIHdoaWNoIGFsc28gcmV0dXJucyBgWkVST19TSVpFX1BUUmAuIEFuZCBgcjgxNTJfY29udHJvbF9tc2dgIGlzIHN0aWxsIGJlaW5nIGNhbGxlZCB3aXRoIHNpemUgemVyby4gV2hpY2ggbWFrZXMgbWUgbmVydm91cyBiZWNhdXNlIGByODE1Ml9jb250cm9sX21zZ2AgaXMgYSB3cmFwcGVyIGFyb3VuZCBgdXNiX2NvbnRyb2xfbXNnYC4gSSdtIHVuc3VyZSBpZiBgdXNiX2NvbnRyb2xfbXNnYCBoYW5kbGVzIGBaRVJPX1NJWkVfUFRSYC4gVGhhdCBjb3VsZCBiZSBhIHByb2JsZW0sIGRlcGVuZGluZyBvbiB3aGF0IGByODE1Ml9jb250cm9sX21zZ2AgZG9lcyBzcGVjaWZpY2FsbHkuIEkgc2hvdWxkIHZlcmlmeS4gSSBuZWVkIHRvIGNoZWNrIGByODE1Ml9jb250cm9sX21zZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MjcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMToxMS45NzQxMzY1ODNaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzkwOTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInI4MTUyX2NvbnRyb2xfbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTEyOTc9c3RhdGljXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTI5ODppbnQgcjgxNTJfY29udHJvbF9tc2coc3RydWN0IHI4MTUyICp0cCwgdW5zaWduZWQgaW50IHBpcGUsIF9fdTggcmVxdWVzdCxcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMjk5LVxcdFxcdCAgICAgIF9fdTggcmVxdWVzdHR5cGUsIF9fdTE2IHZhbHVlLCBfX3UxNiBpbmRleCwgdm9pZCAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTEzNzA9aW50IGdldF9yZWdpc3RlcnMoc3RydWN0IHI4MTUyICp0cCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTM3OC1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxMzc5OlxcdHJldCA9IHI4MTUyX2NvbnRyb2xfbXNnKHRwLCB0cC1cXHUwMDNlcGlwZV9jdHJsX2luLFxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEzODAtXFx0XFx0XFx0XFx0UlRMODE1Ml9SRVFfR0VUX1JFR1MsIFJUTDgxNTJfUkVRVF9SRUFELFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTM5ND1pbnQgc2V0X3JlZ2lzdGVycyhzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDAyLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE0MDM6XFx0cmV0ID0gcjgxNTJfY29udHJvbF9tc2codHAsIHRwLVxcdTAwM2VwaXBlX2N0cmxfb3V0LFxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0MDQtXFx0XFx0XFx0XFx0UlRMODE1Ml9SRVFfU0VUX1JFR1MsIFJUTDgxNTJfUkVRVF9XUklURSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTk5ODA9c3RhdGljIHU4IF9fcnRsX2dldF9od192ZXIoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05OTkzLVxcdCAqIHNpbmNlIHJldHJ5aW5nIGEgcmVhZCBvZiB0aGUgdmVyc2lvbiBpcyBhbHdheXMgc2FmZSBhbmQgdGhpc1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjk5OTQ6XFx0ICogZnVuY3Rpb24gZG9lc24ndCB0YWtlIGFkdmFudGFnZSBvZiByODE1Ml9jb250cm9sX21zZygpLlxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTk5OTUtXFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAxOjEyLjAyODUzMzI1MloiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjEyNjIyMDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBgcjgxNTJfY29udHJvbF9tc2dgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHI4MTUyX2NvbnRyb2xfbXNnYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNvbnRleHR1YWxpemUgaXQuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIHRoZSBSZWFsdGVrIHI4MTUyIGRyaXZlciwgc28gbmV0d29ya2luZyBhbmQgc3BlY2lmaWNhbGx5IEV0aGVybmV0IGNvbnRyb2wgbWVzc2FnZXMgYXJlIHRoZSBuYW1lIG9mIHRoZSBnYW1lLiBJ4oCZbSBhbHJlYWR5IG1lbnRhbGx5IHNldHRpbmcgZXhwZWN0YXRpb25zIGZvciB3aGF0IEnigJlsbCBiZSBsb29raW5nIGF0OiByZWdpc3RlciBhY2Nlc3NlcywgcG9zc2libHkgRE1BIHNldHVwcywgYW5kIGxpa2VseSBzb21lIHNvcnQgb2YgbWVzc2FnZSBmcmFtaW5nIG9yIGRlc2NyaXB0b3IgcHJvY2Vzc2luZy4gR2l2ZW4gaXQncyBhIFwiY29udHJvbFwiIG1lc3NhZ2UsIGl0J3MgcHJvYmFibHkgKm5vdCogaGFuZGxpbmcgdGhlIGRhdGEgcGF0aCBkaXJlY3RseSwgYnV0IHJhdGhlciB0aGluZ3MgbGlrZSBsaW5rIHN0YXR1cywgTUFDIGFkZHJlc3MgY29uZmlndXJhdGlvbiwgcG93ZXIgbWFuYWdlbWVudCwgb3IgcG9zc2libHkgZmxvdyBjb250cm9sIHNldHRpbmdzLiBJIHNob3VsZCBleHBlY3QgdG8gZmluZCBzb21lIGNyaXRpY2FsIHNlY3Rpb25zIG9yIGxvY2tpbmcgaW52b2x2ZWQsIHBhcnRpY3VsYXJseSBpZiBpdCdzIG9wZXJhdGluZyBvbiBzaGFyZWQgaGFyZHdhcmUgcmVzb3VyY2VzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBMZXQncyBzZWUgd2hhdCdzIGluIHN0b3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjYzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDE6MTUuNjQxMTU4OTE1WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwODI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjk3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjk3OlxcdHN0YXRpY1xcbjEyOTg6XFx0aW50IHI4MTUyX2NvbnRyb2xfbXNnKHN0cnVjdCByODE1MiAqdHAsIHVuc2lnbmVkIGludCBwaXBlLCBfX3U4IHJlcXVlc3QsXFxuMTI5OTpcXHRcXHRcXHQgICAgICBfX3U4IHJlcXVlc3R0eXBlLCBfX3UxNiB2YWx1ZSwgX191MTYgaW5kZXgsIHZvaWQgKmRhdGEsXFxuMTMwMDpcXHRcXHRcXHQgICAgICBfX3UxNiBzaXplLCBjb25zdCBjaGFyICptc2dfdGFnKVxcbjEzMDE6XFx0e1xcbjEzMDI6XFx0XFx0c3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSB0cC1cXHUwMDNldWRldjtcXG4xMzAzOlxcdFxcdGludCByZXQ7XFxuMTMwNDpcXHRcXG4xMzA1OlxcdFxcdGlmICh0ZXN0X2JpdChSVEw4MTUyX0lOQUNDRVNTSUJMRSwgXFx1MDAyNnRwLVxcdTAwM2VmbGFncykpXFxuMTMwNjpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4xMzA3OlxcdFxcbjEzMDg6XFx0XFx0cmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHBpcGUsIHJlcXVlc3QsIHJlcXVlc3R0eXBlLFxcbjEzMDk6XFx0XFx0XFx0XFx0ICAgICAgdmFsdWUsIGluZGV4LCBkYXRhLCBzaXplLFxcbjEzMTA6XFx0XFx0XFx0XFx0ICAgICAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpO1xcbjEzMTE6XFx0XFxuMTMxMjpcXHRcXHQvKiBObyBuZWVkIHRvIGlzc3VlIGEgcmVzZXQgdG8gcmVwb3J0IGFuIGVycm9yIGlmIHRoZSBVU0IgZGV2aWNlIGdvdFxcbjEzMTM6XFx0XFx0ICogdW5wbHVnZ2VkOyBqdXN0IHJldHVybiBpbW1lZGlhdGVseS5cXG4xMzE0OlxcdFxcdCAqL1xcbjEzMTU6XFx0XFx0aWYgKHJldCA9PSAtRU5PREVWKVxcbjEzMTY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMzE3OlxcdFxcbjEzMTg6XFx0XFx0LyogSWYgdGhlIHdyaXRlIHdhcyBzdWNjZXNzZnVsIHRoZW4gd2UncmUgZG9uZSAqL1xcbjEzMTk6XFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwKSB7XFxuMTMyMDpcXHRcXHRcXHR0cC1cXHUwMDNlcmVnX2FjY2Vzc19yZXNldF9jb3VudCA9IDA7XFxuMTMyMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzMjI6XFx0XFx0fVxcbjEzMjM6XFx0XFxuMTMyNDpcXHRcXHRkZXZfZXJyKFxcdTAwMjZ1ZGV2LVxcdTAwM2VkZXYsXFxuMTMyNTpcXHRcXHRcXHRcXFwiRmFpbGVkIHRvICVzICVkIGJ5dGVzIGF0ICUjMDZ4LyUjMDZ4ICglZClcXFxcblxcXCIsXFxuMTMyNjpcXHRcXHRcXHRtc2dfdGFnLCBzaXplLCB2YWx1ZSwgaW5kZXgsIHJldCk7XFxuMTMyNzpcXHRcXG4xMzI4OlxcdFxcdC8qIEJsb2NrIGFsbCBmdXR1cmUgcmVnaXN0ZXIgYWNjZXNzIHVudGlsIHdlIHJlc2V0LiBNdWNoIG9mIHRoZSBjb2RlXFxuMTMyOTpcXHRcXHQgKiBpbiB0aGUgZHJpdmVyIGRvZXNuJ3QgY2hlY2sgZm9yIGVycm9ycy4gTm90YWJseSwgbWFueSBwYXJ0cyBvZiB0aGVcXG4xMzMwOlxcdFxcdCAqIGRyaXZlciBkbyBhIHJlYWQvbW9kaWZ5L3dyaXRlIG9mIGEgcmVnaXN0ZXIgdmFsdWUgd2l0aG91dFxcbjEzMzE6XFx0XFx0ICogY29uZmlybWluZyB0aGF0IHRoZSByZWFkIHN1Y2NlZWRlZC4gV3JpdGluZyBiYWNrIG1vZGlmaWVkIGdhcmJhZ2VcXG4xMzMyOlxcdFxcdCAqIGxpa2UgdGhpcyBjYW4gZnVsbHkgd2VkZ2UgdGhlIGFkYXB0ZXIsIHJlcXVpcmluZyBhIHBvd2VyIGN5Y2xlLlxcbjEzMzM6XFx0XFx0ICovXFxuMTMzNDpcXHRcXHRydGxfc2V0X2luYWNjZXNzaWJsZSh0cCk7XFxuMTMzNTpcXHRcXG4xMzM2OlxcdFxcdC8qIElmIHByb2JlIGhhc24ndCB5ZXQgZmluaXNoZWQsIHRoZW4gd2UnbGwgcmVxdWVzdCBhIHJldHJ5IG9mIHRoZVxcbjEzMzc6XFx0XFx0ICogd2hvbGUgcHJvYmUgcm91dGluZSBpZiB3ZSBnZXQgYW55IGNvbnRyb2wgdHJhbnNmZXIgZXJyb3JzLiBXZVxcbjEzMzg6XFx0XFx0ICogbmV2ZXIgaGF2ZSB0byBjbGVhciB0aGlzIGJpdCBzaW5jZSB3ZSBmcmVlL3JlYWxsb2NhdGUgdGhlIHdob2xlIFxcXCJ0cFxcXCJcXG4xMzM5OlxcdFxcdCAqIHN0cnVjdHVyZSBpZiB3ZSByZXRyeSBwcm9iZS5cXG4xMzQwOlxcdFxcdCAqL1xcbjEzNDE6XFx0XFx0aWYgKCF0ZXN0X2JpdChQUk9CRURfV0lUSF9OT19FUlJPUlMsIFxcdTAwMjZ0cC1cXHUwMDNlZmxhZ3MpKSB7XFxuMTM0MjpcXHRcXHRcXHRzZXRfYml0KFBST0JFX1NIT1VMRF9SRVRSWSwgXFx1MDAyNnRwLVxcdTAwM2VmbGFncyk7XFxuMTM0MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzNDQ6XFx0XFx0fVxcbjEzNDU6XFx0XFxuMTM0NjpcXHRcXHQvKiBGYWlsaW5nIHRvIGFjY2VzcyByZWdpc3RlcnMgaW4gcHJlLXJlc2V0IGlzIG5vdCBzdXJwcmlzaW5nIHNpbmNlIHdlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAxOjE1LjY0MTQ3MzM0NVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTY0ODQ4ODg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdXNiX2NvbnRyb2xfbXNnIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgYSB6ZXJvLXNpemVkIHRyYW5zZmVyLiBUaGUgaW5pdGlhbCB0aG91Z2h0IHdhcywgXCJpZiBgc2l6ZWAgaXMgMCwgdGhlbiBgdXNiX2NvbnRyb2xfbXNnYCBpcyBnb2luZyB0byBiZSBjYWxsZWQgd2l0aCBgc2l6ZSA9IDBgIGFuZCBgZGF0YSA9IFpFUk9fU0laRV9QVFJgLiBXYWl0LCBpcyB0aGF0IHNhZmU/IENvdWxkIGB1c2JfY29udHJvbF9tc2dgIGNyYXNoIG9yIHJldHVybiBhbiBlcnJvciBpZiBpdCBnZXRzIGBaRVJPX1NJWkVfUFRSYCBhcyB0aGUgZGF0YSBwb2ludGVyIHdoZW4gdGhlIHNpemUgaXMgemVybz8gT3IsIGlmIGBzaXplYCBpcyB6ZXJvLCBtYXliZSBgdXNiX2NvbnRyb2xfbXNnYCBpcyBqdXN0IG1lYW50IHRvIHNlbmQgYSB6ZXJvLWxlbmd0aCBjb250cm9sIG1lc3NhZ2U/XCJcblxuQW5kIHRoZW4gSSBzYXcgdGhhdCBgWkVST19TSVpFX1BUUmAgaXMgYWN0dWFsbHkgYCh2b2lkICopMTZgLiBUaGF0J3Mgbm90IHRoZSBzYW1lIGFzIGBOVUxMYCEgU28gaXMgYHVzYl9jb250cm9sX21zZ2Agc2FmZSB3aXRoIHRoaXMgY29uc3RydWN0P1xuXG5UaGUgbmV4dCB0aGluZyBJIGNvbnNpZGVyZWQgd2FzIHRoZSBpbnRlcm5hbCBoYW5kbGluZzogSSB3YXMgdGhpbmtpbmcsIFwiSWYgYHNpemVgIGlzIDAsIHRoZW4gYHVzYl9jb250cm9sX21zZ2AgaXMgcGFzc2luZyBpdCB0byBzb21ldGhpbmcgbGlrZSBgdXNiX2NvbnRyb2xfbXNnX3NlbmRgLCB3aGljaCBhbGxvY2F0ZXMgYSBVUkIgdG8gaGFuZGxlIHRoZSB0cmFuc21pc3Npb24uXCIgQnV0IHRoZW4gSSByZW1lbWJlcmVkIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSB0aG91Z2h0IEkga25ldyB0aGUgY29kZSwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBJICp0aG91Z2h0KiB0aGF0IHRoZSBjb2RlIGRpZCBzb21ldGhpbmcgbGlrZTpcblxuYGBgY1xuXHRpZiAoc2l6ZSA9PSAwKVxuXHRcdGRhdGEgPSBOVUxMO1xuYGBgXG5cbkJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBXYWl0LCB0aGF0J3Mgbm90IHJpZ2h0LCBiZWNhdXNlIEkgcmVtZW1iZXIgdGhhdCAqYHVzYl9jb250cm9sX21zZ2AgZG9lcyBub3QgY2hlY2sgZm9yIGBaRVJPX1NJWkVfUFRSYCohXG5cbk5vdywgaG9sZCBvbi4gV2FpdCwgaXQncyBzdGFydGluZyB0byBjb21lIGJhY2sgdG8gbWUuIE5vdyBJIHJlbWVtYmVyLiBJdCBkb2VzIHNvbWV0aGluZyBsaWtlIHRoaXM6XG5cbmBgYGNcblx0aWYgKHNpemUpIHtcblx0XHR0YnVmID0ga21lbWR1cChkYXRhLCBzaXplLCBHRlBfTk9JTyk7XG5cdFx0aWYgKCF0YnVmKVxuXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5cdH1cbmBgYFxuXG5TbywgaXQgKmRvZXNuJ3QqIGFjdHVhbGx5IHVzZSB0aGUgYGRhdGFgIHBvaW50ZXIgaWYgYHNpemVgIGlzIHplcm8uIEl0J3MgYWN0dWFsbHkgY29weWluZyB0aGUgZGF0YSB0byBhIG5ldyBidWZmZXIgaWYgc2l6ZSBpcyBub3QgemVybywgb3RoZXJ3aXNlLCBub3RoaW5nIGhhcHBlbnMgd2l0aCBkYXRhLlxuXG5Pa2F5LCBJIHRoaW5rIEkgaGF2ZSBpdCBub3cuIEJ1dCwgSSBzaG91bGQgY2hlY2sgdGhpcy4gVG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLCBJJ2xsIGdvIGxvb2sgYXQgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBmb3IgYHVzYl9jb250cm9sX21zZ2AgaW4gYGRyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jYCB0byBiZSBzdXJlLiBJdCdzIGJlc3QgdG8gdmVyaWZ5IGFzc3VtcHRpb25zIHdpdGggdGhlIHNvdXJjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc2OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAxOjIyLjYwNjMyNjIyOVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyNDM2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHVzYl9jb250cm9sX21zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYz0xMDE9c3RhdGljIGludCB1c2JfaW50ZXJuYWxfY29udHJvbF9tc2coc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYy0xNDktICovXFxuZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmM6MTUwOmludCB1c2JfY29udHJvbF9tc2coc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUsIF9fdTggcmVxdWVzdCxcXG5kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYy0xNTEtXFx0XFx0ICAgIF9fdTggcmVxdWVzdHR5cGUsIF9fdTE2IHZhbHVlLCBfX3UxNiBpbmRleCwgdm9pZCAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jPTE3Nz1FWFBPUlRfU1lNQk9MX0dQTCh1c2JfY29udHJvbF9tc2cpO1xcbi0tXFxuZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMtMjEwLSAqL1xcbmRyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jOjIxMTppbnQgdXNiX2NvbnRyb2xfbXNnX3NlbmQoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgX191OCBlbmRwb2ludCwgX191OCByZXF1ZXN0LFxcbmRyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jLTIxMi1cXHRcXHRcXHQgX191OCByZXF1ZXN0dHlwZSwgX191MTYgdmFsdWUsIF9fdTE2IGluZGV4LFxcbi0tXFxuZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmM9MjM1PUVYUE9SVF9TWU1CT0xfR1BMKHVzYl9jb250cm9sX21zZ19zZW5kKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jLTI3NC0gKi9cXG5kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYzoyNzU6aW50IHVzYl9jb250cm9sX21zZ19yZWN2KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIF9fdTggZW5kcG9pbnQsIF9fdTggcmVxdWVzdCxcXG5kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYy0yNzYtXFx0XFx0XFx0IF9fdTggcmVxdWVzdHR5cGUsIF9fdTE2IHZhbHVlLCBfX3UxNiBpbmRleCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDE6MjIuNjYxNTc4NTU5WiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjgyNzk4NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBgdXNiX2NvbnRyb2xfbXNnYCwgZGlzdGlsbGVkIGludG8gbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgdXNiX2NvbnRyb2xfbXNnYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGB1c2JfY29udHJvbF9tc2dgLiBSaWdodCBhd2F5LCBteSBleHBlcnQgbWluZCBpcyBhbHJlYWR5IGNvbnNpZGVyaW5nIHNldmVyYWwgYXNwZWN0czogaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIFVTQiBjb250cm9sIHRyYW5zZmVyIHBhcmFkaWdtLCBpdHMgdHlwaWNhbCB1c2UgY2FzZXMsIGFuZCwgb2YgY291cnNlLCB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgY29yZSBmdW5jdGlvbiwgbGlrZWx5IHJlc2lkaW5nIGRlZXAgd2l0aGluIHRoZSBVU0IgZHJpdmVyIGFyY2hpdGVjdHVyZS4gSXQncyB0aGUgcG9pbnQgb2YgY29udGFjdCBmb3IgdGhlIGhvc3QgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgZGV2aWNlIG9uIGEgY29udHJvbCBlbmRwb2ludCwgYW5kLCBpZiBteSBpbnR1aXRpb24gaXMgY29ycmVjdCwgaXQgd2lsbCBpbnZvbHZlIGNvbmZpZ3VyaW5nIGRldmljZS1zcGVjaWZpYyByZXF1ZXN0cywgc2V0dGluZyB1cCBjb250cm9sIHRyYW5zZmVyIHBhcmFtZXRlcnMsIGFuZCBpbml0aWF0aW5nIHRoZSBkYXRhIGV4Y2hhbmdlLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgZXhwZWN0ZWQgcGFyYW1ldGVyczogdGhlIFVTQiBkZXZpY2UgaGFuZGxlLCB0aGUgcmVxdWVzdCB0eXBlIGFuZCByZWNpcGllbnQsIHRoZSByZXF1ZXN0IGl0c2VsZiwgZGF0YSBidWZmZXIsIGFuZCBwb3RlbnRpYWwgdGltZW91dCB2YWx1ZS4gSSdtIGFudGljaXBhdGluZyBlcnJvciBoYW5kbGluZyBzdHJhdGVnaWVzIGVtYmVkZGVkIHdpdGhpbiB0aGUgZnVuY3Rpb24sIGNvbnNpZGVyaW5nIGNvbW1vbiBmYWlsdXJlIG1vZGVzIGxpa2UgZGV2aWNlIGRpc2Nvbm5lY3RzLCBidWZmZXIgb3ZlcmZsb3dzLCBhbmQsIHBvdGVudGlhbGx5LCBpbmNvcnJlY3QgcmVxdWVzdCBwYXJhbWV0ZXJzLiBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBpbXBsZW1lbnRhdGlvbiBudWFuY2VzLCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgc2VlIGhvdyB3ZWxsIGl0J3MgZGVzaWduZWQgZm9yIGNvbmN1cnJlbmN5LiBUaGlzIGZ1bmN0aW9uIGlzIHZpdGFsIGZvciBpbml0aWFsaXppbmcgYW5kIGNvbnRyb2xsaW5nIGRldmljZXMgLSBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbXBsZW1lbnRlZCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDU1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDE6MjYuMjI5ODYxNDY3WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDk6XFx0ICovXFxuIDE1MDpcXHRpbnQgdXNiX2NvbnRyb2xfbXNnKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlLCBfX3U4IHJlcXVlc3QsXFxuIDE1MTpcXHRcXHRcXHQgICAgX191OCByZXF1ZXN0dHlwZSwgX191MTYgdmFsdWUsIF9fdTE2IGluZGV4LCB2b2lkICpkYXRhLFxcbiAxNTI6XFx0XFx0XFx0ICAgIF9fdTE2IHNpemUsIGludCB0aW1lb3V0KVxcbiAxNTM6XFx0e1xcbiAxNTQ6XFx0XFx0c3RydWN0IHVzYl9jdHJscmVxdWVzdCAqZHI7XFxuIDE1NTpcXHRcXHRpbnQgcmV0O1xcbiAxNTY6XFx0XFxuIDE1NzpcXHRcXHRkciA9IGttYWxsb2Nfb2JqKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QsIEdGUF9OT0lPKTtcXG4gMTU4OlxcdFxcdGlmICghZHIpXFxuIDE1OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTYwOlxcdFxcbiAxNjE6XFx0XFx0ZHItXFx1MDAzZWJSZXF1ZXN0VHlwZSA9IHJlcXVlc3R0eXBlO1xcbiAxNjI6XFx0XFx0ZHItXFx1MDAzZWJSZXF1ZXN0ID0gcmVxdWVzdDtcXG4gMTYzOlxcdFxcdGRyLVxcdTAwM2V3VmFsdWUgPSBjcHVfdG9fbGUxNih2YWx1ZSk7XFxuIDE2NDpcXHRcXHRkci1cXHUwMDNld0luZGV4ID0gY3B1X3RvX2xlMTYoaW5kZXgpO1xcbiAxNjU6XFx0XFx0ZHItXFx1MDAzZXdMZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTtcXG4gMTY2OlxcdFxcbiAxNjc6XFx0XFx0cmV0ID0gdXNiX2ludGVybmFsX2NvbnRyb2xfbXNnKGRldiwgcGlwZSwgZHIsIGRhdGEsIHNpemUsIHRpbWVvdXQpO1xcbiAxNjg6XFx0XFxuIDE2OTpcXHRcXHQvKiBMaW5nZXIgYSBiaXQsIHByaW9yIHRvIHRoZSBuZXh0IGNvbnRyb2wgbWVzc2FnZS4gKi9cXG4gMTcwOlxcdFxcdGlmIChkZXYtXFx1MDAzZXF1aXJrcyBcXHUwMDI2IFVTQl9RVUlSS19ERUxBWV9DVFJMX01TRylcXG4gMTcxOlxcdFxcdFxcdG1zbGVlcCgyMDApO1xcbiAxNzI6XFx0XFxuIDE3MzpcXHRcXHRrZnJlZShkcik7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdHJldHVybiByZXQ7XFxuIDE3NjpcXHR9XFxuIDE3NzpcXHRFWFBPUlRfU1lNQk9MX0dQTCh1c2JfY29udHJvbF9tc2cpO1xcbiAxNzg6XFx0XFxuIDE3OTpcXHQvKipcXG4gMTgwOlxcdCAqIHVzYl9jb250cm9sX21zZ19zZW5kIC0gQnVpbGRzIGEgY29udHJvbCBcXFwic2VuZFxcXCIgbWVzc2FnZSwgc2VuZHMgaXQgb2ZmIGFuZCB3YWl0cyBmb3IgY29tcGxldGlvblxcbiAxODE6XFx0ICogQGRldjogcG9pbnRlciB0byB0aGUgdXNiIGRldmljZSB0byBzZW5kIHRoZSBtZXNzYWdlIHRvXFxuIDE4MjpcXHQgKiBAZW5kcG9pbnQ6IGVuZHBvaW50IHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG9cXG4gMTgzOlxcdCAqIEByZXF1ZXN0OiBVU0IgbWVzc2FnZSByZXF1ZXN0IHZhbHVlXFxuIDE4NDpcXHQgKiBAcmVxdWVzdHR5cGU6IFVTQiBtZXNzYWdlIHJlcXVlc3QgdHlwZSB2YWx1ZVxcbiAxODU6XFx0ICogQHZhbHVlOiBVU0IgbWVzc2FnZSB2YWx1ZVxcbiAxODY6XFx0ICogQGluZGV4OiBVU0IgbWVzc2FnZSBpbmRleCB2YWx1ZVxcbiAxODc6XFx0ICogQGRyaXZlcl9kYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmRcXG4gMTg4OlxcdCAqIEBzaXplOiBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGRhdGEgdG8gc2VuZFxcbiAxODk6XFx0ICogQHRpbWVvdXQ6IHRpbWUgaW4gbXNlY3MgdG8gd2FpdCBmb3IgdGhlIG1lc3NhZ2UgdG8gY29tcGxldGUgYmVmb3JlIHRpbWluZyBvdXRcXG4gMTkwOlxcdCAqIEBtZW1mbGFnczogdGhlIGZsYWdzIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgYnVmZmVyc1xcbiAxOTE6XFx0ICpcXG4gMTkyOlxcdCAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQgKClcXG4gMTkzOlxcdCAqXFxuIDE5NDpcXHQgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgY29udHJvbCBtZXNzYWdlIHRvIGEgc3BlY2lmaWVkIGVuZHBvaW50IHRoYXQgaXMgbm90XFxuIDE5NTpcXHQgKiBleHBlY3RlZCB0byBmaWxsIGluIGEgcmVzcG9uc2UgKGkuZS4gYSBcXFwic2VuZCBtZXNzYWdlXFxcIikgYW5kIHdhaXRzIGZvciB0aGVcXG4gMTk2OlxcdCAqIG1lc3NhZ2UgdG8gY29tcGxldGUsIG9yIHRpbWVvdXQuXFxuIDE5NzpcXHQgKlxcbiAxOTg6XFx0ICogRG8gbm90IHVzZSB0aGlzIGZ1bmN0aW9uIGZyb20gd2l0aGluIGFuIGludGVycnVwdCBjb250ZXh0LiBJZiB5b3UgbmVlZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMToyNi4yMzAwMDIxMDdaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3NjM4NzcwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGB1c2JfaW50ZXJuYWxfY29udHJvbF9tc2dgOlxuXG4qKkRpdmluZyBpbnRvIGB1c2JfaW50ZXJuYWxfY29udHJvbF9tc2dgKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGlzIGB1c2JfaW50ZXJuYWxfY29udHJvbF9tc2dgIGZ1bmN0aW9uLiBJIHJlY29nbml6ZSB0aGUgbmFtaW5nIGNvbnZlbnRpb24gaW1tZWRpYXRlbHksIGl0IHN1Z2dlc3RzIHRoYXQgdGhpcyBpcyByZWxhdGVkIHRvIFVTQiBjb21tdW5pY2F0aW9uLCBhbmQgc3BlY2lmaWNhbGx5LCB0byBjb250cm9sIG1lc3NhZ2VzLiBUaGUgXCJpbnRlcm5hbFwiIHBhcnQgaXMgaW50ZXJlc3RpbmcgLSBpdCBpbXBsaWVzIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IG5vdCBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIHByb2JhYmx5IHJlc2lkaW5nIHdpdGhpbiB0aGUga2VybmVsJ3MgVVNCIHN1YnN5c3RlbS4gSSdtIGd1ZXNzaW5nIGl0J3MgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIGhhbmRsaW5nIHRob3NlIGxvdy1sZXZlbCByZXF1ZXN0cyB0aGF0IGNvbmZpZ3VyZSBkZXZpY2VzLCByZXRyaWV2ZSBkZXNjcmlwdG9ycywgYW5kIG1hbmFnZSBlbmRwb2ludHMuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6IGhvdyBpdCdzIGNhbGxlZCwgd2hhdCBhcmd1bWVudHMgaXQgdGFrZXMsIGFuZCBjcnVjaWFsbHksIHdoYXQgY29udGV4dCBpdCBvcGVyYXRlcyBpbiAoZS5nLiwgaW50ZXJydXB0IGNvbnRleHQsIHByb2Nlc3MgY29udGV4dCkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIGNvbnRyb2wgdHJhbnNmZXIgcHJvY2Vzcy4gRG9lcyBpdCBoYW5kbGUgc2V0dXAgcGFja2V0cyBkaXJlY3RseT8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIHNwZWNpZmljIGhhcmR3YXJlIHJlZ2lzdGVycyBvciBkYXRhIHN0cnVjdHVyZXM/IEFyZSB0aGVyZSBhbnkgbm90YWJsZSBlcnJvciBjb25kaXRpb25zIG9yIGVkZ2UgY2FzZXMgaXQncyBkZXNpZ25lZCB0byBtYW5hZ2U/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCBpdCB3aWxsIGxpa2VseSBhYnN0cmFjdCBzb21lIG9mIHRoZSBtb3JlIGNvbXBsZXggaW50ZXJhY3Rpb25zLCBtYWtpbmcgaXQgZWFzaWVyIGZvciB0aGUgaGlnaGVyLWxldmVsIFVTQiBkcml2ZXJzIHRvIGludGVyYWN0IHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuIEtub3dpbmcgdGhpcyBpcyBrZXkgdG8gZGVidWdnaW5nIGFuZCBleHRlbmRpbmcgVVNCIGZ1bmN0aW9uYWxpdHkuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMDAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAxOjMwLjEwNjM5MzE0MloiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxLFxuICBcIkxpbmVDb3VudFwiOiA0OFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdHN0YXRpYyBpbnQgdXNiX2ludGVybmFsX2NvbnRyb2xfbXNnKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LFxcbiAxMDI6XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBwaXBlLFxcbiAxMDM6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNtZCxcXG4gMTA0OlxcdFxcdFxcdFxcdFxcdCAgICB2b2lkICpkYXRhLCBpbnQgbGVuLCBpbnQgdGltZW91dClcXG4gMTA1OlxcdHtcXG4gMTA2OlxcdFxcdHN0cnVjdCB1cmIgKnVyYjtcXG4gMTA3OlxcdFxcdGludCByZXR2O1xcbiAxMDg6XFx0XFx0aW50IGxlbmd0aDtcXG4gMTA5OlxcdFxcbiAxMTA6XFx0XFx0dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfTk9JTyk7XFxuIDExMTpcXHRcXHRpZiAoIXVyYilcXG4gMTEyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAxMTM6XFx0XFxuIDExNDpcXHRcXHR1c2JfZmlsbF9jb250cm9sX3VyYih1cmIsIHVzYl9kZXYsIHBpcGUsICh1bnNpZ25lZCBjaGFyICopY21kLCBkYXRhLFxcbiAxMTU6XFx0XFx0XFx0XFx0ICAgICBsZW4sIHVzYl9hcGlfYmxvY2tpbmdfY29tcGxldGlvbiwgTlVMTCk7XFxuIDExNjpcXHRcXG4gMTE3OlxcdFxcdHJldHYgPSB1c2Jfc3RhcnRfd2FpdF91cmIodXJiLCB0aW1lb3V0LCBcXHUwMDI2bGVuZ3RoLCBmYWxzZSk7XFxuIDExODpcXHRcXHRpZiAocmV0diBcXHUwMDNjIDApXFxuIDExOTpcXHRcXHRcXHRyZXR1cm4gcmV0djtcXG4gMTIwOlxcdFxcdGVsc2VcXG4gMTIxOlxcdFxcdFxcdHJldHVybiBsZW5ndGg7XFxuIDEyMjpcXHR9XFxuIDEyMzpcXHRcXG4gMTI0OlxcdC8qKlxcbiAxMjU6XFx0ICogdXNiX2NvbnRyb2xfbXNnIC0gQnVpbGRzIGEgY29udHJvbCB1cmIsIHNlbmRzIGl0IG9mZiBhbmQgd2FpdHMgZm9yIGNvbXBsZXRpb25cXG4gMTI2OlxcdCAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIHVzYiBkZXZpY2UgdG8gc2VuZCB0aGUgbWVzc2FnZSB0b1xcbiAxMjc6XFx0ICogQHBpcGU6IGVuZHBvaW50IFxcXCJwaXBlXFxcIiB0byBzZW5kIHRoZSBtZXNzYWdlIHRvXFxuIDEyODpcXHQgKiBAcmVxdWVzdDogVVNCIG1lc3NhZ2UgcmVxdWVzdCB2YWx1ZVxcbiAxMjk6XFx0ICogQHJlcXVlc3R0eXBlOiBVU0IgbWVzc2FnZSByZXF1ZXN0IHR5cGUgdmFsdWVcXG4gMTMwOlxcdCAqIEB2YWx1ZTogVVNCIG1lc3NhZ2UgdmFsdWVcXG4gMTMxOlxcdCAqIEBpbmRleDogVVNCIG1lc3NhZ2UgaW5kZXggdmFsdWVcXG4gMTMyOlxcdCAqIEBkYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmRcXG4gMTMzOlxcdCAqIEBzaXplOiBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGRhdGEgdG8gc2VuZFxcbiAxMzQ6XFx0ICogQHRpbWVvdXQ6IHRpbWUgaW4gbXNlY3MgdG8gd2FpdCBmb3IgdGhlIG1lc3NhZ2UgdG8gY29tcGxldGUgYmVmb3JlIHRpbWluZyBvdXRcXG4gMTM1OlxcdCAqXFxuIDEzNjpcXHQgKiBDb250ZXh0OiB0YXNrIGNvbnRleHQsIG1pZ2h0IHNsZWVwLlxcbiAxMzc6XFx0ICpcXG4gMTM4OlxcdCAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYSBzaW1wbGUgY29udHJvbCBtZXNzYWdlIHRvIGEgc3BlY2lmaWVkIGVuZHBvaW50IGFuZFxcbiAxMzk6XFx0ICogd2FpdHMgZm9yIHRoZSBtZXNzYWdlIHRvIGNvbXBsZXRlLCBvciB0aW1lb3V0LlxcbiAxNDA6XFx0ICpcXG4gMTQxOlxcdCAqIERvbid0IHVzZSB0aGlzIGZ1bmN0aW9uIGZyb20gd2l0aGluIGFuIGludGVycnVwdCBjb250ZXh0LiBJZiB5b3UgbmVlZFxcbiAxNDI6XFx0ICogYW4gYXN5bmNocm9ub3VzIG1lc3NhZ2UsIG9yIG5lZWQgdG8gc2VuZCBhIG1lc3NhZ2UgZnJvbSB3aXRoaW4gaW50ZXJydXB0XFxuIDE0MzpcXHQgKiBjb250ZXh0LCB1c2UgdXNiX3N1Ym1pdF91cmIoKS4gSWYgYSB0aHJlYWQgaW4geW91ciBkcml2ZXIgdXNlcyB0aGlzIGNhbGwsXFxuIDE0NDpcXHQgKiBtYWtlIHN1cmUgeW91ciBkaXNjb25uZWN0KCkgbWV0aG9kIGNhbiB3YWl0IGZvciBpdCB0byBjb21wbGV0ZS4gU2luY2UgeW91XFxuIDE0NTpcXHQgKiBkb24ndCBoYXZlIGEgaGFuZGxlIG9uIHRoZSBVUkIgdXNlZCwgeW91IGNhbid0IGNhbmNlbCB0aGUgcmVxdWVzdC5cXG4gMTQ2OlxcdCAqXFxuIDE0NzpcXHQgKiBSZXR1cm46IElmIHN1Y2Nlc3NmdWwsIHRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQuIE90aGVyd2lzZSwgYSBuZWdhdGl2ZVxcbiAxNDg6XFx0ICogZXJyb3IgbnVtYmVyLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMTozMC4xMDY1MjkxNDJaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUxMjE3ODc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgWmVyby1MZW5ndGggVVNCIFRyYW5zZmVycyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCB6ZXJvLWxlbmd0aCBVU0IgdHJhbnNmZXJzIGtlZXBzIGNvbWluZyB1cCBpbiBteSBtaW5kLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBob3cgYHVzYl9maWxsX2NvbnRyb2xfdXJiYCBoYW5kbGVzIGEgYGxlbmAgb2YgemVybywgYW5kIHdoZXRoZXIgcGFzc2luZyBgWkVST19TSVpFX1BUUmAgYXMgdGhlIGBkYXRhYCBwb2ludGVyIGlzIHNhZmUuIEluaXRpYWxseSwgaXQgc2VlbXMgaGFybWxlc3MuIGB1c2JfZmlsbF9jb250cm9sX3VyYmAganVzdCBzZXRzIHRoZSBVUkIncyBgdHJhbnNmZXJfYnVmZmVyYCBhbmQgYHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGhgIGZpZWxkcy4gV2hlbiBgdXNiX3N0YXJ0X3dhaXRfdXJiYCBzdWJtaXRzIHRoZSBVUkIsIHRoZSBIQ0Qgc2hvdWxkLCBpbiB0aGVvcnksIGp1c3Qgc2VlIGB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID09IDBgIGFuZCBza2lwIHRoZSBidWZmZXIsIGJ1dCBJIGhhdmUgYSBuYWdnaW5nIGZlZWxpbmcuXG5cbk5vdywgSSByZW1lbWJlciBzZWVpbmcgYGttYWxsb2MoMClgIGJlaW5nIGNhbGxlZCwgd2hpY2ggKnJldHVybnMqIGBaRVJPX1NJWkVfUFRSYC4gSW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UsIGByODE1Ml9jb250cm9sX21zZ2AgZ2V0cyBhIHplcm8tc2l6ZWQgYnVmZmVyIGZyb20gYGttYWxsb2NgIGFuZCB0aGVuIHBhc3NlcyBpdCBhbGwgdGhlIHdheSBkb3duIHRoZSBjaGFpbiB0byBgdXNiX2ZpbGxfY29udHJvbF91cmJgIGFuZCBmaW5hbGx5IGB1c2Jfc3RhcnRfd2FpdF91cmJgLiBJcyB0aGlzIHJlYWxseSBnb2luZyB0byBiZSBzYWZlPyBJIG5lZWQgdG8gYmUgc3VyZS5cblxuSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGlmIGBzaXplYCBpcyB6ZXJvIGluaXRpYWxseSwgYGdlbmVyaWNfb2NwX3JlYWRgIHdpbGwgcGFzcyB6ZXJvIHRvIGBnZXRfcmVnaXN0ZXJzYC4gVGhpcyB3aG9sZSB0aGluZyBoaW5nZXMgb24gd2hldGhlciBgZ2VuZXJpY19vY3BfcmVhZGAgKmNhbiogYmUgY2FsbGVkIHdpdGggYHNpemUgPSAwYC4gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBwbGFjZXMgd2hlcmUgYGdlbmVyaWNfb2NwX3JlYWRgIGdldHMgY2FsbGVkIGFuZCBkZXRlcm1pbmUgaWYgdGhhdCdzIHBvc3NpYmxlLiBJJ3ZlIGdvdCB0byBlbnN1cmUgdGhlIGNvZGUncyByb2J1c3QgYWdhaW5zdCB0aGVzZSB6ZXJvLWxlbmd0aCB0cmFuc2ZlcnMuIE90aGVyd2lzZSwgdGhpcyBjb3VsZCBiZSBhIG5hc3R5IGJ1ZyBpbiB0aGUgbWFraW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMwNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAxOjM3LjYxODcxMTExOFoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2NjUxMjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdlbmVyaWNfb2NwX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTQxMj1zdGF0aWMgdm9pZCBydGxfc2V0X3VucGx1ZyhzdHJ1Y3QgcjgxNTIgKnRwKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQxNy1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNDE4OnN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0MTktXFx0XFx0XFx0ICAgIHZvaWQgKmRhdGEsIHUxNiB0eXBlKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTUyND1pbnQgcGxhX29jcF9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUyNS17XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTUyNjpcXHRyZXR1cm4gZ2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemUsIGRhdGEsIE1DVV9UWVBFX1BMQSk7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUyNy19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTQxPXN0YXRpYyB1MzIgb2NwX3JlYWRfZHdvcmQoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NDQtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU0NTpcXHRnZW5lcmljX29jcF9yZWFkKHRwLCBpbmRleCwgc2l6ZW9mKGRhdGEpLCBcXHUwMDI2ZGF0YSwgdHlwZSk7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU0Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1NTc9c3RhdGljIHUxNiBvY3BfcmVhZF93b3JkKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTY2LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1Njc6XFx0Z2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemVvZih0bXApLCBcXHUwMDI2dG1wLCB0eXBlIHwgYnllbik7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU2OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1OTc9c3RhdGljIHU4IG9jcF9yZWFkX2J5dGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MDQtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTYwNTpcXHRnZW5lcmljX29jcF9yZWFkKHRwLCBpbmRleCwgc2l6ZW9mKHRtcCksIFxcdTAwMjZ0bXAsIHR5cGUpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MDYtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz05MDc4PXN0YXRpYyB2b2lkIHJ0bDgxNTJfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTkwODYtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6OTA4NzpcXHRnZW5lcmljX29jcF9yZWFkKHRwLCBQTEFfVEFMTFlDTlQsIHNpemVvZih0YWxseSksIFxcdTAwMjZ0YWxseSwgTUNVX1RZUEVfUExBKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05MDg4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMTozNy44NTUzNzIxODVaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg2ODIxMzI5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUlRMODE1MiBEcml2ZXIgUGF0Y2ggZm9yIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBFeHBvc3VyZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHBhdGNoIGZvciB0aGUgUlRMODE1MiBkcml2ZXIsIHRyeWluZyB0byB1bmRlcnN0YW5kIHdoeSBpdCBtaWdodCBiZSBmbGFnZ2luZyBhIEtNU0FOIGNvbmNlcm4uIFRoZSBtYWluIGlzc3VlIGFwcGVhcnMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgY29kZSBoYW5kbGVzIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyB3aXRoIHBvdGVudGlhbGx5IGRpZmZlcmluZyBzaXplcyBhbmQgYnl0ZSBlbmFibGUgY29uZmlndXJhdGlvbnMuXG5cblRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHNlZW1zIHRvIHN0ZW0gZnJvbSBob3cgYGdlbmVyaWNfb2NwX3dyaXRlYCBhbmQgYGdlbmVyaWNfb2NwX3JlYWRgIGludGVyYWN0IHdpdGggYHNldF9yZWdpc3RlcnNgIGFuZCBgZ2V0X3JlZ2lzdGVyc2AsIHJlc3BlY3RpdmVseS4gVGhlIG5ldyBjb2RlIGluIGBnZW5lcmljX29jcF93cml0ZWAgaGFzIGFsdGVyZWQgdGhlIGxvZ2ljLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSBpZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgYSBzaXR1YXRpb24gd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY2FuIGxlYWsuXG5cbkkgaW5pdGlhbGx5IGhvbmVkIGluIG9uIGEgY2FzZSB3aGVyZSBgc2l6ZWAgbWlnaHQgYmUgcmVkdWNlZCB0byB6ZXJvIGR1ZSB0byBhIGNvbmRpdGlvbmFsIGNoZWNrIChgYnllbiAhPSBCWVRFX0VOX0RXT1JEYCksIHdoaWNoIGNhdXNlcyBhbiBleHRyYSBjYWxsIHdpdGggYSBzaXplIG9mIHplcm8uICBBIHplcm8gc2l6ZSB3cml0ZSAob3IgcmVhZCksIGJ5IGl0c2VsZiwgaXNuJ3QgYSAqYnVnKiwgYmVjYXVzZSBpdCBkb2Vzbid0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBkdWUgdG8gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBsaWtlIGBrbWVtZHVwYCBhbmQgYGttYWxsb2NgIHJldHVybmluZyBgWkVST19TSVpFX1BUUmAuXG5cbkhvd2V2ZXIsIHRoZSBtb3JlIGNvbmNlcm5pbmcgaXNzdWUgaXMgc2hvcnQgcmVhZHMuIFRoZSBgZ2V0X3JlZ2lzdGVyc2AgZnVuY3Rpb24gdXNlcyBga21hbGxvY2AgdG8gYWxsb2NhdGUgYSBidWZmZXIsIGFuZCB0aGVuIGNhbGxzIGByODE1Ml9jb250cm9sX21zZ2AgdG8gcmVhZCBkYXRhIGZyb20gdGhlIGRldmljZS4gQSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHRoZSBkZXZpY2UgKmNvdWxkKiByZXR1cm4gZmV3ZXIgYnl0ZXMgdGhhbiByZXF1ZXN0ZWQuICBJZiBgcjgxNTJfY29udHJvbF9tc2dgIHRyYW5zZmVycyBmZXdlciBieXRlcyB0aGFuIHRoZSBgc2l6ZWAgYWxsb2NhdGVkIHdpdGggYGttYWxsb2NgLCB0aGUgcmVtYWluZGVyIG9mIHRoZSBidWZmZXIgd2lsbCBjb250YWluIHVuaW5pdGlhbGl6ZWQgaGVhcCBtZW1vcnkuIFN1YnNlcXVlbnRseSwgdGhlIGBtZW1jcHlgIGluIGBnZXRfcmVnaXN0ZXJzYCBjb3BpZXMgdGhlIGZ1bGwgYHNpemVgIGJ5dGVzIG9mIGRhdGEgZnJvbSBgdG1wYCB0byB0aGUgb3V0cHV0IGBkYXRhYCBidWZmZXIuIFRoaXMgdHJhbnNmZXIgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgbGVhZCB0byBhIEtNU0FOIGlzc3VlIGlmIHRoZSBgZGF0YWAgYnVmZmVyIGlzIHVzZWQgb3Igc2VudCB0byB1c2Vyc3BhY2UuXG5cblRoZSBwYXRjaCBpdHNlbGYgZG9lcyBub3QgZGlyZWN0bHkgKmludHJvZHVjZSogdGhlIGlzc3VlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGggdGhlIGxvb3AgY2hhbmdlcy4gIEhvd2V2ZXIsIGJlY2F1c2UgdGhlIGNoYW5nZXMgaW4gdGhlIG5ldyBjb2RlIGNoYW5nZSBob3cgdGhlIGBnZXRfcmVnaXN0ZXJzYCBpcyBjYWxsZWQsIGEgS01TQU4gc2Vzc2lvbiBtaWdodCBiZSBqdXN0aWZpZWQgZHVlIHRvIHRoZSBsb29wIGNoYW5nZSByZWZhY3RvcmluZywgYW5kIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha2FnZSB0aGF0IHdhcyBub3QgYWRkcmVzc2VkIHByZXZpb3VzbHkuXG5cblNvLCBpbiBzdW1tYXJ5LCBJIHRoaW5rIHRoZSBzeXpib3QgZmxhZyBpcyByZWFzb25hYmxlLiBUaGUgZXhpc3RpbmcgY29kZSBhbHJlYWR5IGhhcyBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBkdWUgdG8gc2hvcnQgcmVhZHMgaW4gYGdldF9yZWdpc3RlcnNgLiAgVGhlIGxvb3AgbW9kaWZpY2F0aW9ucyBtaWdodCBoYXZlIGEgbGltaXRlZCBlZmZlY3QsIGluIHRoZSBuZXcgYW5kIG9sZCBjb2RlLCBvbiB0aGUgZXhpc3RpbmcgY29uZGl0aW9uIG9mIGhhdmluZyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGFuZCBjb3B5IG9wZXJhdGlvbi4gIEEgS01TQU4gZnV6emluZyBzZXNzaW9uIHdvdWxkIGJlIGp1c3RpZmllZCB0byBjYXRjaCBwb3RlbnRpYWwgcmVncmVzc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTM0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMjowNi41Mzc1MDc4OTdaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMjEzNTgyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5lcmljX29jcF93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNDE4PXN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQ1Mi1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNDUzOnN0YXRpYyBpbnQgZ2VuZXJpY19vY3Bfd3JpdGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgYnl0ZWVuLFxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0NTQtXFx0XFx0XFx0ICAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSwgdTE2IHR5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTMwPWludCBwbGFfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzMS17XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTUzMjpcXHRyZXR1cm4gZ2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieXRlZW4sIHNpemUsIGRhdGEsIE1DVV9UWVBFX1BMQSk7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzMy19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTM2PWludCB1c2Jfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzNy17XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTUzODpcXHRyZXR1cm4gZ2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieXRlZW4sIHNpemUsIGRhdGEsIE1DVV9UWVBFX1VTQik7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzOS19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTUwPXN0YXRpYyB2b2lkIG9jcF93cml0ZV9kd29yZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4LCB1MzIgZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NTMtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU1NDpcXHRnZW5lcmljX29jcF93cml0ZSh0cCwgaW5kZXgsIEJZVEVfRU5fRFdPUkQsIHNpemVvZih0bXApLCBcXHUwMDI2dG1wLCB0eXBlKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTU1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1NzY9c3RhdGljIHZvaWQgb2NwX3dyaXRlX3dvcmQoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleCwgdTMyIGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTkzLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1OTQ6XFx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieWVuLCBzaXplb2YodG1wKSwgXFx1MDAyNnRtcCwgdHlwZSk7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU5NS19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNjE0PXN0YXRpYyB2b2lkIG9jcF93cml0ZV9ieXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgsIHUzMiBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTYzMS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNjMyOlxcdGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBpbmRleCwgYnllbiwgc2l6ZW9mKHRtcCksIFxcdTAwMjZ0bXAsIHR5cGUpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MzMtfVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NDUxMT1zdGF0aWMgdm9pZCBydGxfY2xlYXJfYnAoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy00NTQ5LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjQ1NTA6XFx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIFBMQV9CUF8wLCBCWVRFX0VOX0RXT1JELCBicF9udW0gXFx1MDAzY1xcdTAwM2MgMSwgYnAsIHR5cGUpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTQ1NTEtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz01MzA0PXN0YXRpYyB2b2lkIHJ0bF9yYW1fY29kZV9zcGVlZF91cChzdHJ1Y3QgcjgxNTIgKnRwLCBzdHJ1Y3QgZndfcGh5X3NwZWVkX3VwICpwaHksIGJvb2wgd2FpdClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTUzMzQtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NTMzNTpcXHRcXHRnZW5lcmljX29jcF93cml0ZSh0cCwgX19sZTE2X3RvX2NwdShwaHktXFx1MDAzZWZ3X3JlZyksIDB4ZmYsIHNpemUsIGRhdGEsIE1DVV9UWVBFX1VTQik7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTMzNi1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTU0ODU9c3RhdGljIHZvaWQgcnRsODE1Ml9md19tYWNfYXBwbHkoc3RydWN0IHI4MTUyICp0cCwgc3RydWN0IGZ3X21hYyAqbWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTUyNC1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo1NTI1OlxcdGlmIChnZW5lcmljX29jcF93cml0ZSh0cCwgX19sZTE2X3RvX2NwdShtYWMtXFx1MDAzZWZ3X3JlZyksIDB4ZmYsIGxlbmd0aCxcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01NTI2LVxcdFxcdFxcdCAgICAgIGRhdGEsIHR5cGUpIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTUzNC1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo1NTM1OlxcdGlmIChnZW5lcmljX29jcF93cml0ZSh0cCwgX19sZTE2X3RvX2NwdShtYWMtXFx1MDAzZWJwX3N0YXJ0KSwgQllURV9FTl9EV09SRCxcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01NTM2LVxcdFxcdFxcdCAgICAgIEFMSUdOKF9fbGUxNl90b19jcHUobWFjLVxcdTAwM2VicF9udW0pIFxcdTAwM2NcXHUwMDNjIDEsIDQpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMjowNi44Mzk2NDg1MjNaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4MDkxNjkyNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZ2VuZXJpY19vY3Bfd3JpdGVgIEZ1bmN0aW9uIGFuZCBpdHMgUmVjZW50IE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgYmFjayBpbnRvIHRoaXMgYGdlbmVyaWNfb2NwX3dyaXRlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyBjb3JyZWN0bHksIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHJlY2VudCBjaGFuZ2UuIEZpcnN0LCBsZXQgbWUgd2FsayB0aHJvdWdoIHRoZSBjb2RlIGFzIGl0IHN0YW5kcy4gSXQgdGFrZXMgYSBkZXZpY2UgcG9pbnRlciBgdHBgLCBhbiBpbmRleCBgaW5kZXhgLCBhIGJ5dGUgZW5hYmxlIHZhbHVlIGBieXRlZW5gLCBhIHNpemUgYHNpemVgLCBkYXRhIHBvaW50ZXIgYGRhdGFgLCBhbmQgYSB0eXBlIGB0eXBlYC4gVGhlIHNpemUgaXMgY2hlY2tlZCB0byBlbnN1cmUgaXQgaXNuJ3Qgb3ZlciBhIGxpbWl0LCBhbmQgdGhlcmUgYXJlIHNvbWUgc3BlY2lmaWMgbWFza3MgYW5kIFVTQiB0eXBlIGNvbnNpZGVyYXRpb25zIGZvciB0aGUgbWFzayB2YXJpYWJsZS4gIFRoZXJlIGFyZSBhIHNlcmllcyBvZiBpbml0aWFsIGVycm9yIGNoZWNrcy4gTm93LCB0aGUgYGJ5dGVlbmAgdmFsdWUgaXMgaGFuZGxlZCwgd2hpY2ggZGV0ZXJtaW5lcyBob3cgbWFueSBieXRlcyBvZiBhIERXT1JEIGFyZSBlbmFibGVkLlxuXG5Pa2F5LCBzbyBpZiBgYnl0ZWVuYCBpcyBub3QgdGhlIGRlZmF1bHQgYEJZVEVfRU5fRFdPUkRgLCB0aGUgZnVuY3Rpb24gaGFuZGxlcyB0aGUgZmlyc3QgRFdPUkQgd2l0aCB0aGUgc3BlY2lmaWMgYGJ5dGVlbmAgdmFsdWUuIFRoZSBvcmlnaW5hbCBsb2dpYyBjb250YWluZWQgYSBkZWNyZW1lbnQgdG8gdGhlIHNpemUgYW5kIHBvaW50ZXIgZm9yIHVzZSBsYXRlciBpbiB0aGUgZnVuY3Rpb24uXG5cbk5vdywgdGhlcmUncyBhIGxvb3AgdGhhdCBpdGVyYXRlcyB0byB3cml0ZSB0aGUgcmVtYWluaW5nIGRhdGEuIFRoZSB1cGRhdGVkIGNvZGUganVzdCB3cml0ZXMgaW4gdGhlIHJlbWFpbmluZyBibG9ja3MsIHdpdGggYSBsaW1pdCBvZiA1MTIgYnl0ZXMuIE9rYXksIHRoZSBjaGFuZ2UgbG9va3MgbGlrZSBpdCBqdXN0IHJlbW92ZWQgdGhlIGJyYW5jaCB0byBjaGVjayBpZiB0aGUgYHNpemVgIHdhcyBzdGlsbCBncmVhdGVyIHRoYW4gYGxpbWl0YC4gU28gd2Ugbm93IGhhdmUgYSBzaW5nbGUgYHdoaWxlYCBsb29wLCB0aGF0IHNob3VsZCBiZSBsZXNzIGNvbXBsZXggdGhhbiB0aGUgcHJldmlvdXMgb25lIHdpdGggdGhlIGBpZi9lbHNlYCBpbnNpZGUgaXQuIFRoZXJlJ3MgYSBjaGVjayBmb3IgYSAtRU5PREVWIGVycm9yIHdoaWNoIHNob3VsZCBhbHNvIGhhbmRsZSBzZXR0aW5nIHRoZSB1bnBsdWcgc3RhdGUuIEZpbmFsbHkgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGVycm9yIHN0YXR1cy5cblxuV2FpdCBhIHNlY29uZC4uLkknbSBzZWVpbmcgc29tZXRoaW5nLiBJIHdhcyBjZXJ0YWluIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhbiBvdXRlciBgaWYgKHNpemUpYCBjb25kaXRpb24gdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBiZSBjYWxsaW5nIGBzZXRfcmVnaXN0ZXJzYCBhdCBhbGwsIGFuZCBpdCdzIG1pc3NpbmcgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbi4gVGhpcyBsb29rcyBsaWtlIGEgYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg3MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDI6MTcuNjQ4ODIwMTM5WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDgwOlxcdFxcbjE0ODE6XFx0XFx0XFx0aW5kZXggKz0gNDtcXG4xNDgyOlxcdFxcdFxcdGRhdGEgKz0gNDtcXG4xNDgzOlxcdFxcdFxcdHNpemUgLT0gNDtcXG4xNDg0OlxcdFxcdH1cXG4xNDg1OlxcdFxcbjE0ODY6XFx0XFx0aWYgKHNpemUpIHtcXG4xNDg3OlxcdFxcdFxcdGJ5ZW4gPSBieXRlZW5fZW5kIHwgKGJ5dGVlbl9lbmQgXFx1MDAzZVxcdTAwM2UgNCk7XFxuMTQ4ODpcXHRcXG4xNDg5OlxcdFxcdFxcdC8qIFNwbGl0IHRoZSBsYXN0IERXT1JEIGlmIHRoZSBieXRlX2VuIGlzIG5vdCAweGZmICovXFxuMTQ5MDpcXHRcXHRcXHRpZiAoYnllbiAhPSBCWVRFX0VOX0RXT1JEKVxcbjE0OTE6XFx0XFx0XFx0XFx0c2l6ZSAtPSA0O1xcbjE0OTI6XFx0XFxuMTQ5MzpcXHRcXHRcXHR3aGlsZSAoc2l6ZSBcXHUwMDNlIGxpbWl0KSB7XFxuMTQ5NDpcXHRcXHRcXHRcXHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXFxuMTQ5NTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgbGltaXQsIGRhdGEpO1xcbjE0OTY6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTQ5NzpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycm9yMTtcXG4xNDk4OlxcdFxcbjE0OTk6XFx0XFx0XFx0XFx0aW5kZXggKz0gbGltaXQ7XFxuMTUwMDpcXHRcXHRcXHRcXHRkYXRhICs9IGxpbWl0O1xcbjE1MDE6XFx0XFx0XFx0XFx0c2l6ZSAtPSBsaW1pdDtcXG4xNTAyOlxcdFxcdFxcdH1cXG4xNTAzOlxcdFxcbjE1MDQ6XFx0XFx0XFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELCBzaXplLCBkYXRhKTtcXG4xNTA1OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE1MDY6XFx0XFx0XFx0XFx0Z290byBlcnJvcjE7XFxuMTUwNzpcXHRcXG4xNTA4OlxcdFxcdFxcdGluZGV4ICs9IHNpemU7XFxuMTUwOTpcXHRcXHRcXHRkYXRhICs9IHNpemU7XFxuMTUxMDpcXHRcXG4xNTExOlxcdFxcdFxcdC8qIFNldCB0aGUgbGFzdCBEV09SRCAqL1xcbjE1MTI6XFx0XFx0XFx0aWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRClcXG4xNTEzOlxcdFxcdFxcdFxcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgYnllbiwgNCwgZGF0YSk7XFxuMTUxNDpcXHRcXHR9XFxuMTUxNTpcXHRcXG4xNTE2OlxcdGVycm9yMTpcXG4xNTE3OlxcdFxcdGlmIChyZXQgPT0gLUVOT0RFVilcXG4xNTE4OlxcdFxcdFxcdHJ0bF9zZXRfdW5wbHVnKHRwKTtcXG4xNTE5OlxcdFxcbjE1MjA6XFx0XFx0cmV0dXJuIHJldDtcXG4xNTIxOlxcdH1cXG4xNTIyOlxcdFxcbjE1MjM6XFx0c3RhdGljIGlubGluZVxcbjE1MjQ6XFx0aW50IHBsYV9vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbjE1MjU6XFx0e1xcbjE1MjY6XFx0XFx0cmV0dXJuIGdlbmVyaWNfb2NwX3JlYWQodHAsIGluZGV4LCBzaXplLCBkYXRhLCBNQ1VfVFlQRV9QTEEpO1xcbjE1Mjc6XFx0fVxcbjE1Mjg6XFx0XFxuMTUyOTpcXHRzdGF0aWMgaW5saW5lXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAyOjE3LjY0OTM0OTU4OVoiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzUwNDAwMzIzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQYXRjaCBmb3IgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSByZWZhY3RvcmluZyB0aGUgbG9vcCBzdHJ1Y3R1cmVzIHVzZWQgZm9yIGhhbmRsaW5nIHJlZ2lzdGVyIHJlYWRzIGFuZCB3cml0ZXMgaW4gdGhlIHI4MTUyIGRyaXZlciwgY2h1bmtpbmcgdGhlIGRhdGEgaW50byA1MTItYnl0ZSBibG9ja3MuIE15IHByaW1hcnkgY29uY2VybiwgZ2l2ZW4gdGhlIHByb21wdCwgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgb3IgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCdzIHN0YXJ0IHdpdGggYGdlbmVyaWNfb2NwX3dyaXRlYC4gVGhlIGNyaXRpY2FsIGNoYW5nZSBoZXJlIGlzIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRoZSBcImxhc3QgY2h1bmsuXCIgSW4gdGhlIG9yaWdpbmFsIGNvZGUsIGlmIGBzaXplYCB3YXMgNCBhbmQgYGJ5ZW5gIHdhc24ndCBgQllURV9FTl9EV09SRGAsIHRoZSBsb29wIHdhcyAqc2tpcHBlZCosIGFuZCBhIHNpbmdsZSB3cml0ZSBvZiA0IGJ5dGVzIGhhcHBlbmVkLiBOb3csIHRoZSByZWZhY3RvcmVkIGNvZGUgKmVudGVycyogYSBsb29wIChiZWNhdXNlIGBzaXplYCBiZWNhbWUgMCBhZnRlciB0aGUgY29uZGl0aW9uYWwgc3VidHJhY3Rpb24sIGFuZCBgd2hpbGUgKHNpemUgXHUwMDNlIGxpbWl0KWAgaXMgZmFsc2UsIGFuZCB0aGVyZWZvcmUgc2tpcHBlZCksIGZvbGxvd2VkIGJ5IGEgemVyby1sZW5ndGggY29udHJvbCBtZXNzYWdlLiBUaGlzIG1lYW5zIGBzZXRfcmVnaXN0ZXJzYCAqaXMqIGNhbGxlZCB3aXRoIGBzaXplID0gMGAuIEhvd2V2ZXIsIHRoaXMgaXMgTk9UIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZS4gV2hlbiBgc2l6ZWAgaXMgemVybywgYGttZW1kdXBgIHJldHVybnMgYFpFUk9fU0laRV9QVFJgLCB3aGljaCBpcyBzYWZlLiBUaGUgc3Vic2VxdWVudCBgdXNiX2NvbnRyb2xfbXNnYCBjYWxsIHdpdGggYFpFUk9fU0laRV9QVFJgIHdvbid0IHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBqdXN0IHNlbmRzIGEgMC1sZW5ndGggY29udHJvbCBtZXNzYWdlLCB3aGljaCBpcyB2YWxpZCBVU0IgYmVoYXZpb3IgKGEgemVyby1sZW5ndGggd3JpdGUpLiBUaGlzIG1pZ2h0IGJlIGEgZnVuY3Rpb25hbCBidWcgaWYgdGhlIGRldmljZSBtaXNpbnRlcnByZXRzIHRoZSAwLWxlbmd0aCBtZXNzYWdlIGJ1dCBpdCdzIG5vdCBhIG1lbW9yeSBzYWZldHkgaXNzdWUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBgZ2VuZXJpY19vY3BfcmVhZGAuIEluIHRoaXMgZnVuY3Rpb24sIHRoZSBpbml0aWFsIHNpemUgaXMgdmFsaWRhdGVkIHRvIGJlIGEgbXVsdGlwbGUgb2YgNCAqYW5kKiBub24temVyby4gVGhlIGxvb3AgY29uZGl0aW9uIGB3aGlsZSAoc2l6ZSBcdTAwM2UgbGltaXQpYCBvbmx5IGV4ZWN1dGVzIGlmIGBzaXplYCBpcyBncmVhdGVyIHRoYW4gNTEyIGFuZCBpcyBuZXZlciBkZWNyZWFzZWQgYnkgNC4gVGhlcmVmb3JlIGBnZXRfcmVnaXN0ZXJzYCBpcyBuZXZlciBjYWxsZWQgd2l0aCBgc2l6ZSA9IDBgLiBTbywgbm8gbWVtb3J5IGlzIGxlZnQgdW5pbml0aWFsaXplZC5cblxuU28sIGluIGBnZW5lcmljX29jcF9yZWFkYCB0aGVyZSdzIG5vIHdheSB0byBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIGEgYmFkIHNpemUuIEluIGBnZW5lcmljX29jcF93cml0ZWAgdGhlcmUgaXMgYSB2ZXJ5IHNwZWNpZmljIGNhc2Ugd2hlcmUgaXQgKmNvdWxkKiBzZW5kIGEgMCBsZW5ndGggd3JpdGUuIEJ1dCBpdCBkb2VzICpub3QqIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gYGttZW1kdXBgIGhhbmRsZXMgYSBzaXplIG9mIDAuIGB1c2JfY29udHJvbF9tc2dgIGlzIHNhZmUgd2l0aCBhIHNpemUgb2YgemVyby4gSXQgY291bGQgY2F1c2UgYSBmdW5jdGlvbmFsIGJ1ZyBpZiB0aGUgVVNCIGRldmljZSBkb2Vzbid0IGhhbmRsZSB6ZXJvLWxlbmd0aCBjb250cm9sIG1lc3NhZ2VzLCBidXQgdGhpcyBpc24ndCBhIG1lbW9yeSBzYWZldHkgaXNzdWUuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBvbmx5IHJlZmFjdG9ycyB0aGUgY2h1bmtpbmcgYW5kIG1pZ2h0IGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGRldmljZSBieSBzZW5kaW5nIGEgMC1sZW5ndGggY29udHJvbCBtZXNzYWdlIGluIGEgdmVyeSBwYXJ0aWN1bGFyIGNhc2UuIFRoaXMgY2hhbmdlIGhhcyBubyBpbXBhY3Qgb24gS01TQU4gZnV6emluZy4gSXQncyBub3QgYSBtZW1vcnkgbGVhaywgaXQncyBub3QgbWVtb3J5IGNvcnJ1cHRpb24sIGl0J3MganVzdCBhIHJlZmFjdG9yaW5nIHRoYXQgKmNvdWxkKiBjcmVhdGUgYSBmdW5jdGlvbmFsIGJ1ZyB3aGljaCBpcyBub3QgS01TQU4ncyBjb25jZXJuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTA5MCwiT3V0cHV0VG9rZW5zIjozNDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDI6NDEuMTUzMzU2NjI1WiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNodW5raW5nIGxvb3BzIGluIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBmb3IgdGhlIHI4MTUyIGRyaXZlci4gSW4gYGdlbmVyaWNfb2NwX3dyaXRlYCwgaWYgYHNpemUgPT0gNGAgYW5kIGBieWVuICE9IEJZVEVfRU5fRFdPUkRgLCBgc2l6ZWAgaXMgZGVjcmVtZW50ZWQgYnkgNCB0byAwLiBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGB3aGlsZSAoc2l6ZSlgIGFuZCBza2lwcGVkIHRoZSBsb29wLCB3aGVyZWFzIHRoZSBuZXcgY29kZSB1c2VzIGB3aGlsZSAoc2l6ZSBcXHUwMDNlIGxpbWl0KWAgYW5kIHVuY29uZGl0aW9uYWxseSBjYWxscyBgc2V0X3JlZ2lzdGVyc2Agd2l0aCB0aGUgcmVtYWluaW5nIGBzaXplYCAod2hpY2ggaXMgMCkuIFRoaXMgcmVzdWx0cyBpbiBhIDAtbGVuZ3RoIGNvbnRyb2wgbWVzc2FnZSBiZWluZyBzZW50IHRvIHRoZSBVU0IgZGV2aWNlLiBBIDAtbGVuZ3RoIHdyaXRlIGFsbG9jYXRlcyBhIGBaRVJPX1NJWkVfUFRSYCB2aWEgYGttZW1kdXAoZGF0YSwgMCwgR0ZQX0tFUk5FTClgIGFuZCBwYXNzZXMgaXQgdG8gYHVzYl9jb250cm9sX21zZ2AsIHdoaWNoIGhhbmRsZXMgMC1sZW5ndGggdHJhbnNmZXJzIHNhZmVseSB3aXRob3V0IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEluIGBnZW5lcmljX29jcF9yZWFkYCwgYHNpemVgIGlzIHZhbGlkYXRlZCB0byBiZSBub24temVybyBhbmQgYSBtdWx0aXBsZSBvZiA0IGluaXRpYWxseSwgYW5kIGlzIG5ldmVyIGRlY3JlbWVudGVkIGJlZm9yZSB0aGUgbG9vcC4gVGh1cywgYGdldF9yZWdpc3RlcnNgIGlzIG5ldmVyIGNhbGxlZCB3aXRoIGBzaXplID0gMGAsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBjb3BpZWQgb3IgZXhwb3NlZC4gU2luY2UgdGhlIHBhdGNoIG9ubHkgaW50cm9kdWNlcyBhIHBvdGVudGlhbCAwLWxlbmd0aCBVU0IgY29udHJvbCBtZXNzYWdlIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcywgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIEFueSBwb3RlbnRpYWwgY3Jhc2hlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjaHVua2luZyBsb29wcyBpbiBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAgZm9yIHRoZSByODE1MiBkcml2ZXIuIEluIGBnZW5lcmljX29jcF93cml0ZWAsIGlmIGBzaXplID09IDRgIGFuZCBgYnllbiAhPSBCWVRFX0VOX0RXT1JEYCwgYHNpemVgIGlzIGRlY3JlbWVudGVkIGJ5IDQgdG8gMC4gVGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBgd2hpbGUgKHNpemUpYCBhbmQgc2tpcHBlZCB0aGUgbG9vcCwgd2hlcmVhcyB0aGUgbmV3IGNvZGUgdXNlcyBgd2hpbGUgKHNpemUgXFx1MDAzZSBsaW1pdClgIGFuZCB1bmNvbmRpdGlvbmFsbHkgY2FsbHMgYHNldF9yZWdpc3RlcnNgIHdpdGggdGhlIHJlbWFpbmluZyBgc2l6ZWAgKHdoaWNoIGlzIDApLiBUaGlzIHJlc3VsdHMgaW4gYSAwLWxlbmd0aCBjb250cm9sIG1lc3NhZ2UgYmVpbmcgc2VudCB0byB0aGUgVVNCIGRldmljZS4gQSAwLWxlbmd0aCB3cml0ZSBhbGxvY2F0ZXMgYSBgWkVST19TSVpFX1BUUmAgdmlhIGBrbWVtZHVwKGRhdGEsIDAsIEdGUF9LRVJORUwpYCBhbmQgcGFzc2VzIGl0IHRvIGB1c2JfY29udHJvbF9tc2dgLCB3aGljaCBoYW5kbGVzIDAtbGVuZ3RoIHRyYW5zZmVycyBzYWZlbHkgd2l0aG91dCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJbiBgZ2VuZXJpY19vY3BfcmVhZGAsIGBzaXplYCBpcyB2YWxpZGF0ZWQgdG8gYmUgbm9uLXplcm8gYW5kIGEgbXVsdGlwbGUgb2YgNCBpbml0aWFsbHksIGFuZCBpcyBuZXZlciBkZWNyZW1lbnRlZCBiZWZvcmUgdGhlIGxvb3AuIFRodXMsIGBnZXRfcmVnaXN0ZXJzYCBpcyBuZXZlciBjYWxsZWQgd2l0aCBgc2l6ZSA9IDBgLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgY29waWVkIG9yIGV4cG9zZWQuIFNpbmNlIHRoZSBwYXRjaCBvbmx5IGludHJvZHVjZXMgYSBwb3RlbnRpYWwgMC1sZW5ndGggVVNCIGNvbnRyb2wgbWVzc2FnZSBhbmQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBBbnkgcG90ZW50aWFsIGNyYXNoZXMgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow6q8zg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-22 20:35:13 +0000 UTC FinishedAt: 2026-08-22 21:02:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_DRIVERS", "USB_RTL8152" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_DRIVERS", "USB_RTL8152" ], "series_id": "55359059-6b83-4bec-a565-25ff7e16bbbe" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtl8152_probe", "rtl8152_open", "rtl8152_start_xmit", "rtl8152_ioctl", "rtl8152_set_mac_address", "rtl8152_change_mtu" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtVU0JfUlRMODE1MiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bDgxNTJfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRsODE1Ml9vcGVuJiMzNDssCiAgICAmIzM0O3J0bDgxNTJfc3RhcnRfeG1pdCYjMzQ7LAogICAgJiMzNDtydGw4MTUyX2lvY3RsJiMzNDssCiAgICAmIzM0O3J0bDgxNTJfc2V0X21hY19hZGRyZXNzJiMzNDssCiAgICAmIzM0O3J0bDgxNTJfY2hhbmdlX210dSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2h1bmtpbmcgbG9vcHMgaW4gYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIGZvciB0aGUgcjgxNTIgZHJpdmVyLiBJbiBgZ2VuZXJpY19vY3Bfd3JpdGVgLCBpZiBgc2l6ZSA9PSA0YCBhbmQgYGJ5ZW4gIT0gQllURV9FTl9EV09SRGAsIGBzaXplYCBpcyBkZWNyZW1lbnRlZCBieSA0IHRvIDAuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYHdoaWxlIChzaXplKWAgYW5kIHNraXBwZWQgdGhlIGxvb3AsIHdoZXJlYXMgdGhlIG5ldyBjb2RlIHVzZXMgYHdoaWxlIChzaXplIFx1MDAzZSBsaW1pdClgIGFuZCB1bmNvbmRpdGlvbmFsbHkgY2FsbHMgYHNldF9yZWdpc3RlcnNgIHdpdGggdGhlIHJlbWFpbmluZyBgc2l6ZWAgKHdoaWNoIGlzIDApLiBUaGlzIHJlc3VsdHMgaW4gYSAwLWxlbmd0aCBjb250cm9sIG1lc3NhZ2UgYmVpbmcgc2VudCB0byB0aGUgVVNCIGRldmljZS4gQSAwLWxlbmd0aCB3cml0ZSBhbGxvY2F0ZXMgYSBgWkVST19TSVpFX1BUUmAgdmlhIGBrbWVtZHVwKGRhdGEsIDAsIEdGUF9LRVJORUwpYCBhbmQgcGFzc2VzIGl0IHRvIGB1c2JfY29udHJvbF9tc2dgLCB3aGljaCBoYW5kbGVzIDAtbGVuZ3RoIHRyYW5zZmVycyBzYWZlbHkgd2l0aG91dCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJbiBgZ2VuZXJpY19vY3BfcmVhZGAsIGBzaXplYCBpcyB2YWxpZGF0ZWQgdG8gYmUgbm9uLXplcm8gYW5kIGEgbXVsdGlwbGUgb2YgNCBpbml0aWFsbHksIGFuZCBpcyBuZXZlciBkZWNyZW1lbnRlZCBiZWZvcmUgdGhlIGxvb3AuIFRodXMsIGBnZXRfcmVnaXN0ZXJzYCBpcyBuZXZlciBjYWxsZWQgd2l0aCBgc2l6ZSA9IDBgLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgY29waWVkIG9yIGV4cG9zZWQuIFNpbmNlIHRoZSBwYXRjaCBvbmx5IGludHJvZHVjZXMgYSBwb3RlbnRpYWwgMC1sZW5ndGggVVNCIGNvbnRyb2wgbWVzc2FnZSBhbmQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBBbnkgcG90ZW50aWFsIGNyYXNoZXMgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9vcCBsb2dpYyBpbiBnZW5lcmljX29jcF9yZWFkIGFuZCBnZW5lcmljX29jcF93cml0ZSBpbiB0aGUgcjgxNTIgVVNCIG5ldHdvcmsgZHJpdmVyLiBUaGUgcmVmYWN0b3JlZCBjb2RlIG5vdyBleGVjdXRlcyBnZXRfcmVnaXN0ZXJzL3NldF9yZWdpc3RlcnMgZXZlbiBpZiB0aGUgaW5pdGlhbCBzaXplIGlzIDAsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjb3VsZCB0cmlnZ2VyIGJ1Z3MgKGUuZy4sIHplcm8tc2l6ZSBhbGxvY2F0aW9ucyBvciBVU0IgY29udHJvbCBtZXNzYWdlcykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZWU3OWQ2Mzk4ZWQ3Y2I5ZWQyM2Y1MWI1ZDY3ZmFhY2MyZWQwY2I2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMjA6NTk6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuY1xuaW5kZXggZjYxNjg2NDMzMDMxYy4uZGU5NzM4YmRjZTg1OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuY1xuQEAgLTE0MzEsMjcgJiM0MzsxNDMxLDE5IEBAIHN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxuIFx0aWYgKCh1MzIpaW5kZXggJiM0MzsgKHUzMilzaXplIFx1MDAzZSAweGZmZmYpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHR3aGlsZSAoc2l6ZSkge1xuLVx0XHRpZiAoc2l6ZSBcdTAwM2UgbGltaXQpIHtcbi1cdFx0XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRicmVhaztcbi1cbi1cdFx0XHRpbmRleCAmIzQzOz0gbGltaXQ7XG4tXHRcdFx0ZGF0YSAmIzQzOz0gbGltaXQ7XG4tXHRcdFx0c2l6ZSAtPSBsaW1pdDtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgc2l6ZSwgZGF0YSk7XG4tXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRcdGJyZWFrO1xuJiM0MztcdHdoaWxlIChzaXplIFx1MDAzZSBsaW1pdCkge1xuJiM0MztcdFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIGxpbWl0LCBkYXRhKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyb3IxO1xuIFxuLVx0XHRcdGluZGV4ICYjNDM7PSBzaXplO1xuLVx0XHRcdGRhdGEgJiM0Mzs9IHNpemU7XG4tXHRcdFx0c2l6ZSA9IDA7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiYjNDM7XHRcdGluZGV4ICYjNDM7PSBsaW1pdDtcbiYjNDM7XHRcdGRhdGEgJiM0Mzs9IGxpbWl0O1xuJiM0MztcdFx0c2l6ZSAtPSBsaW1pdDtcbiBcdH1cbiBcbiYjNDM7XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgc2l6ZSwgZGF0YSk7XG4mIzQzO1xuJiM0MztlcnJvcjE6XG4gXHRpZiAocmV0ID09IC1FTk9ERVYpXG4gXHRcdHJ0bF9zZXRfdW5wbHVnKHRwKTtcbiBcbkBAIC0xNDk4LDMxICYjNDM7MTQ5MCwyNCBAQCBzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbixcbiBcdFx0aWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRClcbiBcdFx0XHRzaXplIC09IDQ7XG4gXG4tXHRcdHdoaWxlIChzaXplKSB7XG4tXHRcdFx0aWYgKHNpemUgXHUwMDNlIGxpbWl0KSB7XG4tXHRcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCxcbi1cdFx0XHRcdFx0XHQgICAgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXG4tXHRcdFx0XHRcdFx0ICAgIGxpbWl0LCBkYXRhKTtcbi1cdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRcdGdvdG8gZXJyb3IxO1xuLVxuLVx0XHRcdFx0aW5kZXggJiM0Mzs9IGxpbWl0O1xuLVx0XHRcdFx0ZGF0YSAmIzQzOz0gbGltaXQ7XG4tXHRcdFx0XHRzaXplIC09IGxpbWl0O1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCxcbi1cdFx0XHRcdFx0XHQgICAgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXG4tXHRcdFx0XHRcdFx0ICAgIHNpemUsIGRhdGEpO1xuLVx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRcdFx0Z290byBlcnJvcjE7XG4tXG4tXHRcdFx0XHRpbmRleCAmIzQzOz0gc2l6ZTtcbi1cdFx0XHRcdGRhdGEgJiM0Mzs9IHNpemU7XG4tXHRcdFx0XHRzaXplID0gMDtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbiYjNDM7XHRcdHdoaWxlIChzaXplIFx1MDAzZSBsaW1pdCkge1xuJiM0MztcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXG4mIzQzO1x0XHRcdFx0XHQgICAgbGltaXQsIGRhdGEpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyb3IxO1xuJiM0MztcbiYjNDM7XHRcdFx0aW5kZXggJiM0Mzs9IGxpbWl0O1xuJiM0MztcdFx0XHRkYXRhICYjNDM7PSBsaW1pdDtcbiYjNDM7XHRcdFx0c2l6ZSAtPSBsaW1pdDtcbiBcdFx0fVxuIFxuJiM0MztcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELCBzaXplLCBkYXRhKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyb3IxO1xuJiM0MztcbiYjNDM7XHRcdGluZGV4ICYjNDM7PSBzaXplO1xuJiM0MztcdFx0ZGF0YSAmIzQzOz0gc2l6ZTtcbiYjNDM7XG4gXHRcdC8qIFNldCB0aGUgbGFzdCBEV09SRCAqL1xuIFx0XHRpZiAoYnllbiAhPSBCWVRFX0VOX0RXT1JEKVxuIFx0XHRcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgYnllbiwgNCwgZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtVU0JfUlRMODE1MiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bDgxNTJfcHJvYmUmIzM0OywKICAgICYjMzQ7cnRsODE1Ml9vcGVuJiMzNDssCiAgICAmIzM0O3J0bDgxNTJfc3RhcnRfeG1pdCYjMzQ7LAogICAgJiMzNDtydGw4MTUyX2lvY3RsJiMzNDssCiAgICAmIzM0O3J0bDgxNTJfc2V0X21hY19hZGRyZXNzJiMzNDssCiAgICAmIzM0O3J0bDgxNTJfY2hhbmdlX210dSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9vcCBsb2dpYyBpbiBnZW5lcmljX29jcF9yZWFkIGFuZCBnZW5lcmljX29jcF93cml0ZSBpbiB0aGUgcjgxNTIgVVNCIG5ldHdvcmsgZHJpdmVyLiBUaGUgcmVmYWN0b3JlZCBjb2RlIG5vdyBleGVjdXRlcyBnZXRfcmVnaXN0ZXJzL3NldF9yZWdpc3RlcnMgZXZlbiBpZiB0aGUgaW5pdGlhbCBzaXplIGlzIDAsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjb3VsZCB0cmlnZ2VyIGJ1Z3MgKGUuZy4sIHplcm8tc2l6ZSBhbGxvY2F0aW9ucyBvciBVU0IgY29udHJvbCBtZXNzYWdlcykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZWU3OWQ2Mzk4ZWQ3Y2I5ZWQyM2Y1MWI1ZDY3ZmFhY2MyZWQwY2I2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjIgMjA6NTk6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcjgxNTIuYyBiL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jCmluZGV4IGY2MTY4NjQzMzAzMWMuLmRlOTczOGJkY2U4NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jCkBAIC0xNDMxLDI3ICYjNDM7MTQzMSwxOSBAQCBzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgc2l6ZSwKIAlpZiAoKHUzMilpbmRleCAmIzQzOyAodTMyKXNpemUgJmd0OyAweGZmZmYpCiAJCXJldHVybiAtRVBFUk07CiAKLQl3aGlsZSAoc2l6ZSkgewotCQlpZiAoc2l6ZSAmZ3Q7IGxpbWl0KSB7Ci0JCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpOwotCQkJaWYgKHJldCAmbHQ7IDApCi0JCQkJYnJlYWs7Ci0KLQkJCWluZGV4ICYjNDM7PSBsaW1pdDsKLQkJCWRhdGEgJiM0Mzs9IGxpbWl0OwotCQkJc2l6ZSAtPSBsaW1pdDsKLQkJfSBlbHNlIHsKLQkJCXJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBzaXplLCBkYXRhKTsKLQkJCWlmIChyZXQgJmx0OyAwKQotCQkJCWJyZWFrOwomIzQzOwl3aGlsZSAoc2l6ZSAmZ3Q7IGxpbWl0KSB7CiYjNDM7CQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJvcjE7CiAKLQkJCWluZGV4ICYjNDM7PSBzaXplOwotCQkJZGF0YSAmIzQzOz0gc2l6ZTsKLQkJCXNpemUgPSAwOwotCQkJYnJlYWs7Ci0JCX0KJiM0MzsJCWluZGV4ICYjNDM7PSBsaW1pdDsKJiM0MzsJCWRhdGEgJiM0Mzs9IGxpbWl0OwomIzQzOwkJc2l6ZSAtPSBsaW1pdDsKIAl9CiAKJiM0MzsJcmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpOwomIzQzOwomIzQzO2Vycm9yMToKIAlpZiAocmV0ID09IC1FTk9ERVYpCiAJCXJ0bF9zZXRfdW5wbHVnKHRwKTsKIApAQCAtMTQ5OCwzMSAmIzQzOzE0OTAsMjQgQEAgc3RhdGljIGludCBnZW5lcmljX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sCiAJCWlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpCiAJCQlzaXplIC09IDQ7CiAKLQkJd2hpbGUgKHNpemUpIHsKLQkJCWlmIChzaXplICZndDsgbGltaXQpIHsKLQkJCQlyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwKLQkJCQkJCSAgICB0eXBlIHwgQllURV9FTl9EV09SRCwKLQkJCQkJCSAgICBsaW1pdCwgZGF0YSk7Ci0JCQkJaWYgKHJldCAmbHQ7IDApCi0JCQkJCWdvdG8gZXJyb3IxOwotCi0JCQkJaW5kZXggJiM0Mzs9IGxpbWl0OwotCQkJCWRhdGEgJiM0Mzs9IGxpbWl0OwotCQkJCXNpemUgLT0gbGltaXQ7Ci0JCQl9IGVsc2UgewotCQkJCXJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LAotCQkJCQkJICAgIHR5cGUgfCBCWVRFX0VOX0RXT1JELAotCQkJCQkJICAgIHNpemUsIGRhdGEpOwotCQkJCWlmIChyZXQgJmx0OyAwKQotCQkJCQlnb3RvIGVycm9yMTsKLQotCQkJCWluZGV4ICYjNDM7PSBzaXplOwotCQkJCWRhdGEgJiM0Mzs9IHNpemU7Ci0JCQkJc2l6ZSA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9CiYjNDM7CQl3aGlsZSAoc2l6ZSAmZ3Q7IGxpbWl0KSB7CiYjNDM7CQkJcmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELAomIzQzOwkJCQkJICAgIGxpbWl0LCBkYXRhKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJvcjE7CiYjNDM7CiYjNDM7CQkJaW5kZXggJiM0Mzs9IGxpbWl0OwomIzQzOwkJCWRhdGEgJiM0Mzs9IGxpbWl0OwomIzQzOwkJCXNpemUgLT0gbGltaXQ7CiAJCX0KIAomIzQzOwkJcmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELCBzaXplLCBkYXRhKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyb3IxOwomIzQzOwomIzQzOwkJaW5kZXggJiM0Mzs9IHNpemU7CiYjNDM7CQlkYXRhICYjNDM7PSBzaXplOwomIzQzOwogCQkvKiBTZXQgdGhlIGxhc3QgRFdPUkQgKi8KIAkJaWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRCkKIAkJCXJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgYnllbiwgNCwgZGF0YSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVhbHRlayBVU0IgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNgLiBJdCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgdGhlIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBmdW5jdGlvbnMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgYSByZWZhY3RvcmluZywgc2ltcGxpZnlpbmcgdGhvc2Ugd2hpbGUgbG9vcHMgYnkgdGFraW5nIHRoYXQgbGFzdCBpdGVyYXRpb24sIHdoZXJlIGBzaXplICZsdDs9IGxpbWl0YCwgb3V0IG9mIHRoZSBsb29wLiBGdW5jdGlvbmFsbHksIHRoaXMgbGlrZWx5IGtlZXBzIHRoZSBzYW1lIGJlaGF2aW91ci4KClRoaXMgaXMgYSBVU0IgbmV0d29yayBkcml2ZXIgZm9yIFJlYWx0ZWsgUlRMODE1Mi9SVEw4MTUzIGJhc2VkIFVTQiBFdGhlcm5ldCBhZGFwdGVycy4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIFVTQiBkcml2ZXIsIEkgc2hvdWxkIG5vdGUgdGhhdCB0aGVzZSBraW5kcyBvZiBkcml2ZXJzIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBXZSBjYW4gdXNlIHRvb2xzIGxpa2UgYGR1bW15X2hjZGAgb3Igc2ltaWxhciBVU0IgZW11bGF0aW9uIGZyYW1ld29ya3Mgd2l0aGluIGEgZnJhbWV3b3JrIGxpa2Ugc3l6a2FsbGVyIHRvIGdlbmVyYXRlIGludGVyZXN0aW5nIGlucHV0cyBhbmQgdGVzdCBmb3IgdnVsbmVyYWJpbGl0aWVzLgoKR2l2ZW4gdGhhdCBpdCBpcyBhIGtlcm5lbCBwYXRjaCwgYmVmb3JlIEkgZGlnIGFueSBkZWVwZXIsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgZm9yIHRoZSBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjb2RlLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gYmUgbW9yZSBwcmVjaXNlIGluIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3I4MTUyXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX1VTQl9SVEw4MTUwKVx0JiM0Mzs9IHJ0bDgxNTAub1xuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19VU0JfUlRMODE1MilcdCYjNDM7PSByODE1Mi5vXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUtMTEtb2JqLSQoQ09ORklHX1VTQl9IU08pXHRcdCYjNDM7PSBoc28ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxOTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFVTQiBSVEw4MTUyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYENPTkZJR19VU0JfUlRMODE1MmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBsaW5lYWdlIGFuZCBzZWUgd2hlcmUgdGhpcyBtb2R1bGUgZml0cyB3aXRoaW4gdGhlIGJyb2FkZXIgZHJpdmVyIGFyY2hpdGVjdHVyZS4gVGltZSB0byBkZWx2ZSBpbnRvIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnM7IHdoZXJlIHdlIGRlZmluZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgd2hhdCBvdGhlciBtb2R1bGVzLCBmZWF0dXJlcywgb3IgYnJvYWRlciBjb25maWd1cmF0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIGBDT05GSUdfVVNCX1JUTDgxNTJgIGNhbiBldmVuIGJlIGNvbnNpZGVyZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGFueSBwbGF0Zm9ybSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgb3Igb3RoZXIgZmFjdG9ycyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGlzIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBub3RlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9SVEw4MTUyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWc9ODg9Y29uZmlnIFVTQl9SVEw4MTUwXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctOTgtXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo5OTpjb25maWcgVVNCX1JUTDgxNTJcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTEwMC1cdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgUlRMODE1Mi9SVEw4MTUzIEJhc2VkIFVTQiBFdGhlcm5ldCBBZGFwdGVyc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBVU0IgTmV0d29ya2luZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgYXJlYSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIGluZnJhc3RydWN0dXJlLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA5OS4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgc3BlY2lmaWMgbGluZSBudW1iZXIgaXMgbGlrZWx5IHRvIGJlIGludGVyZXN0aW5nLCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgZGV0YWlscyB0aGVyZS4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBhIHNwZWNpZmljIG9wdGlvbiBvciBjb25maWd1cmF0aW9uIHBhcmFtZXRlciByZWxhdGVkIHRvIGEgVVNCIG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSB0aGF0IHdhcnJhbnRzIG15IGF0dGVudGlvbi4gSXQgY291bGQgYmUgYSBuZXcgZmVhdHVyZSwgYSBzdWJ0bGUgYnVnIGZpeCwgb3IgcGVyaGFwcyBzb21lIGFyY2hpdGVjdHVyYWwgY2hhbmdlIHJlbGF0ZWQgdG8gVVNCIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQuIEkgd2lsbCBiZSBsb29raW5nIGZvciBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIG9yIGFueSByZWNlbnQgbW9kaWZpY2F0aW9ucyB0aGF0IG1pZ2h0IGltcGFjdCBob3cgdGhlc2UgZGV2aWNlcyBhcmUgY29uZmlndXJlZCBhbmQgdXRpbGl6ZWQgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSYjMzk7bSBwcmVwYXJpbmcgbXlzZWxmIHRvIGZpbHRlciBvdXQgdGhlIGlycmVsZXZhbnQgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTU6XHRcbiAgOTY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDk3Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBydGw4MTUwLlxuICA5ODpcdFxuICA5OTpcdGNvbmZpZyBVU0JfUlRMODE1MlxuIDEwMDpcdFx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBSVEw4MTUyL1JUTDgxNTMgQmFzZWQgVVNCIEV0aGVybmV0IEFkYXB0ZXJzXCYjMzQ7XG4gMTAxOlx0XHRzZWxlY3QgTUlJXG4gMTAyOlx0XHRzZWxlY3QgUEhZTElCXG4gMTAzOlx0XHRzZWxlY3QgQ1JDMzJcbiAxMDQ6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuIDEwNTpcdFx0aGVscFxuIDEwNjpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODE1MiBiYXNlZCBVU0IgMi4wXG4gMTA3Olx0XHQgIDEwLzEwMCBFdGhlcm5ldCBhZGFwdGVycyBhbmQgUlRMODE1MyBiYXNlZCBVU0IgMy4wIDEwLzEwMC8xMDAwXG4gMTA4Olx0XHQgIEV0aGVybmV0IGFkYXB0ZXJzLlxuIDEwOTpcdFxuIDExMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAxMTE6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHI4MTUyLlxuIDExMjpcdFxuIDExMzpcdGNvbmZpZyBVU0JfTEFONzhYWFxuIDExNDpcdFx0dHJpc3RhdGUgXCYjMzQ7TWljcm9jaGlwIExBTjc4WFggQmFzZWQgVVNCIEV0aGVybmV0IEFkYXB0ZXJzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEwMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEZXBlbmRlbmNpZXMgYW5kIENvbnRleHR1YWwgSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGluc3RpbmN0IHBvaW50cyBtZSB0b3dhcmRzIHRoZXNlIGRlcGVuZGVuY2llczogYE1JSWAsIGBQSFlMSUJgLCBgQ1JDMzJgLCBhbmQgYENSWVBUT19MSUJfU0hBMjU2YC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhlc2UgYXJlIGtleSBjb21wb25lbnRzIGluIHdoYXRldmVyIEkmIzM5O20gZGVhbGluZyB3aXRoLiBCdXQgdGhlIHJlYWwgcXVlc3Rpb24gaXMgaG93IHRoZXkgYWxsIGZpdCB0b2dldGhlci4gVGhlIGNydWNpYWwgcGFyZW50IGNvbmZpZyBpcyBsaWtlbHkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYFVTQl9ORVRfRFJJVkVSU2AsIG9yIHNvbWV0aGluZyB2ZXJ5IHNpbWlsYXIuIFRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgaXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UgdG8ganVtcCBvdmVyIHRvIHRoZSB0b3Agb2YgdGhlIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBhbmQgb3ZlcmFsbCBzdHJ1Y3R1cmUgYXJlIGxpa2VseSBsb2NhdGVkLiBUaGF0JiMzOTtsbCBiZSB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBVU0IgTmV0d29yayBkZXZpY2VzIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29tbWVudCBcJiMzNDtIb3N0LXNpZGUgVVNCIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcJiMzNDtcbiAgIDY6XHRcdGRlcGVuZHMgb24gIVVTQiBcdTAwMjZcdTAwMjYgTkVUXG4gICA3Olx0XG4gICA4Olx0bWVudWNvbmZpZyBVU0JfTkVUX0RSSVZFUlNcbiAgIDk6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBOZXR3b3JrIEFkYXB0ZXJzXCYjMzQ7XG4gIDEwOlx0XHRkZWZhdWx0IFVTQiBpZiBVU0JcbiAgMTE6XHRcdGRlcGVuZHMgb24gVVNCIFx1MDAyNlx1MDAyNiBORVRcbiAgMTI6XHRcbiAgMTM6XHRpZiBVU0JfTkVUX0RSSVZFUlNcbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgVVNCX0NBVENcbiAgMTY6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBDQVRDIE5ldE1hdGUtYmFzZWQgRXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgMTc6XHRcdHNlbGVjdCBDUkMzMlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIFVTQiBFdGhlcm5ldFxuICAyMDpcdFx0ICBkZXZpY2UgYmFzZWQgb24gdGhlIEVMMTIxMEEgY2hpcC4gU3VwcG9ydGVkIGRldmljZXMgYXJlOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjI5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBVU0IgTmV0d29yayBEcml2ZXIgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgVVNCX05FVF9EUklWRVJTYCBjb25maWd1cmF0aW9uLCBhbmQgc3BlY2lmaWNhbGx5IHRoZSBgVVNCX1JUTDgxNTJgIGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgbWFkZS4gSXQgbG9va3MgbGlrZSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkIGFyZSBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBldmVuIGJlaW5nIGNhbGxlZCwgYW5kIGlmIHNvLCBieSB3aGF0LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZWlyIGltcGFjdC4gVGltZSB0byBnZXQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2VuZXJpY19vY3BfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE0MTI9c3RhdGljIHZvaWQgcnRsX3NldF91bnBsdWcoc3RydWN0IHI4MTUyICp0cClcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDE3LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTQxODpzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgc2l6ZSxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0MTktXHRcdFx0ICAgIHZvaWQgKmRhdGEsIHUxNiB0eXBlKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1MjQ9aW50IHBsYV9vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUyNS17XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNTI2Olx0cmV0dXJuIGdlbmVyaWNfb2NwX3JlYWQodHAsIGluZGV4LCBzaXplLCBkYXRhLCBNQ1VfVFlQRV9QTEEpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUyNy19XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTU0MT1zdGF0aWMgdTMyIG9jcF9yZWFkX2R3b3JkKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU0NC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1NDU6XHRnZW5lcmljX29jcF9yZWFkKHRwLCBpbmRleCwgc2l6ZW9mKGRhdGEpLCBcdTAwMjZkYXRhLCB0eXBlKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NDYtXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTU1Nz1zdGF0aWMgdTE2IG9jcF9yZWFkX3dvcmQoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleClcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTY2LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU2NzpcdGdlbmVyaWNfb2NwX3JlYWQodHAsIGluZGV4LCBzaXplb2YodG1wKSwgXHUwMDI2dG1wLCB0eXBlIHwgYnllbik7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTY4LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1OTc9c3RhdGljIHU4IG9jcF9yZWFkX2J5dGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleClcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNjA0LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTYwNTpcdGdlbmVyaWNfb2NwX3JlYWQodHAsIGluZGV4LCBzaXplb2YodG1wKSwgXHUwMDI2dG1wLCB0eXBlKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MDYtXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9OTA3OD1zdGF0aWMgdm9pZCBydGw4MTUyX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtOTA4Ni1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjkwODc6XHRnZW5lcmljX29jcF9yZWFkKHRwLCBQTEFfVEFMTFlDTlQsIHNpemVvZih0YWxseSksIFx1MDAyNnRhbGx5LCBNQ1VfVFlQRV9QTEEpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtOTA4OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY4NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipBbmFseXppbmcgT0NQIEJ1cyBBY2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlc2UgT0NQIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoZXkmIzM5O3JlIHRoZSBmb3VuZGF0aW9uYWwgYnVpbGRpbmcgYmxvY2tzLCBoZWF2aWx5IGxldmVyYWdlZCBieSB0aGluZ3MgbGlrZSBgcGxhX29jcF9yZWFkYCwgdGhlIGBvY3BfcmVhZF9kd29yZC93b3JkL2J5dGVgIGZ1bmN0aW9ucywgYW5kIHByb2JhYmx5IG90aGVycy4gS25vd2luZyB0aGUgc3lzdGVtLCBpdCYjMzk7cyBwcmV0dHkgbXVjaCBhIGdpdmVuIHRoYXQgdGhlc2UgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgVVNCIGVtdWxhdGlvbiBwYXRod2F5LiBTaW5jZSBgZ2VuZXJpY19vY3BfcmVhZGAgaXMgc28gY2VudHJhbCwgaXQgbWFrZXMgc2Vuc2UgdG8gZ28gaW4gYW5kIGNoZWNrIGBnZW5lcmljX29jcF93cml0ZWAgYXMgd2VsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlc2UgZ2VuZXJpYyBmdW5jdGlvbnMgd29yaywgYXMgdGhleSB3aWxsIHVubG9jayBhY2Nlc3MgdG8gdGhlIHN5c3RlbSB0aHJvdWdoIFVTQi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2VuZXJpY19vY3Bfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvcjgxNTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNDE4PXN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0NTItXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNDUzOnN0YXRpYyBpbnQgZ2VuZXJpY19vY3Bfd3JpdGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgYnl0ZWVuLFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQ1NC1cdFx0XHQgICAgIHUxNiBzaXplLCB2b2lkICpkYXRhLCB1MTYgdHlwZSlcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTMwPWludCBwbGFfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTMxLXtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1MzI6XHRyZXR1cm4gZ2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieXRlZW4sIHNpemUsIGRhdGEsIE1DVV9UWVBFX1BMQSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTMzLX1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTM2PWludCB1c2Jfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTM3LXtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1Mzg6XHRyZXR1cm4gZ2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieXRlZW4sIHNpemUsIGRhdGEsIE1DVV9UWVBFX1VTQik7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTM5LX1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTUwPXN0YXRpYyB2b2lkIG9jcF93cml0ZV9kd29yZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4LCB1MzIgZGF0YSlcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTUzLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU1NDpcdGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBpbmRleCwgQllURV9FTl9EV09SRCwgc2l6ZW9mKHRtcCksIFx1MDAyNnRtcCwgdHlwZSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTU1LX1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTc2PXN0YXRpYyB2b2lkIG9jcF93cml0ZV93b3JkKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgsIHUzMiBkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1OTMtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNTk0Olx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieWVuLCBzaXplb2YodG1wKSwgXHUwMDI2dG1wLCB0eXBlKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1OTUtfVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE2MTQ9c3RhdGljIHZvaWQgb2NwX3dyaXRlX2J5dGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleCwgdTMyIGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTYzMS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE2MzI6XHRnZW5lcmljX29jcF93cml0ZSh0cCwgaW5kZXgsIGJ5ZW4sIHNpemVvZih0bXApLCBcdTAwMjZ0bXAsIHR5cGUpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTYzMy19XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NDUxMT1zdGF0aWMgdm9pZCBydGxfY2xlYXJfYnAoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNDU0OS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjQ1NTA6XHRnZW5lcmljX29jcF93cml0ZSh0cCwgUExBX0JQXzAsIEJZVEVfRU5fRFdPUkQsIGJwX251bSBcdTAwM2NcdTAwM2MgMSwgYnAsIHR5cGUpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNDU1MS1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz01MzA0PXN0YXRpYyB2b2lkIHJ0bF9yYW1fY29kZV9zcGVlZF91cChzdHJ1Y3QgcjgxNTIgKnRwLCBzdHJ1Y3QgZndfcGh5X3NwZWVkX3VwICpwaHksIGJvb2wgd2FpdClcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01MzM0LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NTMzNTpcdFx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIF9fbGUxNl90b19jcHUocGh5LVx1MDAzZWZ3X3JlZyksIDB4ZmYsIHNpemUsIGRhdGEsIE1DVV9UWVBFX1VTQik7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01MzM2LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTU0ODU9c3RhdGljIHZvaWQgcnRsODE1Ml9md19tYWNfYXBwbHkoc3RydWN0IHI4MTUyICp0cCwgc3RydWN0IGZ3X21hYyAqbWFjKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTU1MjQtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo1NTI1Olx0aWYgKGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBfX2xlMTZfdG9fY3B1KG1hYy1cdTAwM2Vmd19yZWcpLCAweGZmLCBsZW5ndGgsXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01NTI2LVx0XHRcdCAgICAgIGRhdGEsIHR5cGUpIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTUzNC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjU1MzU6XHRpZiAoZ2VuZXJpY19vY3Bfd3JpdGUodHAsIF9fbGUxNl90b19jcHUobWFjLVx1MDAzZWJwX3N0YXJ0KSwgQllURV9FTl9EV09SRCxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTU1MzYtXHRcdFx0ICAgICAgQUxJR04oX19sZTE2X3RvX2NwdShtYWMtXHUwMDNlYnBfbnVtKSBcdTAwM2NcdTAwM2MgMSwgNCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRnVuY3Rpb24gU2NvcGUgYW5kIEV4cG9ydCBCZWhhdmlvcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJJiMzOTt2ZSBub3RpY2VkIHNvbWV0aGluZy4gVGhlIGZ1bmN0aW9ucyBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAgYXJlIGRlZmluZWQgYXMgYHN0YXRpY2AuIFRoYXQgbWVhbnMgdGhlaXIgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCB3aGljaCBpcyBleHBlY3RlZC4gSG93ZXZlciwgdGhleSYjMzk7cmUgYmVpbmcgKmNhbGxlZCogYnkgb3RoZXIgZnVuY3Rpb25zOiBgcGxhX29jcF9yZWFkYCwgYHBsYV9vY3Bfd3JpdGVgLCBhbmQgYHVzYl9vY3Bfd3JpdGVgLiBUaG9zZSBsYXR0ZXIgZnVuY3Rpb25zIGFyZW4mIzM5O3QgYHN0YXRpY2AuCgpUaGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBwb3BzIGludG8gbXkgaGVhZCBpcyB3aGV0aGVyIHRoZXNlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGxpa2UgYHBsYV9vY3BfcmVhZGAgYXJlIGV4cG9ydGVkLiBJcyBgcGxhX29jcF9yZWFkYCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBvciBpcyBpdCBhbHNvIGp1c3QgaW50ZXJuYWwgdG8gdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZT8gSSBuZWVkIHRvIHZlcmlmeSBpdHMgZXhwb3J0IHN0YXR1czsgdGhhdCBkZXRhaWwgd2lsbCBkcml2ZSB0aGUgZGVzaWduIGdvaW5nIGZvcndhcmQuIFVuZGVyc3RhbmRpbmcgdGhlIHZpc2liaWxpdHkgb2YgYHBsYV9vY3BfcmVhZGAgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BsYV9vY3BfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1MjM9c3RhdGljIGlubGluZVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTUyNDppbnQgcGxhX29jcF9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTI1LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0yMTE2PXN0YXRpYyBpbnQgZGV0ZXJtaW5lX2V0aGVybmV0X2FkZHIoc3RydWN0IHI4MTUyICp0cCxcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0yMTI2LVx0XHRpZiAodHAtXHUwMDNldmVyc2lvbiA9PSBSVExfVkVSXzAxKSB7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoyMTI3Olx0XHRcdHJldCA9IHBsYV9vY3BfcmVhZCh0cCwgUExBX0lEUiwgOCwgc3MtXHUwMDNlX19kYXRhKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTIxMjgtXHRcdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMjEzMy1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MjEzNDpcdFx0XHRcdHJldCA9IHBsYV9vY3BfcmVhZCh0cCwgUExBX0JBQ0tVUCwgOCxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTIxMzUtXHRcdFx0XHRcdFx0ICAgc3MtXHUwMDNlX19kYXRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEwNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKlF1aWNrIFNjYW4gb2YgSW5saW5lIEZ1bmN0aW9ucyoqCgpSaWdodCwgc28gSSBzZWUgYHBsYV9vY3BfcmVhZGAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpYyBpbmxpbmVgLiBUaGF0JiMzOTtzIGEga2V5IGRldGFpbCB0byBub3RlIGltbWVkaWF0ZWx5LiBUaGlzIHRlbGxzIG1lIHRoZSBjb21waWxlciBpcyBsaWtlbHkgZ29pbmcgdG8gdHJ5IGFuZCBvcHRpbWl6ZSB0aGlzIGZ1bmN0aW9uIGJ5IGlubGluaW5nIGl0IHdoZXJldmVyIGl0JiMzOTtzIGNhbGxlZC4gVGhpcyBtZWFucyB3ZSYjMzk7bGwgYXZvaWQgYSBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkLCBidXQgcG90ZW50aWFsbHkgaW5jcmVhc2UgY29kZSBzaXplIGlmIGl0JiMzOTtzIHVzZWQgYSBsb3QuIE5lZWQgdG8ga2VlcCBhbiBleWUgb24gdGhhdCBkdXJpbmcgcGVyZm9ybWFuY2UgYW5hbHlzaXMgbGF0ZXIuCgpOb3csIGxldCYjMzk7cyBwaXZvdCBhbmQgY2hlY2sgYHVzYl9vY3Bfd3JpdGVgLiBJJiMzOTttIGN1cmlvdXMgaWYgaXQmIzM5O3Mgc2ltaWxhcmx5IG9wdGltaXplZCBvciBpZiBpdCYjMzk7cyBpbXBsZW1lbnRlZCBkaWZmZXJlbnRseS4gSXMgaXQgYSByZWd1bGFyIGZ1bmN0aW9uIGNhbGwsIG9yIHBlcmhhcHMgYW5vdGhlciBgc3RhdGljIGlubGluZWA/IE9yIG1heWJlIGl0IGlzIGEgbWFjcm8gaW1wbGVtZW50YXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZWFkIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZSB3cml0ZSBpcyBjcml0aWNhbCBmb3IgcHJvcGVybHkgdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoaXMgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2Jfb2NwX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTUzNT1zdGF0aWMgaW5saW5lXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNTM2OmludCB1c2Jfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTM3LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0zOTM3PXN0YXRpYyB2b2lkIHI4MTUzX3UxdTJlbihzdHJ1Y3QgcjgxNTIgKnRwLCBib29sIGVuYWJsZSlcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0zOTQ1LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6Mzk0NjpcdHVzYl9vY3Bfd3JpdGUodHAsIFVTQl9UT0xFUkFOQ0UsIEJZVEVfRU5fU0lYX0JZVEVTLCBzaXplb2YodTF1MiksIHUxdTIpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMzk0Ny19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MzcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcnRsODE1MmAgRHJpdmVyJiMzOTtzIEFyY2hpdGVjdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgcnRsODE1MmAgZHJpdmVyIGNvZGUuIEkgc2VlIGEgbG90IG9mIHVzZSBvZiBgc3RhdGljIGlubGluZWAsIHdoaWNoIGlzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQuIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGJlc3QgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLCBhbmQgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaG93IGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCB0aGVtc2VsdmVzIGFyZSBoYW5kbGVkLCBzaW5jZSB0aG9zZSBhcmUgYWxzbyBgc3RhdGljYC4gVGhhdCBsaW1pdHMgZGlyZWN0IGV4dGVybmFsIGNhbGxzLiBJdCBzZWVtcyBsaWtlIHRoZSBiZXN0IGFwcHJvYWNoIGlzIGdvaW5nIHRvIGJlIHRvIGZpbmQgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGVzZSwgb3IgcGVyaGFwcyBqdXN0IGdvIHJpZ2h0IGZvciB0aGUgZHJpdmVyJiMzOTtzIGVudHJ5IHBvaW50cy4KClRoZSBkcml2ZXImIzM5O3MgZW50cnkgcG9pbnRzIGFyZSB0aGUgbGlrZWx5IGNhbmRpZGF0ZXMsIHRoaW5ncyBsaWtlIGBydGw4MTUyX3Byb2JlYCwgYHJ0bDgxNTJfb3BlbmAsIGBydGw4MTUyX3N0YXJ0X3htaXRgLCBgcnRsODE1Ml9pb2N0bGAsIGFuZCBgcnRsODE1Ml9zZXRfbWFjX2FkZHJlc3NgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGRpZ2dpbmcuCgpIb3dldmVyLCBhIHF1aWNrIHNjYW4gc2hvd3MgdGhhdCBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAgYXJlIGNhbGxlZCBmcm9tICpuZWFybHkqIGV2ZXJ5d2hlcmUgd2l0aGluIHRoZSBkcml2ZXIuIFNvLCBJIG5lZWQgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3MgZm9jdXMgb24gYHJ0bDgxNTJfcHJvYmVgIGZvciBub3cuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hlcmUgdGhhdCBsZWFkcy4gSXQmIzM5O3MgdGhlIG5hdHVyYWwgZmlyc3Qgc3RlcCB3aGVuIGEgZGV2aWNlIGlzIGluaXRpYWxpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydGw4MTUyX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTAwODg9c3RhdGljIGJvb2wgcnRsODE1Ml9zdXBwb3J0c19sZW5vdm9fbWFjcGFzc3RocnUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTAxMTMtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxMDExNDpzdGF0aWMgaW50IHJ0bDgxNTJfcHJvYmVfb25jZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwMTE1LVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCwgdTggdmVyc2lvbilcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDMzMC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjEwMzMxOnN0YXRpYyBpbnQgcnRsODE1Ml9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwMzMyLVx0XHRcdCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTAzNDgtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVEw4MTUyX1BST0JFX1RSSUVTOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTAzNDk6XHRcdHJldCA9IHJ0bDgxNTJfcHJvYmVfb25jZShpbnRmLCBpZCwgdmVyc2lvbik7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDM1MC1cdFx0aWYgKHJldCAhPSAtRUFHQUlOKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTEwNDI3PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBydGw4MTUyX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDQyOS1cdC5pZF90YWJsZSA9XHRydGw4MTUyX3RhYmxlLFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTA0MzA6XHQucHJvYmUgPVx0cnRsODE1Ml9wcm9iZSxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwNDMxLVx0LmRpc2Nvbm5lY3QgPVx0cnRsODE1Ml9kaXNjb25uZWN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjcwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFJUTDgxNTIgRHJpdmVyKioKCk9rYXksIGBydGw4MTUyX3Byb2JlYCBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBrZWVwIG15IGZvY3VzIHRoZXJlIGFzIEkgc3RhcnQgYW5hbHl6aW5nIHRoaXMgY29kZS4gTm93LCBJJiMzOTttIGdvaW5nIHRvIHNoaWZ0IGdlYXJzIGFuZCBleGFtaW5lIGBydGw4MTUyX29wZW5gLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IHJvdXRpbmUgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGRyaXZlciBsaWZlY3ljbGU7IHRoaXMgcm91dGluZSBpcyBnb2luZyB0byBiZSB2aXRhbCBmb3IgaW5pdGlhbGl6YXRpb24uIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHJlc291cmNlcyBpdCBhY3F1aXJlcywgdGhlIGRldmljZSBzZXR0aW5ncyBpdCBlc3RhYmxpc2hlcywgYW5kIGFueSBlcnJvciBoYW5kbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRsODE1Ml9vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NzA3Nj1zdGF0aWMgaW50IHJ0bF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbixcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy03MTAxLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NzEwMjpzdGF0aWMgaW50IHJ0bDgxNTJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNzEwMy17XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9OTY0Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bDgxNTJfbmV0ZGV2X29wcyA9IHtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjk2NDQ6XHQubmRvX29wZW5cdFx0PSBydGw4MTUyX29wZW4sXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05NjQ1LVx0Lm5kb19zdG9wXHRcdD0gcnRsODE1Ml9jbG9zZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMTMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgUlRMODE1MiBEcml2ZXIqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIFJUTDgxNTIgZHJpdmVyLiBHb29kLCBgcnRsODE1Ml9vcGVuYCBpcyBhIHNvbGlkIGZ1bmN0aW9uIHRvIHN0YXJ0IHdpdGgsIGJ1dCBpdCYjMzk7cyBub3QgdGhlIGNyaXRpY2FsIHBpZWNlIHJpZ2h0IG5vdy4gTXkgZm9jdXMgaXMgb24gZGF0YSB0cmFuc21pc3Npb24uIE5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUgdHJhbnNtaXNzaW9uIHBhdGguIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGBydGw4MTUyX3N0YXJ0X3htaXRgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGFjdGlvbiBoYXBwZW5zLCB0aGUgbml0dHktZ3JpdHR5IG9mIGdldHRpbmcgcGFja2V0cyBvdXQgdGhlIGRvb3IuIFRoYXQmIzM5O3Mgd2hlcmUgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGFyZSBsaWtlbHkgdG8gYmUuIFRpbWUgdG8gZGlnIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydGw4MTUyX3N0YXJ0X3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvcjgxNTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvcjgxNTIuYz0zMzU1PXJ0bDgxNTJfZmVhdHVyZXNfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0zMzc1LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MzM3NjpzdGF0aWMgbmV0ZGV2X3R4X3QgcnRsODE1Ml9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0zMzc3LVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz05NjQzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsODE1Ml9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTk2NDYtXHQubmRvX2V0aF9pb2N0bFx0XHQ9IHJ0bDgxNTJfaW9jdGwsXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo5NjQ3Olx0Lm5kb19zdGFydF94bWl0XHRcdD0gcnRsODE1Ml9zdGFydF94bWl0LFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtOTY0OC1cdC5uZG9fdHhfdGltZW91dFx0XHQ9IHJ0bDgxNTJfdHhfdGltZW91dCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFJUTDgxNTIgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBSVEw4MTUyIGRyaXZlciBhZ2Fpbi4gSSYjMzk7dmUgYmVlbiB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSB0cmFuc21pdCBwYXRoLiBNeSBpbml0aWFsIGltcHJlc3Npb24gb2YgYHJ0bDgxNTJfc3RhcnRfeG1pdGAgaXMgdGhhdCBpdCBsb29rcyBwcmV0dHkgc29saWQ7IHRoZSBnZW5lcmFsIGFwcHJvYWNoIHNlZW1zIGxvZ2ljYWwgYW5kIGVmZmljaWVudC4gTm93LCBJJiMzOTttIHNoaWZ0aW5nIG15IGZvY3VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIGRyaXZlciBpcyB3b3JraW5nIHNvIG15IGF0dGVudGlvbiBpcyB0dXJuaW5nIHRvIGBydGw4MTUyX2lvY3RsYC4gSSBrbm93IHRoYXQmIzM5O3Mgd2hlcmUgYSBsb3Qgb2YgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wgaGFwcGVuLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb2YgaG93IHRoYXQgaW50ZXJhY3Rpb24gd2lsbCB3b3JrIGFuZCBob3cgaXQgd2lsbCBpbmZsdWVuY2UgYW5kIGFmZmVjdCB0aGUgdHJhbnNtaXNzaW9uIHByb2Nlc3MuIFRoaXMgbmVlZHMgc29tZSBzZXJpb3VzIGluc3BlY3Rpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydGw4MTUyX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9OTUyND1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05NTUwLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6OTU1MTpzdGF0aWMgaW50IHJ0bDgxNTJfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZClcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTk1NTIte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTk2NDM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGw4MTUyX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtOTY0NS1cdC5uZG9fc3RvcFx0XHQ9IHJ0bDgxNTJfY2xvc2UsXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo5NjQ2Olx0Lm5kb19ldGhfaW9jdGxcdFx0PSBydGw4MTUyX2lvY3RsLFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtOTY0Ny1cdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IHJ0bDgxNTJfc3RhcnRfeG1pdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExOTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBNb2RpZmljYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzIGluIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCwgYW5kIHRoZXkgc2VlbSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBsb29wIGl0ZXJhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyB3ZSBoYW5kbGUgcmVhZHMvd3JpdGVzIHdoZW4gdGhlIHJlcXVlc3RlZCBzaXplIGlzIGxhcmdlciB0aGFuIHNvbWUgbGltaXQuIFRoZSBvbGQgY29kZSBoYWQgdGhpcyBuZXN0ZWQgYGlmL2Vsc2VgIHN0cnVjdHVyZSB3aXRoaW4gdGhlIGB3aGlsZWAgbG9vcCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLiBUaGUgbmV3IGNvZGUsIGhvd2V2ZXIsIHNpbXBsaWZpZXMgdGhpbmdzLiBJdCBleHBsaWNpdGx5IGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgYHNpemVgIGlzIGdyZWF0ZXIgdGhhbiBgbGltaXRgIGluIHRoZSBgd2hpbGVgIGxvb3AsIGFuZCB0aGVuIG91dHNpZGUgdGhlIGxvb3AsIGl0IGFsd2F5cyBjYWxscyBgZ2V0X3JlZ2lzdGVyc2Agd2l0aCB0aGUgcmVtYWluaW5nIGBzaXplYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQuIFRoZSBsb29wIGRvZXMgdGhlIGNodW5rZWQgb3BlcmF0aW9ucy4gVGhlIGtleSBkaWZmZXJlbmNlIEkgc3BvdCBpcyBpbiB0aGUgZWRnZSBjYXNlIHdoZXJlIGBzaXplYCBpcyBpbml0aWFsbHkgemVyby4gSW4gdGhlIG9sZCBjb2RlLCBpZiBgc2l6ZWAgd2FzIHplcm8gYXQgdGhlIHN0YXJ0LCB0aGUgYGdldF9yZWdpc3RlcnNgIGZ1bmN0aW9uIHdvdWxkbiYjMzk7dCBoYXZlIGJlZW4gY2FsbGVkIGF0IGFsbC4gVGhlIGVudGlyZSB3aGlsZSBsb29wIHdvdWxkbiYjMzk7dCBleGVjdXRlLCBhbmQgY29udHJvbCB3b3VsZCBtb3ZlIG9uLiBJbiB0aGUgbmV3IGNvZGUsIGV2ZW4gaWYgYHNpemVgIGlzIHplcm8gaW5pdGlhbGx5LCBgZ2V0X3JlZ2lzdGVyc2AgZ2V0cyBjYWxsZWQgd2l0aCBgc2l6ZSA9IDBgLiBIbW0sIHRoYXQmIzM5O3MgYSBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGRpZmZlcmVuY2UuCgpOb3csIG15IG1pbmQgZ29lcyB0bywgJiMzNDtJcyBgc2l6ZSA9PSAwYCBhIHZhbGlkIHNjZW5hcmlvIGhlcmU/JiMzNDsgV2UgbmVlZCB0byBrbm93IGlmIHRoaXMgY29kZSBwYXRoIGlzICpldmVyKiByZWFjaGVkIHdpdGggYSB6ZXJvIHNpemUgcmVxdWVzdC4gSWYgaXQgaXMsIHRoZW4gdGhlIGJlaGF2aW9yIGNoYW5nZSBpcywgd2VsbCwgYSBjaGFuZ2UhIFdlIG5lZWQgdG8gZXhhbWluZSBgZ2V0X3JlZ2lzdGVyc2AgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGNhbGwsIHdpdGggYHNpemUgPSAwYCwgaXMgYSBoYXJtbGVzcyBuby1vcCwgYW4gZXJyb3IgY29uZGl0aW9uLCBvciBzb21ldGhpbmcgaW4gYmV0d2Vlbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGBnZXRfcmVnaXN0ZXJzYCBhY3R1YWxseSAqZG9lcyouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9yZWdpc3RlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvcjgxNTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xMzY5PXN0YXRpY1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTM3MDppbnQgZ2V0X3JlZ2lzdGVycyhzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMzcxLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNDE4PXN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0MzQtXHR3aGlsZSAoc2l6ZSBcdTAwM2UgbGltaXQpIHtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE0MzU6XHRcdHJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBsaW1pdCwgZGF0YSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDM2LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0NDMtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNDQ0Olx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQ0NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzMzQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgZ2V0X3JlZ2lzdGVyc2AgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBnZXRfcmVnaXN0ZXJzYCB3b3Jrcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBsb29rcyBsaWtlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgY29yZSBsb2dpYy4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIGl0cyBhc3N1bXB0aW9ucywgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIG9yIHNvZnR3YXJlIGNvbXBvbmVudHMuIEnigJlsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgcmVnaXN0ZXIgdHlwZXMsIGFueSBlcnJvciBoYW5kbGluZywgYW5kIGhvdyBlZmZpY2llbnQgaXQgaXMgd2l0aCBpdHMgb3BlcmF0aW9ucy4gVGhlIGdvYWwgaXMgdG8gZGV2ZWxvcCBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiBpdHMgZnVuY3Rpb25hbGl0eSBzbyB0aGF0IEkgY2FuIG1vZGlmeSBvciBkZWJ1ZyBpdCBsYXRlciBvbiwgaWYgbmVjZXNzYXJ5LiBMZXQmIzM5O3MgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzY5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzNjk6XHRzdGF0aWNcbjEzNzA6XHRpbnQgZ2V0X3JlZ2lzdGVycyhzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG4xMzcxOlx0e1xuMTM3MjpcdFx0aW50IHJldDtcbjEzNzM6XHRcdHZvaWQgKnRtcDtcbjEzNzQ6XHRcbjEzNzU6XHRcdHRtcCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XG4xMzc2Olx0XHRpZiAoIXRtcClcbjEzNzc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMzc4Olx0XG4xMzc5Olx0XHRyZXQgPSByODE1Ml9jb250cm9sX21zZyh0cCwgdHAtXHUwMDNlcGlwZV9jdHJsX2luLFxuMTM4MDpcdFx0XHRcdFx0UlRMODE1Ml9SRVFfR0VUX1JFR1MsIFJUTDgxNTJfUkVRVF9SRUFELFxuMTM4MTpcdFx0XHRcdFx0dmFsdWUsIGluZGV4LCB0bXAsIHNpemUsIFwmIzM0O3JlYWRcJiMzNDspO1xuMTM4MjpcdFxuMTM4MzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEzODQ6XHRcdFx0bWVtc2V0KGRhdGEsIDB4ZmYsIHNpemUpO1xuMTM4NTpcdFx0ZWxzZVxuMTM4NjpcdFx0XHRtZW1jcHkoZGF0YSwgdG1wLCBzaXplKTtcbjEzODc6XHRcbjEzODg6XHRcdGtmcmVlKHRtcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODU5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEJ1ZyBpbiB0aGUgcjgxNTIgRHJpdmVyKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nOiBJZiB0aGUgYHNpemVgIGlzIHplcm8sIGBrbWFsbG9jKDAsIEdGUF9LRVJORUwpYCByZXR1cm5zIGBaRVJPX1NJWkVfUFRSYC4gVGhpcyBpcyBzdGFuZGFyZCwgYnV0IHRoZSBjcnVjaWFsIHBhcnQgaXMgdGhhdCBgcjgxNTJfY29udHJvbF9tc2dgIGlzIHRoZW4gY2FsbGVkIHdpdGggdGhpcyBgc2l6ZSA9IDBgIGFuZCBgdG1wID0gWkVST19TSVpFX1BUUmAuIEhtbSwgdGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgaXQgKmNvdWxkKiBkZWZpbml0ZWx5IG9wZW4gdGhlIGRvb3IgdG8gc29tZSBuYXN0eSBidWdzIGlmIGBzaXplYCBiZWluZyB6ZXJvIGlzbiYjMzk7dCBoYW5kbGVkIGNvcnJlY3RseSBkb3duIHRoZSBsaW5lLiBJJiMzOTt2ZSBzZWVuIHRoaW5ncyBsaWtlIHRoaXMgYmVmb3JlOyBpdCYjMzk7cyBzdWJ0bGUsIGJ1dCBpdCYjMzk7cyB0aGUga2luZCBvZiB0aGluZyB0aGF0IGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIHBvdGVudGlhbGx5IGV4cGxvaXRhYmxlIGNyYXNoZXMuIFBsdXMsIEkgbm90aWNlZCB0aGUgbG9vcCBsb2dpYyBnb3Qgc2ltcGxpZmllZCwgc28gdGhlcmUgbWF5IGJlIG90aGVyIGJ1Z3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2hhbmdlLgoKVGhpcyB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZywgbm8gcXVlc3Rpb24uIEkgc2hvdWxkIGZvY3VzIG15IGVmZm9ydHMgb24gdGhlc2Ugc3ltYm9sczogYHJ0bDgxNTJfcHJvYmVgLCBgcnRsODE1Ml9vcGVuYCwgYHJ0bDgxNTJfc3RhcnRfeG1pdGAsIGFuZCBgcnRsODE1Ml9pb2N0bGAuIFRob3NlIHNlZW0gbGlrZSB0aGUgbGlrZWx5IHBsYWNlcyB3aGVyZSB0aGlzIHplcm8tc2l6ZSBzY2VuYXJpbyB3b3VsZCBtYW5pZmVzdC4KClJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBhIGZldyBrZXJuZWwgb3B0aW9ucyB0byBnZXQgdGhpcyBkcml2ZXIgY29tcGlsZWQgaW4uIE9idmlvdXNseSwgYFVTQl9SVEw4MTUyYCBpcyBlc3NlbnRpYWwsIGFuZCBhcyBhIHByZWNhdXRpb24gSSYjMzk7bGwgaGF2ZSBgVVNCX05FVF9EUklWRVJTYCBlbmFibGVkIHRvbywganVzdCBpbiBjYXNlLiBJJiMzOTtsbCBuZWVkIGBNSUlgLCBgUEhZTElCYCwgYENSQzMyYCwgYW5kIGBDUllQVE9fTElCX1NIQTI1NmAgYXMgd2VsbCwgYnV0IGl0IGxvb2tzIGxpa2UgYFVTQl9SVEw4MTUyYCBzZWxlY3RzIHRob3NlIGF1dG9tYXRpY2FsbHksIHNvIHRoYXQmIzM5O3MgZ29vZC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlLWNoZWNrIGBVU0JfTkVUX0RSSVZFUlNgIGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUuIFl1cCwgaXQmIzM5O3MgYSBtZW51Y29uZmlnLCB3aGljaCBtZWFucyBpdCBkb2VzbiYjMzk7dCBkaXJlY3RseSBlbmFibGUgdGhlIGRyaXZlciBpdHNlbGYgYnV0IHJhdGhlciBwcm92aWRlcyBhIGNhdGVnb3J5IGluIGBtZW51Y29uZmlnYC4gR3JlYXQsIGl0IGxvb2tzIGxpa2UganVzdCBlbmFibGluZyBgVVNCX1JUTDgxNTJgIHdpbGwgYmUgc3VmZmljaWVudCB0byBnZXQgZXZlcnl0aGluZyBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgVVNCX05FVF9EUklWRVJTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NT1jb21tZW50IFwmIzM0O0hvc3Qtc2lkZSBVU0Igc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTctXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo4Om1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy05LVx0dHJpc3RhdGUgXCYjMzQ7VVNCIE5ldHdvcmsgQWRhcHRlcnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3OTYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBXb3JrZmxvdyoqCgpPa2F5LCBzbyBgVVNCX05FVF9EUklWRVJTYCBpcyBkZWZpbml0ZWx5IGEgbWVudWNvbmZpZyBvcHRpb24g4oCTIGEgY29uZmlndXJhdGlvbiBpdGVtIHRoYXQgbmVlZHMgdG8gYmUgZXhwbGljaXRseSBlbmFibGVkIGluIHRoZSBidWlsZCBzeXN0ZW0uIEdvdCBpdC4gU28sIEkgbmVlZCB0byBpbmNvcnBvcmF0ZSBib3RoIGBVU0JfTkVUX0RSSVZFUlNgIGFuZCB0aGUgc3BlY2lmaWMgYFVTQl9SVEw4MTUyYCBkcml2ZXIgaW50byBteSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLgoKTm93LCBsZXQgbWUganVzdCBxdWlja2x5IHJldmlldyB0aG9zZSBjcnVjaWFsIHN5bWJvbHMgcmVsYXRlZCB0byB0aGUgUlRMODE1MiBkcml2ZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGNyaXRpY2FsIGVudHJ5IHBvaW50cy4gSSYjMzk7dmUgZ290IGBydGw4MTUyX3Byb2JlYCwgYHJ0bDgxNTJfb3BlbmAsIGBydGw4MTUyX3N0YXJ0X3htaXRgLCBhbmQgYHJ0bDgxNTJfaW9jdGxgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGNvcmUgZnVuY3Rpb25zLCBidXQgSSB3YW50IHRvIGJlIHRob3JvdWdoLiBBcmUgdGhlcmUgYW55IG90aGVyIGVxdWFsbHkgc2lnbmlmaWNhbnQgZW50cnkgcG9pbnRzIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nIHdpdGhpbiB0aGlzIGRyaXZlcj8gSSBuZWVkIHRvIGJlIGNlcnRhaW4gSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRsODE1Ml9uZXRkZXZfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9OTU5NT1zdGF0aWMgaW50IHJ0bDgxNTJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05NjQyLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6OTY0MzpzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bDgxNTJfbmV0ZGV2X29wcyA9IHtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTk2NDQtXHQubmRvX29wZW5cdFx0PSBydGw4MTUyX29wZW4sXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTAxMTQ9c3RhdGljIGludCBydGw4MTUyX3Byb2JlX29uY2Uoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTAxNzEtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxMDE3MjpcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2cnRsODE1Ml9uZXRkZXZfb3BzO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTAxNzMtXHRuZXRkZXYtXHUwMDNld2F0Y2hkb2dfdGltZW8gPSBSVEw4MTUyX1RYX1RJTUVPVVQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDY1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGBydGw4MTUyX25ldGRldl9vcHNgIHN0cnVjdHVyZS4gSSBrbm93IHRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBkcml2ZXIsIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgUmVhbHRlayA4MTUyIFVTQiBldGhlcm5ldCBhZGFwdGVyIGFuZCB0aGUgbmV0d29yayBzdGFjay4gSSYjMzk7bSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggbmV0ZGV2X29wcyBpbiBnZW5lcmFsLCBvZiBjb3Vyc2UsIGJ1dCBJIG5lZWQgdG8gc2VlICp0aGlzKiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gV2hhdCBkaWQgdGhleSBjaG9vc2UgdG8gZG8gaGVyZSwgd2hhdCB0cmlja3MgZGlkIHRoZXkgdXNlPyBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBrZXkgZnVuY3Rpb25zOiBgbmRvX29wZW5gLCBgbmRvX3N0b3BgLCBgbmRvX3N0YXJ0X3htaXRgLCBgbmRvX3NldF9tYWNfYWRkcmVzc2AsIHRoZSB3aG9sZSBzaGViYW5nLiBVbmRlcnN0YW5kaW5nIHRoZXNlIHdpbGwgaW1tZWRpYXRlbHkgdGVsbCBtZSBob3cgdGhlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uLCB0cmFuc21pc3Npb24sIHJlY2VwdGlvbiwgYW5kIG1hbmFnZW1lbnQgYXJlIGhhbmRsZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5JiMzOTt2ZSBoYW5kbGVkIHRoZSBVU0IgaW50ZXJhY3Rpb25zLCBETUEsIGJ1ZmZlciBtYW5hZ2VtZW50LCBhbmQgaW50ZXJydXB0IGhhbmRsaW5nIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGlzIHNwZWNpZmljIGNoaXAuIEFyZSB0aGV5IHVzaW5nIHRoZSBzdGFuZGFyZCBVU0IgZHJpdmVycyBlZmZpY2llbnRseT8gQXJlIHRoZXJlIGFueSBjdXN0b20gb3B0aW1pemF0aW9ucz8gVGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NjQzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozk2NDM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bDgxNTJfbmV0ZGV2X29wcyA9IHtcbjk2NDQ6XHRcdC5uZG9fb3Blblx0XHQ9IHJ0bDgxNTJfb3Blbixcbjk2NDU6XHRcdC5uZG9fc3RvcFx0XHQ9IHJ0bDgxNTJfY2xvc2UsXG45NjQ2Olx0XHQubmRvX2V0aF9pb2N0bFx0XHQ9IHJ0bDgxNTJfaW9jdGwsXG45NjQ3Olx0XHQubmRvX3N0YXJ0X3htaXRcdFx0PSBydGw4MTUyX3N0YXJ0X3htaXQsXG45NjQ4Olx0XHQubmRvX3R4X3RpbWVvdXRcdFx0PSBydGw4MTUyX3R4X3RpbWVvdXQsXG45NjQ5Olx0XHQubmRvX3NldF9mZWF0dXJlc1x0PSBydGw4MTUyX3NldF9mZWF0dXJlcyxcbjk2NTA6XHRcdC5uZG9fc2V0X3J4X21vZGVcdD0gcnRsODE1Ml9zZXRfcnhfbW9kZSxcbjk2NTE6XHRcdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IHJ0bDgxNTJfc2V0X21hY19hZGRyZXNzLFxuOTY1MjpcdFx0Lm5kb19jaGFuZ2VfbXR1XHRcdD0gcnRsODE1Ml9jaGFuZ2VfbXR1LFxuOTY1MzpcdFx0Lm5kb192YWxpZGF0ZV9hZGRyXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxuOTY1NDpcdFx0Lm5kb19mZWF0dXJlc19jaGVja1x0PSBydGw4MTUyX2ZlYXR1cmVzX2NoZWNrLFxuOTY1NTpcdH07XG45NjU2Olx0XG45NjU3Olx0c3RhdGljIHZvaWQgcnRsODE1Ml91bmxvYWQoc3RydWN0IHI4MTUyICp0cClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwOTQKCQkJCQkJCW91dHB1dDogMTk2CgkJCQkJCQl0aG91Z2h0czogNjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiByODE1MiBVU0IgTmV0d29yayBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSByODE1MiBkcml2ZXIsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCB0b3VjaGVzIHNldmVyYWwga2V5IGZ1bmN0aW9uczogYHJ0bDgxNTJfcHJvYmVgLCBgcnRsODE1Ml9vcGVuYCwgYHJ0bDgxNTJfc3RhcnRfeG1pdGAsIGBydGw4MTUyX2lvY3RsYCwgYHJ0bDgxNTJfc2V0X21hY19hZGRyZXNzYCwgYW5kIGBydGw4MTUyX2NoYW5nZV9tdHVgLiBUaGVzZSBhbGwgc2VlbSBsaWtlIGxvZ2ljYWwgYWRkaXRpb25zIGZvciBhIHBhdGNoIG9mIHRoaXMgc2NvcGUsIGdpdmVuIHRoYXQgYHJ0bDgxNTJfc2V0X2ZlYXR1cmVzYCwgYHJ0bDgxNTJfc2V0X3J4X21vZGVgLCBgcnRsODE1Ml9zZXRfbWFjX2FkZHJlc3NgLCBhbmQgYHJ0bDgxNTJfY2hhbmdlX210dWAgYXJlIGFscmVhZHkgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNoYW5nZXMuCgpIb3dldmVyLCB0aGUgY29yZSBvZiB0aGUgbWF0dGVyIHNlZW1zIHRvIGJlIGluIHRoZSBtb2RpZmljYXRpb25zIHRvIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYC4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsOyB0aGV5JiMzOTtyZSB1c2VkIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIGNvbmZpZ3VyYXRpb24sIGFuZCB0aHJvdWdob3V0IHRoZSBkZXZpY2UmIzM5O3Mgb3BlcmF0aW9uYWwgbGlmZXRpbWUuIFRoZSBjaGFuZ2VzIHNpbXBsaWZ5IHRoZSBsb29wIGxvZ2ljIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcgZm9yIG1lLiBBbnkgYWx0ZXJhdGlvbiB0byBjb3JlIGxvdy1sZXZlbCBvcGVyYXRpb25zIGxpa2UgdGhlc2UsIGVzcGVjaWFsbHkgaW52b2x2aW5nIHJlZ2lzdGVyIHJlYWRzIGFuZCB3cml0ZXMsIHdhcnJhbnRzIGNsb3NlIHNjcnV0aW55LgoKVGhlIHNpbXBsaWZpY2F0aW9uIGludm9sdmVzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgY2hhbmdlIGluIGJlaGF2aW9yLiBUaGUgb2xkIGNvZGUgd2FzIGhhbmRsaW5nIGNhc2VzIHdoZXJlIHRoZSBgc2l6ZWAgYXJndW1lbnQgd2FzIGEgbXVsdGlwbGUgb2YgYGxpbWl0YCBkaWZmZXJlbnRseS4gVGhlIGtleSBkaWZmZXJlbmNlIEkmIzM5O20gc2VlaW5nIGlzIGhvdyB0aGUgbmV3IGNvZGUgaGFuZGxlcyB0aGUgc2NlbmFyaW8gd2hlcmUgdGhlIGluaXRpYWwgYHNpemVgIGlzIHplcm8uIEluIHRoZSBvbGQgY29kZSwgaWYgYHNpemVgIHdhcyBpbml0aWFsbHkgemVybywgdGhlIGxvb3Agd291bGRuJiMzOTt0IHJ1bi4gVGhlIG5ldyBjb2RlLCBob3dldmVyLCAqZG9lcyogZXhlY3V0ZSB0aGUgYGdldF9yZWdpc3RlcnNgIChvciBgc2V0X3JlZ2lzdGVyc2ApIGZ1bmN0aW9uIHdpdGggYSBgc2l6ZWAgb2YgemVybyBpbiB0aGlzIGNhc2UuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEEgY2xlYXIgYW5kIGRpcmVjdCBhbHRlcmF0aW9uIG9mIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgcmVnYXJkbGVzcyBvZiBob3cgbWlub3IgaXQgYXBwZWFycy4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgdmFyaWV0eSBvZiBpc3N1ZXMsIHN1Y2ggYXMgemVyby1zaXplIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5leHBlY3RlZCBiZWhhdmlvciBmcm9tIFVTQiBjb250cm9sIG1lc3NhZ2VzLCBvciBvdGhlciBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzLgoKR2l2ZW4gdGhpcywgSSYjMzk7bSBjYWxsaW5nIGl0OiBXb3J0aEZ1enppbmc6IHRydWUuIFRoZSByZWFzb24gaXMgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlIEkmIzM5O3ZlIGlkZW50aWZpZWQgaW4gYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgLCBwYXJ0aWN1bGFybHkgdGhlIGhhbmRsaW5nIG9mIGEgemVybyBgc2l6ZWAgYXJndW1lbnQuIFRvIGJlIHByZWNpc2UsIEkmIzM5O20gdGFyZ2V0aW5nIHRoZSBmdW5jdGlvbnMgSSBwcmV2aW91c2x5IGlkZW50aWZpZWQgZm9yIHRlc3Rpbmc6IGBydGw4MTUyX3Byb2JlYCwgYHJ0bDgxNTJfb3BlbmAsIGBydGw4MTUyX3N0YXJ0X3htaXRgLCBgcnRsODE1Ml9pb2N0bGAsIGBydGw4MTUyX3NldF9tYWNfYWRkcmVzc2AsIGFuZCBgcnRsODE1Ml9jaGFuZ2VfbXR1YC4gQW5kIG9mIGNvdXJzZSwgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIHdvdWxkIGJlIGBVU0JfTkVUX0RSSVZFUlNgIGFuZCBgVVNCX1JUTDgxNTJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQl9SVEw4MTUyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRsODE1Ml9wcm9iZSYjMzQ7LAogICAgJiMzNDtydGw4MTUyX29wZW4mIzM0OywKICAgICYjMzQ7cnRsODE1Ml9zdGFydF94bWl0JiMzNDssCiAgICAmIzM0O3J0bDgxNTJfaW9jdGwmIzM0OywKICAgICYjMzQ7cnRsODE1Ml9zZXRfbWFjX2FkZHJlc3MmIzM0OywKICAgICYjMzQ7cnRsODE1Ml9jaGFuZ2VfbXR1JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGxvZ2ljIGluIGdlbmVyaWNfb2NwX3JlYWQgYW5kIGdlbmVyaWNfb2NwX3dyaXRlIGluIHRoZSByODE1MiBVU0IgbmV0d29yayBkcml2ZXIuIFRoZSByZWZhY3RvcmVkIGNvZGUgbm93IGV4ZWN1dGVzIGdldF9yZWdpc3RlcnMvc2V0X3JlZ2lzdGVycyBldmVuIGlmIHRoZSBpbml0aWFsIHNpemUgaXMgMCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNvdWxkIHRyaWdnZXIgYnVncyAoZS5nLiwgemVyby1zaXplIGFsbG9jYXRpb25zIG9yIFVTQiBjb250cm9sIG1lc3NhZ2VzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQl9SVEw4MTUyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRsODE1Ml9wcm9iZSYjMzQ7LAogICAgJiMzNDtydGw4MTUyX29wZW4mIzM0OywKICAgICYjMzQ7cnRsODE1Ml9zdGFydF94bWl0JiMzNDssCiAgICAmIzM0O3J0bDgxNTJfaW9jdGwmIzM0OywKICAgICYjMzQ7cnRsODE1Ml9zZXRfbWFjX2FkZHJlc3MmIzM0OywKICAgICYjMzQ7cnRsODE1Ml9jaGFuZ2VfbXR1JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGxvZ2ljIGluIGdlbmVyaWNfb2NwX3JlYWQgYW5kIGdlbmVyaWNfb2NwX3dyaXRlIGluIHRoZSByODE1MiBVU0IgbmV0d29yayBkcml2ZXIuIFRoZSByZWZhY3RvcmVkIGNvZGUgbm93IGV4ZWN1dGVzIGdldF9yZWdpc3RlcnMvc2V0X3JlZ2lzdGVycyBldmVuIGlmIHRoZSBpbml0aWFsIHNpemUgaXMgMCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNvdWxkIHRyaWdnZXIgYnVncyAoZS5nLiwgemVyby1zaXplIGFsbG9jYXRpb25zIG9yIFVTQiBjb250cm9sIG1lc3NhZ2VzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNodW5raW5nIGxvb3BzIGluIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBmb3IgdGhlIHI4MTUyIGRyaXZlci4gSW4gYGdlbmVyaWNfb2NwX3dyaXRlYCwgaWYgYHNpemUgPT0gNGAgYW5kIGBieWVuICE9IEJZVEVfRU5fRFdPUkRgLCBgc2l6ZWAgaXMgZGVjcmVtZW50ZWQgYnkgNCB0byAwLiBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGB3aGlsZSAoc2l6ZSlgIGFuZCBza2lwcGVkIHRoZSBsb29wLCB3aGVyZWFzIHRoZSBuZXcgY29kZSB1c2VzIGB3aGlsZSAoc2l6ZSBcdTAwM2UgbGltaXQpYCBhbmQgdW5jb25kaXRpb25hbGx5IGNhbGxzIGBzZXRfcmVnaXN0ZXJzYCB3aXRoIHRoZSByZW1haW5pbmcgYHNpemVgICh3aGljaCBpcyAwKS4gVGhpcyByZXN1bHRzIGluIGEgMC1sZW5ndGggY29udHJvbCBtZXNzYWdlIGJlaW5nIHNlbnQgdG8gdGhlIFVTQiBkZXZpY2UuIEEgMC1sZW5ndGggd3JpdGUgYWxsb2NhdGVzIGEgYFpFUk9fU0laRV9QVFJgIHZpYSBga21lbWR1cChkYXRhLCAwLCBHRlBfS0VSTkVMKWAgYW5kIHBhc3NlcyBpdCB0byBgdXNiX2NvbnRyb2xfbXNnYCwgd2hpY2ggaGFuZGxlcyAwLWxlbmd0aCB0cmFuc2ZlcnMgc2FmZWx5IHdpdGhvdXQgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSW4gYGdlbmVyaWNfb2NwX3JlYWRgLCBgc2l6ZWAgaXMgdmFsaWRhdGVkIHRvIGJlIG5vbi16ZXJvIGFuZCBhIG11bHRpcGxlIG9mIDQgaW5pdGlhbGx5LCBhbmQgaXMgbmV2ZXIgZGVjcmVtZW50ZWQgYmVmb3JlIHRoZSBsb29wLiBUaHVzLCBgZ2V0X3JlZ2lzdGVyc2AgaXMgbmV2ZXIgY2FsbGVkIHdpdGggYHNpemUgPSAwYCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGNvcGllZCBvciBleHBvc2VkLiBTaW5jZSB0aGUgcGF0Y2ggb25seSBpbnRyb2R1Y2VzIGEgcG90ZW50aWFsIDAtbGVuZ3RoIFVTQiBjb250cm9sIG1lc3NhZ2UgYW5kIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gQW55IHBvdGVudGlhbCBjcmFzaGVzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGVlNzlkNjM5OGVkN2NiOWVkMjNmNTFiNWQ2N2ZhYWNjMmVkMGNiNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDIwOjU5OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuYwppbmRleCBmNjE2ODY0MzMwMzFjLi5kZTk3MzhiZGNlODU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvcjgxNTIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuYwpAQCAtMTQzMSwyNyAmIzQzOzE0MzEsMTkgQEAgc3RhdGljIGludCBnZW5lcmljX29jcF9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IHNpemUsCiAJaWYgKCh1MzIpaW5kZXggJiM0MzsgKHUzMilzaXplICZndDsgMHhmZmZmKQogCQlyZXR1cm4gLUVQRVJNOwogCi0Jd2hpbGUgKHNpemUpIHsKLQkJaWYgKHNpemUgJmd0OyBsaW1pdCkgewotCQkJcmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIGxpbWl0LCBkYXRhKTsKLQkJCWlmIChyZXQgJmx0OyAwKQotCQkJCWJyZWFrOwotCi0JCQlpbmRleCAmIzQzOz0gbGltaXQ7Ci0JCQlkYXRhICYjNDM7PSBsaW1pdDsKLQkJCXNpemUgLT0gbGltaXQ7Ci0JCX0gZWxzZSB7Ci0JCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgc2l6ZSwgZGF0YSk7Ci0JCQlpZiAocmV0ICZsdDsgMCkKLQkJCQlicmVhazsKJiM0MzsJd2hpbGUgKHNpemUgJmd0OyBsaW1pdCkgewomIzQzOwkJcmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIGxpbWl0LCBkYXRhKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyb3IxOwogCi0JCQlpbmRleCAmIzQzOz0gc2l6ZTsKLQkJCWRhdGEgJiM0Mzs9IHNpemU7Ci0JCQlzaXplID0gMDsKLQkJCWJyZWFrOwotCQl9CiYjNDM7CQlpbmRleCAmIzQzOz0gbGltaXQ7CiYjNDM7CQlkYXRhICYjNDM7PSBsaW1pdDsKJiM0MzsJCXNpemUgLT0gbGltaXQ7CiAJfQogCiYjNDM7CXJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBzaXplLCBkYXRhKTsKJiM0MzsKJiM0MztlcnJvcjE6CiAJaWYgKHJldCA9PSAtRU5PREVWKQogCQlydGxfc2V0X3VucGx1Zyh0cCk7CiAKQEAgLTE0OTgsMzEgJiM0MzsxNDkwLDI0IEBAIHN0YXRpYyBpbnQgZ2VuZXJpY19vY3Bfd3JpdGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgYnl0ZWVuLAogCQlpZiAoYnllbiAhPSBCWVRFX0VOX0RXT1JEKQogCQkJc2l6ZSAtPSA0OwogCi0JCXdoaWxlIChzaXplKSB7Ci0JCQlpZiAoc2l6ZSAmZ3Q7IGxpbWl0KSB7Ci0JCQkJcmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsCi0JCQkJCQkgICAgdHlwZSB8IEJZVEVfRU5fRFdPUkQsCi0JCQkJCQkgICAgbGltaXQsIGRhdGEpOwotCQkJCWlmIChyZXQgJmx0OyAwKQotCQkJCQlnb3RvIGVycm9yMTsKLQotCQkJCWluZGV4ICYjNDM7PSBsaW1pdDsKLQkJCQlkYXRhICYjNDM7PSBsaW1pdDsKLQkJCQlzaXplIC09IGxpbWl0OwotCQkJfSBlbHNlIHsKLQkJCQlyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwKLQkJCQkJCSAgICB0eXBlIHwgQllURV9FTl9EV09SRCwKLQkJCQkJCSAgICBzaXplLCBkYXRhKTsKLQkJCQlpZiAocmV0ICZsdDsgMCkKLQkJCQkJZ290byBlcnJvcjE7Ci0KLQkJCQlpbmRleCAmIzQzOz0gc2l6ZTsKLQkJCQlkYXRhICYjNDM7PSBzaXplOwotCQkJCXNpemUgPSAwOwotCQkJCWJyZWFrOwotCQkJfQomIzQzOwkJd2hpbGUgKHNpemUgJmd0OyBsaW1pdCkgewomIzQzOwkJCXJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgQllURV9FTl9EV09SRCwKJiM0MzsJCQkJCSAgICBsaW1pdCwgZGF0YSk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyb3IxOwomIzQzOwomIzQzOwkJCWluZGV4ICYjNDM7PSBsaW1pdDsKJiM0MzsJCQlkYXRhICYjNDM7PSBsaW1pdDsKJiM0MzsJCQlzaXplIC09IGxpbWl0OwogCQl9CiAKJiM0MzsJCXJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgQllURV9FTl9EV09SRCwgc2l6ZSwgZGF0YSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycm9yMTsKJiM0MzsKJiM0MzsJCWluZGV4ICYjNDM7PSBzaXplOwomIzQzOwkJZGF0YSAmIzQzOz0gc2l6ZTsKJiM0MzsKIAkJLyogU2V0IHRoZSBsYXN0IERXT1JEICovCiAJCWlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpCiAJCQlyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSB8IGJ5ZW4sIDQsIGRhdGEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlZ2lzdGVyIFJlYWQvV3JpdGUgUmVmYWN0b3JpbmcgaW4gYHI4MTUyLmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgcjgxNTIuY2AsIGFuZCBpdCYjMzk7cyB0b3VjaGluZyB0aGUgYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIHJlZmFjdG9yIHRoZSB3YXkgdGhlIHJlZ2lzdGVyIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyBoYW5kbGUgZGF0YSBpbiBjaHVua3MuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYHdoaWxlYCBsb29wcyB0byBwcm9jZXNzIHRoZSBkYXRhIGluIHRoZXNlIGNodW5rcy4KClNwZWNpZmljYWxseSwgaW4gYGdlbmVyaWNfb2NwX3JlYWRgLCBJJiMzOTttIHNlZWluZyBhIGNoYW5nZSB0byB0aGlzIGNodW5rLXJlYWRpbmcgbG9vcC4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgYHdoaWxlIChzaXplKWAgbG9vcCB3aXRoIGFuIGBpZi9lbHNlYCB0aGF0IG1hbmFnZWQgdGhlIGNodW5rIHNpemUuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgc2ltcGxpZmllZCBpdCwgbm93IHVzaW5nIGEgYHdoaWxlIChzaXplICZndDsgbGltaXQpYCBzdHJ1Y3R1cmUuCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIHdoYXQgaWYgYHNpemVgICppcyogemVybz8mIzM0OyBUaGUgb3JpZ2luYWwgY29kZSB3b3VsZG4mIzM5O3QgaGF2ZSBlbnRlcmVkIHRoZSBsb29wIGlmIGBzaXplYCB3YXMgMCBiZWNhdXNlIG9mIHRoZSBgd2hpbGUgKHNpemUpYCBjb25kaXRpb24uIE5vdywgd2l0aCB0aGUgbmV3IGB3aGlsZSAoc2l6ZSAmZ3Q7IGxpbWl0KWAgY29uZGl0aW9uIGFuZCBhc3N1bWluZyBgbGltaXRgIGlzIHBvc2l0aXZlLCB0aGUgbG9vcCAqd291bGQqIGJlIHNraXBwZWQgaWYgYHNpemVgIGlzIDAuIEhvd2V2ZXIsIHRoZSBjb2RlICppbW1lZGlhdGVseSBhZnRlciB0aGUgbG9vcCogY2FsbHMgYGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBzaXplLCBkYXRhKTtgIHdpdGggdGhlIGN1cnJlbnQgdmFsdWUgb2YgYHNpemVgLCB3aGljaCBjb3VsZCBiZSAwLiBUaGF0JiMzOTtzIGEgcG90ZW50aWFsIGFyZWEgb2YgY29uY2Vybi4gSXMgYHNpemVgIGV2ZXIgYWN0dWFsbHkgemVybyBpbiBwcmFjdGljZT8KClRoZSBtYWluIHBvaW50IG9mIGNvbmNlcm4gaXMgdGhhdCBgZ2VuZXJpY19vY3BfcmVhZGAgaXMgdXNlZCB0byByZWFkIGRhdGEgZnJvbSB0aGUgZGV2aWNlIGludG8gYGRhdGFgLiBJZiBgZ2V0X3JlZ2lzdGVyc2AgaXMgY2FsbGVkIHdpdGggYSBgc2l6ZSA9IDBgLCB3aGF0IGhhcHBlbnM/IEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGludG8gdGhlIGBnZXRfcmVnaXN0ZXJzYCBmdW5jdGlvbiBpdHNlbGYgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCBkZXRlcm1pbmUgaWYgdGhlIGNvZGUgaXMgaGFuZGxpbmcgdGhlIHplcm8tc2l6ZWQgcmVhZCBjb3JyZWN0bHkuIFRoaXMgcmVmYWN0b3IgaXMgdHJ5aW5nIHRvIGFkZHJlc3Mgc29tZXRoaW5nIGJ1dCB0aGlzIGVkZ2UgY2FzZSBjb3VsZCBiZSBpbnRyb2R1Y2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfcmVnaXN0ZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTM2OT1zdGF0aWNcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjEzNzA6aW50IGdldF9yZWdpc3RlcnMoc3RydWN0IHI4MTUyICp0cCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTM3MS17XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTQxOD1zdGF0aWMgaW50IGdlbmVyaWNfb2NwX3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgc2l6ZSxcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDM0LVx0d2hpbGUgKHNpemUgXHUwMDNlIGxpbWl0KSB7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNDM1Olx0XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQzNi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDQzLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTQ0NDpcdHJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBzaXplLCBkYXRhKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0NDUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NDQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgUmVnaXN0ZXIgUmV0cmlldmFsIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgZ2V0X3JlZ2lzdGVyc2AgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBob3cgaXQmIzM5O3Mgc3RydWN0dXJlZC4gSSYjMzk7bSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFyZWFzIHdoZXJlIG9wdGltaXphdGlvbnMgbWlnaHQgYmUgcG9zc2libGUsIGFuZCwgY3JpdGljYWxseSwgYW55IGFyZWFzIHRoYXQgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIGJ1Z3MuIEkmIzM5O20gZXhwZWN0aW5nIGEgY2xlYW4sIGVmZmljaWVudCBhcHByb2FjaCwgZ2l2ZW4gdGhlIGxpa2VseSBwZXJmb3JtYW5jZSBkZW1hbmRzIG9mIHJlZ2lzdGVyIGFjY2VzcywgYnV0IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbjogdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIHN0b3JlIHRoZSByZWdpc3RlciB2YWx1ZXMgKGFyZSB0aGV5IGFwcHJvcHJpYXRlIGZvciB0aGUgc2NhbGU/KSwgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBlbXBsb3llZCAoaWYgYW55LCBhbmQgYXJlIHRoZXkgc3VmZmljaWVudCBmb3IgdGhlIGV4cGVjdGVkIGNvbmN1cnJlbmN5PyksIGFuZCBhbnkgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLiBJJiMzOTttIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCB0cnlpbmcgdG8gYW50aWNpcGF0ZSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBhbnkgY2FjaGluZyBvciBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVnaWVzIHRoYXQgbWlnaHQgYmUgaW4gcGxhY2UgZWxzZXdoZXJlIGluIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM2OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzY5Olx0c3RhdGljXG4xMzcwOlx0aW50IGdldF9yZWdpc3RlcnMoc3RydWN0IHI4MTUyICp0cCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxuMTM3MTpcdHtcbjEzNzI6XHRcdGludCByZXQ7XG4xMzczOlx0XHR2b2lkICp0bXA7XG4xMzc0Olx0XG4xMzc1Olx0XHR0bXAgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpO1xuMTM3NjpcdFx0aWYgKCF0bXApXG4xMzc3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTM3ODpcdFxuMTM3OTpcdFx0cmV0ID0gcjgxNTJfY29udHJvbF9tc2codHAsIHRwLVx1MDAzZXBpcGVfY3RybF9pbixcbjEzODA6XHRcdFx0XHRcdFJUTDgxNTJfUkVRX0dFVF9SRUdTLCBSVEw4MTUyX1JFUVRfUkVBRCxcbjEzODE6XHRcdFx0XHRcdHZhbHVlLCBpbmRleCwgdG1wLCBzaXplLCBcJiMzNDtyZWFkXCYjMzQ7KTtcbjEzODI6XHRcbjEzODM6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMzg0Olx0XHRcdG1lbXNldChkYXRhLCAweGZmLCBzaXplKTtcbjEzODU6XHRcdGVsc2VcbjEzODY6XHRcdFx0bWVtY3B5KGRhdGEsIHRtcCwgc2l6ZSk7XG4xMzg3Olx0XG4xMzg4Olx0XHRrZnJlZSh0bXApO1xuMTM4OTpcdFxuMTM5MDpcdFx0cmV0dXJuIHJldDtcbjEzOTE6XHR9XG4xMzkyOlx0XG4xMzkzOlx0c3RhdGljXG4xMzk0Olx0aW50IHNldF9yZWdpc3RlcnMoc3RydWN0IHI4MTUyICp0cCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxuMTM5NTpcdHtcbjEzOTY6XHRcdGludCByZXQ7XG4xMzk3Olx0XHR2b2lkICp0bXA7XG4xMzk4Olx0XG4xMzk5Olx0XHR0bXAgPSBrbWVtZHVwKGRhdGEsIHNpemUsIEdGUF9LRVJORUwpO1xuMTQwMDpcdFx0aWYgKCF0bXApXG4xNDAxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTQwMjpcdFxuMTQwMzpcdFx0cmV0ID0gcjgxNTJfY29udHJvbF9tc2codHAsIHRwLVx1MDAzZXBpcGVfY3RybF9vdXQsXG4xNDA0Olx0XHRcdFx0XHRSVEw4MTUyX1JFUV9TRVRfUkVHUywgUlRMODE1Ml9SRVFUX1dSSVRFLFxuMTQwNTpcdFx0XHRcdFx0dmFsdWUsIGluZGV4LCB0bXAsIHNpemUsIFwmIzM0O3dyaXRlXCYjMzQ7KTtcbjE0MDY6XHRcbjE0MDc6XHRcdGtmcmVlKHRtcCk7XG4xNDA4Olx0XG4xNDA5Olx0XHRyZXR1cm4gcmV0O1xuMTQxMDpcdH1cbjE0MTE6XHRcbjE0MTI6XHRzdGF0aWMgdm9pZCBydGxfc2V0X3VucGx1ZyhzdHJ1Y3QgcjgxNTIgKnRwKVxuMTQxMzpcdHtcbjE0MTQ6XHRcdGlmICh0cC1cdTAwM2V1ZGV2LVx1MDAzZXN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRClcbjE0MTU6XHRcdFx0cnRsX3NldF9pbmFjY2Vzc2libGUodHApO1xuMTQxNjpcdH1cbjE0MTc6XHRcbjE0MTg6XHRzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgc2l6ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkyNwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDU5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFplcm8tU2l6ZSBUcmFuc2ZlcnMgaW4gcjgxNTIgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcjgxNTIgZHJpdmVyIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyBpdCBoYW5kbGVzIHplcm8tc2l6ZSB0cmFuc2ZlcnMuIFRoZSBpbml0aWFsIHRob3VnaHQgaGVyZSBpcywgaWYgdGhlIGBzaXplYCBwYXNzZWQgdG8gYGttYWxsb2NgIGlzIDAsIHdlIGdldCBgWkVST19TSVpFX1BUUmAuIE5vIGJpZyBkZWFsLCByaWdodD8gQnV0IHRoZW4gYHI4MTUyX2NvbnRyb2xfbXNnYCBnZXRzIGNhbGxlZCB3aXRoIGEgYHNpemVgIG9mIDAuIGBtZW1jcHlgIG9mIHNpemUgemVybyBpcyBhIG5vLW9wLCB3aGljaCBzaG91bGRuJiMzOTt0IGJlIGEgYmlnIGRlYWwgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuCgpCdXQgSSYjMzk7bSB3b25kZXJpbmcsIGlzIGBnZW5lcmljX29jcF9yZWFkYCBldmVyIGNhbGxlZCB3aXRoIGEgemVybyBzaXplPyBUaGF0IG5lZWRzIGNoZWNraW5nLiBPa2F5LCBsZXQmIzM5O3MgbG9vayBhdCBgZ2VuZXJpY19vY3Bfd3JpdGVgIGluc3RlYWQuIEkgc2VlIGl0IHVzZXMgYSBgd2hpbGUgKHNpemUgJmd0OyBsaW1pdClgIGxvb3AuIElmIGBzaXplYCBpcyB6ZXJvIHdoZW4gdGhlIGxvb3Agc3RhcnRzLCB3ZSBnbyByaWdodCBwYXN0IGl0LiBFdmVudHVhbGx5LCBgc2V0X3JlZ2lzdGVyc2AgaXMgY2FsbGVkLiBJdCBsb29rcyBsaWtlIGl0IGNvdWxkIGJlIGNhbGxlZCB3aXRoIHNpemUgMCwgZGVwZW5kaW5nIG9uIHRoZSBvdGhlciBjb25kaXRpb25zLgoKSGFuZyBvbiwgdGhlcmUmIzM5O3MgYSBtb2RpZmljYXRpb24gdG8gYHNpemVgICpiZWZvcmUqIHRoZSBsb29wOiBgaWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRCkgc2l6ZSAtPSA0O2AuIFNvLCBpZiBgc2l6ZWAgc3RhcnRzIGF0IDQsIGFuZCBgYnllbmAgaXMgbm90IGVxdWFsIHRvIGBCWVRFX0VOX0RXT1JEYCwgYHNpemVgIGJlY29tZXMgemVybyBiZWZvcmUgdGhlIGxvb3AgaXMgZXZlbiBlbnRlcmVkLiBBbmQgdGhhdCB3aG9sZSBgd2hpbGUgKHNpemUpYCBsb29wIGlzIHNraXBwZWQuIEludGVyZXN0aW5nLiBTbywgYHNldF9yZWdpc3RlcnNgIHdpbGwgYmUgY2FsbGVkIHdpdGggYHNpemUgPSAwYC4KCk5vdywgZG9lcyB0aGF0IHBvc2UgYSBwcm9ibGVtPyBMZXQmIzM5O3MgY2hlY2sgd2hhdCBgc2V0X3JlZ2lzdGVyc2AgZG9lcyB3aXRoIGBzaXplID0gMGAuIEl0IGNhbGxzIGBrbWVtZHVwKGRhdGEsIDAsIEdGUF9LRVJORUwpYCwgd2hpY2ggYWxzbyByZXR1cm5zIGBaRVJPX1NJWkVfUFRSYC4gQW5kIGByODE1Ml9jb250cm9sX21zZ2AgaXMgc3RpbGwgYmVpbmcgY2FsbGVkIHdpdGggc2l6ZSB6ZXJvLiBXaGljaCBtYWtlcyBtZSBuZXJ2b3VzIGJlY2F1c2UgYHI4MTUyX2NvbnRyb2xfbXNnYCBpcyBhIHdyYXBwZXIgYXJvdW5kIGB1c2JfY29udHJvbF9tc2dgLiBJJiMzOTttIHVuc3VyZSBpZiBgdXNiX2NvbnRyb2xfbXNnYCBoYW5kbGVzIGBaRVJPX1NJWkVfUFRSYC4gVGhhdCBjb3VsZCBiZSBhIHByb2JsZW0sIGRlcGVuZGluZyBvbiB3aGF0IGByODE1Ml9jb250cm9sX21zZ2AgZG9lcyBzcGVjaWZpY2FsbHkuIEkgc2hvdWxkIHZlcmlmeS4gSSBuZWVkIHRvIGNoZWNrIGByODE1Ml9jb250cm9sX21zZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3I4MTUyX2NvbnRyb2xfbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTI5Nz1zdGF0aWNcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjEyOTg6aW50IHI4MTUyX2NvbnRyb2xfbXNnKHN0cnVjdCByODE1MiAqdHAsIHVuc2lnbmVkIGludCBwaXBlLCBfX3U4IHJlcXVlc3QsXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMjk5LVx0XHQgICAgICBfX3U4IHJlcXVlc3R0eXBlLCBfX3UxNiB2YWx1ZSwgX191MTYgaW5kZXgsIHZvaWQgKmRhdGEsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTM3MD1pbnQgZ2V0X3JlZ2lzdGVycyhzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTM3OC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjEzNzk6XHRyZXQgPSByODE1Ml9jb250cm9sX21zZyh0cCwgdHAtXHUwMDNlcGlwZV9jdHJsX2luLFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTM4MC1cdFx0XHRcdFJUTDgxNTJfUkVRX0dFVF9SRUdTLCBSVEw4MTUyX1JFUVRfUkVBRCxcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xMzk0PWludCBzZXRfcmVnaXN0ZXJzKHN0cnVjdCByODE1MiAqdHAsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCB1MTYgc2l6ZSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDAyLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTQwMzpcdHJldCA9IHI4MTUyX2NvbnRyb2xfbXNnKHRwLCB0cC1cdTAwM2VwaXBlX2N0cmxfb3V0LFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQwNC1cdFx0XHRcdFJUTDgxNTJfUkVRX1NFVF9SRUdTLCBSVEw4MTUyX1JFUVRfV1JJVEUsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9OTk4MD1zdGF0aWMgdTggX19ydGxfZ2V0X2h3X3ZlcihzdHJ1Y3QgdXNiX2RldmljZSAqdWRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05OTkzLVx0ICogc2luY2UgcmV0cnlpbmcgYSByZWFkIG9mIHRoZSB2ZXJzaW9uIGlzIGFsd2F5cyBzYWZlIGFuZCB0aGlzXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo5OTk0Olx0ICogZnVuY3Rpb24gZG9lc24mIzM5O3QgdGFrZSBhZHZhbnRhZ2Ugb2YgcjgxNTJfY29udHJvbF9tc2coKS5cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTk5OTUtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY2MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGByODE1Ml9jb250cm9sX21zZ2AgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGByODE1Ml9jb250cm9sX21zZ2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjb250ZXh0dWFsaXplIGl0LiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIFJlYWx0ZWsgcjgxNTIgZHJpdmVyLCBzbyBuZXR3b3JraW5nIGFuZCBzcGVjaWZpY2FsbHkgRXRoZXJuZXQgY29udHJvbCBtZXNzYWdlcyBhcmUgdGhlIG5hbWUgb2YgdGhlIGdhbWUuIEnigJltIGFscmVhZHkgbWVudGFsbHkgc2V0dGluZyBleHBlY3RhdGlvbnMgZm9yIHdoYXQgSeKAmWxsIGJlIGxvb2tpbmcgYXQ6IHJlZ2lzdGVyIGFjY2Vzc2VzLCBwb3NzaWJseSBETUEgc2V0dXBzLCBhbmQgbGlrZWx5IHNvbWUgc29ydCBvZiBtZXNzYWdlIGZyYW1pbmcgb3IgZGVzY3JpcHRvciBwcm9jZXNzaW5nLiBHaXZlbiBpdCYjMzk7cyBhICYjMzQ7Y29udHJvbCYjMzQ7IG1lc3NhZ2UsIGl0JiMzOTtzIHByb2JhYmx5ICpub3QqIGhhbmRsaW5nIHRoZSBkYXRhIHBhdGggZGlyZWN0bHksIGJ1dCByYXRoZXIgdGhpbmdzIGxpa2UgbGluayBzdGF0dXMsIE1BQyBhZGRyZXNzIGNvbmZpZ3VyYXRpb24sIHBvd2VyIG1hbmFnZW1lbnQsIG9yIHBvc3NpYmx5IGZsb3cgY29udHJvbCBzZXR0aW5ncy4gSSBzaG91bGQgZXhwZWN0IHRvIGZpbmQgc29tZSBjcml0aWNhbCBzZWN0aW9ucyBvciBsb2NraW5nIGludm9sdmVkLCBwYXJ0aWN1bGFybHkgaWYgaXQmIzM5O3Mgb3BlcmF0aW5nIG9uIHNoYXJlZCBoYXJkd2FyZSByZXNvdXJjZXMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gc3RvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjk3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyOTc6XHRzdGF0aWNcbjEyOTg6XHRpbnQgcjgxNTJfY29udHJvbF9tc2coc3RydWN0IHI4MTUyICp0cCwgdW5zaWduZWQgaW50IHBpcGUsIF9fdTggcmVxdWVzdCxcbjEyOTk6XHRcdFx0ICAgICAgX191OCByZXF1ZXN0dHlwZSwgX191MTYgdmFsdWUsIF9fdTE2IGluZGV4LCB2b2lkICpkYXRhLFxuMTMwMDpcdFx0XHQgICAgICBfX3UxNiBzaXplLCBjb25zdCBjaGFyICptc2dfdGFnKVxuMTMwMTpcdHtcbjEzMDI6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gdHAtXHUwMDNldWRldjtcbjEzMDM6XHRcdGludCByZXQ7XG4xMzA0Olx0XG4xMzA1Olx0XHRpZiAodGVzdF9iaXQoUlRMODE1Ml9JTkFDQ0VTU0lCTEUsIFx1MDAyNnRwLVx1MDAzZWZsYWdzKSlcbjEzMDY6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4xMzA3Olx0XG4xMzA4Olx0XHRyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgcGlwZSwgcmVxdWVzdCwgcmVxdWVzdHR5cGUsXG4xMzA5Olx0XHRcdFx0ICAgICAgdmFsdWUsIGluZGV4LCBkYXRhLCBzaXplLFxuMTMxMDpcdFx0XHRcdCAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTtcbjEzMTE6XHRcbjEzMTI6XHRcdC8qIE5vIG5lZWQgdG8gaXNzdWUgYSByZXNldCB0byByZXBvcnQgYW4gZXJyb3IgaWYgdGhlIFVTQiBkZXZpY2UgZ290XG4xMzEzOlx0XHQgKiB1bnBsdWdnZWQ7IGp1c3QgcmV0dXJuIGltbWVkaWF0ZWx5LlxuMTMxNDpcdFx0ICovXG4xMzE1Olx0XHRpZiAocmV0ID09IC1FTk9ERVYpXG4xMzE2Olx0XHRcdHJldHVybiByZXQ7XG4xMzE3Olx0XG4xMzE4Olx0XHQvKiBJZiB0aGUgd3JpdGUgd2FzIHN1Y2Nlc3NmdWwgdGhlbiB3ZSYjMzk7cmUgZG9uZSAqL1xuMTMxOTpcdFx0aWYgKHJldCBcdTAwM2U9IDApIHtcbjEzMjA6XHRcdFx0dHAtXHUwMDNlcmVnX2FjY2Vzc19yZXNldF9jb3VudCA9IDA7XG4xMzIxOlx0XHRcdHJldHVybiByZXQ7XG4xMzIyOlx0XHR9XG4xMzIzOlx0XG4xMzI0Olx0XHRkZXZfZXJyKFx1MDAyNnVkZXYtXHUwMDNlZGV2LFxuMTMyNTpcdFx0XHRcJiMzNDtGYWlsZWQgdG8gJXMgJWQgYnl0ZXMgYXQgJSMwNngvJSMwNnggKCVkKVxcblwmIzM0OyxcbjEzMjY6XHRcdFx0bXNnX3RhZywgc2l6ZSwgdmFsdWUsIGluZGV4LCByZXQpO1xuMTMyNzpcdFxuMTMyODpcdFx0LyogQmxvY2sgYWxsIGZ1dHVyZSByZWdpc3RlciBhY2Nlc3MgdW50aWwgd2UgcmVzZXQuIE11Y2ggb2YgdGhlIGNvZGVcbjEzMjk6XHRcdCAqIGluIHRoZSBkcml2ZXIgZG9lc24mIzM5O3QgY2hlY2sgZm9yIGVycm9ycy4gTm90YWJseSwgbWFueSBwYXJ0cyBvZiB0aGVcbjEzMzA6XHRcdCAqIGRyaXZlciBkbyBhIHJlYWQvbW9kaWZ5L3dyaXRlIG9mIGEgcmVnaXN0ZXIgdmFsdWUgd2l0aG91dFxuMTMzMTpcdFx0ICogY29uZmlybWluZyB0aGF0IHRoZSByZWFkIHN1Y2NlZWRlZC4gV3JpdGluZyBiYWNrIG1vZGlmaWVkIGdhcmJhZ2VcbjEzMzI6XHRcdCAqIGxpa2UgdGhpcyBjYW4gZnVsbHkgd2VkZ2UgdGhlIGFkYXB0ZXIsIHJlcXVpcmluZyBhIHBvd2VyIGN5Y2xlLlxuMTMzMzpcdFx0ICovXG4xMzM0Olx0XHRydGxfc2V0X2luYWNjZXNzaWJsZSh0cCk7XG4xMzM1Olx0XG4xMzM2Olx0XHQvKiBJZiBwcm9iZSBoYXNuJiMzOTt0IHlldCBmaW5pc2hlZCwgdGhlbiB3ZSYjMzk7bGwgcmVxdWVzdCBhIHJldHJ5IG9mIHRoZVxuMTMzNzpcdFx0ICogd2hvbGUgcHJvYmUgcm91dGluZSBpZiB3ZSBnZXQgYW55IGNvbnRyb2wgdHJhbnNmZXIgZXJyb3JzLiBXZVxuMTMzODpcdFx0ICogbmV2ZXIgaGF2ZSB0byBjbGVhciB0aGlzIGJpdCBzaW5jZSB3ZSBmcmVlL3JlYWxsb2NhdGUgdGhlIHdob2xlIFwmIzM0O3RwXCYjMzQ7XG4xMzM5Olx0XHQgKiBzdHJ1Y3R1cmUgaWYgd2UgcmV0cnkgcHJvYmUuXG4xMzQwOlx0XHQgKi9cbjEzNDE6XHRcdGlmICghdGVzdF9iaXQoUFJPQkVEX1dJVEhfTk9fRVJST1JTLCBcdTAwMjZ0cC1cdTAwM2VmbGFncykpIHtcbjEzNDI6XHRcdFx0c2V0X2JpdChQUk9CRV9TSE9VTERfUkVUUlksIFx1MDAyNnRwLVx1MDAzZWZsYWdzKTtcbjEzNDM6XHRcdFx0cmV0dXJuIHJldDtcbjEzNDQ6XHRcdH1cbjEzNDU6XHRcbjEzNDY6XHRcdC8qIEZhaWxpbmcgdG8gYWNjZXNzIHJlZ2lzdGVycyBpbiBwcmUtcmVzZXQgaXMgbm90IHN1cnByaXNpbmcgc2luY2Ugd2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc2OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHVzYl9jb250cm9sX21zZyBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgYSB6ZXJvLXNpemVkIHRyYW5zZmVyLiBUaGUgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtpZiBgc2l6ZWAgaXMgMCwgdGhlbiBgdXNiX2NvbnRyb2xfbXNnYCBpcyBnb2luZyB0byBiZSBjYWxsZWQgd2l0aCBgc2l6ZSA9IDBgIGFuZCBgZGF0YSA9IFpFUk9fU0laRV9QVFJgLiBXYWl0LCBpcyB0aGF0IHNhZmU/IENvdWxkIGB1c2JfY29udHJvbF9tc2dgIGNyYXNoIG9yIHJldHVybiBhbiBlcnJvciBpZiBpdCBnZXRzIGBaRVJPX1NJWkVfUFRSYCBhcyB0aGUgZGF0YSBwb2ludGVyIHdoZW4gdGhlIHNpemUgaXMgemVybz8gT3IsIGlmIGBzaXplYCBpcyB6ZXJvLCBtYXliZSBgdXNiX2NvbnRyb2xfbXNnYCBpcyBqdXN0IG1lYW50IHRvIHNlbmQgYSB6ZXJvLWxlbmd0aCBjb250cm9sIG1lc3NhZ2U/JiMzNDsKCkFuZCB0aGVuIEkgc2F3IHRoYXQgYFpFUk9fU0laRV9QVFJgIGlzIGFjdHVhbGx5IGAodm9pZCAqKTE2YC4gVGhhdCYjMzk7cyBub3QgdGhlIHNhbWUgYXMgYE5VTExgISBTbyBpcyBgdXNiX2NvbnRyb2xfbXNnYCBzYWZlIHdpdGggdGhpcyBjb25zdHJ1Y3Q/CgpUaGUgbmV4dCB0aGluZyBJIGNvbnNpZGVyZWQgd2FzIHRoZSBpbnRlcm5hbCBoYW5kbGluZzogSSB3YXMgdGhpbmtpbmcsICYjMzQ7SWYgYHNpemVgIGlzIDAsIHRoZW4gYHVzYl9jb250cm9sX21zZ2AgaXMgcGFzc2luZyBpdCB0byBzb21ldGhpbmcgbGlrZSBgdXNiX2NvbnRyb2xfbXNnX3NlbmRgLCB3aGljaCBhbGxvY2F0ZXMgYSBVUkIgdG8gaGFuZGxlIHRoZSB0cmFuc21pc3Npb24uJiMzNDsgQnV0IHRoZW4gSSByZW1lbWJlcmVkIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSB0aG91Z2h0IEkga25ldyB0aGUgY29kZSwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBJICp0aG91Z2h0KiB0aGF0IHRoZSBjb2RlIGRpZCBzb21ldGhpbmcgbGlrZToKCmBgYGMKCWlmIChzaXplID09IDApCgkJZGF0YSA9IE5VTEw7CmBgYAoKQnV0IEkgbmVlZCB0byBjb25maXJtIHRoaXMuIFdhaXQsIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LCBiZWNhdXNlIEkgcmVtZW1iZXIgdGhhdCAqYHVzYl9jb250cm9sX21zZ2AgZG9lcyBub3QgY2hlY2sgZm9yIGBaRVJPX1NJWkVfUFRSYCohCgpOb3csIGhvbGQgb24uIFdhaXQsIGl0JiMzOTtzIHN0YXJ0aW5nIHRvIGNvbWUgYmFjayB0byBtZS4gTm93IEkgcmVtZW1iZXIuIEl0IGRvZXMgc29tZXRoaW5nIGxpa2UgdGhpczoKCmBgYGMKCWlmIChzaXplKSB7CgkJdGJ1ZiA9IGttZW1kdXAoZGF0YSwgc2l6ZSwgR0ZQX05PSU8pOwoJCWlmICghdGJ1ZikKCQkJcmV0dXJuIC1FTk9NRU07Cgl9CmBgYAoKU28sIGl0ICpkb2VzbiYjMzk7dCogYWN0dWFsbHkgdXNlIHRoZSBgZGF0YWAgcG9pbnRlciBpZiBgc2l6ZWAgaXMgemVyby4gSXQmIzM5O3MgYWN0dWFsbHkgY29weWluZyB0aGUgZGF0YSB0byBhIG5ldyBidWZmZXIgaWYgc2l6ZSBpcyBub3QgemVybywgb3RoZXJ3aXNlLCBub3RoaW5nIGhhcHBlbnMgd2l0aCBkYXRhLgoKT2theSwgSSB0aGluayBJIGhhdmUgaXQgbm93LiBCdXQsIEkgc2hvdWxkIGNoZWNrIHRoaXMuIFRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZywgSSYjMzk7bGwgZ28gbG9vayBhdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGZvciBgdXNiX2NvbnRyb2xfbXNnYCBpbiBgZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmNgIHRvIGJlIHN1cmUuIEl0JiMzOTtzIGJlc3QgdG8gdmVyaWZ5IGFzc3VtcHRpb25zIHdpdGggdGhlIHNvdXJjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHVzYl9jb250cm9sX21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jPTEwMT1zdGF0aWMgaW50IHVzYl9pbnRlcm5hbF9jb250cm9sX21zZyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2Rldixcbi0tXG5kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYy0xNDktICovXG5kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYzoxNTA6aW50IHVzYl9jb250cm9sX21zZyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSwgX191OCByZXF1ZXN0LFxuZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMtMTUxLVx0XHQgICAgX191OCByZXF1ZXN0dHlwZSwgX191MTYgdmFsdWUsIF9fdTE2IGluZGV4LCB2b2lkICpkYXRhLFxuLS1cbmRyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jPTE3Nz1FWFBPUlRfU1lNQk9MX0dQTCh1c2JfY29udHJvbF9tc2cpO1xuLS1cbmRyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jLTIxMC0gKi9cbmRyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jOjIxMTppbnQgdXNiX2NvbnRyb2xfbXNnX3NlbmQoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgX191OCBlbmRwb2ludCwgX191OCByZXF1ZXN0LFxuZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMtMjEyLVx0XHRcdCBfX3U4IHJlcXVlc3R0eXBlLCBfX3UxNiB2YWx1ZSwgX191MTYgaW5kZXgsXG4tLVxuZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmM9MjM1PUVYUE9SVF9TWU1CT0xfR1BMKHVzYl9jb250cm9sX21zZ19zZW5kKTtcbi0tXG5kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYy0yNzQtICovXG5kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYzoyNzU6aW50IHVzYl9jb250cm9sX21zZ19yZWN2KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIF9fdTggZW5kcG9pbnQsIF9fdTggcmVxdWVzdCxcbmRyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jLTI3Ni1cdFx0XHQgX191OCByZXF1ZXN0dHlwZSwgX191MTYgdmFsdWUsIF9fdTE2IGluZGV4LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDU1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGB1c2JfY29udHJvbF9tc2dgLCBkaXN0aWxsZWQgaW50byBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgdXNiX2NvbnRyb2xfbXNnYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgYHVzYl9jb250cm9sX21zZ2AuIFJpZ2h0IGF3YXksIG15IGV4cGVydCBtaW5kIGlzIGFscmVhZHkgY29uc2lkZXJpbmcgc2V2ZXJhbCBhc3BlY3RzOiBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgVVNCIGNvbnRyb2wgdHJhbnNmZXIgcGFyYWRpZ20sIGl0cyB0eXBpY2FsIHVzZSBjYXNlcywgYW5kLCBvZiBjb3Vyc2UsIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgY29yZSBmdW5jdGlvbiwgbGlrZWx5IHJlc2lkaW5nIGRlZXAgd2l0aGluIHRoZSBVU0IgZHJpdmVyIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgdGhlIHBvaW50IG9mIGNvbnRhY3QgZm9yIHRoZSBob3N0IHRvIGludGVyYWN0IHdpdGggdGhlIGRldmljZSBvbiBhIGNvbnRyb2wgZW5kcG9pbnQsIGFuZCwgaWYgbXkgaW50dWl0aW9uIGlzIGNvcnJlY3QsIGl0IHdpbGwgaW52b2x2ZSBjb25maWd1cmluZyBkZXZpY2Utc3BlY2lmaWMgcmVxdWVzdHMsIHNldHRpbmcgdXAgY29udHJvbCB0cmFuc2ZlciBwYXJhbWV0ZXJzLCBhbmQgaW5pdGlhdGluZyB0aGUgZGF0YSBleGNoYW5nZS4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBleHBlY3RlZCBwYXJhbWV0ZXJzOiB0aGUgVVNCIGRldmljZSBoYW5kbGUsIHRoZSByZXF1ZXN0IHR5cGUgYW5kIHJlY2lwaWVudCwgdGhlIHJlcXVlc3QgaXRzZWxmLCBkYXRhIGJ1ZmZlciwgYW5kIHBvdGVudGlhbCB0aW1lb3V0IHZhbHVlLiBJJiMzOTttIGFudGljaXBhdGluZyBlcnJvciBoYW5kbGluZyBzdHJhdGVnaWVzIGVtYmVkZGVkIHdpdGhpbiB0aGUgZnVuY3Rpb24sIGNvbnNpZGVyaW5nIGNvbW1vbiBmYWlsdXJlIG1vZGVzIGxpa2UgZGV2aWNlIGRpc2Nvbm5lY3RzLCBidWZmZXIgb3ZlcmZsb3dzLCBhbmQsIHBvdGVudGlhbGx5LCBpbmNvcnJlY3QgcmVxdWVzdCBwYXJhbWV0ZXJzLiBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBpbXBsZW1lbnRhdGlvbiBudWFuY2VzLCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgc2VlIGhvdyB3ZWxsIGl0JiMzOTtzIGRlc2lnbmVkIGZvciBjb25jdXJyZW5jeS4gVGhpcyBmdW5jdGlvbiBpcyB2aXRhbCBmb3IgaW5pdGlhbGl6aW5nIGFuZCBjb250cm9sbGluZyBkZXZpY2VzIC0gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0OTpcdCAqL1xuIDE1MDpcdGludCB1c2JfY29udHJvbF9tc2coc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUsIF9fdTggcmVxdWVzdCxcbiAxNTE6XHRcdFx0ICAgIF9fdTggcmVxdWVzdHR5cGUsIF9fdTE2IHZhbHVlLCBfX3UxNiBpbmRleCwgdm9pZCAqZGF0YSxcbiAxNTI6XHRcdFx0ICAgIF9fdTE2IHNpemUsIGludCB0aW1lb3V0KVxuIDE1MzpcdHtcbiAxNTQ6XHRcdHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmRyO1xuIDE1NTpcdFx0aW50IHJldDtcbiAxNTY6XHRcbiAxNTc6XHRcdGRyID0ga21hbGxvY19vYmooc3RydWN0IHVzYl9jdHJscmVxdWVzdCwgR0ZQX05PSU8pO1xuIDE1ODpcdFx0aWYgKCFkcilcbiAxNTk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTYwOlx0XG4gMTYxOlx0XHRkci1cdTAwM2ViUmVxdWVzdFR5cGUgPSByZXF1ZXN0dHlwZTtcbiAxNjI6XHRcdGRyLVx1MDAzZWJSZXF1ZXN0ID0gcmVxdWVzdDtcbiAxNjM6XHRcdGRyLVx1MDAzZXdWYWx1ZSA9IGNwdV90b19sZTE2KHZhbHVlKTtcbiAxNjQ6XHRcdGRyLVx1MDAzZXdJbmRleCA9IGNwdV90b19sZTE2KGluZGV4KTtcbiAxNjU6XHRcdGRyLVx1MDAzZXdMZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTtcbiAxNjY6XHRcbiAxNjc6XHRcdHJldCA9IHVzYl9pbnRlcm5hbF9jb250cm9sX21zZyhkZXYsIHBpcGUsIGRyLCBkYXRhLCBzaXplLCB0aW1lb3V0KTtcbiAxNjg6XHRcbiAxNjk6XHRcdC8qIExpbmdlciBhIGJpdCwgcHJpb3IgdG8gdGhlIG5leHQgY29udHJvbCBtZXNzYWdlLiAqL1xuIDE3MDpcdFx0aWYgKGRldi1cdTAwM2VxdWlya3MgXHUwMDI2IFVTQl9RVUlSS19ERUxBWV9DVFJMX01TRylcbiAxNzE6XHRcdFx0bXNsZWVwKDIwMCk7XG4gMTcyOlx0XG4gMTczOlx0XHRrZnJlZShkcik7XG4gMTc0Olx0XG4gMTc1Olx0XHRyZXR1cm4gcmV0O1xuIDE3NjpcdH1cbiAxNzc6XHRFWFBPUlRfU1lNQk9MX0dQTCh1c2JfY29udHJvbF9tc2cpO1xuIDE3ODpcdFxuIDE3OTpcdC8qKlxuIDE4MDpcdCAqIHVzYl9jb250cm9sX21zZ19zZW5kIC0gQnVpbGRzIGEgY29udHJvbCBcJiMzNDtzZW5kXCYjMzQ7IG1lc3NhZ2UsIHNlbmRzIGl0IG9mZiBhbmQgd2FpdHMgZm9yIGNvbXBsZXRpb25cbiAxODE6XHQgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSB1c2IgZGV2aWNlIHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG9cbiAxODI6XHQgKiBAZW5kcG9pbnQ6IGVuZHBvaW50IHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG9cbiAxODM6XHQgKiBAcmVxdWVzdDogVVNCIG1lc3NhZ2UgcmVxdWVzdCB2YWx1ZVxuIDE4NDpcdCAqIEByZXF1ZXN0dHlwZTogVVNCIG1lc3NhZ2UgcmVxdWVzdCB0eXBlIHZhbHVlXG4gMTg1Olx0ICogQHZhbHVlOiBVU0IgbWVzc2FnZSB2YWx1ZVxuIDE4NjpcdCAqIEBpbmRleDogVVNCIG1lc3NhZ2UgaW5kZXggdmFsdWVcbiAxODc6XHQgKiBAZHJpdmVyX2RhdGE6IHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gc2VuZFxuIDE4ODpcdCAqIEBzaXplOiBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGRhdGEgdG8gc2VuZFxuIDE4OTpcdCAqIEB0aW1lb3V0OiB0aW1lIGluIG1zZWNzIHRvIHdhaXQgZm9yIHRoZSBtZXNzYWdlIHRvIGNvbXBsZXRlIGJlZm9yZSB0aW1pbmcgb3V0XG4gMTkwOlx0ICogQG1lbWZsYWdzOiB0aGUgZmxhZ3MgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBidWZmZXJzXG4gMTkxOlx0ICpcbiAxOTI6XHQgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0ICgpXG4gMTkzOlx0ICpcbiAxOTQ6XHQgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgY29udHJvbCBtZXNzYWdlIHRvIGEgc3BlY2lmaWVkIGVuZHBvaW50IHRoYXQgaXMgbm90XG4gMTk1Olx0ICogZXhwZWN0ZWQgdG8gZmlsbCBpbiBhIHJlc3BvbnNlIChpLmUuIGEgXCYjMzQ7c2VuZCBtZXNzYWdlXCYjMzQ7KSBhbmQgd2FpdHMgZm9yIHRoZVxuIDE5NjpcdCAqIG1lc3NhZ2UgdG8gY29tcGxldGUsIG9yIHRpbWVvdXQuXG4gMTk3Olx0ICpcbiAxOTg6XHQgKiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gZnJvbSB3aXRoaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuIElmIHlvdSBuZWVkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjAwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGB1c2JfaW50ZXJuYWxfY29udHJvbF9tc2dgOgoKKipEaXZpbmcgaW50byBgdXNiX2ludGVybmFsX2NvbnRyb2xfbXNnYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGlzIGB1c2JfaW50ZXJuYWxfY29udHJvbF9tc2dgIGZ1bmN0aW9uLiBJIHJlY29nbml6ZSB0aGUgbmFtaW5nIGNvbnZlbnRpb24gaW1tZWRpYXRlbHksIGl0IHN1Z2dlc3RzIHRoYXQgdGhpcyBpcyByZWxhdGVkIHRvIFVTQiBjb21tdW5pY2F0aW9uLCBhbmQgc3BlY2lmaWNhbGx5LCB0byBjb250cm9sIG1lc3NhZ2VzLiBUaGUgJiMzNDtpbnRlcm5hbCYjMzQ7IHBhcnQgaXMgaW50ZXJlc3RpbmcgLSBpdCBpbXBsaWVzIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IG5vdCBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIHByb2JhYmx5IHJlc2lkaW5nIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIFVTQiBzdWJzeXN0ZW0uIEkmIzM5O20gZ3Vlc3NpbmcgaXQmIzM5O3MgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIGhhbmRsaW5nIHRob3NlIGxvdy1sZXZlbCByZXF1ZXN0cyB0aGF0IGNvbmZpZ3VyZSBkZXZpY2VzLCByZXRyaWV2ZSBkZXNjcmlwdG9ycywgYW5kIG1hbmFnZSBlbmRwb2ludHMuCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IGl0JiMzOTtzIGNhbGxlZCwgd2hhdCBhcmd1bWVudHMgaXQgdGFrZXMsIGFuZCBjcnVjaWFsbHksIHdoYXQgY29udGV4dCBpdCBvcGVyYXRlcyBpbiAoZS5nLiwgaW50ZXJydXB0IGNvbnRleHQsIHByb2Nlc3MgY29udGV4dCkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIGNvbnRyb2wgdHJhbnNmZXIgcHJvY2Vzcy4gRG9lcyBpdCBoYW5kbGUgc2V0dXAgcGFja2V0cyBkaXJlY3RseT8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIHNwZWNpZmljIGhhcmR3YXJlIHJlZ2lzdGVycyBvciBkYXRhIHN0cnVjdHVyZXM/IEFyZSB0aGVyZSBhbnkgbm90YWJsZSBlcnJvciBjb25kaXRpb25zIG9yIGVkZ2UgY2FzZXMgaXQmIzM5O3MgZGVzaWduZWQgdG8gbWFuYWdlPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGl0IHdpbGwgbGlrZWx5IGFic3RyYWN0IHNvbWUgb2YgdGhlIG1vcmUgY29tcGxleCBpbnRlcmFjdGlvbnMsIG1ha2luZyBpdCBlYXNpZXIgZm9yIHRoZSBoaWdoZXItbGV2ZWwgVVNCIGRyaXZlcnMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gS25vd2luZyB0aGlzIGlzIGtleSB0byBkZWJ1Z2dpbmcgYW5kIGV4dGVuZGluZyBVU0IgZnVuY3Rpb25hbGl0eS4gVGltZSB0byBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ4Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRzdGF0aWMgaW50IHVzYl9pbnRlcm5hbF9jb250cm9sX21zZyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldixcbiAxMDI6XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgcGlwZSxcbiAxMDM6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjbWQsXG4gMTA0Olx0XHRcdFx0XHQgICAgdm9pZCAqZGF0YSwgaW50IGxlbiwgaW50IHRpbWVvdXQpXG4gMTA1Olx0e1xuIDEwNjpcdFx0c3RydWN0IHVyYiAqdXJiO1xuIDEwNzpcdFx0aW50IHJldHY7XG4gMTA4Olx0XHRpbnQgbGVuZ3RoO1xuIDEwOTpcdFxuIDExMDpcdFx0dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfTk9JTyk7XG4gMTExOlx0XHRpZiAoIXVyYilcbiAxMTI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTEzOlx0XG4gMTE0Olx0XHR1c2JfZmlsbF9jb250cm9sX3VyYih1cmIsIHVzYl9kZXYsIHBpcGUsICh1bnNpZ25lZCBjaGFyICopY21kLCBkYXRhLFxuIDExNTpcdFx0XHRcdCAgICAgbGVuLCB1c2JfYXBpX2Jsb2NraW5nX2NvbXBsZXRpb24sIE5VTEwpO1xuIDExNjpcdFxuIDExNzpcdFx0cmV0diA9IHVzYl9zdGFydF93YWl0X3VyYih1cmIsIHRpbWVvdXQsIFx1MDAyNmxlbmd0aCwgZmFsc2UpO1xuIDExODpcdFx0aWYgKHJldHYgXHUwMDNjIDApXG4gMTE5Olx0XHRcdHJldHVybiByZXR2O1xuIDEyMDpcdFx0ZWxzZVxuIDEyMTpcdFx0XHRyZXR1cm4gbGVuZ3RoO1xuIDEyMjpcdH1cbiAxMjM6XHRcbiAxMjQ6XHQvKipcbiAxMjU6XHQgKiB1c2JfY29udHJvbF9tc2cgLSBCdWlsZHMgYSBjb250cm9sIHVyYiwgc2VuZHMgaXQgb2ZmIGFuZCB3YWl0cyBmb3IgY29tcGxldGlvblxuIDEyNjpcdCAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIHVzYiBkZXZpY2UgdG8gc2VuZCB0aGUgbWVzc2FnZSB0b1xuIDEyNzpcdCAqIEBwaXBlOiBlbmRwb2ludCBcJiMzNDtwaXBlXCYjMzQ7IHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG9cbiAxMjg6XHQgKiBAcmVxdWVzdDogVVNCIG1lc3NhZ2UgcmVxdWVzdCB2YWx1ZVxuIDEyOTpcdCAqIEByZXF1ZXN0dHlwZTogVVNCIG1lc3NhZ2UgcmVxdWVzdCB0eXBlIHZhbHVlXG4gMTMwOlx0ICogQHZhbHVlOiBVU0IgbWVzc2FnZSB2YWx1ZVxuIDEzMTpcdCAqIEBpbmRleDogVVNCIG1lc3NhZ2UgaW5kZXggdmFsdWVcbiAxMzI6XHQgKiBAZGF0YTogcG9pbnRlciB0byB0aGUgZGF0YSB0byBzZW5kXG4gMTMzOlx0ICogQHNpemU6IGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZGF0YSB0byBzZW5kXG4gMTM0Olx0ICogQHRpbWVvdXQ6IHRpbWUgaW4gbXNlY3MgdG8gd2FpdCBmb3IgdGhlIG1lc3NhZ2UgdG8gY29tcGxldGUgYmVmb3JlIHRpbWluZyBvdXRcbiAxMzU6XHQgKlxuIDEzNjpcdCAqIENvbnRleHQ6IHRhc2sgY29udGV4dCwgbWlnaHQgc2xlZXAuXG4gMTM3Olx0ICpcbiAxMzg6XHQgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgc2ltcGxlIGNvbnRyb2wgbWVzc2FnZSB0byBhIHNwZWNpZmllZCBlbmRwb2ludCBhbmRcbiAxMzk6XHQgKiB3YWl0cyBmb3IgdGhlIG1lc3NhZ2UgdG8gY29tcGxldGUsIG9yIHRpbWVvdXQuXG4gMTQwOlx0ICpcbiAxNDE6XHQgKiBEb24mIzM5O3QgdXNlIHRoaXMgZnVuY3Rpb24gZnJvbSB3aXRoaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuIElmIHlvdSBuZWVkXG4gMTQyOlx0ICogYW4gYXN5bmNocm9ub3VzIG1lc3NhZ2UsIG9yIG5lZWQgdG8gc2VuZCBhIG1lc3NhZ2UgZnJvbSB3aXRoaW4gaW50ZXJydXB0XG4gMTQzOlx0ICogY29udGV4dCwgdXNlIHVzYl9zdWJtaXRfdXJiKCkuIElmIGEgdGhyZWFkIGluIHlvdXIgZHJpdmVyIHVzZXMgdGhpcyBjYWxsLFxuIDE0NDpcdCAqIG1ha2Ugc3VyZSB5b3VyIGRpc2Nvbm5lY3QoKSBtZXRob2QgY2FuIHdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlLiBTaW5jZSB5b3VcbiAxNDU6XHQgKiBkb24mIzM5O3QgaGF2ZSBhIGhhbmRsZSBvbiB0aGUgVVJCIHVzZWQsIHlvdSBjYW4mIzM5O3QgY2FuY2VsIHRoZSByZXF1ZXN0LlxuIDE0NjpcdCAqXG4gMTQ3Olx0ICogUmV0dXJuOiBJZiBzdWNjZXNzZnVsLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkLiBPdGhlcndpc2UsIGEgbmVnYXRpdmVcbiAxNDg6XHQgKiBlcnJvciBudW1iZXIuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzA2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBaZXJvLUxlbmd0aCBVU0IgVHJhbnNmZXJzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGEgcG90ZW50aWFsIGlzc3VlIHdpdGggemVyby1sZW5ndGggVVNCIHRyYW5zZmVycyBrZWVwcyBjb21pbmcgdXAgaW4gbXkgbWluZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBgdXNiX2ZpbGxfY29udHJvbF91cmJgIGhhbmRsZXMgYSBgbGVuYCBvZiB6ZXJvLCBhbmQgd2hldGhlciBwYXNzaW5nIGBaRVJPX1NJWkVfUFRSYCBhcyB0aGUgYGRhdGFgIHBvaW50ZXIgaXMgc2FmZS4gSW5pdGlhbGx5LCBpdCBzZWVtcyBoYXJtbGVzcy4gYHVzYl9maWxsX2NvbnRyb2xfdXJiYCBqdXN0IHNldHMgdGhlIFVSQiYjMzk7cyBgdHJhbnNmZXJfYnVmZmVyYCBhbmQgYHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGhgIGZpZWxkcy4gV2hlbiBgdXNiX3N0YXJ0X3dhaXRfdXJiYCBzdWJtaXRzIHRoZSBVUkIsIHRoZSBIQ0Qgc2hvdWxkLCBpbiB0aGVvcnksIGp1c3Qgc2VlIGB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID09IDBgIGFuZCBza2lwIHRoZSBidWZmZXIsIGJ1dCBJIGhhdmUgYSBuYWdnaW5nIGZlZWxpbmcuCgpOb3csIEkgcmVtZW1iZXIgc2VlaW5nIGBrbWFsbG9jKDApYCBiZWluZyBjYWxsZWQsIHdoaWNoICpyZXR1cm5zKiBgWkVST19TSVpFX1BUUmAuIEluIHRoaXMgcGFydGljdWxhciBjYXNlLCBgcjgxNTJfY29udHJvbF9tc2dgIGdldHMgYSB6ZXJvLXNpemVkIGJ1ZmZlciBmcm9tIGBrbWFsbG9jYCBhbmQgdGhlbiBwYXNzZXMgaXQgYWxsIHRoZSB3YXkgZG93biB0aGUgY2hhaW4gdG8gYHVzYl9maWxsX2NvbnRyb2xfdXJiYCBhbmQgZmluYWxseSBgdXNiX3N0YXJ0X3dhaXRfdXJiYC4gSXMgdGhpcyByZWFsbHkgZ29pbmcgdG8gYmUgc2FmZT8gSSBuZWVkIHRvIGJlIHN1cmUuCgpJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGlmIGBzaXplYCBpcyB6ZXJvIGluaXRpYWxseSwgYGdlbmVyaWNfb2NwX3JlYWRgIHdpbGwgcGFzcyB6ZXJvIHRvIGBnZXRfcmVnaXN0ZXJzYC4gVGhpcyB3aG9sZSB0aGluZyBoaW5nZXMgb24gd2hldGhlciBgZ2VuZXJpY19vY3BfcmVhZGAgKmNhbiogYmUgY2FsbGVkIHdpdGggYHNpemUgPSAwYC4gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBwbGFjZXMgd2hlcmUgYGdlbmVyaWNfb2NwX3JlYWRgIGdldHMgY2FsbGVkIGFuZCBkZXRlcm1pbmUgaWYgdGhhdCYjMzk7cyBwb3NzaWJsZS4gSSYjMzk7dmUgZ290IHRvIGVuc3VyZSB0aGUgY29kZSYjMzk7cyByb2J1c3QgYWdhaW5zdCB0aGVzZSB6ZXJvLWxlbmd0aCB0cmFuc2ZlcnMuIE90aGVyd2lzZSwgdGhpcyBjb3VsZCBiZSBhIG5hc3R5IGJ1ZyBpbiB0aGUgbWFraW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5lcmljX29jcF9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTQxMj1zdGF0aWMgdm9pZCBydGxfc2V0X3VucGx1ZyhzdHJ1Y3QgcjgxNTIgKnRwKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0MTctXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNDE4OnN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQxOS1cdFx0XHQgICAgdm9pZCAqZGF0YSwgdTE2IHR5cGUpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTUyND1pbnQgcGxhX29jcF9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTI1LXtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1MjY6XHRyZXR1cm4gZ2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemUsIGRhdGEsIE1DVV9UWVBFX1BMQSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTI3LX1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTQxPXN0YXRpYyB1MzIgb2NwX3JlYWRfZHdvcmQoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleClcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTQ0LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU0NTpcdGdlbmVyaWNfb2NwX3JlYWQodHAsIGluZGV4LCBzaXplb2YoZGF0YSksIFx1MDAyNmRhdGEsIHR5cGUpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU0Ni1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTU3PXN0YXRpYyB1MTYgb2NwX3JlYWRfd29yZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NjYtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNTY3Olx0Z2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemVvZih0bXApLCBcdTAwMjZ0bXAsIHR5cGUgfCBieWVuKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NjgtXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTU5Nz1zdGF0aWMgdTggb2NwX3JlYWRfYnl0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MDQtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNjA1Olx0Z2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemVvZih0bXApLCBcdTAwMjZ0bXAsIHR5cGUpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTYwNi1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz05MDc4PXN0YXRpYyB2b2lkIHJ0bDgxNTJfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05MDg2LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6OTA4NzpcdGdlbmVyaWNfb2NwX3JlYWQodHAsIFBMQV9UQUxMWUNOVCwgc2l6ZW9mKHRhbGx5KSwgXHUwMDI2dGFsbHksIE1DVV9UWVBFX1BMQSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05MDg4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEzNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM2NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUlRMODE1MiBEcml2ZXIgUGF0Y2ggZm9yIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBFeHBvc3VyZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2ggZm9yIHRoZSBSVEw4MTUyIGRyaXZlciwgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgd2h5IGl0IG1pZ2h0IGJlIGZsYWdnaW5nIGEgS01TQU4gY29uY2Vybi4gVGhlIG1haW4gaXNzdWUgYXBwZWFycyB0byBiZSBhcm91bmQgaG93IHRoZSBjb2RlIGhhbmRsZXMgcmVhZC93cml0ZSBvcGVyYXRpb25zIHdpdGggcG90ZW50aWFsbHkgZGlmZmVyaW5nIHNpemVzIGFuZCBieXRlIGVuYWJsZSBjb25maWd1cmF0aW9ucy4KClRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHNlZW1zIHRvIHN0ZW0gZnJvbSBob3cgYGdlbmVyaWNfb2NwX3dyaXRlYCBhbmQgYGdlbmVyaWNfb2NwX3JlYWRgIGludGVyYWN0IHdpdGggYHNldF9yZWdpc3RlcnNgIGFuZCBgZ2V0X3JlZ2lzdGVyc2AsIHJlc3BlY3RpdmVseS4gVGhlIG5ldyBjb2RlIGluIGBnZW5lcmljX29jcF93cml0ZWAgaGFzIGFsdGVyZWQgdGhlIGxvZ2ljLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSBpZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgYSBzaXR1YXRpb24gd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY2FuIGxlYWsuCgpJIGluaXRpYWxseSBob25lZCBpbiBvbiBhIGNhc2Ugd2hlcmUgYHNpemVgIG1pZ2h0IGJlIHJlZHVjZWQgdG8gemVybyBkdWUgdG8gYSBjb25kaXRpb25hbCBjaGVjayAoYGJ5ZW4gIT0gQllURV9FTl9EV09SRGApLCB3aGljaCBjYXVzZXMgYW4gZXh0cmEgY2FsbCB3aXRoIGEgc2l6ZSBvZiB6ZXJvLiAgQSB6ZXJvIHNpemUgd3JpdGUgKG9yIHJlYWQpLCBieSBpdHNlbGYsIGlzbiYjMzk7dCBhICpidWcqLCBiZWNhdXNlIGl0IGRvZXNuJiMzOTt0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBkdWUgdG8gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBsaWtlIGBrbWVtZHVwYCBhbmQgYGttYWxsb2NgIHJldHVybmluZyBgWkVST19TSVpFX1BUUmAuCgpIb3dldmVyLCB0aGUgbW9yZSBjb25jZXJuaW5nIGlzc3VlIGlzIHNob3J0IHJlYWRzLiBUaGUgYGdldF9yZWdpc3RlcnNgIGZ1bmN0aW9uIHVzZXMgYGttYWxsb2NgIHRvIGFsbG9jYXRlIGEgYnVmZmVyLCBhbmQgdGhlbiBjYWxscyBgcjgxNTJfY29udHJvbF9tc2dgIHRvIHJlYWQgZGF0YSBmcm9tIHRoZSBkZXZpY2UuIEEgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCB0aGUgZGV2aWNlICpjb3VsZCogcmV0dXJuIGZld2VyIGJ5dGVzIHRoYW4gcmVxdWVzdGVkLiAgSWYgYHI4MTUyX2NvbnRyb2xfbXNnYCB0cmFuc2ZlcnMgZmV3ZXIgYnl0ZXMgdGhhbiB0aGUgYHNpemVgIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jYCwgdGhlIHJlbWFpbmRlciBvZiB0aGUgYnVmZmVyIHdpbGwgY29udGFpbiB1bmluaXRpYWxpemVkIGhlYXAgbWVtb3J5LiBTdWJzZXF1ZW50bHksIHRoZSBgbWVtY3B5YCBpbiBgZ2V0X3JlZ2lzdGVyc2AgY29waWVzIHRoZSBmdWxsIGBzaXplYCBieXRlcyBvZiBkYXRhIGZyb20gYHRtcGAgdG8gdGhlIG91dHB1dCBgZGF0YWAgYnVmZmVyLiBUaGlzIHRyYW5zZmVyIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGxlYWQgdG8gYSBLTVNBTiBpc3N1ZSBpZiB0aGUgYGRhdGFgIGJ1ZmZlciBpcyB1c2VkIG9yIHNlbnQgdG8gdXNlcnNwYWNlLgoKVGhlIHBhdGNoIGl0c2VsZiBkb2VzIG5vdCBkaXJlY3RseSAqaW50cm9kdWNlKiB0aGUgaXNzdWUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgd2l0aCB0aGUgbG9vcCBjaGFuZ2VzLiAgSG93ZXZlciwgYmVjYXVzZSB0aGUgY2hhbmdlcyBpbiB0aGUgbmV3IGNvZGUgY2hhbmdlIGhvdyB0aGUgYGdldF9yZWdpc3RlcnNgIGlzIGNhbGxlZCwgYSBLTVNBTiBzZXNzaW9uIG1pZ2h0IGJlIGp1c3RpZmllZCBkdWUgdG8gdGhlIGxvb3AgY2hhbmdlIHJlZmFjdG9yaW5nLCBhbmQgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrYWdlIHRoYXQgd2FzIG5vdCBhZGRyZXNzZWQgcHJldmlvdXNseS4KClNvLCBpbiBzdW1tYXJ5LCBJIHRoaW5rIHRoZSBzeXpib3QgZmxhZyBpcyByZWFzb25hYmxlLiBUaGUgZXhpc3RpbmcgY29kZSBhbHJlYWR5IGhhcyBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBkdWUgdG8gc2hvcnQgcmVhZHMgaW4gYGdldF9yZWdpc3RlcnNgLiAgVGhlIGxvb3AgbW9kaWZpY2F0aW9ucyBtaWdodCBoYXZlIGEgbGltaXRlZCBlZmZlY3QsIGluIHRoZSBuZXcgYW5kIG9sZCBjb2RlLCBvbiB0aGUgZXhpc3RpbmcgY29uZGl0aW9uIG9mIGhhdmluZyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGFuZCBjb3B5IG9wZXJhdGlvbi4gIEEgS01TQU4gZnV6emluZyBzZXNzaW9uIHdvdWxkIGJlIGp1c3RpZmllZCB0byBjYXRjaCBwb3RlbnRpYWwgcmVncmVzc2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIxOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbmVyaWNfb2NwX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTQxOD1zdGF0aWMgaW50IGdlbmVyaWNfb2NwX3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgc2l6ZSxcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDUyLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTQ1MzpzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbixcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0NTQtXHRcdFx0ICAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSwgdTE2IHR5cGUpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTUzMD1pbnQgcGxhX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sIHUxNiBzaXplLCB2b2lkICpkYXRhKVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzMS17XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNTMyOlx0cmV0dXJuIGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBpbmRleCwgYnl0ZWVuLCBzaXplLCBkYXRhLCBNQ1VfVFlQRV9QTEEpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzMy19XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTUzNj1pbnQgdXNiX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sIHUxNiBzaXplLCB2b2lkICpkYXRhKVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzNy17XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNTM4Olx0cmV0dXJuIGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBpbmRleCwgYnl0ZWVuLCBzaXplLCBkYXRhLCBNQ1VfVFlQRV9VU0IpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzOS19XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTU1MD1zdGF0aWMgdm9pZCBvY3Bfd3JpdGVfZHdvcmQoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleCwgdTMyIGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU1My1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1NTQ6XHRnZW5lcmljX29jcF93cml0ZSh0cCwgaW5kZXgsIEJZVEVfRU5fRFdPUkQsIHNpemVvZih0bXApLCBcdTAwMjZ0bXAsIHR5cGUpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU1NS19XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTU3Nj1zdGF0aWMgdm9pZCBvY3Bfd3JpdGVfd29yZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4LCB1MzIgZGF0YSlcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTkzLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU5NDpcdGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBpbmRleCwgYnllbiwgc2l6ZW9mKHRtcCksIFx1MDAyNnRtcCwgdHlwZSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTk1LX1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNjE0PXN0YXRpYyB2b2lkIG9jcF93cml0ZV9ieXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgsIHUzMiBkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MzEtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNjMyOlx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieWVuLCBzaXplb2YodG1wKSwgXHUwMDI2dG1wLCB0eXBlKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MzMtfVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTQ1MTE9c3RhdGljIHZvaWQgcnRsX2NsZWFyX2JwKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTQ1NDktXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo0NTUwOlx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIFBMQV9CUF8wLCBCWVRFX0VOX0RXT1JELCBicF9udW0gXHUwMDNjXHUwMDNjIDEsIGJwLCB0eXBlKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTQ1NTEtXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NTMwND1zdGF0aWMgdm9pZCBydGxfcmFtX2NvZGVfc3BlZWRfdXAoc3RydWN0IHI4MTUyICp0cCwgc3RydWN0IGZ3X3BoeV9zcGVlZF91cCAqcGh5LCBib29sIHdhaXQpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTMzNC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjUzMzU6XHRcdGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBfX2xlMTZfdG9fY3B1KHBoeS1cdTAwM2Vmd19yZWcpLCAweGZmLCBzaXplLCBkYXRhLCBNQ1VfVFlQRV9VU0IpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTMzNi1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz01NDg1PXN0YXRpYyB2b2lkIHJ0bDgxNTJfZndfbWFjX2FwcGx5KHN0cnVjdCByODE1MiAqdHAsIHN0cnVjdCBmd19tYWMgKm1hYylcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01NTI0LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NTUyNTpcdGlmIChnZW5lcmljX29jcF93cml0ZSh0cCwgX19sZTE2X3RvX2NwdShtYWMtXHUwMDNlZndfcmVnKSwgMHhmZiwgbGVuZ3RoLFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTUyNi1cdFx0XHQgICAgICBkYXRhLCB0eXBlKSBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTU1MzQtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo1NTM1Olx0aWYgKGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBfX2xlMTZfdG9fY3B1KG1hYy1cdTAwM2VicF9zdGFydCksIEJZVEVfRU5fRFdPUkQsXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01NTM2LVx0XHRcdCAgICAgIEFMSUdOKF9fbGUxNl90b19jcHUobWFjLVx1MDAzZWJwX251bSkgXHUwMDNjXHUwMDNjIDEsIDQpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg3MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDExMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgZ2VuZXJpY19vY3Bfd3JpdGVgIEZ1bmN0aW9uIGFuZCBpdHMgUmVjZW50IE1vZGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBiYWNrIGludG8gdGhpcyBgZ2VuZXJpY19vY3Bfd3JpdGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGlzIGNvcnJlY3RseSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgcmVjZW50IGNoYW5nZS4gRmlyc3QsIGxldCBtZSB3YWxrIHRocm91Z2ggdGhlIGNvZGUgYXMgaXQgc3RhbmRzLiBJdCB0YWtlcyBhIGRldmljZSBwb2ludGVyIGB0cGAsIGFuIGluZGV4IGBpbmRleGAsIGEgYnl0ZSBlbmFibGUgdmFsdWUgYGJ5dGVlbmAsIGEgc2l6ZSBgc2l6ZWAsIGRhdGEgcG9pbnRlciBgZGF0YWAsIGFuZCBhIHR5cGUgYHR5cGVgLiBUaGUgc2l6ZSBpcyBjaGVja2VkIHRvIGVuc3VyZSBpdCBpc24mIzM5O3Qgb3ZlciBhIGxpbWl0LCBhbmQgdGhlcmUgYXJlIHNvbWUgc3BlY2lmaWMgbWFza3MgYW5kIFVTQiB0eXBlIGNvbnNpZGVyYXRpb25zIGZvciB0aGUgbWFzayB2YXJpYWJsZS4gIFRoZXJlIGFyZSBhIHNlcmllcyBvZiBpbml0aWFsIGVycm9yIGNoZWNrcy4gTm93LCB0aGUgYGJ5dGVlbmAgdmFsdWUgaXMgaGFuZGxlZCwgd2hpY2ggZGV0ZXJtaW5lcyBob3cgbWFueSBieXRlcyBvZiBhIERXT1JEIGFyZSBlbmFibGVkLgoKT2theSwgc28gaWYgYGJ5dGVlbmAgaXMgbm90IHRoZSBkZWZhdWx0IGBCWVRFX0VOX0RXT1JEYCwgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGZpcnN0IERXT1JEIHdpdGggdGhlIHNwZWNpZmljIGBieXRlZW5gIHZhbHVlLiBUaGUgb3JpZ2luYWwgbG9naWMgY29udGFpbmVkIGEgZGVjcmVtZW50IHRvIHRoZSBzaXplIGFuZCBwb2ludGVyIGZvciB1c2UgbGF0ZXIgaW4gdGhlIGZ1bmN0aW9uLgoKTm93LCB0aGVyZSYjMzk7cyBhIGxvb3AgdGhhdCBpdGVyYXRlcyB0byB3cml0ZSB0aGUgcmVtYWluaW5nIGRhdGEuIFRoZSB1cGRhdGVkIGNvZGUganVzdCB3cml0ZXMgaW4gdGhlIHJlbWFpbmluZyBibG9ja3MsIHdpdGggYSBsaW1pdCBvZiA1MTIgYnl0ZXMuIE9rYXksIHRoZSBjaGFuZ2UgbG9va3MgbGlrZSBpdCBqdXN0IHJlbW92ZWQgdGhlIGJyYW5jaCB0byBjaGVjayBpZiB0aGUgYHNpemVgIHdhcyBzdGlsbCBncmVhdGVyIHRoYW4gYGxpbWl0YC4gU28gd2Ugbm93IGhhdmUgYSBzaW5nbGUgYHdoaWxlYCBsb29wLCB0aGF0IHNob3VsZCBiZSBsZXNzIGNvbXBsZXggdGhhbiB0aGUgcHJldmlvdXMgb25lIHdpdGggdGhlIGBpZi9lbHNlYCBpbnNpZGUgaXQuIFRoZXJlJiMzOTtzIGEgY2hlY2sgZm9yIGEgLUVOT0RFViBlcnJvciB3aGljaCBzaG91bGQgYWxzbyBoYW5kbGUgc2V0dGluZyB0aGUgdW5wbHVnIHN0YXRlLiBGaW5hbGx5IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBlcnJvciBzdGF0dXMuCgpXYWl0IGEgc2Vjb25kLi4uSSYjMzk7bSBzZWVpbmcgc29tZXRoaW5nLiBJIHdhcyBjZXJ0YWluIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhbiBvdXRlciBgaWYgKHNpemUpYCBjb25kaXRpb24gdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBiZSBjYWxsaW5nIGBzZXRfcmVnaXN0ZXJzYCBhdCBhbGwsIGFuZCBpdCYjMzk7cyBtaXNzaW5nIGluIHRoZSBjdXJyZW50IHZlcnNpb24uIFRoaXMgbG9va3MgbGlrZSBhIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvcjgxNTIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ4MDpcdFxuMTQ4MTpcdFx0XHRpbmRleCAmIzQzOz0gNDtcbjE0ODI6XHRcdFx0ZGF0YSAmIzQzOz0gNDtcbjE0ODM6XHRcdFx0c2l6ZSAtPSA0O1xuMTQ4NDpcdFx0fVxuMTQ4NTpcdFxuMTQ4NjpcdFx0aWYgKHNpemUpIHtcbjE0ODc6XHRcdFx0YnllbiA9IGJ5dGVlbl9lbmQgfCAoYnl0ZWVuX2VuZCBcdTAwM2VcdTAwM2UgNCk7XG4xNDg4Olx0XG4xNDg5Olx0XHRcdC8qIFNwbGl0IHRoZSBsYXN0IERXT1JEIGlmIHRoZSBieXRlX2VuIGlzIG5vdCAweGZmICovXG4xNDkwOlx0XHRcdGlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpXG4xNDkxOlx0XHRcdFx0c2l6ZSAtPSA0O1xuMTQ5MjpcdFxuMTQ5MzpcdFx0XHR3aGlsZSAoc2l6ZSBcdTAwM2UgbGltaXQpIHtcbjE0OTQ6XHRcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXG4xNDk1Olx0XHRcdFx0XHRcdCAgICBsaW1pdCwgZGF0YSk7XG4xNDk2Olx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0OTc6XHRcdFx0XHRcdGdvdG8gZXJyb3IxO1xuMTQ5ODpcdFxuMTQ5OTpcdFx0XHRcdGluZGV4ICYjNDM7PSBsaW1pdDtcbjE1MDA6XHRcdFx0XHRkYXRhICYjNDM7PSBsaW1pdDtcbjE1MDE6XHRcdFx0XHRzaXplIC09IGxpbWl0O1xuMTUwMjpcdFx0XHR9XG4xNTAzOlx0XG4xNTA0Olx0XHRcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgQllURV9FTl9EV09SRCwgc2l6ZSwgZGF0YSk7XG4xNTA1Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xNTA2Olx0XHRcdFx0Z290byBlcnJvcjE7XG4xNTA3Olx0XG4xNTA4Olx0XHRcdGluZGV4ICYjNDM7PSBzaXplO1xuMTUwOTpcdFx0XHRkYXRhICYjNDM7PSBzaXplO1xuMTUxMDpcdFxuMTUxMTpcdFx0XHQvKiBTZXQgdGhlIGxhc3QgRFdPUkQgKi9cbjE1MTI6XHRcdFx0aWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRClcbjE1MTM6XHRcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSB8IGJ5ZW4sIDQsIGRhdGEpO1xuMTUxNDpcdFx0fVxuMTUxNTpcdFxuMTUxNjpcdGVycm9yMTpcbjE1MTc6XHRcdGlmIChyZXQgPT0gLUVOT0RFVilcbjE1MTg6XHRcdFx0cnRsX3NldF91bnBsdWcodHApO1xuMTUxOTpcdFxuMTUyMDpcdFx0cmV0dXJuIHJldDtcbjE1MjE6XHR9XG4xNTIyOlx0XG4xNTIzOlx0c3RhdGljIGlubGluZVxuMTUyNDpcdGludCBwbGFfb2NwX3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgc2l6ZSwgdm9pZCAqZGF0YSlcbjE1MjU6XHR7XG4xNTI2Olx0XHRyZXR1cm4gZ2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemUsIGRhdGEsIE1DVV9UWVBFX1BMQSk7XG4xNTI3Olx0fVxuMTUyODpcdFxuMTUyOTpcdHN0YXRpYyBpbmxpbmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwOTAKCQkJCQkJCW91dHB1dDogMzQxCgkJCQkJCQl0aG91Z2h0czogMjUxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQYXRjaCBmb3IgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IHJlZmFjdG9yaW5nIHRoZSBsb29wIHN0cnVjdHVyZXMgdXNlZCBmb3IgaGFuZGxpbmcgcmVnaXN0ZXIgcmVhZHMgYW5kIHdyaXRlcyBpbiB0aGUgcjgxNTIgZHJpdmVyLCBjaHVua2luZyB0aGUgZGF0YSBpbnRvIDUxMi1ieXRlIGJsb2Nrcy4gTXkgcHJpbWFyeSBjb25jZXJuLCBnaXZlbiB0aGUgcHJvbXB0LCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBvciBleHBvc2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGdlbmVyaWNfb2NwX3dyaXRlYC4gVGhlIGNyaXRpY2FsIGNoYW5nZSBoZXJlIGlzIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRoZSAmIzM0O2xhc3QgY2h1bmsuJiMzNDsgSW4gdGhlIG9yaWdpbmFsIGNvZGUsIGlmIGBzaXplYCB3YXMgNCBhbmQgYGJ5ZW5gIHdhc24mIzM5O3QgYEJZVEVfRU5fRFdPUkRgLCB0aGUgbG9vcCB3YXMgKnNraXBwZWQqLCBhbmQgYSBzaW5nbGUgd3JpdGUgb2YgNCBieXRlcyBoYXBwZW5lZC4gTm93LCB0aGUgcmVmYWN0b3JlZCBjb2RlICplbnRlcnMqIGEgbG9vcCAoYmVjYXVzZSBgc2l6ZWAgYmVjYW1lIDAgYWZ0ZXIgdGhlIGNvbmRpdGlvbmFsIHN1YnRyYWN0aW9uLCBhbmQgYHdoaWxlIChzaXplICZndDsgbGltaXQpYCBpcyBmYWxzZSwgYW5kIHRoZXJlZm9yZSBza2lwcGVkKSwgZm9sbG93ZWQgYnkgYSB6ZXJvLWxlbmd0aCBjb250cm9sIG1lc3NhZ2UuIFRoaXMgbWVhbnMgYHNldF9yZWdpc3RlcnNgICppcyogY2FsbGVkIHdpdGggYHNpemUgPSAwYC4gSG93ZXZlciwgdGhpcyBpcyBOT1QgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLiBXaGVuIGBzaXplYCBpcyB6ZXJvLCBga21lbWR1cGAgcmV0dXJucyBgWkVST19TSVpFX1BUUmAsIHdoaWNoIGlzIHNhZmUuIFRoZSBzdWJzZXF1ZW50IGB1c2JfY29udHJvbF9tc2dgIGNhbGwgd2l0aCBgWkVST19TSVpFX1BUUmAgd29uJiMzOTt0IHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBqdXN0IHNlbmRzIGEgMC1sZW5ndGggY29udHJvbCBtZXNzYWdlLCB3aGljaCBpcyB2YWxpZCBVU0IgYmVoYXZpb3IgKGEgemVyby1sZW5ndGggd3JpdGUpLiBUaGlzIG1pZ2h0IGJlIGEgZnVuY3Rpb25hbCBidWcgaWYgdGhlIGRldmljZSBtaXNpbnRlcnByZXRzIHRoZSAwLWxlbmd0aCBtZXNzYWdlIGJ1dCBpdCYjMzk7cyBub3QgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgZ2VuZXJpY19vY3BfcmVhZGAuIEluIHRoaXMgZnVuY3Rpb24sIHRoZSBpbml0aWFsIHNpemUgaXMgdmFsaWRhdGVkIHRvIGJlIGEgbXVsdGlwbGUgb2YgNCAqYW5kKiBub24temVyby4gVGhlIGxvb3AgY29uZGl0aW9uIGB3aGlsZSAoc2l6ZSAmZ3Q7IGxpbWl0KWAgb25seSBleGVjdXRlcyBpZiBgc2l6ZWAgaXMgZ3JlYXRlciB0aGFuIDUxMiBhbmQgaXMgbmV2ZXIgZGVjcmVhc2VkIGJ5IDQuIFRoZXJlZm9yZSBgZ2V0X3JlZ2lzdGVyc2AgaXMgbmV2ZXIgY2FsbGVkIHdpdGggYHNpemUgPSAwYC4gU28sIG5vIG1lbW9yeSBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQuCgpTbywgaW4gYGdlbmVyaWNfb2NwX3JlYWRgIHRoZXJlJiMzOTtzIG5vIHdheSB0byBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIGEgYmFkIHNpemUuIEluIGBnZW5lcmljX29jcF93cml0ZWAgdGhlcmUgaXMgYSB2ZXJ5IHNwZWNpZmljIGNhc2Ugd2hlcmUgaXQgKmNvdWxkKiBzZW5kIGEgMCBsZW5ndGggd3JpdGUuIEJ1dCBpdCBkb2VzICpub3QqIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gYGttZW1kdXBgIGhhbmRsZXMgYSBzaXplIG9mIDAuIGB1c2JfY29udHJvbF9tc2dgIGlzIHNhZmUgd2l0aCBhIHNpemUgb2YgemVyby4gSXQgY291bGQgY2F1c2UgYSBmdW5jdGlvbmFsIGJ1ZyBpZiB0aGUgVVNCIGRldmljZSBkb2VzbiYjMzk7dCBoYW5kbGUgemVyby1sZW5ndGggY29udHJvbCBtZXNzYWdlcywgYnV0IHRoaXMgaXNuJiMzOTt0IGEgbWVtb3J5IHNhZmV0eSBpc3N1ZS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBvbmx5IHJlZmFjdG9ycyB0aGUgY2h1bmtpbmcgYW5kIG1pZ2h0IGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGRldmljZSBieSBzZW5kaW5nIGEgMC1sZW5ndGggY29udHJvbCBtZXNzYWdlIGluIGEgdmVyeSBwYXJ0aWN1bGFyIGNhc2UuIFRoaXMgY2hhbmdlIGhhcyBubyBpbXBhY3Qgb24gS01TQU4gZnV6emluZy4gSXQmIzM5O3Mgbm90IGEgbWVtb3J5IGxlYWssIGl0JiMzOTtzIG5vdCBtZW1vcnkgY29ycnVwdGlvbiwgaXQmIzM5O3MganVzdCBhIHJlZmFjdG9yaW5nIHRoYXQgKmNvdWxkKiBjcmVhdGUgYSBmdW5jdGlvbmFsIGJ1ZyB3aGljaCBpcyBub3QgS01TQU4mIzM5O3MgY29uY2Vybi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjE6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjaHVua2luZyBsb29wcyBpbiBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAgZm9yIHRoZSByODE1MiBkcml2ZXIuIEluIGBnZW5lcmljX29jcF93cml0ZWAsIGlmIGBzaXplID09IDRgIGFuZCBgYnllbiAhPSBCWVRFX0VOX0RXT1JEYCwgYHNpemVgIGlzIGRlY3JlbWVudGVkIGJ5IDQgdG8gMC4gVGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBgd2hpbGUgKHNpemUpYCBhbmQgc2tpcHBlZCB0aGUgbG9vcCwgd2hlcmVhcyB0aGUgbmV3IGNvZGUgdXNlcyBgd2hpbGUgKHNpemUgXHUwMDNlIGxpbWl0KWAgYW5kIHVuY29uZGl0aW9uYWxseSBjYWxscyBgc2V0X3JlZ2lzdGVyc2Agd2l0aCB0aGUgcmVtYWluaW5nIGBzaXplYCAod2hpY2ggaXMgMCkuIFRoaXMgcmVzdWx0cyBpbiBhIDAtbGVuZ3RoIGNvbnRyb2wgbWVzc2FnZSBiZWluZyBzZW50IHRvIHRoZSBVU0IgZGV2aWNlLiBBIDAtbGVuZ3RoIHdyaXRlIGFsbG9jYXRlcyBhIGBaRVJPX1NJWkVfUFRSYCB2aWEgYGttZW1kdXAoZGF0YSwgMCwgR0ZQX0tFUk5FTClgIGFuZCBwYXNzZXMgaXQgdG8gYHVzYl9jb250cm9sX21zZ2AsIHdoaWNoIGhhbmRsZXMgMC1sZW5ndGggdHJhbnNmZXJzIHNhZmVseSB3aXRob3V0IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEluIGBnZW5lcmljX29jcF9yZWFkYCwgYHNpemVgIGlzIHZhbGlkYXRlZCB0byBiZSBub24temVybyBhbmQgYSBtdWx0aXBsZSBvZiA0IGluaXRpYWxseSwgYW5kIGlzIG5ldmVyIGRlY3JlbWVudGVkIGJlZm9yZSB0aGUgbG9vcC4gVGh1cywgYGdldF9yZWdpc3RlcnNgIGlzIG5ldmVyIGNhbGxlZCB3aXRoIGBzaXplID0gMGAsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBjb3BpZWQgb3IgZXhwb3NlZC4gU2luY2UgdGhlIHBhdGNoIG9ubHkgaW50cm9kdWNlcyBhIHBvdGVudGlhbCAwLWxlbmd0aCBVU0IgY29udHJvbCBtZXNzYWdlIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcywgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIEFueSBwb3RlbnRpYWwgY3Jhc2hlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNodW5raW5nIGxvb3BzIGluIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBmb3IgdGhlIHI4MTUyIGRyaXZlci4gSW4gYGdlbmVyaWNfb2NwX3dyaXRlYCwgaWYgYHNpemUgPT0gNGAgYW5kIGBieWVuICE9IEJZVEVfRU5fRFdPUkRgLCBgc2l6ZWAgaXMgZGVjcmVtZW50ZWQgYnkgNCB0byAwLiBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGB3aGlsZSAoc2l6ZSlgIGFuZCBza2lwcGVkIHRoZSBsb29wLCB3aGVyZWFzIHRoZSBuZXcgY29kZSB1c2VzIGB3aGlsZSAoc2l6ZSBcdTAwM2UgbGltaXQpYCBhbmQgdW5jb25kaXRpb25hbGx5IGNhbGxzIGBzZXRfcmVnaXN0ZXJzYCB3aXRoIHRoZSByZW1haW5pbmcgYHNpemVgICh3aGljaCBpcyAwKS4gVGhpcyByZXN1bHRzIGluIGEgMC1sZW5ndGggY29udHJvbCBtZXNzYWdlIGJlaW5nIHNlbnQgdG8gdGhlIFVTQiBkZXZpY2UuIEEgMC1sZW5ndGggd3JpdGUgYWxsb2NhdGVzIGEgYFpFUk9fU0laRV9QVFJgIHZpYSBga21lbWR1cChkYXRhLCAwLCBHRlBfS0VSTkVMKWAgYW5kIHBhc3NlcyBpdCB0byBgdXNiX2NvbnRyb2xfbXNnYCwgd2hpY2ggaGFuZGxlcyAwLWxlbmd0aCB0cmFuc2ZlcnMgc2FmZWx5IHdpdGhvdXQgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSW4gYGdlbmVyaWNfb2NwX3JlYWRgLCBgc2l6ZWAgaXMgdmFsaWRhdGVkIHRvIGJlIG5vbi16ZXJvIGFuZCBhIG11bHRpcGxlIG9mIDQgaW5pdGlhbGx5LCBhbmQgaXMgbmV2ZXIgZGVjcmVtZW50ZWQgYmVmb3JlIHRoZSBsb29wLiBUaHVzLCBgZ2V0X3JlZ2lzdGVyc2AgaXMgbmV2ZXIgY2FsbGVkIHdpdGggYHNpemUgPSAwYCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGNvcGllZCBvciBleHBvc2VkLiBTaW5jZSB0aGUgcGF0Y2ggb25seSBpbnRyb2R1Y2VzIGEgcG90ZW50aWFsIDAtbGVuZ3RoIFVTQiBjb250cm9sIG1lc3NhZ2UgYW5kIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gQW55IHBvdGVudGlhbCBjcmFzaGVzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NTk6MzIuMDM0NzIzMzQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5MTE4Njc0OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiLFxuICAgIFwiVVNCX1JUTDgxNTJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydGw4MTUyX3Byb2JlXCIsXG4gICAgXCJydGw4MTUyX29wZW5cIixcbiAgICBcInJ0bDgxNTJfc3RhcnRfeG1pdFwiLFxuICAgIFwicnRsODE1Ml9pb2N0bFwiLFxuICAgIFwicnRsODE1Ml9zZXRfbWFjX2FkZHJlc3NcIixcbiAgICBcInJ0bDgxNTJfY2hhbmdlX210dVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjaHVua2luZyBsb29wcyBpbiBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAgZm9yIHRoZSByODE1MiBkcml2ZXIuIEluIGBnZW5lcmljX29jcF93cml0ZWAsIGlmIGBzaXplID09IDRgIGFuZCBgYnllbiAhPSBCWVRFX0VOX0RXT1JEYCwgYHNpemVgIGlzIGRlY3JlbWVudGVkIGJ5IDQgdG8gMC4gVGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBgd2hpbGUgKHNpemUpYCBhbmQgc2tpcHBlZCB0aGUgbG9vcCwgd2hlcmVhcyB0aGUgbmV3IGNvZGUgdXNlcyBgd2hpbGUgKHNpemUgXFx1MDAzZSBsaW1pdClgIGFuZCB1bmNvbmRpdGlvbmFsbHkgY2FsbHMgYHNldF9yZWdpc3RlcnNgIHdpdGggdGhlIHJlbWFpbmluZyBgc2l6ZWAgKHdoaWNoIGlzIDApLiBUaGlzIHJlc3VsdHMgaW4gYSAwLWxlbmd0aCBjb250cm9sIG1lc3NhZ2UgYmVpbmcgc2VudCB0byB0aGUgVVNCIGRldmljZS4gQSAwLWxlbmd0aCB3cml0ZSBhbGxvY2F0ZXMgYSBgWkVST19TSVpFX1BUUmAgdmlhIGBrbWVtZHVwKGRhdGEsIDAsIEdGUF9LRVJORUwpYCBhbmQgcGFzc2VzIGl0IHRvIGB1c2JfY29udHJvbF9tc2dgLCB3aGljaCBoYW5kbGVzIDAtbGVuZ3RoIHRyYW5zZmVycyBzYWZlbHkgd2l0aG91dCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJbiBgZ2VuZXJpY19vY3BfcmVhZGAsIGBzaXplYCBpcyB2YWxpZGF0ZWQgdG8gYmUgbm9uLXplcm8gYW5kIGEgbXVsdGlwbGUgb2YgNCBpbml0aWFsbHksIGFuZCBpcyBuZXZlciBkZWNyZW1lbnRlZCBiZWZvcmUgdGhlIGxvb3AuIFRodXMsIGBnZXRfcmVnaXN0ZXJzYCBpcyBuZXZlciBjYWxsZWQgd2l0aCBgc2l6ZSA9IDBgLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgY29waWVkIG9yIGV4cG9zZWQuIFNpbmNlIHRoZSBwYXRjaCBvbmx5IGludHJvZHVjZXMgYSBwb3RlbnRpYWwgMC1sZW5ndGggVVNCIGNvbnRyb2wgbWVzc2FnZSBhbmQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBBbnkgcG90ZW50aWFsIGNyYXNoZXMgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGxvZ2ljIGluIGdlbmVyaWNfb2NwX3JlYWQgYW5kIGdlbmVyaWNfb2NwX3dyaXRlIGluIHRoZSByODE1MiBVU0IgbmV0d29yayBkcml2ZXIuIFRoZSByZWZhY3RvcmVkIGNvZGUgbm93IGV4ZWN1dGVzIGdldF9yZWdpc3RlcnMvc2V0X3JlZ2lzdGVycyBldmVuIGlmIHRoZSBpbml0aWFsIHNpemUgaXMgMCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNvdWxkIHRyaWdnZXIgYnVncyAoZS5nLiwgemVyby1zaXplIGFsbG9jYXRpb25zIG9yIFVTQiBjb250cm9sIG1lc3NhZ2VzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NTk6MzIuMDM0NzI5NTk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDAxNTcwMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4ZWU3OWQ2Mzk4ZWQ3Y2I5ZWQyM2Y1MWI1ZDY3ZmFhY2MyZWQwY2I2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDIyIDIwOjU5OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jIGIvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcXG5pbmRleCBmNjE2ODY0MzMwMzFjLi5kZTk3MzhiZGNlODU5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXFxuKysrIGIvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcXG5AQCAtMTQzMSwyNyArMTQzMSwxOSBAQCBzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgc2l6ZSxcXG4gXFx0aWYgKCh1MzIpaW5kZXggKyAodTMyKXNpemUgXFx1MDAzZSAweGZmZmYpXFxuIFxcdFxcdHJldHVybiAtRVBFUk07XFxuIFxcbi1cXHR3aGlsZSAoc2l6ZSkge1xcbi1cXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIGxpbWl0KSB7XFxuLVxcdFxcdFxcdHJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBsaW1pdCwgZGF0YSk7XFxuLVxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdFxcdFxcdGluZGV4ICs9IGxpbWl0O1xcbi1cXHRcXHRcXHRkYXRhICs9IGxpbWl0O1xcbi1cXHRcXHRcXHRzaXplIC09IGxpbWl0O1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgc2l6ZSwgZGF0YSk7XFxuLVxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0d2hpbGUgKHNpemUgXFx1MDAzZSBsaW1pdCkge1xcbitcXHRcXHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJvcjE7XFxuIFxcbi1cXHRcXHRcXHRpbmRleCArPSBzaXplO1xcbi1cXHRcXHRcXHRkYXRhICs9IHNpemU7XFxuLVxcdFxcdFxcdHNpemUgPSAwO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbitcXHRcXHRpbmRleCArPSBsaW1pdDtcXG4rXFx0XFx0ZGF0YSArPSBsaW1pdDtcXG4rXFx0XFx0c2l6ZSAtPSBsaW1pdDtcXG4gXFx0fVxcbiBcXG4rXFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xcbitcXG4rZXJyb3IxOlxcbiBcXHRpZiAocmV0ID09IC1FTk9ERVYpXFxuIFxcdFxcdHJ0bF9zZXRfdW5wbHVnKHRwKTtcXG4gXFxuQEAgLTE0OTgsMzEgKzE0OTAsMjQgQEAgc3RhdGljIGludCBnZW5lcmljX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sXFxuIFxcdFxcdGlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpXFxuIFxcdFxcdFxcdHNpemUgLT0gNDtcXG4gXFxuLVxcdFxcdHdoaWxlIChzaXplKSB7XFxuLVxcdFxcdFxcdGlmIChzaXplIFxcdTAwM2UgbGltaXQpIHtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICB0eXBlIHwgQllURV9FTl9EV09SRCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGxpbWl0LCBkYXRhKTtcXG4tXFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyb3IxO1xcbi1cXG4tXFx0XFx0XFx0XFx0aW5kZXggKz0gbGltaXQ7XFxuLVxcdFxcdFxcdFxcdGRhdGEgKz0gbGltaXQ7XFxuLVxcdFxcdFxcdFxcdHNpemUgLT0gbGltaXQ7XFxuLVxcdFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdFxcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBzaXplLCBkYXRhKTtcXG4tXFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyb3IxO1xcbi1cXG4tXFx0XFx0XFx0XFx0aW5kZXggKz0gc2l6ZTtcXG4tXFx0XFx0XFx0XFx0ZGF0YSArPSBzaXplO1xcbi1cXHRcXHRcXHRcXHRzaXplID0gMDtcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdH1cXG4rXFx0XFx0d2hpbGUgKHNpemUgXFx1MDAzZSBsaW1pdCkge1xcbitcXHRcXHRcXHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBsaW1pdCwgZGF0YSk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycm9yMTtcXG4rXFxuK1xcdFxcdFxcdGluZGV4ICs9IGxpbWl0O1xcbitcXHRcXHRcXHRkYXRhICs9IGxpbWl0O1xcbitcXHRcXHRcXHRzaXplIC09IGxpbWl0O1xcbiBcXHRcXHR9XFxuIFxcbitcXHRcXHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSB8IEJZVEVfRU5fRFdPUkQsIHNpemUsIGRhdGEpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJvcjE7XFxuK1xcbitcXHRcXHRpbmRleCArPSBzaXplO1xcbitcXHRcXHRkYXRhICs9IHNpemU7XFxuK1xcbiBcXHRcXHQvKiBTZXQgdGhlIGxhc3QgRFdPUkQgKi9cXG4gXFx0XFx0aWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRClcXG4gXFx0XFx0XFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBieWVuLCA0LCBkYXRhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NTk6MzIuNDc1NzMzMzE5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Nzk5ODA4MjE0MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9EUklWRVJTXCIsXG4gICAgXCJVU0JfUlRMODE1MlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bDgxNTJfcHJvYmVcIixcbiAgICBcInJ0bDgxNTJfb3BlblwiLFxuICAgIFwicnRsODE1Ml9zdGFydF94bWl0XCIsXG4gICAgXCJydGw4MTUyX2lvY3RsXCIsXG4gICAgXCJydGw4MTUyX3NldF9tYWNfYWRkcmVzc1wiLFxuICAgIFwicnRsODE1Ml9jaGFuZ2VfbXR1XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvb3AgbG9naWMgaW4gZ2VuZXJpY19vY3BfcmVhZCBhbmQgZ2VuZXJpY19vY3Bfd3JpdGUgaW4gdGhlIHI4MTUyIFVTQiBuZXR3b3JrIGRyaXZlci4gVGhlIHJlZmFjdG9yZWQgY29kZSBub3cgZXhlY3V0ZXMgZ2V0X3JlZ2lzdGVycy9zZXRfcmVnaXN0ZXJzIGV2ZW4gaWYgdGhlIGluaXRpYWwgc2l6ZSBpcyAwLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY291bGQgdHJpZ2dlciBidWdzIChlLmcuLCB6ZXJvLXNpemUgYWxsb2NhdGlvbnMgb3IgVVNCIGNvbnRyb2wgbWVzc2FnZXMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZWU3OWQ2Mzk4ZWQ3Y2I5ZWQyM2Y1MWI1ZDY3ZmFhY2MyZWQwY2I2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMjA6NTk6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcjgxNTIuYyBiL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXG5pbmRleCBmNjE2ODY0MzMwMzFjLi5kZTk3MzhiZGNlODU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXG5AQCAtMTQzMSwyNyArMTQzMSwxOSBAQCBzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgc2l6ZSxcbiBcdGlmICgodTMyKWluZGV4ICsgKHUzMilzaXplIFx1MDAzZSAweGZmZmYpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHR3aGlsZSAoc2l6ZSkge1xuLVx0XHRpZiAoc2l6ZSBcdTAwM2UgbGltaXQpIHtcbi1cdFx0XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRicmVhaztcbi1cbi1cdFx0XHRpbmRleCArPSBsaW1pdDtcbi1cdFx0XHRkYXRhICs9IGxpbWl0O1xuLVx0XHRcdHNpemUgLT0gbGltaXQ7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRicmVhaztcbitcdHdoaWxlIChzaXplIFx1MDAzZSBsaW1pdCkge1xuK1x0XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyb3IxO1xuIFxuLVx0XHRcdGluZGV4ICs9IHNpemU7XG4tXHRcdFx0ZGF0YSArPSBzaXplO1xuLVx0XHRcdHNpemUgPSAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4rXHRcdGluZGV4ICs9IGxpbWl0O1xuK1x0XHRkYXRhICs9IGxpbWl0O1xuK1x0XHRzaXplIC09IGxpbWl0O1xuIFx0fVxuIFxuK1x0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xuK1xuK2Vycm9yMTpcbiBcdGlmIChyZXQgPT0gLUVOT0RFVilcbiBcdFx0cnRsX3NldF91bnBsdWcodHApO1xuIFxuQEAgLTE0OTgsMzEgKzE0OTAsMjQgQEAgc3RhdGljIGludCBnZW5lcmljX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sXG4gXHRcdGlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpXG4gXHRcdFx0c2l6ZSAtPSA0O1xuIFxuLVx0XHR3aGlsZSAoc2l6ZSkge1xuLVx0XHRcdGlmIChzaXplIFx1MDAzZSBsaW1pdCkge1xuLVx0XHRcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsXG4tXHRcdFx0XHRcdFx0ICAgIHR5cGUgfCBCWVRFX0VOX0RXT1JELFxuLVx0XHRcdFx0XHRcdCAgICBsaW1pdCwgZGF0YSk7XG4tXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdFx0XHRnb3RvIGVycm9yMTtcbi1cbi1cdFx0XHRcdGluZGV4ICs9IGxpbWl0O1xuLVx0XHRcdFx0ZGF0YSArPSBsaW1pdDtcbi1cdFx0XHRcdHNpemUgLT0gbGltaXQ7XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LFxuLVx0XHRcdFx0XHRcdCAgICB0eXBlIHwgQllURV9FTl9EV09SRCxcbi1cdFx0XHRcdFx0XHQgICAgc2l6ZSwgZGF0YSk7XG4tXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdFx0XHRnb3RvIGVycm9yMTtcbi1cbi1cdFx0XHRcdGluZGV4ICs9IHNpemU7XG4tXHRcdFx0XHRkYXRhICs9IHNpemU7XG4tXHRcdFx0XHRzaXplID0gMDtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbitcdFx0d2hpbGUgKHNpemUgXHUwMDNlIGxpbWl0KSB7XG4rXHRcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELFxuK1x0XHRcdFx0XHQgICAgbGltaXQsIGRhdGEpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycm9yMTtcbitcbitcdFx0XHRpbmRleCArPSBsaW1pdDtcbitcdFx0XHRkYXRhICs9IGxpbWl0O1xuK1x0XHRcdHNpemUgLT0gbGltaXQ7XG4gXHRcdH1cbiBcbitcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELCBzaXplLCBkYXRhKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycm9yMTtcbitcbitcdFx0aW5kZXggKz0gc2l6ZTtcbitcdFx0ZGF0YSArPSBzaXplO1xuK1xuIFx0XHQvKiBTZXQgdGhlIGxhc3QgRFdPUkQgKi9cbiBcdFx0aWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRClcbiBcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSB8IGJ5ZW4sIDQsIGRhdGEpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NTk6MzIuNDc1NzM1MTM5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM4OTYzNjM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWFsdGVrIFVTQiBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNgLiBJdCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgdGhlIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBmdW5jdGlvbnMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgYSByZWZhY3RvcmluZywgc2ltcGxpZnlpbmcgdGhvc2Ugd2hpbGUgbG9vcHMgYnkgdGFraW5nIHRoYXQgbGFzdCBpdGVyYXRpb24sIHdoZXJlIGBzaXplIFx1MDAzYz0gbGltaXRgLCBvdXQgb2YgdGhlIGxvb3AuIEZ1bmN0aW9uYWxseSwgdGhpcyBsaWtlbHkga2VlcHMgdGhlIHNhbWUgYmVoYXZpb3VyLlxuXG5UaGlzIGlzIGEgVVNCIG5ldHdvcmsgZHJpdmVyIGZvciBSZWFsdGVrIFJUTDgxNTIvUlRMODE1MyBiYXNlZCBVU0IgRXRoZXJuZXQgYWRhcHRlcnMuIEdpdmVuIHRoYXQgaXQncyBhIFVTQiBkcml2ZXIsIEkgc2hvdWxkIG5vdGUgdGhhdCB0aGVzZSBraW5kcyBvZiBkcml2ZXJzIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBXZSBjYW4gdXNlIHRvb2xzIGxpa2UgYGR1bW15X2hjZGAgb3Igc2ltaWxhciBVU0IgZW11bGF0aW9uIGZyYW1ld29ya3Mgd2l0aGluIGEgZnJhbWV3b3JrIGxpa2Ugc3l6a2FsbGVyIHRvIGdlbmVyYXRlIGludGVyZXN0aW5nIGlucHV0cyBhbmQgdGVzdCBmb3IgdnVsbmVyYWJpbGl0aWVzLlxuXG5HaXZlbiB0aGF0IGl0IGlzIGEga2VybmVsIHBhdGNoLCBiZWZvcmUgSSBkaWcgYW55IGRlZXBlciwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBmb3IgdGhlIG1vZHVsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNvZGUuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBiZSBtb3JlIHByZWNpc2UgaW4gbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo1OTozNi44NjUzNzQ1NDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxNTY5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicjgxNTJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfVVNCX1JUTDgxNTApXFx0Kz0gcnRsODE1MC5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19VU0JfUlRMODE1MilcXHQrPSByODE1Mi5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTExLW9iai0kKENPTkZJR19VU0JfSFNPKVxcdFxcdCs9IGhzby5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjU5OjM2LjkxNTUzNzI2MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NzkxNTM4MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBVU0IgUlRMODE1MiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBgQ09ORklHX1VTQl9SVEw4MTUyYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGxpbmVhZ2UgYW5kIHNlZSB3aGVyZSB0aGlzIG1vZHVsZSBmaXRzIHdpdGhpbiB0aGUgYnJvYWRlciBkcml2ZXIgYXJjaGl0ZWN0dXJlLiBUaW1lIHRvIGRlbHZlIGludG8gYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVuczsgd2hlcmUgd2UgZGVmaW5lIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYy4gSSdsbCBuZWVkIHRvIGNoZWNrIHdoYXQgb3RoZXIgbW9kdWxlcywgZmVhdHVyZXMsIG9yIGJyb2FkZXIgY29uZmlndXJhdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgQ09ORklHX1VTQl9SVEw4MTUyYCBjYW4gZXZlbiBiZSBjb25zaWRlcmVkLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGFueSBwbGF0Zm9ybSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgb3Igb3RoZXIgZmFjdG9ycyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGlzIGNvbmZpZ3VyYXRpb24uIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgYW55IHBvdGVudGlhbCBjb25mbGljdHMgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE5MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjU5OjM5Ljg5NDY5NTQyM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg3NzUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX1JUTDgxNTJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWc9ODg9Y29uZmlnIFVTQl9SVEw4MTUwXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy05OC1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo5OTpjb25maWcgVVNCX1JUTDgxNTJcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMDAtXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUlRMODE1Mi9SVEw4MTUzIEJhc2VkIFVTQiBFdGhlcm5ldCBBZGFwdGVyc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NTk6MzkuOTQyNTc4MDUyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4NDU1MTYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgVVNCIE5ldHdvcmtpbmcgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gYSBzcGVjaWZpYyBhcmVhIHdpdGhpbiB0aGUgTGludXgga2VybmVsJ3MgbmV0d29ya2luZyBpbmZyYXN0cnVjdHVyZS4gSSdtIGZvY3VzaW5nIG9uIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA5OS4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgc3BlY2lmaWMgbGluZSBudW1iZXIgaXMgbGlrZWx5IHRvIGJlIGludGVyZXN0aW5nLCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBkZXRhaWxzIHRoZXJlLiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIGEgc3BlY2lmaWMgb3B0aW9uIG9yIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHJlbGF0ZWQgdG8gYSBVU0IgbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHRoYXQgd2FycmFudHMgbXkgYXR0ZW50aW9uLiBJdCBjb3VsZCBiZSBhIG5ldyBmZWF0dXJlLCBhIHN1YnRsZSBidWcgZml4LCBvciBwZXJoYXBzIHNvbWUgYXJjaGl0ZWN0dXJhbCBjaGFuZ2UgcmVsYXRlZCB0byBVU0IgbmV0d29yayBkZXZpY2Ugc3VwcG9ydC4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgb3IgYW55IHJlY2VudCBtb2RpZmljYXRpb25zIHRoYXQgbWlnaHQgaW1wYWN0IGhvdyB0aGVzZSBkZXZpY2VzIGFyZSBjb25maWd1cmVkIGFuZCB1dGlsaXplZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ20gcHJlcGFyaW5nIG15c2VsZiB0byBmaWx0ZXIgb3V0IHRoZSBpcnJlbGV2YW50IGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTI1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NTk6NDMuMjI3MTMyOTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5NTpcXHRcXG4gIDk2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICA5NzpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBydGw4MTUwLlxcbiAgOTg6XFx0XFxuICA5OTpcXHRjb25maWcgVVNCX1JUTDgxNTJcXG4gMTAwOlxcdFxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIFJUTDgxNTIvUlRMODE1MyBCYXNlZCBVU0IgRXRoZXJuZXQgQWRhcHRlcnNcXFwiXFxuIDEwMTpcXHRcXHRzZWxlY3QgTUlJXFxuIDEwMjpcXHRcXHRzZWxlY3QgUEhZTElCXFxuIDEwMzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gMTA0OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiAxMDU6XFx0XFx0aGVscFxcbiAxMDY6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODE1MiBiYXNlZCBVU0IgMi4wXFxuIDEwNzpcXHRcXHQgIDEwLzEwMCBFdGhlcm5ldCBhZGFwdGVycyBhbmQgUlRMODE1MyBiYXNlZCBVU0IgMy4wIDEwLzEwMC8xMDAwXFxuIDEwODpcXHRcXHQgIEV0aGVybmV0IGFkYXB0ZXJzLlxcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxMTE6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcjgxNTIuXFxuIDExMjpcXHRcXG4gMTEzOlxcdGNvbmZpZyBVU0JfTEFONzhYWFxcbiAxMTQ6XFx0XFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBMQU43OFhYIEJhc2VkIFVTQiBFdGhlcm5ldCBBZGFwdGVyc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NTk6NDMuMjI3MjEwNTI5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1OTI0MDE1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgQ29udGV4dHVhbCBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGluc3RpbmN0IHBvaW50cyBtZSB0b3dhcmRzIHRoZXNlIGRlcGVuZGVuY2llczogYE1JSWAsIGBQSFlMSUJgLCBgQ1JDMzJgLCBhbmQgYENSWVBUT19MSUJfU0hBMjU2YC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGVzZSBhcmUga2V5IGNvbXBvbmVudHMgaW4gd2hhdGV2ZXIgSSdtIGRlYWxpbmcgd2l0aC4gQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGlzIGhvdyB0aGV5IGFsbCBmaXQgdG9nZXRoZXIuIFRoZSBjcnVjaWFsIHBhcmVudCBjb25maWcgaXMgbGlrZWx5IHNvbWV0aGluZyByZWxhdGVkIHRvIGBVU0JfTkVUX0RSSVZFUlNgLCBvciBzb21ldGhpbmcgdmVyeSBzaW1pbGFyLiBUbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlIHRvIGp1bXAgb3ZlciB0byB0aGUgdG9wIG9mIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBhbmQgb3ZlcmFsbCBzdHJ1Y3R1cmUgYXJlIGxpa2VseSBsb2NhdGVkLiBUaGF0J2xsIGJlIHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEwMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NTk6NDYuNTg2NDUzOTU2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFVTQiBOZXR3b3JrIGRldmljZXMgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y29tbWVudCBcXFwiSG9zdC1zaWRlIFVTQiBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE5ldHdvcmsgQWRhcHRlciBzdXBwb3J0XFxcIlxcbiAgIDY6XFx0XFx0ZGVwZW5kcyBvbiAhVVNCIFxcdTAwMjZcXHUwMDI2IE5FVFxcbiAgIDc6XFx0XFxuICAgODpcXHRtZW51Y29uZmlnIFVTQl9ORVRfRFJJVkVSU1xcbiAgIDk6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBOZXR3b3JrIEFkYXB0ZXJzXFxcIlxcbiAgMTA6XFx0XFx0ZGVmYXVsdCBVU0IgaWYgVVNCXFxuICAxMTpcXHRcXHRkZXBlbmRzIG9uIFVTQiBcXHUwMDI2XFx1MDAyNiBORVRcXG4gIDEyOlxcdFxcbiAgMTM6XFx0aWYgVVNCX05FVF9EUklWRVJTXFxuICAxNDpcXHRcXG4gIDE1OlxcdGNvbmZpZyBVU0JfQ0FUQ1xcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBDQVRDIE5ldE1hdGUtYmFzZWQgRXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAxNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBVU0IgRXRoZXJuZXRcXG4gIDIwOlxcdFxcdCAgZGV2aWNlIGJhc2VkIG9uIHRoZSBFTDEyMTBBIGNoaXAuIFN1cHBvcnRlZCBkZXZpY2VzIGFyZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NTk6NDYuNTg2NTQ2NTY2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTQzMDU1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBVU0IgTmV0d29yayBEcml2ZXIgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYFVTQl9ORVRfRFJJVkVSU2AgY29uZmlndXJhdGlvbiwgYW5kIHNwZWNpZmljYWxseSB0aGUgYFVTQl9SVEw4MTUyYCBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIG1hZGUuIEl0IGxvb2tzIGxpa2UgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCBhcmUgYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgZXZlbiBiZWluZyBjYWxsZWQsIGFuZCBpZiBzbywgYnkgd2hhdC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGVpciBpbXBhY3QuIFRpbWUgdG8gZ2V0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MjksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjU5OjQ5LjU4MDg1NDU0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxMTIxNDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdlbmVyaWNfb2NwX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTQxMj1zdGF0aWMgdm9pZCBydGxfc2V0X3VucGx1ZyhzdHJ1Y3QgcjgxNTIgKnRwKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQxNy1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNDE4OnN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0MTktXFx0XFx0XFx0ICAgIHZvaWQgKmRhdGEsIHUxNiB0eXBlKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTUyND1pbnQgcGxhX29jcF9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUyNS17XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTUyNjpcXHRyZXR1cm4gZ2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemUsIGRhdGEsIE1DVV9UWVBFX1BMQSk7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUyNy19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTQxPXN0YXRpYyB1MzIgb2NwX3JlYWRfZHdvcmQoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NDQtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU0NTpcXHRnZW5lcmljX29jcF9yZWFkKHRwLCBpbmRleCwgc2l6ZW9mKGRhdGEpLCBcXHUwMDI2ZGF0YSwgdHlwZSk7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU0Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1NTc9c3RhdGljIHUxNiBvY3BfcmVhZF93b3JkKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTY2LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1Njc6XFx0Z2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemVvZih0bXApLCBcXHUwMDI2dG1wLCB0eXBlIHwgYnllbik7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU2OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1OTc9c3RhdGljIHU4IG9jcF9yZWFkX2J5dGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MDQtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTYwNTpcXHRnZW5lcmljX29jcF9yZWFkKHRwLCBpbmRleCwgc2l6ZW9mKHRtcCksIFxcdTAwMjZ0bXAsIHR5cGUpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MDYtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz05MDc4PXN0YXRpYyB2b2lkIHJ0bDgxNTJfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTkwODYtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6OTA4NzpcXHRnZW5lcmljX29jcF9yZWFkKHRwLCBQTEFfVEFMTFlDTlQsIHNpemVvZih0YWxseSksIFxcdTAwMjZ0YWxseSwgTUNVX1RZUEVfUExBKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05MDg4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo1OTo0OS44NTE5ODE5OTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2OTcyODE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OlxuXG4qKkFuYWx5emluZyBPQ1AgQnVzIEFjY2VzcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlc2UgT0NQIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhleSdyZSB0aGUgZm91bmRhdGlvbmFsIGJ1aWxkaW5nIGJsb2NrcywgaGVhdmlseSBsZXZlcmFnZWQgYnkgdGhpbmdzIGxpa2UgYHBsYV9vY3BfcmVhZGAsIHRoZSBgb2NwX3JlYWRfZHdvcmQvd29yZC9ieXRlYCBmdW5jdGlvbnMsIGFuZCBwcm9iYWJseSBvdGhlcnMuIEtub3dpbmcgdGhlIHN5c3RlbSwgaXQncyBwcmV0dHkgbXVjaCBhIGdpdmVuIHRoYXQgdGhlc2UgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgVVNCIGVtdWxhdGlvbiBwYXRod2F5LiBTaW5jZSBgZ2VuZXJpY19vY3BfcmVhZGAgaXMgc28gY2VudHJhbCwgaXQgbWFrZXMgc2Vuc2UgdG8gZ28gaW4gYW5kIGNoZWNrIGBnZW5lcmljX29jcF93cml0ZWAgYXMgd2VsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlc2UgZ2VuZXJpYyBmdW5jdGlvbnMgd29yaywgYXMgdGhleSB3aWxsIHVubG9jayBhY2Nlc3MgdG8gdGhlIHN5c3RlbSB0aHJvdWdoIFVTQi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY4NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjU5OjUzLjIyMTcxMjI2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjE2MTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5lcmljX29jcF93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNDE4PXN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQ1Mi1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNDUzOnN0YXRpYyBpbnQgZ2VuZXJpY19vY3Bfd3JpdGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgYnl0ZWVuLFxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0NTQtXFx0XFx0XFx0ICAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSwgdTE2IHR5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTMwPWludCBwbGFfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzMS17XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTUzMjpcXHRyZXR1cm4gZ2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieXRlZW4sIHNpemUsIGRhdGEsIE1DVV9UWVBFX1BMQSk7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzMy19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTM2PWludCB1c2Jfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzNy17XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTUzODpcXHRyZXR1cm4gZ2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieXRlZW4sIHNpemUsIGRhdGEsIE1DVV9UWVBFX1VTQik7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzOS19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTUwPXN0YXRpYyB2b2lkIG9jcF93cml0ZV9kd29yZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4LCB1MzIgZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NTMtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU1NDpcXHRnZW5lcmljX29jcF93cml0ZSh0cCwgaW5kZXgsIEJZVEVfRU5fRFdPUkQsIHNpemVvZih0bXApLCBcXHUwMDI2dG1wLCB0eXBlKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTU1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1NzY9c3RhdGljIHZvaWQgb2NwX3dyaXRlX3dvcmQoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleCwgdTMyIGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTkzLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1OTQ6XFx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieWVuLCBzaXplb2YodG1wKSwgXFx1MDAyNnRtcCwgdHlwZSk7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU5NS19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNjE0PXN0YXRpYyB2b2lkIG9jcF93cml0ZV9ieXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgsIHUzMiBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTYzMS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNjMyOlxcdGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBpbmRleCwgYnllbiwgc2l6ZW9mKHRtcCksIFxcdTAwMjZ0bXAsIHR5cGUpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MzMtfVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NDUxMT1zdGF0aWMgdm9pZCBydGxfY2xlYXJfYnAoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy00NTQ5LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjQ1NTA6XFx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIFBMQV9CUF8wLCBCWVRFX0VOX0RXT1JELCBicF9udW0gXFx1MDAzY1xcdTAwM2MgMSwgYnAsIHR5cGUpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTQ1NTEtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz01MzA0PXN0YXRpYyB2b2lkIHJ0bF9yYW1fY29kZV9zcGVlZF91cChzdHJ1Y3QgcjgxNTIgKnRwLCBzdHJ1Y3QgZndfcGh5X3NwZWVkX3VwICpwaHksIGJvb2wgd2FpdClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTUzMzQtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NTMzNTpcXHRcXHRnZW5lcmljX29jcF93cml0ZSh0cCwgX19sZTE2X3RvX2NwdShwaHktXFx1MDAzZWZ3X3JlZyksIDB4ZmYsIHNpemUsIGRhdGEsIE1DVV9UWVBFX1VTQik7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTMzNi1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTU0ODU9c3RhdGljIHZvaWQgcnRsODE1Ml9md19tYWNfYXBwbHkoc3RydWN0IHI4MTUyICp0cCwgc3RydWN0IGZ3X21hYyAqbWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTUyNC1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo1NTI1OlxcdGlmIChnZW5lcmljX29jcF93cml0ZSh0cCwgX19sZTE2X3RvX2NwdShtYWMtXFx1MDAzZWZ3X3JlZyksIDB4ZmYsIGxlbmd0aCxcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01NTI2LVxcdFxcdFxcdCAgICAgIGRhdGEsIHR5cGUpIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTUzNC1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo1NTM1OlxcdGlmIChnZW5lcmljX29jcF93cml0ZSh0cCwgX19sZTE2X3RvX2NwdShtYWMtXFx1MDAzZWJwX3N0YXJ0KSwgQllURV9FTl9EV09SRCxcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01NTM2LVxcdFxcdFxcdCAgICAgIEFMSUdOKF9fbGUxNl90b19jcHUobWFjLVxcdTAwM2VicF9udW0pIFxcdTAwM2NcXHUwMDNjIDEsIDQpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo1OTo1My4yNzM4NzkwM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzI4NTYwNjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGdW5jdGlvbiBTY29wZSBhbmQgRXhwb3J0IEJlaGF2aW9yKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJJ3ZlIG5vdGljZWQgc29tZXRoaW5nLiBUaGUgZnVuY3Rpb25zIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBhcmUgZGVmaW5lZCBhcyBgc3RhdGljYC4gVGhhdCBtZWFucyB0aGVpciBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIGlzIGV4cGVjdGVkLiBIb3dldmVyLCB0aGV5J3JlIGJlaW5nICpjYWxsZWQqIGJ5IG90aGVyIGZ1bmN0aW9uczogYHBsYV9vY3BfcmVhZGAsIGBwbGFfb2NwX3dyaXRlYCwgYW5kIGB1c2Jfb2NwX3dyaXRlYC4gVGhvc2UgbGF0dGVyIGZ1bmN0aW9ucyBhcmVuJ3QgYHN0YXRpY2AuXG5cblRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHBvcHMgaW50byBteSBoZWFkIGlzIHdoZXRoZXIgdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgcGxhX29jcF9yZWFkYCBhcmUgZXhwb3J0ZWQuIElzIGBwbGFfb2NwX3JlYWRgIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEksIG9yIGlzIGl0IGFsc28ganVzdCBpbnRlcm5hbCB0byB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlPyBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBleHBvcnQgc3RhdHVzOyB0aGF0IGRldGFpbCB3aWxsIGRyaXZlIHRoZSBkZXNpZ24gZ29pbmcgZm9yd2FyZC4gVW5kZXJzdGFuZGluZyB0aGUgdmlzaWJpbGl0eSBvZiBgcGxhX29jcF9yZWFkYCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQzNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjU5OjU3LjAwMjQ0MjY2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM3NzMxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGxhX29jcF9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1MjM9c3RhdGljIGlubGluZVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1MjQ6aW50IHBsYV9vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1MjUte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MjExNj1zdGF0aWMgaW50IGRldGVybWluZV9ldGhlcm5ldF9hZGRyKHN0cnVjdCByODE1MiAqdHAsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0yMTI2LVxcdFxcdGlmICh0cC1cXHUwMDNldmVyc2lvbiA9PSBSVExfVkVSXzAxKSB7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MjEyNzpcXHRcXHRcXHRyZXQgPSBwbGFfb2NwX3JlYWQodHAsIFBMQV9JRFIsIDgsIHNzLVxcdTAwM2VfX2RhdGEpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTIxMjgtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTIxMzMtXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MjEzNDpcXHRcXHRcXHRcXHRyZXQgPSBwbGFfb2NwX3JlYWQodHAsIFBMQV9CQUNLVVAsIDgsXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMjEzNS1cXHRcXHRcXHRcXHRcXHRcXHQgICBzcy1cXHUwMDNlX19kYXRhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NTk6NTcuMDU2MjE5NzIxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjQ2MDcyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKlF1aWNrIFNjYW4gb2YgSW5saW5lIEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBzbyBJIHNlZSBgcGxhX29jcF9yZWFkYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljIGlubGluZWAuIFRoYXQncyBhIGtleSBkZXRhaWwgdG8gbm90ZSBpbW1lZGlhdGVseS4gVGhpcyB0ZWxscyBtZSB0aGUgY29tcGlsZXIgaXMgbGlrZWx5IGdvaW5nIHRvIHRyeSBhbmQgb3B0aW1pemUgdGhpcyBmdW5jdGlvbiBieSBpbmxpbmluZyBpdCB3aGVyZXZlciBpdCdzIGNhbGxlZC4gVGhpcyBtZWFucyB3ZSdsbCBhdm9pZCBhIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQsIGJ1dCBwb3RlbnRpYWxseSBpbmNyZWFzZSBjb2RlIHNpemUgaWYgaXQncyB1c2VkIGEgbG90LiBOZWVkIHRvIGtlZXAgYW4gZXllIG9uIHRoYXQgZHVyaW5nIHBlcmZvcm1hbmNlIGFuYWx5c2lzIGxhdGVyLlxuXG5Ob3csIGxldCdzIHBpdm90IGFuZCBjaGVjayBgdXNiX29jcF93cml0ZWAuIEknbSBjdXJpb3VzIGlmIGl0J3Mgc2ltaWxhcmx5IG9wdGltaXplZCBvciBpZiBpdCdzIGltcGxlbWVudGVkIGRpZmZlcmVudGx5LiBJcyBpdCBhIHJlZ3VsYXIgZnVuY3Rpb24gY2FsbCwgb3IgcGVyaGFwcyBhbm90aGVyIGBzdGF0aWMgaW5saW5lYD8gT3IgbWF5YmUgaXQgaXMgYSBtYWNybyBpbXBsZW1lbnRhdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlYWQgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgdGhlIHdyaXRlIGlzIGNyaXRpY2FsIGZvciBwcm9wZXJseSB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhpcyBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMDQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMDowMC45ODA4Mjk4MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwMDA1MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNiX29jcF93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTM1PXN0YXRpYyBpbmxpbmVcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNTM2OmludCB1c2Jfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzNy17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0zOTM3PXN0YXRpYyB2b2lkIHI4MTUzX3UxdTJlbihzdHJ1Y3QgcjgxNTIgKnRwLCBib29sIGVuYWJsZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTM5NDUtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6Mzk0NjpcXHR1c2Jfb2NwX3dyaXRlKHRwLCBVU0JfVE9MRVJBTkNFLCBCWVRFX0VOX1NJWF9CWVRFUywgc2l6ZW9mKHUxdTIpLCB1MXUyKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0zOTQ3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDA6MDEuMDI2ODQwOTA5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzY1OTI0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcnRsODE1MmAgRHJpdmVyJ3MgQXJjaGl0ZWN0dXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgcnRsODE1MmAgZHJpdmVyIGNvZGUuIEkgc2VlIGEgbG90IG9mIHVzZSBvZiBgc3RhdGljIGlubGluZWAsIHdoaWNoIGlzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQuIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGgsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyBob3cgYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIHRoZW1zZWx2ZXMgYXJlIGhhbmRsZWQsIHNpbmNlIHRob3NlIGFyZSBhbHNvIGBzdGF0aWNgLiBUaGF0IGxpbWl0cyBkaXJlY3QgZXh0ZXJuYWwgY2FsbHMuIEl0IHNlZW1zIGxpa2UgdGhlIGJlc3QgYXBwcm9hY2ggaXMgZ29pbmcgdG8gYmUgdG8gZmluZCBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZXNlLCBvciBwZXJoYXBzIGp1c3QgZ28gcmlnaHQgZm9yIHRoZSBkcml2ZXIncyBlbnRyeSBwb2ludHMuXG5cblRoZSBkcml2ZXIncyBlbnRyeSBwb2ludHMgYXJlIHRoZSBsaWtlbHkgY2FuZGlkYXRlcywgdGhpbmdzIGxpa2UgYHJ0bDgxNTJfcHJvYmVgLCBgcnRsODE1Ml9vcGVuYCwgYHJ0bDgxNTJfc3RhcnRfeG1pdGAsIGBydGw4MTUyX2lvY3RsYCwgYW5kIGBydGw4MTUyX3NldF9tYWNfYWRkcmVzc2AuIFRoZXNlIHNlZW0gbGlrZSB0aGUgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQgZGlnZ2luZy5cblxuSG93ZXZlciwgYSBxdWljayBzY2FuIHNob3dzIHRoYXQgYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIGFyZSBjYWxsZWQgZnJvbSAqbmVhcmx5KiBldmVyeXdoZXJlIHdpdGhpbiB0aGUgZHJpdmVyLiBTbywgSSBuZWVkIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0J3MgZm9jdXMgb24gYHJ0bDgxNTJfcHJvYmVgIGZvciBub3cuIEknbGwgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGVyZSB0aGF0IGxlYWRzLiBJdCdzIHRoZSBuYXR1cmFsIGZpcnN0IHN0ZXAgd2hlbiBhIGRldmljZSBpcyBpbml0aWFsaXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYzNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMDowNS44NjM0MzYxMTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTI1NjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bDgxNTJfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTAwODg9c3RhdGljIGJvb2wgcnRsODE1Ml9zdXBwb3J0c19sZW5vdm9fbWFjcGFzc3RocnUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDExMy1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxMDExNDpzdGF0aWMgaW50IHJ0bDgxNTJfcHJvYmVfb25jZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDExNS1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsIHU4IHZlcnNpb24pXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDMzMC1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxMDMzMTpzdGF0aWMgaW50IHJ0bDgxNTJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTAzMzItXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwMzQ4LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBSVEw4MTUyX1BST0JFX1RSSUVTOyBpKyspIHtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxMDM0OTpcXHRcXHRyZXQgPSBydGw4MTUyX3Byb2JlX29uY2UoaW50ZiwgaWQsIHZlcnNpb24pO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwMzUwLVxcdFxcdGlmIChyZXQgIT0gLUVBR0FJTilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTEwNDI3PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBydGw4MTUyX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwNDI5LVxcdC5pZF90YWJsZSA9XFx0cnRsODE1Ml90YWJsZSxcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxMDQzMDpcXHQucHJvYmUgPVxcdHJ0bDgxNTJfcHJvYmUsXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTA0MzEtXFx0LmRpc2Nvbm5lY3QgPVxcdHJ0bDgxNTJfZGlzY29ubmVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDA6MDUuOTExOTY2OTU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDQ1MTQ5NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBSVEw4MTUyIERyaXZlcioqXG5cbk9rYXksIGBydGw4MTUyX3Byb2JlYCBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uIEknbGwgbWFrZSBzdXJlIHRvIGtlZXAgbXkgZm9jdXMgdGhlcmUgYXMgSSBzdGFydCBhbmFseXppbmcgdGhpcyBjb2RlLiBOb3csIEknbSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgZXhhbWluZSBgcnRsODE1Ml9vcGVuYC4gTGV0J3Mgc2VlIGhvdyB0aGF0IHJvdXRpbmUgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGRyaXZlciBsaWZlY3ljbGU7IHRoaXMgcm91dGluZSBpcyBnb2luZyB0byBiZSB2aXRhbCBmb3IgaW5pdGlhbGl6YXRpb24uIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcmVzb3VyY2VzIGl0IGFjcXVpcmVzLCB0aGUgZGV2aWNlIHNldHRpbmdzIGl0IGVzdGFibGlzaGVzLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjcwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDA6MDguOTE2NDg0NTU3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDU1OTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydGw4MTUyX29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NzA3Nj1zdGF0aWMgaW50IHJ0bF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbixcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTcxMDEtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NzEwMjpzdGF0aWMgaW50IHJ0bDgxNTJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTcxMDMte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9OTY0Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bDgxNTJfbmV0ZGV2X29wcyA9IHtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo5NjQ0OlxcdC5uZG9fb3BlblxcdFxcdD0gcnRsODE1Ml9vcGVuLFxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTk2NDUtXFx0Lm5kb19zdG9wXFx0XFx0PSBydGw4MTUyX2Nsb3NlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMDowOC45NjcwNTAwOTZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1NjczNzQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFJUTDgxNTIgRHJpdmVyKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCB0aGUgUlRMODE1MiBkcml2ZXIuIEdvb2QsIGBydGw4MTUyX29wZW5gIGlzIGEgc29saWQgZnVuY3Rpb24gdG8gc3RhcnQgd2l0aCwgYnV0IGl0J3Mgbm90IHRoZSBjcml0aWNhbCBwaWVjZSByaWdodCBub3cuIE15IGZvY3VzIGlzIG9uIGRhdGEgdHJhbnNtaXNzaW9uLiBOb3csIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUgdHJhbnNtaXNzaW9uIHBhdGguIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGBydGw4MTUyX3N0YXJ0X3htaXRgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGhhcHBlbnMsIHRoZSBuaXR0eS1ncml0dHkgb2YgZ2V0dGluZyBwYWNrZXRzIG91dCB0aGUgZG9vci4gVGhhdCdzIHdoZXJlIGFueSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBhcmUgbGlrZWx5IHRvIGJlLiBUaW1lIHRvIGRpZyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMTMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMDoxMi4wMjM3OTEzNDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTc5MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bDgxNTJfc3RhcnRfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuYz0zMzU1PXJ0bDgxNTJfZmVhdHVyZXNfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTMzNzUtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MzM3NjpzdGF0aWMgbmV0ZGV2X3R4X3QgcnRsODE1Ml9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMzM3Ny1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9OTY0Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bDgxNTJfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTk2NDYtXFx0Lm5kb19ldGhfaW9jdGxcXHRcXHQ9IHJ0bDgxNTJfaW9jdGwsXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6OTY0NzpcXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IHJ0bDgxNTJfc3RhcnRfeG1pdCxcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05NjQ4LVxcdC5uZG9fdHhfdGltZW91dFxcdFxcdD0gcnRsODE1Ml90eF90aW1lb3V0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMDoxMi4wNzEzNzUzNzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwODUzOTc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFJUTDgxNTIgRHJpdmVyKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgUlRMODE1MiBkcml2ZXIgYWdhaW4uIEkndmUgYmVlbiB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSB0cmFuc21pdCBwYXRoLiBNeSBpbml0aWFsIGltcHJlc3Npb24gb2YgYHJ0bDgxNTJfc3RhcnRfeG1pdGAgaXMgdGhhdCBpdCBsb29rcyBwcmV0dHkgc29saWQ7IHRoZSBnZW5lcmFsIGFwcHJvYWNoIHNlZW1zIGxvZ2ljYWwgYW5kIGVmZmljaWVudC4gTm93LCBJJ20gc2hpZnRpbmcgbXkgZm9jdXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyB0aGUgZHJpdmVyIGlzIHdvcmtpbmcgc28gbXkgYXR0ZW50aW9uIGlzIHR1cm5pbmcgdG8gYHJ0bDgxNTJfaW9jdGxgLiBJIGtub3cgdGhhdCdzIHdoZXJlIGEgbG90IG9mIHRoZSBjb25maWd1cmF0aW9uIGFuZCBjb250cm9sIGhhcHBlbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9mIGhvdyB0aGF0IGludGVyYWN0aW9uIHdpbGwgd29yayBhbmQgaG93IGl0IHdpbGwgaW5mbHVlbmNlIGFuZCBhZmZlY3QgdGhlIHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBUaGlzIG5lZWRzIHNvbWUgc2VyaW91cyBpbnNwZWN0aW9uLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjUzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDA6MTYuNTc5OTE4MDM4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMyODUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydGw4MTUyX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTk1MjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05NTUwLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjk1NTE6c3RhdGljIGludCBydGw4MTUyX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtOTU1Mi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz05NjQzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsODE1Ml9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtOTY0NS1cXHQubmRvX3N0b3BcXHRcXHQ9IHJ0bDgxNTJfY2xvc2UsXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6OTY0NjpcXHQubmRvX2V0aF9pb2N0bFxcdFxcdD0gcnRsODE1Ml9pb2N0bCxcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05NjQ3LVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gcnRsODE1Ml9zdGFydF94bWl0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMDoxNi42MjkyNTE5NzdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA0MjMxMTI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzIGluIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCwgYW5kIHRoZXkgc2VlbSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLiBXZSdyZSB0YWxraW5nIGFib3V0IGxvb3AgaXRlcmF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IHdlIGhhbmRsZSByZWFkcy93cml0ZXMgd2hlbiB0aGUgcmVxdWVzdGVkIHNpemUgaXMgbGFyZ2VyIHRoYW4gc29tZSBsaW1pdC4gVGhlIG9sZCBjb2RlIGhhZCB0aGlzIG5lc3RlZCBgaWYvZWxzZWAgc3RydWN0dXJlIHdpdGhpbiB0aGUgYHdoaWxlYCBsb29wLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQuIFRoZSBuZXcgY29kZSwgaG93ZXZlciwgc2ltcGxpZmllcyB0aGluZ3MuIEl0IGV4cGxpY2l0bHkgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBgc2l6ZWAgaXMgZ3JlYXRlciB0aGFuIGBsaW1pdGAgaW4gdGhlIGB3aGlsZWAgbG9vcCwgYW5kIHRoZW4gb3V0c2lkZSB0aGUgbG9vcCwgaXQgYWx3YXlzIGNhbGxzIGBnZXRfcmVnaXN0ZXJzYCB3aXRoIHRoZSByZW1haW5pbmcgYHNpemVgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50LiBUaGUgbG9vcCBkb2VzIHRoZSBjaHVua2VkIG9wZXJhdGlvbnMuIFRoZSBrZXkgZGlmZmVyZW5jZSBJIHNwb3QgaXMgaW4gdGhlIGVkZ2UgY2FzZSB3aGVyZSBgc2l6ZWAgaXMgaW5pdGlhbGx5IHplcm8uIEluIHRoZSBvbGQgY29kZSwgaWYgYHNpemVgIHdhcyB6ZXJvIGF0IHRoZSBzdGFydCwgdGhlIGBnZXRfcmVnaXN0ZXJzYCBmdW5jdGlvbiB3b3VsZG4ndCBoYXZlIGJlZW4gY2FsbGVkIGF0IGFsbC4gVGhlIGVudGlyZSB3aGlsZSBsb29wIHdvdWxkbid0IGV4ZWN1dGUsIGFuZCBjb250cm9sIHdvdWxkIG1vdmUgb24uIEluIHRoZSBuZXcgY29kZSwgZXZlbiBpZiBgc2l6ZWAgaXMgemVybyBpbml0aWFsbHksIGBnZXRfcmVnaXN0ZXJzYCBnZXRzIGNhbGxlZCB3aXRoIGBzaXplID0gMGAuIEhtbSwgdGhhdCdzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBkaWZmZXJlbmNlLlxuXG5Ob3csIG15IG1pbmQgZ29lcyB0bywgXCJJcyBgc2l6ZSA9PSAwYCBhIHZhbGlkIHNjZW5hcmlvIGhlcmU/XCIgV2UgbmVlZCB0byBrbm93IGlmIHRoaXMgY29kZSBwYXRoIGlzICpldmVyKiByZWFjaGVkIHdpdGggYSB6ZXJvIHNpemUgcmVxdWVzdC4gSWYgaXQgaXMsIHRoZW4gdGhlIGJlaGF2aW9yIGNoYW5nZSBpcywgd2VsbCwgYSBjaGFuZ2UhIFdlIG5lZWQgdG8gZXhhbWluZSBgZ2V0X3JlZ2lzdGVyc2AgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGNhbGwsIHdpdGggYHNpemUgPSAwYCwgaXMgYSBoYXJtbGVzcyBuby1vcCwgYW4gZXJyb3IgY29uZGl0aW9uLCBvciBzb21ldGhpbmcgaW4gYmV0d2Vlbi4gTGV0J3Mgc2VlIHdoYXQgYGdldF9yZWdpc3RlcnNgIGFjdHVhbGx5ICpkb2VzKi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExOTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDA6MjMuNjcxNTY2NTU3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQ5MjMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfcmVnaXN0ZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTEzNjk9c3RhdGljXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTM3MDppbnQgZ2V0X3JlZ2lzdGVycyhzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTM3MS17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNDE4PXN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQzNC1cXHR3aGlsZSAoc2l6ZSBcXHUwMDNlIGxpbWl0KSB7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTQzNTpcXHRcXHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0MzYtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDQzLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE0NDQ6XFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0NDUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAwOjIzLjcyNDA2NDY1NloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODk2Mzg1MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgYGdldF9yZWdpc3RlcnNgIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBnZXRfcmVnaXN0ZXJzYCB3b3Jrcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGltcGxlbWVudGF0aW9uIGxvb2tzIGxpa2UuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGNvcmUgbG9naWMuIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgYXNzdW1wdGlvbnMsIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBvciBzb2Z0d2FyZSBjb21wb25lbnRzLiBJ4oCZbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHJlZ2lzdGVyIHR5cGVzLCBhbnkgZXJyb3IgaGFuZGxpbmcsIGFuZCBob3cgZWZmaWNpZW50IGl0IGlzIHdpdGggaXRzIG9wZXJhdGlvbnMuIFRoZSBnb2FsIGlzIHRvIGRldmVsb3AgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGZ1bmN0aW9uYWxpdHkgc28gdGhhdCBJIGNhbiBtb2RpZnkgb3IgZGVidWcgaXQgbGF0ZXIgb24sIGlmIG5lY2Vzc2FyeS4gTGV0J3MgdGFrZSBhIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzM0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDA6MjYuNjIwNDUyNjE4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzY5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzY5OlxcdHN0YXRpY1xcbjEzNzA6XFx0aW50IGdldF9yZWdpc3RlcnMoc3RydWN0IHI4MTUyICp0cCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbjEzNzE6XFx0e1xcbjEzNzI6XFx0XFx0aW50IHJldDtcXG4xMzczOlxcdFxcdHZvaWQgKnRtcDtcXG4xMzc0OlxcdFxcbjEzNzU6XFx0XFx0dG1wID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcXG4xMzc2OlxcdFxcdGlmICghdG1wKVxcbjEzNzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTM3ODpcXHRcXG4xMzc5OlxcdFxcdHJldCA9IHI4MTUyX2NvbnRyb2xfbXNnKHRwLCB0cC1cXHUwMDNlcGlwZV9jdHJsX2luLFxcbjEzODA6XFx0XFx0XFx0XFx0XFx0UlRMODE1Ml9SRVFfR0VUX1JFR1MsIFJUTDgxNTJfUkVRVF9SRUFELFxcbjEzODE6XFx0XFx0XFx0XFx0XFx0dmFsdWUsIGluZGV4LCB0bXAsIHNpemUsIFxcXCJyZWFkXFxcIik7XFxuMTM4MjpcXHRcXG4xMzgzOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjEzODQ6XFx0XFx0XFx0bWVtc2V0KGRhdGEsIDB4ZmYsIHNpemUpO1xcbjEzODU6XFx0XFx0ZWxzZVxcbjEzODY6XFx0XFx0XFx0bWVtY3B5KGRhdGEsIHRtcCwgc2l6ZSk7XFxuMTM4NzpcXHRcXG4xMzg4OlxcdFxcdGtmcmVlKHRtcCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAwOjI2LjYyMDczMzU4OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTIwMzQ0OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEJ1ZyBpbiB0aGUgcjgxNTIgRHJpdmVyKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nOiBJZiB0aGUgYHNpemVgIGlzIHplcm8sIGBrbWFsbG9jKDAsIEdGUF9LRVJORUwpYCByZXR1cm5zIGBaRVJPX1NJWkVfUFRSYC4gVGhpcyBpcyBzdGFuZGFyZCwgYnV0IHRoZSBjcnVjaWFsIHBhcnQgaXMgdGhhdCBgcjgxNTJfY29udHJvbF9tc2dgIGlzIHRoZW4gY2FsbGVkIHdpdGggdGhpcyBgc2l6ZSA9IDBgIGFuZCBgdG1wID0gWkVST19TSVpFX1BUUmAuIEhtbSwgdGhhdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBpdCAqY291bGQqIGRlZmluaXRlbHkgb3BlbiB0aGUgZG9vciB0byBzb21lIG5hc3R5IGJ1Z3MgaWYgYHNpemVgIGJlaW5nIHplcm8gaXNuJ3QgaGFuZGxlZCBjb3JyZWN0bHkgZG93biB0aGUgbGluZS4gSSd2ZSBzZWVuIHRoaW5ncyBsaWtlIHRoaXMgYmVmb3JlOyBpdCdzIHN1YnRsZSwgYnV0IGl0J3MgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSBjcmFzaGVzLiBQbHVzLCBJIG5vdGljZWQgdGhlIGxvb3AgbG9naWMgZ290IHNpbXBsaWZpZWQsIHNvIHRoZXJlIG1heSBiZSBvdGhlciBidWdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNoYW5nZS5cblxuVGhpcyB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZywgbm8gcXVlc3Rpb24uIEkgc2hvdWxkIGZvY3VzIG15IGVmZm9ydHMgb24gdGhlc2Ugc3ltYm9sczogYHJ0bDgxNTJfcHJvYmVgLCBgcnRsODE1Ml9vcGVuYCwgYHJ0bDgxNTJfc3RhcnRfeG1pdGAsIGFuZCBgcnRsODE1Ml9pb2N0bGAuIFRob3NlIHNlZW0gbGlrZSB0aGUgbGlrZWx5IHBsYWNlcyB3aGVyZSB0aGlzIHplcm8tc2l6ZSBzY2VuYXJpbyB3b3VsZCBtYW5pZmVzdC5cblxuUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIEknbGwgbmVlZCB0byBlbmFibGUgYSBmZXcga2VybmVsIG9wdGlvbnMgdG8gZ2V0IHRoaXMgZHJpdmVyIGNvbXBpbGVkIGluLiBPYnZpb3VzbHksIGBVU0JfUlRMODE1MmAgaXMgZXNzZW50aWFsLCBhbmQgYXMgYSBwcmVjYXV0aW9uIEknbGwgaGF2ZSBgVVNCX05FVF9EUklWRVJTYCBlbmFibGVkIHRvbywganVzdCBpbiBjYXNlLiBJJ2xsIG5lZWQgYE1JSWAsIGBQSFlMSUJgLCBgQ1JDMzJgLCBhbmQgYENSWVBUT19MSUJfU0hBMjU2YCBhcyB3ZWxsLCBidXQgaXQgbG9va3MgbGlrZSBgVVNCX1JUTDgxNTJgIHNlbGVjdHMgdGhvc2UgYXV0b21hdGljYWxseSwgc28gdGhhdCdzIGdvb2QuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlLWNoZWNrIGBVU0JfTkVUX0RSSVZFUlNgIGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUuIFl1cCwgaXQncyBhIG1lbnVjb25maWcsIHdoaWNoIG1lYW5zIGl0IGRvZXNuJ3QgZGlyZWN0bHkgZW5hYmxlIHRoZSBkcml2ZXIgaXRzZWxmIGJ1dCByYXRoZXIgcHJvdmlkZXMgYSBjYXRlZ29yeSBpbiBgbWVudWNvbmZpZ2AuIEdyZWF0LCBpdCBsb29rcyBsaWtlIGp1c3QgZW5hYmxpbmcgYFVTQl9SVEw4MTUyYCB3aWxsIGJlIHN1ZmZpY2llbnQgdG8gZ2V0IGV2ZXJ5dGhpbmcgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAwOjMzLjE0MTA4MTQ5NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4Nzc0MjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTU9Y29tbWVudCBcXFwiSG9zdC1zaWRlIFVTQiBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE5ldHdvcmsgQWRhcHRlciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNy1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo4Om1lbnVjb25maWcgVVNCX05FVF9EUklWRVJTXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctOS1cXHR0cmlzdGF0ZSBcXFwiVVNCIE5ldHdvcmsgQWRhcHRlcnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAwOjMzLjMzOTg2MTI5MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg5NTU0MDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gV29ya2Zsb3cqKlxuXG5Pa2F5LCBzbyBgVVNCX05FVF9EUklWRVJTYCBpcyBkZWZpbml0ZWx5IGEgbWVudWNvbmZpZyBvcHRpb24g4oCTIGEgY29uZmlndXJhdGlvbiBpdGVtIHRoYXQgbmVlZHMgdG8gYmUgZXhwbGljaXRseSBlbmFibGVkIGluIHRoZSBidWlsZCBzeXN0ZW0uIEdvdCBpdC4gU28sIEkgbmVlZCB0byBpbmNvcnBvcmF0ZSBib3RoIGBVU0JfTkVUX0RSSVZFUlNgIGFuZCB0aGUgc3BlY2lmaWMgYFVTQl9SVEw4MTUyYCBkcml2ZXIgaW50byBteSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgcmV2aWV3IHRob3NlIGNydWNpYWwgc3ltYm9scyByZWxhdGVkIHRvIHRoZSBSVEw4MTUyIGRyaXZlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBjcml0aWNhbCBlbnRyeSBwb2ludHMuIEkndmUgZ290IGBydGw4MTUyX3Byb2JlYCwgYHJ0bDgxNTJfb3BlbmAsIGBydGw4MTUyX3N0YXJ0X3htaXRgLCBhbmQgYHJ0bDgxNTJfaW9jdGxgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGNvcmUgZnVuY3Rpb25zLCBidXQgSSB3YW50IHRvIGJlIHRob3JvdWdoLiBBcmUgdGhlcmUgYW55IG90aGVyIGVxdWFsbHkgc2lnbmlmaWNhbnQgZW50cnkgcG9pbnRzIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nIHdpdGhpbiB0aGlzIGRyaXZlcj8gSSBuZWVkIHRvIGJlIGNlcnRhaW4gSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3OTYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDA6MzcuMDI5NDE4NDA0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODkzNDU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydGw4MTUyX25ldGRldl9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9OTU5NT1zdGF0aWMgaW50IHJ0bDgxNTJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTk2NDItXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6OTY0MzpzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bDgxNTJfbmV0ZGV2X29wcyA9IHtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05NjQ0LVxcdC5uZG9fb3BlblxcdFxcdD0gcnRsODE1Ml9vcGVuLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTAxMTQ9c3RhdGljIGludCBydGw4MTUyX3Byb2JlX29uY2Uoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDE3MS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxMDE3MjpcXHRuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2cnRsODE1Ml9uZXRkZXZfb3BzO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwMTczLVxcdG5ldGRldi1cXHUwMDNld2F0Y2hkb2dfdGltZW8gPSBSVEw4MTUyX1RYX1RJTUVPVVQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAwOjM3LjA3ODM2MzM4NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzM4MjM4MjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGBydGw4MTUyX25ldGRldl9vcHNgIHN0cnVjdHVyZS4gSSBrbm93IHRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBkcml2ZXIsIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgUmVhbHRlayA4MTUyIFVTQiBldGhlcm5ldCBhZGFwdGVyIGFuZCB0aGUgbmV0d29yayBzdGFjay4gSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aCBuZXRkZXZfb3BzIGluIGdlbmVyYWwsIG9mIGNvdXJzZSwgYnV0IEkgbmVlZCB0byBzZWUgKnRoaXMqIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBXaGF0IGRpZCB0aGV5IGNob29zZSB0byBkbyBoZXJlLCB3aGF0IHRyaWNrcyBkaWQgdGhleSB1c2U/IEknbSBsb29raW5nIGZvciB0aGUga2V5IGZ1bmN0aW9uczogYG5kb19vcGVuYCwgYG5kb19zdG9wYCwgYG5kb19zdGFydF94bWl0YCwgYG5kb19zZXRfbWFjX2FkZHJlc3NgLCB0aGUgd2hvbGUgc2hlYmFuZy4gVW5kZXJzdGFuZGluZyB0aGVzZSB3aWxsIGltbWVkaWF0ZWx5IHRlbGwgbWUgaG93IHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiwgdHJhbnNtaXNzaW9uLCByZWNlcHRpb24sIGFuZCBtYW5hZ2VtZW50IGFyZSBoYW5kbGVkLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5J3ZlIGhhbmRsZWQgdGhlIFVTQiBpbnRlcmFjdGlvbnMsIERNQSwgYnVmZmVyIG1hbmFnZW1lbnQsIGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoaXMgc3BlY2lmaWMgY2hpcC4gQXJlIHRoZXkgdXNpbmcgdGhlIHN0YW5kYXJkIFVTQiBkcml2ZXJzIGVmZmljaWVudGx5PyBBcmUgdGhlcmUgYW55IGN1c3RvbSBvcHRpbWl6YXRpb25zPyBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NjUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMDo0MS40MTY2MDQ1NTdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAxMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk2NDMsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjk2NDM6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGw4MTUyX25ldGRldl9vcHMgPSB7XFxuOTY0NDpcXHRcXHQubmRvX29wZW5cXHRcXHQ9IHJ0bDgxNTJfb3BlbixcXG45NjQ1OlxcdFxcdC5uZG9fc3RvcFxcdFxcdD0gcnRsODE1Ml9jbG9zZSxcXG45NjQ2OlxcdFxcdC5uZG9fZXRoX2lvY3RsXFx0XFx0PSBydGw4MTUyX2lvY3RsLFxcbjk2NDc6XFx0XFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBydGw4MTUyX3N0YXJ0X3htaXQsXFxuOTY0ODpcXHRcXHQubmRvX3R4X3RpbWVvdXRcXHRcXHQ9IHJ0bDgxNTJfdHhfdGltZW91dCxcXG45NjQ5OlxcdFxcdC5uZG9fc2V0X2ZlYXR1cmVzXFx0PSBydGw4MTUyX3NldF9mZWF0dXJlcyxcXG45NjUwOlxcdFxcdC5uZG9fc2V0X3J4X21vZGVcXHQ9IHJ0bDgxNTJfc2V0X3J4X21vZGUsXFxuOTY1MTpcXHRcXHQubmRvX3NldF9tYWNfYWRkcmVzc1xcdD0gcnRsODE1Ml9zZXRfbWFjX2FkZHJlc3MsXFxuOTY1MjpcXHRcXHQubmRvX2NoYW5nZV9tdHVcXHRcXHQ9IHJ0bDgxNTJfY2hhbmdlX210dSxcXG45NjUzOlxcdFxcdC5uZG9fdmFsaWRhdGVfYWRkclxcdD0gZXRoX3ZhbGlkYXRlX2FkZHIsXFxuOTY1NDpcXHRcXHQubmRvX2ZlYXR1cmVzX2NoZWNrXFx0PSBydGw4MTUyX2ZlYXR1cmVzX2NoZWNrLFxcbjk2NTU6XFx0fTtcXG45NjU2OlxcdFxcbjk2NTc6XFx0c3RhdGljIHZvaWQgcnRsODE1Ml91bmxvYWQoc3RydWN0IHI4MTUyICp0cClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDA6NDEuNDE2OTA4OTY4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTYwNDAzMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiByODE1MiBVU0IgTmV0d29yayBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgcjgxNTIgZHJpdmVyLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgdG91Y2hlcyBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGBydGw4MTUyX3Byb2JlYCwgYHJ0bDgxNTJfb3BlbmAsIGBydGw4MTUyX3N0YXJ0X3htaXRgLCBgcnRsODE1Ml9pb2N0bGAsIGBydGw4MTUyX3NldF9tYWNfYWRkcmVzc2AsIGFuZCBgcnRsODE1Ml9jaGFuZ2VfbXR1YC4gVGhlc2UgYWxsIHNlZW0gbGlrZSBsb2dpY2FsIGFkZGl0aW9ucyBmb3IgYSBwYXRjaCBvZiB0aGlzIHNjb3BlLCBnaXZlbiB0aGF0IGBydGw4MTUyX3NldF9mZWF0dXJlc2AsIGBydGw4MTUyX3NldF9yeF9tb2RlYCwgYHJ0bDgxNTJfc2V0X21hY19hZGRyZXNzYCwgYW5kIGBydGw4MTUyX2NoYW5nZV9tdHVgIGFyZSBhbHJlYWR5IGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzLlxuXG5Ib3dldmVyLCB0aGUgY29yZSBvZiB0aGUgbWF0dGVyIHNlZW1zIHRvIGJlIGluIHRoZSBtb2RpZmljYXRpb25zIHRvIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYC4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsOyB0aGV5J3JlIHVzZWQgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiwgY29uZmlndXJhdGlvbiwgYW5kIHRocm91Z2hvdXQgdGhlIGRldmljZSdzIG9wZXJhdGlvbmFsIGxpZmV0aW1lLiBUaGUgY2hhbmdlcyBzaW1wbGlmeSB0aGUgbG9vcCBsb2dpYyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnIGZvciBtZS4gQW55IGFsdGVyYXRpb24gdG8gY29yZSBsb3ctbGV2ZWwgb3BlcmF0aW9ucyBsaWtlIHRoZXNlLCBlc3BlY2lhbGx5IGludm9sdmluZyByZWdpc3RlciByZWFkcyBhbmQgd3JpdGVzLCB3YXJyYW50cyBjbG9zZSBzY3J1dGlueS5cblxuVGhlIHNpbXBsaWZpY2F0aW9uIGludm9sdmVzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgY2hhbmdlIGluIGJlaGF2aW9yLiBUaGUgb2xkIGNvZGUgd2FzIGhhbmRsaW5nIGNhc2VzIHdoZXJlIHRoZSBgc2l6ZWAgYXJndW1lbnQgd2FzIGEgbXVsdGlwbGUgb2YgYGxpbWl0YCBkaWZmZXJlbnRseS4gVGhlIGtleSBkaWZmZXJlbmNlIEknbSBzZWVpbmcgaXMgaG93IHRoZSBuZXcgY29kZSBoYW5kbGVzIHRoZSBzY2VuYXJpbyB3aGVyZSB0aGUgaW5pdGlhbCBgc2l6ZWAgaXMgemVyby4gSW4gdGhlIG9sZCBjb2RlLCBpZiBgc2l6ZWAgd2FzIGluaXRpYWxseSB6ZXJvLCB0aGUgbG9vcCB3b3VsZG4ndCBydW4uIFRoZSBuZXcgY29kZSwgaG93ZXZlciwgKmRvZXMqIGV4ZWN1dGUgdGhlIGBnZXRfcmVnaXN0ZXJzYCAob3IgYHNldF9yZWdpc3RlcnNgKSBmdW5jdGlvbiB3aXRoIGEgYHNpemVgIG9mIHplcm8gaW4gdGhpcyBjYXNlLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEEgY2xlYXIgYW5kIGRpcmVjdCBhbHRlcmF0aW9uIG9mIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgcmVnYXJkbGVzcyBvZiBob3cgbWlub3IgaXQgYXBwZWFycy4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgdmFyaWV0eSBvZiBpc3N1ZXMsIHN1Y2ggYXMgemVyby1zaXplIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5leHBlY3RlZCBiZWhhdmlvciBmcm9tIFVTQiBjb250cm9sIG1lc3NhZ2VzLCBvciBvdGhlciBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzLlxuXG5HaXZlbiB0aGlzLCBJJ20gY2FsbGluZyBpdDogV29ydGhGdXp6aW5nOiB0cnVlLiBUaGUgcmVhc29uIGlzIHRoZSBmdW5jdGlvbmFsIGNoYW5nZSBJJ3ZlIGlkZW50aWZpZWQgaW4gYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgLCBwYXJ0aWN1bGFybHkgdGhlIGhhbmRsaW5nIG9mIGEgemVybyBgc2l6ZWAgYXJndW1lbnQuIFRvIGJlIHByZWNpc2UsIEknbSB0YXJnZXRpbmcgdGhlIGZ1bmN0aW9ucyBJIHByZXZpb3VzbHkgaWRlbnRpZmllZCBmb3IgdGVzdGluZzogYHJ0bDgxNTJfcHJvYmVgLCBgcnRsODE1Ml9vcGVuYCwgYHJ0bDgxNTJfc3RhcnRfeG1pdGAsIGBydGw4MTUyX2lvY3RsYCwgYHJ0bDgxNTJfc2V0X21hY19hZGRyZXNzYCwgYW5kIGBydGw4MTUyX2NoYW5nZV9tdHVgLiBBbmQgb2YgY291cnNlLCB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgd291bGQgYmUgYFVTQl9ORVRfRFJJVkVSU2AgYW5kIGBVU0JfUlRMODE1MmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDk0LCJPdXRwdXRUb2tlbnMiOjE5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAwOjUyLjM3NzMxNTgxNloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MjM1NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIixcbiAgICBcIlVTQl9SVEw4MTUyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRsODE1Ml9wcm9iZVwiLFxuICAgIFwicnRsODE1Ml9vcGVuXCIsXG4gICAgXCJydGw4MTUyX3N0YXJ0X3htaXRcIixcbiAgICBcInJ0bDgxNTJfaW9jdGxcIixcbiAgICBcInJ0bDgxNTJfc2V0X21hY19hZGRyZXNzXCIsXG4gICAgXCJydGw4MTUyX2NoYW5nZV9tdHVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9vcCBsb2dpYyBpbiBnZW5lcmljX29jcF9yZWFkIGFuZCBnZW5lcmljX29jcF93cml0ZSBpbiB0aGUgcjgxNTIgVVNCIG5ldHdvcmsgZHJpdmVyLiBUaGUgcmVmYWN0b3JlZCBjb2RlIG5vdyBleGVjdXRlcyBnZXRfcmVnaXN0ZXJzL3NldF9yZWdpc3RlcnMgZXZlbiBpZiB0aGUgaW5pdGlhbCBzaXplIGlzIDAsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjb3VsZCB0cmlnZ2VyIGJ1Z3MgKGUuZy4sIHplcm8tc2l6ZSBhbGxvY2F0aW9ucyBvciBVU0IgY29udHJvbCBtZXNzYWdlcykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9EUklWRVJTXCIsXG4gICAgXCJVU0JfUlRMODE1MlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bDgxNTJfcHJvYmVcIixcbiAgICBcInJ0bDgxNTJfb3BlblwiLFxuICAgIFwicnRsODE1Ml9zdGFydF94bWl0XCIsXG4gICAgXCJydGw4MTUyX2lvY3RsXCIsXG4gICAgXCJydGw4MTUyX3NldF9tYWNfYWRkcmVzc1wiLFxuICAgIFwicnRsODE1Ml9jaGFuZ2VfbXR1XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvb3AgbG9naWMgaW4gZ2VuZXJpY19vY3BfcmVhZCBhbmQgZ2VuZXJpY19vY3Bfd3JpdGUgaW4gdGhlIHI4MTUyIFVTQiBuZXR3b3JrIGRyaXZlci4gVGhlIHJlZmFjdG9yZWQgY29kZSBub3cgZXhlY3V0ZXMgZ2V0X3JlZ2lzdGVycy9zZXRfcmVnaXN0ZXJzIGV2ZW4gaWYgdGhlIGluaXRpYWwgc2l6ZSBpcyAwLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY291bGQgdHJpZ2dlciBidWdzIChlLmcuLCB6ZXJvLXNpemUgYWxsb2NhdGlvbnMgb3IgVVNCIGNvbnRyb2wgbWVzc2FnZXMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMDo1Mi40NTY1NjYwMjVaIiwiU2VxIjozOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODY5NjgxOTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAwOjUyLjQ1NzEyNDYzNVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDg2OTYyNTYxODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2h1bmtpbmcgbG9vcHMgaW4gYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIGZvciB0aGUgcjgxNTIgZHJpdmVyLiBJbiBgZ2VuZXJpY19vY3Bfd3JpdGVgLCBpZiBgc2l6ZSA9PSA0YCBhbmQgYGJ5ZW4gIT0gQllURV9FTl9EV09SRGAsIGBzaXplYCBpcyBkZWNyZW1lbnRlZCBieSA0IHRvIDAuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYHdoaWxlIChzaXplKWAgYW5kIHNraXBwZWQgdGhlIGxvb3AsIHdoZXJlYXMgdGhlIG5ldyBjb2RlIHVzZXMgYHdoaWxlIChzaXplIFxcdTAwM2UgbGltaXQpYCBhbmQgdW5jb25kaXRpb25hbGx5IGNhbGxzIGBzZXRfcmVnaXN0ZXJzYCB3aXRoIHRoZSByZW1haW5pbmcgYHNpemVgICh3aGljaCBpcyAwKS4gVGhpcyByZXN1bHRzIGluIGEgMC1sZW5ndGggY29udHJvbCBtZXNzYWdlIGJlaW5nIHNlbnQgdG8gdGhlIFVTQiBkZXZpY2UuIEEgMC1sZW5ndGggd3JpdGUgYWxsb2NhdGVzIGEgYFpFUk9fU0laRV9QVFJgIHZpYSBga21lbWR1cChkYXRhLCAwLCBHRlBfS0VSTkVMKWAgYW5kIHBhc3NlcyBpdCB0byBgdXNiX2NvbnRyb2xfbXNnYCwgd2hpY2ggaGFuZGxlcyAwLWxlbmd0aCB0cmFuc2ZlcnMgc2FmZWx5IHdpdGhvdXQgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSW4gYGdlbmVyaWNfb2NwX3JlYWRgLCBgc2l6ZWAgaXMgdmFsaWRhdGVkIHRvIGJlIG5vbi16ZXJvIGFuZCBhIG11bHRpcGxlIG9mIDQgaW5pdGlhbGx5LCBhbmQgaXMgbmV2ZXIgZGVjcmVtZW50ZWQgYmVmb3JlIHRoZSBsb29wLiBUaHVzLCBgZ2V0X3JlZ2lzdGVyc2AgaXMgbmV2ZXIgY2FsbGVkIHdpdGggYHNpemUgPSAwYCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGNvcGllZCBvciBleHBvc2VkLiBTaW5jZSB0aGUgcGF0Y2ggb25seSBpbnRyb2R1Y2VzIGEgcG90ZW50aWFsIDAtbGVuZ3RoIFVTQiBjb250cm9sIG1lc3NhZ2UgYW5kIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gQW55IHBvdGVudGlhbCBjcmFzaGVzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZWU3OWQ2Mzk4ZWQ3Y2I5ZWQyM2Y1MWI1ZDY3ZmFhY2MyZWQwY2I2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMjA6NTk6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcjgxNTIuYyBiL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXG5pbmRleCBmNjE2ODY0MzMwMzFjLi5kZTk3MzhiZGNlODU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXG5AQCAtMTQzMSwyNyArMTQzMSwxOSBAQCBzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgc2l6ZSxcbiBcdGlmICgodTMyKWluZGV4ICsgKHUzMilzaXplIFx1MDAzZSAweGZmZmYpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHR3aGlsZSAoc2l6ZSkge1xuLVx0XHRpZiAoc2l6ZSBcdTAwM2UgbGltaXQpIHtcbi1cdFx0XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRicmVhaztcbi1cbi1cdFx0XHRpbmRleCArPSBsaW1pdDtcbi1cdFx0XHRkYXRhICs9IGxpbWl0O1xuLVx0XHRcdHNpemUgLT0gbGltaXQ7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRicmVhaztcbitcdHdoaWxlIChzaXplIFx1MDAzZSBsaW1pdCkge1xuK1x0XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyb3IxO1xuIFxuLVx0XHRcdGluZGV4ICs9IHNpemU7XG4tXHRcdFx0ZGF0YSArPSBzaXplO1xuLVx0XHRcdHNpemUgPSAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4rXHRcdGluZGV4ICs9IGxpbWl0O1xuK1x0XHRkYXRhICs9IGxpbWl0O1xuK1x0XHRzaXplIC09IGxpbWl0O1xuIFx0fVxuIFxuK1x0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xuK1xuK2Vycm9yMTpcbiBcdGlmIChyZXQgPT0gLUVOT0RFVilcbiBcdFx0cnRsX3NldF91bnBsdWcodHApO1xuIFxuQEAgLTE0OTgsMzEgKzE0OTAsMjQgQEAgc3RhdGljIGludCBnZW5lcmljX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sXG4gXHRcdGlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpXG4gXHRcdFx0c2l6ZSAtPSA0O1xuIFxuLVx0XHR3aGlsZSAoc2l6ZSkge1xuLVx0XHRcdGlmIChzaXplIFx1MDAzZSBsaW1pdCkge1xuLVx0XHRcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsXG4tXHRcdFx0XHRcdFx0ICAgIHR5cGUgfCBCWVRFX0VOX0RXT1JELFxuLVx0XHRcdFx0XHRcdCAgICBsaW1pdCwgZGF0YSk7XG4tXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdFx0XHRnb3RvIGVycm9yMTtcbi1cbi1cdFx0XHRcdGluZGV4ICs9IGxpbWl0O1xuLVx0XHRcdFx0ZGF0YSArPSBsaW1pdDtcbi1cdFx0XHRcdHNpemUgLT0gbGltaXQ7XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LFxuLVx0XHRcdFx0XHRcdCAgICB0eXBlIHwgQllURV9FTl9EV09SRCxcbi1cdFx0XHRcdFx0XHQgICAgc2l6ZSwgZGF0YSk7XG4tXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdFx0XHRnb3RvIGVycm9yMTtcbi1cbi1cdFx0XHRcdGluZGV4ICs9IHNpemU7XG4tXHRcdFx0XHRkYXRhICs9IHNpemU7XG4tXHRcdFx0XHRzaXplID0gMDtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbitcdFx0d2hpbGUgKHNpemUgXHUwMDNlIGxpbWl0KSB7XG4rXHRcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELFxuK1x0XHRcdFx0XHQgICAgbGltaXQsIGRhdGEpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycm9yMTtcbitcbitcdFx0XHRpbmRleCArPSBsaW1pdDtcbitcdFx0XHRkYXRhICs9IGxpbWl0O1xuK1x0XHRcdHNpemUgLT0gbGltaXQ7XG4gXHRcdH1cbiBcbitcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELCBzaXplLCBkYXRhKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycm9yMTtcbitcbitcdFx0aW5kZXggKz0gc2l6ZTtcbitcdFx0ZGF0YSArPSBzaXplO1xuK1xuIFx0XHQvKiBTZXQgdGhlIGxhc3QgRFdPUkQgKi9cbiBcdFx0aWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRClcbiBcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSB8IGJ5ZW4sIDQsIGRhdGEpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDA6NTIuNDU3MTI1NjY1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMTk2MTQxOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWdpc3RlciBSZWFkL1dyaXRlIFJlZmFjdG9yaW5nIGluIGByODE1Mi5jYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGByODE1Mi5jYCwgYW5kIGl0J3MgdG91Y2hpbmcgdGhlIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBmdW5jdGlvbnMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXkncmUgdHJ5aW5nIHRvIHJlZmFjdG9yIHRoZSB3YXkgdGhlIHJlZ2lzdGVyIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyBoYW5kbGUgZGF0YSBpbiBjaHVua3MuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYHdoaWxlYCBsb29wcyB0byBwcm9jZXNzIHRoZSBkYXRhIGluIHRoZXNlIGNodW5rcy5cblxuU3BlY2lmaWNhbGx5LCBpbiBgZ2VuZXJpY19vY3BfcmVhZGAsIEknbSBzZWVpbmcgYSBjaGFuZ2UgdG8gdGhpcyBjaHVuay1yZWFkaW5nIGxvb3AuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGB3aGlsZSAoc2l6ZSlgIGxvb3Agd2l0aCBhbiBgaWYvZWxzZWAgdGhhdCBtYW5hZ2VkIHRoZSBjaHVuayBzaXplLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgc2ltcGxpZmllZCBpdCwgbm93IHVzaW5nIGEgYHdoaWxlIChzaXplIFx1MDAzZSBsaW1pdClgIHN0cnVjdHVyZS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgXCJXYWl0LCB3aGF0IGlmIGBzaXplYCAqaXMqIHplcm8/XCIgVGhlIG9yaWdpbmFsIGNvZGUgd291bGRuJ3QgaGF2ZSBlbnRlcmVkIHRoZSBsb29wIGlmIGBzaXplYCB3YXMgMCBiZWNhdXNlIG9mIHRoZSBgd2hpbGUgKHNpemUpYCBjb25kaXRpb24uIE5vdywgd2l0aCB0aGUgbmV3IGB3aGlsZSAoc2l6ZSBcdTAwM2UgbGltaXQpYCBjb25kaXRpb24gYW5kIGFzc3VtaW5nIGBsaW1pdGAgaXMgcG9zaXRpdmUsIHRoZSBsb29wICp3b3VsZCogYmUgc2tpcHBlZCBpZiBgc2l6ZWAgaXMgMC4gSG93ZXZlciwgdGhlIGNvZGUgKmltbWVkaWF0ZWx5IGFmdGVyIHRoZSBsb29wKiBjYWxscyBgZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO2Agd2l0aCB0aGUgY3VycmVudCB2YWx1ZSBvZiBgc2l6ZWAsIHdoaWNoIGNvdWxkIGJlIDAuIFRoYXQncyBhIHBvdGVudGlhbCBhcmVhIG9mIGNvbmNlcm4uIElzIGBzaXplYCBldmVyIGFjdHVhbGx5IHplcm8gaW4gcHJhY3RpY2U/XG5cblRoZSBtYWluIHBvaW50IG9mIGNvbmNlcm4gaXMgdGhhdCBgZ2VuZXJpY19vY3BfcmVhZGAgaXMgdXNlZCB0byByZWFkIGRhdGEgZnJvbSB0aGUgZGV2aWNlIGludG8gYGRhdGFgLiBJZiBgZ2V0X3JlZ2lzdGVyc2AgaXMgY2FsbGVkIHdpdGggYSBgc2l6ZSA9IDBgLCB3aGF0IGhhcHBlbnM/IEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgYGdldF9yZWdpc3RlcnNgIGZ1bmN0aW9uIGl0c2VsZiB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYW5kIGRldGVybWluZSBpZiB0aGUgY29kZSBpcyBoYW5kbGluZyB0aGUgemVyby1zaXplZCByZWFkIGNvcnJlY3RseS4gVGhpcyByZWZhY3RvciBpcyB0cnlpbmcgdG8gYWRkcmVzcyBzb21ldGhpbmcgYnV0IHRoaXMgZWRnZSBjYXNlIGNvdWxkIGJlIGludHJvZHVjZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMDo1OS42NzY3NDMzODJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NDAwNTA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfcmVnaXN0ZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTEzNjk9c3RhdGljXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTM3MDppbnQgZ2V0X3JlZ2lzdGVycyhzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTM3MS17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNDE4PXN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQzNC1cXHR3aGlsZSAoc2l6ZSBcXHUwMDNlIGxpbWl0KSB7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTQzNTpcXHRcXHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0MzYtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDQzLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE0NDQ6XFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0NDUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAxOjAwLjAyMDc1NDg5N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzYzODk0ODg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgUmVnaXN0ZXIgUmV0cmlldmFsIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBnZXRfcmVnaXN0ZXJzYCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGhvdyBpdCdzIHN0cnVjdHVyZWQuIEknbSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFyZWFzIHdoZXJlIG9wdGltaXphdGlvbnMgbWlnaHQgYmUgcG9zc2libGUsIGFuZCwgY3JpdGljYWxseSwgYW55IGFyZWFzIHRoYXQgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIGJ1Z3MuIEknbSBleHBlY3RpbmcgYSBjbGVhbiwgZWZmaWNpZW50IGFwcHJvYWNoLCBnaXZlbiB0aGUgbGlrZWx5IHBlcmZvcm1hbmNlIGRlbWFuZHMgb2YgcmVnaXN0ZXIgYWNjZXNzLCBidXQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW46IHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB0byBzdG9yZSB0aGUgcmVnaXN0ZXIgdmFsdWVzIChhcmUgdGhleSBhcHByb3ByaWF0ZSBmb3IgdGhlIHNjYWxlPyksIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgZW1wbG95ZWQgKGlmIGFueSwgYW5kIGFyZSB0aGV5IHN1ZmZpY2llbnQgZm9yIHRoZSBleHBlY3RlZCBjb25jdXJyZW5jeT8pLCBhbmQgYW55IGV4dGVybmFsIGRlcGVuZGVuY2llcy4gSSdtIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCB0cnlpbmcgdG8gYW50aWNpcGF0ZSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBhbnkgY2FjaGluZyBvciBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVnaWVzIHRoYXQgbWlnaHQgYmUgaW4gcGxhY2UgZWxzZXdoZXJlIGluIHRoZSBzeXN0ZW0uIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk0NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAxOjAzLjM4NDY1Mjk5NFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM2OSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM2OTpcXHRzdGF0aWNcXG4xMzcwOlxcdGludCBnZXRfcmVnaXN0ZXJzKHN0cnVjdCByODE1MiAqdHAsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCB1MTYgc2l6ZSwgdm9pZCAqZGF0YSlcXG4xMzcxOlxcdHtcXG4xMzcyOlxcdFxcdGludCByZXQ7XFxuMTM3MzpcXHRcXHR2b2lkICp0bXA7XFxuMTM3NDpcXHRcXG4xMzc1OlxcdFxcdHRtcCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuMTM3NjpcXHRcXHRpZiAoIXRtcClcXG4xMzc3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjEzNzg6XFx0XFxuMTM3OTpcXHRcXHRyZXQgPSByODE1Ml9jb250cm9sX21zZyh0cCwgdHAtXFx1MDAzZXBpcGVfY3RybF9pbixcXG4xMzgwOlxcdFxcdFxcdFxcdFxcdFJUTDgxNTJfUkVRX0dFVF9SRUdTLCBSVEw4MTUyX1JFUVRfUkVBRCxcXG4xMzgxOlxcdFxcdFxcdFxcdFxcdHZhbHVlLCBpbmRleCwgdG1wLCBzaXplLCBcXFwicmVhZFxcXCIpO1xcbjEzODI6XFx0XFxuMTM4MzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMzg0OlxcdFxcdFxcdG1lbXNldChkYXRhLCAweGZmLCBzaXplKTtcXG4xMzg1OlxcdFxcdGVsc2VcXG4xMzg2OlxcdFxcdFxcdG1lbWNweShkYXRhLCB0bXAsIHNpemUpO1xcbjEzODc6XFx0XFxuMTM4ODpcXHRcXHRrZnJlZSh0bXApO1xcbjEzODk6XFx0XFxuMTM5MDpcXHRcXHRyZXR1cm4gcmV0O1xcbjEzOTE6XFx0fVxcbjEzOTI6XFx0XFxuMTM5MzpcXHRzdGF0aWNcXG4xMzk0OlxcdGludCBzZXRfcmVnaXN0ZXJzKHN0cnVjdCByODE1MiAqdHAsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCB1MTYgc2l6ZSwgdm9pZCAqZGF0YSlcXG4xMzk1OlxcdHtcXG4xMzk2OlxcdFxcdGludCByZXQ7XFxuMTM5NzpcXHRcXHR2b2lkICp0bXA7XFxuMTM5ODpcXHRcXG4xMzk5OlxcdFxcdHRtcCA9IGttZW1kdXAoZGF0YSwgc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuMTQwMDpcXHRcXHRpZiAoIXRtcClcXG4xNDAxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE0MDI6XFx0XFxuMTQwMzpcXHRcXHRyZXQgPSByODE1Ml9jb250cm9sX21zZyh0cCwgdHAtXFx1MDAzZXBpcGVfY3RybF9vdXQsXFxuMTQwNDpcXHRcXHRcXHRcXHRcXHRSVEw4MTUyX1JFUV9TRVRfUkVHUywgUlRMODE1Ml9SRVFUX1dSSVRFLFxcbjE0MDU6XFx0XFx0XFx0XFx0XFx0dmFsdWUsIGluZGV4LCB0bXAsIHNpemUsIFxcXCJ3cml0ZVxcXCIpO1xcbjE0MDY6XFx0XFxuMTQwNzpcXHRcXHRrZnJlZSh0bXApO1xcbjE0MDg6XFx0XFxuMTQwOTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE0MTA6XFx0fVxcbjE0MTE6XFx0XFxuMTQxMjpcXHRzdGF0aWMgdm9pZCBydGxfc2V0X3VucGx1ZyhzdHJ1Y3QgcjgxNTIgKnRwKVxcbjE0MTM6XFx0e1xcbjE0MTQ6XFx0XFx0aWYgKHRwLVxcdTAwM2V1ZGV2LVxcdTAwM2VzdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpXFxuMTQxNTpcXHRcXHRcXHRydGxfc2V0X2luYWNjZXNzaWJsZSh0cCk7XFxuMTQxNjpcXHR9XFxuMTQxNzpcXHRcXG4xNDE4OlxcdHN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMTowMy4zODUxNzAwNDRaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU4ODk2MzAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFplcm8tU2l6ZSBUcmFuc2ZlcnMgaW4gcjgxNTIgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHI4MTUyIGRyaXZlciBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgaXQgaGFuZGxlcyB6ZXJvLXNpemUgdHJhbnNmZXJzLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGhlcmUgaXMsIGlmIHRoZSBgc2l6ZWAgcGFzc2VkIHRvIGBrbWFsbG9jYCBpcyAwLCB3ZSBnZXQgYFpFUk9fU0laRV9QVFJgLiBObyBiaWcgZGVhbCwgcmlnaHQ/IEJ1dCB0aGVuIGByODE1Ml9jb250cm9sX21zZ2AgZ2V0cyBjYWxsZWQgd2l0aCBhIGBzaXplYCBvZiAwLiBgbWVtY3B5YCBvZiBzaXplIHplcm8gaXMgYSBuby1vcCwgd2hpY2ggc2hvdWxkbid0IGJlIGEgYmlnIGRlYWwgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuXG5cbkJ1dCBJJ20gd29uZGVyaW5nLCBpcyBgZ2VuZXJpY19vY3BfcmVhZGAgZXZlciBjYWxsZWQgd2l0aCBhIHplcm8gc2l6ZT8gVGhhdCBuZWVkcyBjaGVja2luZy4gT2theSwgbGV0J3MgbG9vayBhdCBgZ2VuZXJpY19vY3Bfd3JpdGVgIGluc3RlYWQuIEkgc2VlIGl0IHVzZXMgYSBgd2hpbGUgKHNpemUgXHUwMDNlIGxpbWl0KWAgbG9vcC4gSWYgYHNpemVgIGlzIHplcm8gd2hlbiB0aGUgbG9vcCBzdGFydHMsIHdlIGdvIHJpZ2h0IHBhc3QgaXQuIEV2ZW50dWFsbHksIGBzZXRfcmVnaXN0ZXJzYCBpcyBjYWxsZWQuIEl0IGxvb2tzIGxpa2UgaXQgY291bGQgYmUgY2FsbGVkIHdpdGggc2l6ZSAwLCBkZXBlbmRpbmcgb24gdGhlIG90aGVyIGNvbmRpdGlvbnMuXG5cbkhhbmcgb24sIHRoZXJlJ3MgYSBtb2RpZmljYXRpb24gdG8gYHNpemVgICpiZWZvcmUqIHRoZSBsb29wOiBgaWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRCkgc2l6ZSAtPSA0O2AuIFNvLCBpZiBgc2l6ZWAgc3RhcnRzIGF0IDQsIGFuZCBgYnllbmAgaXMgbm90IGVxdWFsIHRvIGBCWVRFX0VOX0RXT1JEYCwgYHNpemVgIGJlY29tZXMgemVybyBiZWZvcmUgdGhlIGxvb3AgaXMgZXZlbiBlbnRlcmVkLiBBbmQgdGhhdCB3aG9sZSBgd2hpbGUgKHNpemUpYCBsb29wIGlzIHNraXBwZWQuIEludGVyZXN0aW5nLiBTbywgYHNldF9yZWdpc3RlcnNgIHdpbGwgYmUgY2FsbGVkIHdpdGggYHNpemUgPSAwYC5cblxuTm93LCBkb2VzIHRoYXQgcG9zZSBhIHByb2JsZW0/IExldCdzIGNoZWNrIHdoYXQgYHNldF9yZWdpc3RlcnNgIGRvZXMgd2l0aCBgc2l6ZSA9IDBgLiBJdCBjYWxscyBga21lbWR1cChkYXRhLCAwLCBHRlBfS0VSTkVMKWAsIHdoaWNoIGFsc28gcmV0dXJucyBgWkVST19TSVpFX1BUUmAuIEFuZCBgcjgxNTJfY29udHJvbF9tc2dgIGlzIHN0aWxsIGJlaW5nIGNhbGxlZCB3aXRoIHNpemUgemVyby4gV2hpY2ggbWFrZXMgbWUgbmVydm91cyBiZWNhdXNlIGByODE1Ml9jb250cm9sX21zZ2AgaXMgYSB3cmFwcGVyIGFyb3VuZCBgdXNiX2NvbnRyb2xfbXNnYC4gSSdtIHVuc3VyZSBpZiBgdXNiX2NvbnRyb2xfbXNnYCBoYW5kbGVzIGBaRVJPX1NJWkVfUFRSYC4gVGhhdCBjb3VsZCBiZSBhIHByb2JsZW0sIGRlcGVuZGluZyBvbiB3aGF0IGByODE1Ml9jb250cm9sX21zZ2AgZG9lcyBzcGVjaWZpY2FsbHkuIEkgc2hvdWxkIHZlcmlmeS4gSSBuZWVkIHRvIGNoZWNrIGByODE1Ml9jb250cm9sX21zZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MjcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMToxMS45NzQxMzY1ODNaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzkwOTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInI4MTUyX2NvbnRyb2xfbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTEyOTc9c3RhdGljXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTI5ODppbnQgcjgxNTJfY29udHJvbF9tc2coc3RydWN0IHI4MTUyICp0cCwgdW5zaWduZWQgaW50IHBpcGUsIF9fdTggcmVxdWVzdCxcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMjk5LVxcdFxcdCAgICAgIF9fdTggcmVxdWVzdHR5cGUsIF9fdTE2IHZhbHVlLCBfX3UxNiBpbmRleCwgdm9pZCAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTEzNzA9aW50IGdldF9yZWdpc3RlcnMoc3RydWN0IHI4MTUyICp0cCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTM3OC1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxMzc5OlxcdHJldCA9IHI4MTUyX2NvbnRyb2xfbXNnKHRwLCB0cC1cXHUwMDNlcGlwZV9jdHJsX2luLFxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEzODAtXFx0XFx0XFx0XFx0UlRMODE1Ml9SRVFfR0VUX1JFR1MsIFJUTDgxNTJfUkVRVF9SRUFELFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTM5ND1pbnQgc2V0X3JlZ2lzdGVycyhzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDAyLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE0MDM6XFx0cmV0ID0gcjgxNTJfY29udHJvbF9tc2codHAsIHRwLVxcdTAwM2VwaXBlX2N0cmxfb3V0LFxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0MDQtXFx0XFx0XFx0XFx0UlRMODE1Ml9SRVFfU0VUX1JFR1MsIFJUTDgxNTJfUkVRVF9XUklURSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTk5ODA9c3RhdGljIHU4IF9fcnRsX2dldF9od192ZXIoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05OTkzLVxcdCAqIHNpbmNlIHJldHJ5aW5nIGEgcmVhZCBvZiB0aGUgdmVyc2lvbiBpcyBhbHdheXMgc2FmZSBhbmQgdGhpc1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjk5OTQ6XFx0ICogZnVuY3Rpb24gZG9lc24ndCB0YWtlIGFkdmFudGFnZSBvZiByODE1Ml9jb250cm9sX21zZygpLlxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTk5OTUtXFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAxOjEyLjAyODUzMzI1MloiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjEyNjIyMDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBgcjgxNTJfY29udHJvbF9tc2dgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHI4MTUyX2NvbnRyb2xfbXNnYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNvbnRleHR1YWxpemUgaXQuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIHRoZSBSZWFsdGVrIHI4MTUyIGRyaXZlciwgc28gbmV0d29ya2luZyBhbmQgc3BlY2lmaWNhbGx5IEV0aGVybmV0IGNvbnRyb2wgbWVzc2FnZXMgYXJlIHRoZSBuYW1lIG9mIHRoZSBnYW1lLiBJ4oCZbSBhbHJlYWR5IG1lbnRhbGx5IHNldHRpbmcgZXhwZWN0YXRpb25zIGZvciB3aGF0IEnigJlsbCBiZSBsb29raW5nIGF0OiByZWdpc3RlciBhY2Nlc3NlcywgcG9zc2libHkgRE1BIHNldHVwcywgYW5kIGxpa2VseSBzb21lIHNvcnQgb2YgbWVzc2FnZSBmcmFtaW5nIG9yIGRlc2NyaXB0b3IgcHJvY2Vzc2luZy4gR2l2ZW4gaXQncyBhIFwiY29udHJvbFwiIG1lc3NhZ2UsIGl0J3MgcHJvYmFibHkgKm5vdCogaGFuZGxpbmcgdGhlIGRhdGEgcGF0aCBkaXJlY3RseSwgYnV0IHJhdGhlciB0aGluZ3MgbGlrZSBsaW5rIHN0YXR1cywgTUFDIGFkZHJlc3MgY29uZmlndXJhdGlvbiwgcG93ZXIgbWFuYWdlbWVudCwgb3IgcG9zc2libHkgZmxvdyBjb250cm9sIHNldHRpbmdzLiBJIHNob3VsZCBleHBlY3QgdG8gZmluZCBzb21lIGNyaXRpY2FsIHNlY3Rpb25zIG9yIGxvY2tpbmcgaW52b2x2ZWQsIHBhcnRpY3VsYXJseSBpZiBpdCdzIG9wZXJhdGluZyBvbiBzaGFyZWQgaGFyZHdhcmUgcmVzb3VyY2VzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBMZXQncyBzZWUgd2hhdCdzIGluIHN0b3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjYzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDE6MTUuNjQxMTU4OTE1WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwODI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjk3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjk3OlxcdHN0YXRpY1xcbjEyOTg6XFx0aW50IHI4MTUyX2NvbnRyb2xfbXNnKHN0cnVjdCByODE1MiAqdHAsIHVuc2lnbmVkIGludCBwaXBlLCBfX3U4IHJlcXVlc3QsXFxuMTI5OTpcXHRcXHRcXHQgICAgICBfX3U4IHJlcXVlc3R0eXBlLCBfX3UxNiB2YWx1ZSwgX191MTYgaW5kZXgsIHZvaWQgKmRhdGEsXFxuMTMwMDpcXHRcXHRcXHQgICAgICBfX3UxNiBzaXplLCBjb25zdCBjaGFyICptc2dfdGFnKVxcbjEzMDE6XFx0e1xcbjEzMDI6XFx0XFx0c3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSB0cC1cXHUwMDNldWRldjtcXG4xMzAzOlxcdFxcdGludCByZXQ7XFxuMTMwNDpcXHRcXG4xMzA1OlxcdFxcdGlmICh0ZXN0X2JpdChSVEw4MTUyX0lOQUNDRVNTSUJMRSwgXFx1MDAyNnRwLVxcdTAwM2VmbGFncykpXFxuMTMwNjpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4xMzA3OlxcdFxcbjEzMDg6XFx0XFx0cmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHBpcGUsIHJlcXVlc3QsIHJlcXVlc3R0eXBlLFxcbjEzMDk6XFx0XFx0XFx0XFx0ICAgICAgdmFsdWUsIGluZGV4LCBkYXRhLCBzaXplLFxcbjEzMTA6XFx0XFx0XFx0XFx0ICAgICAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpO1xcbjEzMTE6XFx0XFxuMTMxMjpcXHRcXHQvKiBObyBuZWVkIHRvIGlzc3VlIGEgcmVzZXQgdG8gcmVwb3J0IGFuIGVycm9yIGlmIHRoZSBVU0IgZGV2aWNlIGdvdFxcbjEzMTM6XFx0XFx0ICogdW5wbHVnZ2VkOyBqdXN0IHJldHVybiBpbW1lZGlhdGVseS5cXG4xMzE0OlxcdFxcdCAqL1xcbjEzMTU6XFx0XFx0aWYgKHJldCA9PSAtRU5PREVWKVxcbjEzMTY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMzE3OlxcdFxcbjEzMTg6XFx0XFx0LyogSWYgdGhlIHdyaXRlIHdhcyBzdWNjZXNzZnVsIHRoZW4gd2UncmUgZG9uZSAqL1xcbjEzMTk6XFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwKSB7XFxuMTMyMDpcXHRcXHRcXHR0cC1cXHUwMDNlcmVnX2FjY2Vzc19yZXNldF9jb3VudCA9IDA7XFxuMTMyMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzMjI6XFx0XFx0fVxcbjEzMjM6XFx0XFxuMTMyNDpcXHRcXHRkZXZfZXJyKFxcdTAwMjZ1ZGV2LVxcdTAwM2VkZXYsXFxuMTMyNTpcXHRcXHRcXHRcXFwiRmFpbGVkIHRvICVzICVkIGJ5dGVzIGF0ICUjMDZ4LyUjMDZ4ICglZClcXFxcblxcXCIsXFxuMTMyNjpcXHRcXHRcXHRtc2dfdGFnLCBzaXplLCB2YWx1ZSwgaW5kZXgsIHJldCk7XFxuMTMyNzpcXHRcXG4xMzI4OlxcdFxcdC8qIEJsb2NrIGFsbCBmdXR1cmUgcmVnaXN0ZXIgYWNjZXNzIHVudGlsIHdlIHJlc2V0LiBNdWNoIG9mIHRoZSBjb2RlXFxuMTMyOTpcXHRcXHQgKiBpbiB0aGUgZHJpdmVyIGRvZXNuJ3QgY2hlY2sgZm9yIGVycm9ycy4gTm90YWJseSwgbWFueSBwYXJ0cyBvZiB0aGVcXG4xMzMwOlxcdFxcdCAqIGRyaXZlciBkbyBhIHJlYWQvbW9kaWZ5L3dyaXRlIG9mIGEgcmVnaXN0ZXIgdmFsdWUgd2l0aG91dFxcbjEzMzE6XFx0XFx0ICogY29uZmlybWluZyB0aGF0IHRoZSByZWFkIHN1Y2NlZWRlZC4gV3JpdGluZyBiYWNrIG1vZGlmaWVkIGdhcmJhZ2VcXG4xMzMyOlxcdFxcdCAqIGxpa2UgdGhpcyBjYW4gZnVsbHkgd2VkZ2UgdGhlIGFkYXB0ZXIsIHJlcXVpcmluZyBhIHBvd2VyIGN5Y2xlLlxcbjEzMzM6XFx0XFx0ICovXFxuMTMzNDpcXHRcXHRydGxfc2V0X2luYWNjZXNzaWJsZSh0cCk7XFxuMTMzNTpcXHRcXG4xMzM2OlxcdFxcdC8qIElmIHByb2JlIGhhc24ndCB5ZXQgZmluaXNoZWQsIHRoZW4gd2UnbGwgcmVxdWVzdCBhIHJldHJ5IG9mIHRoZVxcbjEzMzc6XFx0XFx0ICogd2hvbGUgcHJvYmUgcm91dGluZSBpZiB3ZSBnZXQgYW55IGNvbnRyb2wgdHJhbnNmZXIgZXJyb3JzLiBXZVxcbjEzMzg6XFx0XFx0ICogbmV2ZXIgaGF2ZSB0byBjbGVhciB0aGlzIGJpdCBzaW5jZSB3ZSBmcmVlL3JlYWxsb2NhdGUgdGhlIHdob2xlIFxcXCJ0cFxcXCJcXG4xMzM5OlxcdFxcdCAqIHN0cnVjdHVyZSBpZiB3ZSByZXRyeSBwcm9iZS5cXG4xMzQwOlxcdFxcdCAqL1xcbjEzNDE6XFx0XFx0aWYgKCF0ZXN0X2JpdChQUk9CRURfV0lUSF9OT19FUlJPUlMsIFxcdTAwMjZ0cC1cXHUwMDNlZmxhZ3MpKSB7XFxuMTM0MjpcXHRcXHRcXHRzZXRfYml0KFBST0JFX1NIT1VMRF9SRVRSWSwgXFx1MDAyNnRwLVxcdTAwM2VmbGFncyk7XFxuMTM0MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzNDQ6XFx0XFx0fVxcbjEzNDU6XFx0XFxuMTM0NjpcXHRcXHQvKiBGYWlsaW5nIHRvIGFjY2VzcyByZWdpc3RlcnMgaW4gcHJlLXJlc2V0IGlzIG5vdCBzdXJwcmlzaW5nIHNpbmNlIHdlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAxOjE1LjY0MTQ3MzM0NVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTY0ODQ4ODg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdXNiX2NvbnRyb2xfbXNnIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgYSB6ZXJvLXNpemVkIHRyYW5zZmVyLiBUaGUgaW5pdGlhbCB0aG91Z2h0IHdhcywgXCJpZiBgc2l6ZWAgaXMgMCwgdGhlbiBgdXNiX2NvbnRyb2xfbXNnYCBpcyBnb2luZyB0byBiZSBjYWxsZWQgd2l0aCBgc2l6ZSA9IDBgIGFuZCBgZGF0YSA9IFpFUk9fU0laRV9QVFJgLiBXYWl0LCBpcyB0aGF0IHNhZmU/IENvdWxkIGB1c2JfY29udHJvbF9tc2dgIGNyYXNoIG9yIHJldHVybiBhbiBlcnJvciBpZiBpdCBnZXRzIGBaRVJPX1NJWkVfUFRSYCBhcyB0aGUgZGF0YSBwb2ludGVyIHdoZW4gdGhlIHNpemUgaXMgemVybz8gT3IsIGlmIGBzaXplYCBpcyB6ZXJvLCBtYXliZSBgdXNiX2NvbnRyb2xfbXNnYCBpcyBqdXN0IG1lYW50IHRvIHNlbmQgYSB6ZXJvLWxlbmd0aCBjb250cm9sIG1lc3NhZ2U/XCJcblxuQW5kIHRoZW4gSSBzYXcgdGhhdCBgWkVST19TSVpFX1BUUmAgaXMgYWN0dWFsbHkgYCh2b2lkICopMTZgLiBUaGF0J3Mgbm90IHRoZSBzYW1lIGFzIGBOVUxMYCEgU28gaXMgYHVzYl9jb250cm9sX21zZ2Agc2FmZSB3aXRoIHRoaXMgY29uc3RydWN0P1xuXG5UaGUgbmV4dCB0aGluZyBJIGNvbnNpZGVyZWQgd2FzIHRoZSBpbnRlcm5hbCBoYW5kbGluZzogSSB3YXMgdGhpbmtpbmcsIFwiSWYgYHNpemVgIGlzIDAsIHRoZW4gYHVzYl9jb250cm9sX21zZ2AgaXMgcGFzc2luZyBpdCB0byBzb21ldGhpbmcgbGlrZSBgdXNiX2NvbnRyb2xfbXNnX3NlbmRgLCB3aGljaCBhbGxvY2F0ZXMgYSBVUkIgdG8gaGFuZGxlIHRoZSB0cmFuc21pc3Npb24uXCIgQnV0IHRoZW4gSSByZW1lbWJlcmVkIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSB0aG91Z2h0IEkga25ldyB0aGUgY29kZSwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBJICp0aG91Z2h0KiB0aGF0IHRoZSBjb2RlIGRpZCBzb21ldGhpbmcgbGlrZTpcblxuYGBgY1xuXHRpZiAoc2l6ZSA9PSAwKVxuXHRcdGRhdGEgPSBOVUxMO1xuYGBgXG5cbkJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBXYWl0LCB0aGF0J3Mgbm90IHJpZ2h0LCBiZWNhdXNlIEkgcmVtZW1iZXIgdGhhdCAqYHVzYl9jb250cm9sX21zZ2AgZG9lcyBub3QgY2hlY2sgZm9yIGBaRVJPX1NJWkVfUFRSYCohXG5cbk5vdywgaG9sZCBvbi4gV2FpdCwgaXQncyBzdGFydGluZyB0byBjb21lIGJhY2sgdG8gbWUuIE5vdyBJIHJlbWVtYmVyLiBJdCBkb2VzIHNvbWV0aGluZyBsaWtlIHRoaXM6XG5cbmBgYGNcblx0aWYgKHNpemUpIHtcblx0XHR0YnVmID0ga21lbWR1cChkYXRhLCBzaXplLCBHRlBfTk9JTyk7XG5cdFx0aWYgKCF0YnVmKVxuXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5cdH1cbmBgYFxuXG5TbywgaXQgKmRvZXNuJ3QqIGFjdHVhbGx5IHVzZSB0aGUgYGRhdGFgIHBvaW50ZXIgaWYgYHNpemVgIGlzIHplcm8uIEl0J3MgYWN0dWFsbHkgY29weWluZyB0aGUgZGF0YSB0byBhIG5ldyBidWZmZXIgaWYgc2l6ZSBpcyBub3QgemVybywgb3RoZXJ3aXNlLCBub3RoaW5nIGhhcHBlbnMgd2l0aCBkYXRhLlxuXG5Pa2F5LCBJIHRoaW5rIEkgaGF2ZSBpdCBub3cuIEJ1dCwgSSBzaG91bGQgY2hlY2sgdGhpcy4gVG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLCBJJ2xsIGdvIGxvb2sgYXQgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBmb3IgYHVzYl9jb250cm9sX21zZ2AgaW4gYGRyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jYCB0byBiZSBzdXJlLiBJdCdzIGJlc3QgdG8gdmVyaWZ5IGFzc3VtcHRpb25zIHdpdGggdGhlIHNvdXJjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc2OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAxOjIyLjYwNjMyNjIyOVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyNDM2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHVzYl9jb250cm9sX21zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYz0xMDE9c3RhdGljIGludCB1c2JfaW50ZXJuYWxfY29udHJvbF9tc2coc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYy0xNDktICovXFxuZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmM6MTUwOmludCB1c2JfY29udHJvbF9tc2coc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUsIF9fdTggcmVxdWVzdCxcXG5kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYy0xNTEtXFx0XFx0ICAgIF9fdTggcmVxdWVzdHR5cGUsIF9fdTE2IHZhbHVlLCBfX3UxNiBpbmRleCwgdm9pZCAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jPTE3Nz1FWFBPUlRfU1lNQk9MX0dQTCh1c2JfY29udHJvbF9tc2cpO1xcbi0tXFxuZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMtMjEwLSAqL1xcbmRyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jOjIxMTppbnQgdXNiX2NvbnRyb2xfbXNnX3NlbmQoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgX191OCBlbmRwb2ludCwgX191OCByZXF1ZXN0LFxcbmRyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jLTIxMi1cXHRcXHRcXHQgX191OCByZXF1ZXN0dHlwZSwgX191MTYgdmFsdWUsIF9fdTE2IGluZGV4LFxcbi0tXFxuZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmM9MjM1PUVYUE9SVF9TWU1CT0xfR1BMKHVzYl9jb250cm9sX21zZ19zZW5kKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jLTI3NC0gKi9cXG5kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYzoyNzU6aW50IHVzYl9jb250cm9sX21zZ19yZWN2KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIF9fdTggZW5kcG9pbnQsIF9fdTggcmVxdWVzdCxcXG5kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYy0yNzYtXFx0XFx0XFx0IF9fdTggcmVxdWVzdHR5cGUsIF9fdTE2IHZhbHVlLCBfX3UxNiBpbmRleCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDE6MjIuNjYxNTc4NTU5WiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjgyNzk4NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBgdXNiX2NvbnRyb2xfbXNnYCwgZGlzdGlsbGVkIGludG8gbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgdXNiX2NvbnRyb2xfbXNnYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGB1c2JfY29udHJvbF9tc2dgLiBSaWdodCBhd2F5LCBteSBleHBlcnQgbWluZCBpcyBhbHJlYWR5IGNvbnNpZGVyaW5nIHNldmVyYWwgYXNwZWN0czogaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIFVTQiBjb250cm9sIHRyYW5zZmVyIHBhcmFkaWdtLCBpdHMgdHlwaWNhbCB1c2UgY2FzZXMsIGFuZCwgb2YgY291cnNlLCB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgY29yZSBmdW5jdGlvbiwgbGlrZWx5IHJlc2lkaW5nIGRlZXAgd2l0aGluIHRoZSBVU0IgZHJpdmVyIGFyY2hpdGVjdHVyZS4gSXQncyB0aGUgcG9pbnQgb2YgY29udGFjdCBmb3IgdGhlIGhvc3QgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgZGV2aWNlIG9uIGEgY29udHJvbCBlbmRwb2ludCwgYW5kLCBpZiBteSBpbnR1aXRpb24gaXMgY29ycmVjdCwgaXQgd2lsbCBpbnZvbHZlIGNvbmZpZ3VyaW5nIGRldmljZS1zcGVjaWZpYyByZXF1ZXN0cywgc2V0dGluZyB1cCBjb250cm9sIHRyYW5zZmVyIHBhcmFtZXRlcnMsIGFuZCBpbml0aWF0aW5nIHRoZSBkYXRhIGV4Y2hhbmdlLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgZXhwZWN0ZWQgcGFyYW1ldGVyczogdGhlIFVTQiBkZXZpY2UgaGFuZGxlLCB0aGUgcmVxdWVzdCB0eXBlIGFuZCByZWNpcGllbnQsIHRoZSByZXF1ZXN0IGl0c2VsZiwgZGF0YSBidWZmZXIsIGFuZCBwb3RlbnRpYWwgdGltZW91dCB2YWx1ZS4gSSdtIGFudGljaXBhdGluZyBlcnJvciBoYW5kbGluZyBzdHJhdGVnaWVzIGVtYmVkZGVkIHdpdGhpbiB0aGUgZnVuY3Rpb24sIGNvbnNpZGVyaW5nIGNvbW1vbiBmYWlsdXJlIG1vZGVzIGxpa2UgZGV2aWNlIGRpc2Nvbm5lY3RzLCBidWZmZXIgb3ZlcmZsb3dzLCBhbmQsIHBvdGVudGlhbGx5LCBpbmNvcnJlY3QgcmVxdWVzdCBwYXJhbWV0ZXJzLiBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBpbXBsZW1lbnRhdGlvbiBudWFuY2VzLCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgc2VlIGhvdyB3ZWxsIGl0J3MgZGVzaWduZWQgZm9yIGNvbmN1cnJlbmN5LiBUaGlzIGZ1bmN0aW9uIGlzIHZpdGFsIGZvciBpbml0aWFsaXppbmcgYW5kIGNvbnRyb2xsaW5nIGRldmljZXMgLSBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbXBsZW1lbnRlZCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDU1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDE6MjYuMjI5ODYxNDY3WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDk6XFx0ICovXFxuIDE1MDpcXHRpbnQgdXNiX2NvbnRyb2xfbXNnKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlLCBfX3U4IHJlcXVlc3QsXFxuIDE1MTpcXHRcXHRcXHQgICAgX191OCByZXF1ZXN0dHlwZSwgX191MTYgdmFsdWUsIF9fdTE2IGluZGV4LCB2b2lkICpkYXRhLFxcbiAxNTI6XFx0XFx0XFx0ICAgIF9fdTE2IHNpemUsIGludCB0aW1lb3V0KVxcbiAxNTM6XFx0e1xcbiAxNTQ6XFx0XFx0c3RydWN0IHVzYl9jdHJscmVxdWVzdCAqZHI7XFxuIDE1NTpcXHRcXHRpbnQgcmV0O1xcbiAxNTY6XFx0XFxuIDE1NzpcXHRcXHRkciA9IGttYWxsb2Nfb2JqKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QsIEdGUF9OT0lPKTtcXG4gMTU4OlxcdFxcdGlmICghZHIpXFxuIDE1OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTYwOlxcdFxcbiAxNjE6XFx0XFx0ZHItXFx1MDAzZWJSZXF1ZXN0VHlwZSA9IHJlcXVlc3R0eXBlO1xcbiAxNjI6XFx0XFx0ZHItXFx1MDAzZWJSZXF1ZXN0ID0gcmVxdWVzdDtcXG4gMTYzOlxcdFxcdGRyLVxcdTAwM2V3VmFsdWUgPSBjcHVfdG9fbGUxNih2YWx1ZSk7XFxuIDE2NDpcXHRcXHRkci1cXHUwMDNld0luZGV4ID0gY3B1X3RvX2xlMTYoaW5kZXgpO1xcbiAxNjU6XFx0XFx0ZHItXFx1MDAzZXdMZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTtcXG4gMTY2OlxcdFxcbiAxNjc6XFx0XFx0cmV0ID0gdXNiX2ludGVybmFsX2NvbnRyb2xfbXNnKGRldiwgcGlwZSwgZHIsIGRhdGEsIHNpemUsIHRpbWVvdXQpO1xcbiAxNjg6XFx0XFxuIDE2OTpcXHRcXHQvKiBMaW5nZXIgYSBiaXQsIHByaW9yIHRvIHRoZSBuZXh0IGNvbnRyb2wgbWVzc2FnZS4gKi9cXG4gMTcwOlxcdFxcdGlmIChkZXYtXFx1MDAzZXF1aXJrcyBcXHUwMDI2IFVTQl9RVUlSS19ERUxBWV9DVFJMX01TRylcXG4gMTcxOlxcdFxcdFxcdG1zbGVlcCgyMDApO1xcbiAxNzI6XFx0XFxuIDE3MzpcXHRcXHRrZnJlZShkcik7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdHJldHVybiByZXQ7XFxuIDE3NjpcXHR9XFxuIDE3NzpcXHRFWFBPUlRfU1lNQk9MX0dQTCh1c2JfY29udHJvbF9tc2cpO1xcbiAxNzg6XFx0XFxuIDE3OTpcXHQvKipcXG4gMTgwOlxcdCAqIHVzYl9jb250cm9sX21zZ19zZW5kIC0gQnVpbGRzIGEgY29udHJvbCBcXFwic2VuZFxcXCIgbWVzc2FnZSwgc2VuZHMgaXQgb2ZmIGFuZCB3YWl0cyBmb3IgY29tcGxldGlvblxcbiAxODE6XFx0ICogQGRldjogcG9pbnRlciB0byB0aGUgdXNiIGRldmljZSB0byBzZW5kIHRoZSBtZXNzYWdlIHRvXFxuIDE4MjpcXHQgKiBAZW5kcG9pbnQ6IGVuZHBvaW50IHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG9cXG4gMTgzOlxcdCAqIEByZXF1ZXN0OiBVU0IgbWVzc2FnZSByZXF1ZXN0IHZhbHVlXFxuIDE4NDpcXHQgKiBAcmVxdWVzdHR5cGU6IFVTQiBtZXNzYWdlIHJlcXVlc3QgdHlwZSB2YWx1ZVxcbiAxODU6XFx0ICogQHZhbHVlOiBVU0IgbWVzc2FnZSB2YWx1ZVxcbiAxODY6XFx0ICogQGluZGV4OiBVU0IgbWVzc2FnZSBpbmRleCB2YWx1ZVxcbiAxODc6XFx0ICogQGRyaXZlcl9kYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmRcXG4gMTg4OlxcdCAqIEBzaXplOiBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGRhdGEgdG8gc2VuZFxcbiAxODk6XFx0ICogQHRpbWVvdXQ6IHRpbWUgaW4gbXNlY3MgdG8gd2FpdCBmb3IgdGhlIG1lc3NhZ2UgdG8gY29tcGxldGUgYmVmb3JlIHRpbWluZyBvdXRcXG4gMTkwOlxcdCAqIEBtZW1mbGFnczogdGhlIGZsYWdzIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgYnVmZmVyc1xcbiAxOTE6XFx0ICpcXG4gMTkyOlxcdCAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQgKClcXG4gMTkzOlxcdCAqXFxuIDE5NDpcXHQgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgY29udHJvbCBtZXNzYWdlIHRvIGEgc3BlY2lmaWVkIGVuZHBvaW50IHRoYXQgaXMgbm90XFxuIDE5NTpcXHQgKiBleHBlY3RlZCB0byBmaWxsIGluIGEgcmVzcG9uc2UgKGkuZS4gYSBcXFwic2VuZCBtZXNzYWdlXFxcIikgYW5kIHdhaXRzIGZvciB0aGVcXG4gMTk2OlxcdCAqIG1lc3NhZ2UgdG8gY29tcGxldGUsIG9yIHRpbWVvdXQuXFxuIDE5NzpcXHQgKlxcbiAxOTg6XFx0ICogRG8gbm90IHVzZSB0aGlzIGZ1bmN0aW9uIGZyb20gd2l0aGluIGFuIGludGVycnVwdCBjb250ZXh0LiBJZiB5b3UgbmVlZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMToyNi4yMzAwMDIxMDdaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3NjM4NzcwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGB1c2JfaW50ZXJuYWxfY29udHJvbF9tc2dgOlxuXG4qKkRpdmluZyBpbnRvIGB1c2JfaW50ZXJuYWxfY29udHJvbF9tc2dgKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGlzIGB1c2JfaW50ZXJuYWxfY29udHJvbF9tc2dgIGZ1bmN0aW9uLiBJIHJlY29nbml6ZSB0aGUgbmFtaW5nIGNvbnZlbnRpb24gaW1tZWRpYXRlbHksIGl0IHN1Z2dlc3RzIHRoYXQgdGhpcyBpcyByZWxhdGVkIHRvIFVTQiBjb21tdW5pY2F0aW9uLCBhbmQgc3BlY2lmaWNhbGx5LCB0byBjb250cm9sIG1lc3NhZ2VzLiBUaGUgXCJpbnRlcm5hbFwiIHBhcnQgaXMgaW50ZXJlc3RpbmcgLSBpdCBpbXBsaWVzIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IG5vdCBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIHByb2JhYmx5IHJlc2lkaW5nIHdpdGhpbiB0aGUga2VybmVsJ3MgVVNCIHN1YnN5c3RlbS4gSSdtIGd1ZXNzaW5nIGl0J3MgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIGhhbmRsaW5nIHRob3NlIGxvdy1sZXZlbCByZXF1ZXN0cyB0aGF0IGNvbmZpZ3VyZSBkZXZpY2VzLCByZXRyaWV2ZSBkZXNjcmlwdG9ycywgYW5kIG1hbmFnZSBlbmRwb2ludHMuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6IGhvdyBpdCdzIGNhbGxlZCwgd2hhdCBhcmd1bWVudHMgaXQgdGFrZXMsIGFuZCBjcnVjaWFsbHksIHdoYXQgY29udGV4dCBpdCBvcGVyYXRlcyBpbiAoZS5nLiwgaW50ZXJydXB0IGNvbnRleHQsIHByb2Nlc3MgY29udGV4dCkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIGNvbnRyb2wgdHJhbnNmZXIgcHJvY2Vzcy4gRG9lcyBpdCBoYW5kbGUgc2V0dXAgcGFja2V0cyBkaXJlY3RseT8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIHNwZWNpZmljIGhhcmR3YXJlIHJlZ2lzdGVycyBvciBkYXRhIHN0cnVjdHVyZXM/IEFyZSB0aGVyZSBhbnkgbm90YWJsZSBlcnJvciBjb25kaXRpb25zIG9yIGVkZ2UgY2FzZXMgaXQncyBkZXNpZ25lZCB0byBtYW5hZ2U/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCBpdCB3aWxsIGxpa2VseSBhYnN0cmFjdCBzb21lIG9mIHRoZSBtb3JlIGNvbXBsZXggaW50ZXJhY3Rpb25zLCBtYWtpbmcgaXQgZWFzaWVyIGZvciB0aGUgaGlnaGVyLWxldmVsIFVTQiBkcml2ZXJzIHRvIGludGVyYWN0IHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuIEtub3dpbmcgdGhpcyBpcyBrZXkgdG8gZGVidWdnaW5nIGFuZCBleHRlbmRpbmcgVVNCIGZ1bmN0aW9uYWxpdHkuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMDAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAxOjMwLjEwNjM5MzE0MloiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxLFxuICBcIkxpbmVDb3VudFwiOiA0OFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdHN0YXRpYyBpbnQgdXNiX2ludGVybmFsX2NvbnRyb2xfbXNnKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LFxcbiAxMDI6XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBwaXBlLFxcbiAxMDM6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNtZCxcXG4gMTA0OlxcdFxcdFxcdFxcdFxcdCAgICB2b2lkICpkYXRhLCBpbnQgbGVuLCBpbnQgdGltZW91dClcXG4gMTA1OlxcdHtcXG4gMTA2OlxcdFxcdHN0cnVjdCB1cmIgKnVyYjtcXG4gMTA3OlxcdFxcdGludCByZXR2O1xcbiAxMDg6XFx0XFx0aW50IGxlbmd0aDtcXG4gMTA5OlxcdFxcbiAxMTA6XFx0XFx0dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfTk9JTyk7XFxuIDExMTpcXHRcXHRpZiAoIXVyYilcXG4gMTEyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAxMTM6XFx0XFxuIDExNDpcXHRcXHR1c2JfZmlsbF9jb250cm9sX3VyYih1cmIsIHVzYl9kZXYsIHBpcGUsICh1bnNpZ25lZCBjaGFyICopY21kLCBkYXRhLFxcbiAxMTU6XFx0XFx0XFx0XFx0ICAgICBsZW4sIHVzYl9hcGlfYmxvY2tpbmdfY29tcGxldGlvbiwgTlVMTCk7XFxuIDExNjpcXHRcXG4gMTE3OlxcdFxcdHJldHYgPSB1c2Jfc3RhcnRfd2FpdF91cmIodXJiLCB0aW1lb3V0LCBcXHUwMDI2bGVuZ3RoLCBmYWxzZSk7XFxuIDExODpcXHRcXHRpZiAocmV0diBcXHUwMDNjIDApXFxuIDExOTpcXHRcXHRcXHRyZXR1cm4gcmV0djtcXG4gMTIwOlxcdFxcdGVsc2VcXG4gMTIxOlxcdFxcdFxcdHJldHVybiBsZW5ndGg7XFxuIDEyMjpcXHR9XFxuIDEyMzpcXHRcXG4gMTI0OlxcdC8qKlxcbiAxMjU6XFx0ICogdXNiX2NvbnRyb2xfbXNnIC0gQnVpbGRzIGEgY29udHJvbCB1cmIsIHNlbmRzIGl0IG9mZiBhbmQgd2FpdHMgZm9yIGNvbXBsZXRpb25cXG4gMTI2OlxcdCAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIHVzYiBkZXZpY2UgdG8gc2VuZCB0aGUgbWVzc2FnZSB0b1xcbiAxMjc6XFx0ICogQHBpcGU6IGVuZHBvaW50IFxcXCJwaXBlXFxcIiB0byBzZW5kIHRoZSBtZXNzYWdlIHRvXFxuIDEyODpcXHQgKiBAcmVxdWVzdDogVVNCIG1lc3NhZ2UgcmVxdWVzdCB2YWx1ZVxcbiAxMjk6XFx0ICogQHJlcXVlc3R0eXBlOiBVU0IgbWVzc2FnZSByZXF1ZXN0IHR5cGUgdmFsdWVcXG4gMTMwOlxcdCAqIEB2YWx1ZTogVVNCIG1lc3NhZ2UgdmFsdWVcXG4gMTMxOlxcdCAqIEBpbmRleDogVVNCIG1lc3NhZ2UgaW5kZXggdmFsdWVcXG4gMTMyOlxcdCAqIEBkYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmRcXG4gMTMzOlxcdCAqIEBzaXplOiBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGRhdGEgdG8gc2VuZFxcbiAxMzQ6XFx0ICogQHRpbWVvdXQ6IHRpbWUgaW4gbXNlY3MgdG8gd2FpdCBmb3IgdGhlIG1lc3NhZ2UgdG8gY29tcGxldGUgYmVmb3JlIHRpbWluZyBvdXRcXG4gMTM1OlxcdCAqXFxuIDEzNjpcXHQgKiBDb250ZXh0OiB0YXNrIGNvbnRleHQsIG1pZ2h0IHNsZWVwLlxcbiAxMzc6XFx0ICpcXG4gMTM4OlxcdCAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYSBzaW1wbGUgY29udHJvbCBtZXNzYWdlIHRvIGEgc3BlY2lmaWVkIGVuZHBvaW50IGFuZFxcbiAxMzk6XFx0ICogd2FpdHMgZm9yIHRoZSBtZXNzYWdlIHRvIGNvbXBsZXRlLCBvciB0aW1lb3V0LlxcbiAxNDA6XFx0ICpcXG4gMTQxOlxcdCAqIERvbid0IHVzZSB0aGlzIGZ1bmN0aW9uIGZyb20gd2l0aGluIGFuIGludGVycnVwdCBjb250ZXh0LiBJZiB5b3UgbmVlZFxcbiAxNDI6XFx0ICogYW4gYXN5bmNocm9ub3VzIG1lc3NhZ2UsIG9yIG5lZWQgdG8gc2VuZCBhIG1lc3NhZ2UgZnJvbSB3aXRoaW4gaW50ZXJydXB0XFxuIDE0MzpcXHQgKiBjb250ZXh0LCB1c2UgdXNiX3N1Ym1pdF91cmIoKS4gSWYgYSB0aHJlYWQgaW4geW91ciBkcml2ZXIgdXNlcyB0aGlzIGNhbGwsXFxuIDE0NDpcXHQgKiBtYWtlIHN1cmUgeW91ciBkaXNjb25uZWN0KCkgbWV0aG9kIGNhbiB3YWl0IGZvciBpdCB0byBjb21wbGV0ZS4gU2luY2UgeW91XFxuIDE0NTpcXHQgKiBkb24ndCBoYXZlIGEgaGFuZGxlIG9uIHRoZSBVUkIgdXNlZCwgeW91IGNhbid0IGNhbmNlbCB0aGUgcmVxdWVzdC5cXG4gMTQ2OlxcdCAqXFxuIDE0NzpcXHQgKiBSZXR1cm46IElmIHN1Y2Nlc3NmdWwsIHRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQuIE90aGVyd2lzZSwgYSBuZWdhdGl2ZVxcbiAxNDg6XFx0ICogZXJyb3IgbnVtYmVyLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMTozMC4xMDY1MjkxNDJaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUxMjE3ODc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgWmVyby1MZW5ndGggVVNCIFRyYW5zZmVycyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCB6ZXJvLWxlbmd0aCBVU0IgdHJhbnNmZXJzIGtlZXBzIGNvbWluZyB1cCBpbiBteSBtaW5kLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBob3cgYHVzYl9maWxsX2NvbnRyb2xfdXJiYCBoYW5kbGVzIGEgYGxlbmAgb2YgemVybywgYW5kIHdoZXRoZXIgcGFzc2luZyBgWkVST19TSVpFX1BUUmAgYXMgdGhlIGBkYXRhYCBwb2ludGVyIGlzIHNhZmUuIEluaXRpYWxseSwgaXQgc2VlbXMgaGFybWxlc3MuIGB1c2JfZmlsbF9jb250cm9sX3VyYmAganVzdCBzZXRzIHRoZSBVUkIncyBgdHJhbnNmZXJfYnVmZmVyYCBhbmQgYHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGhgIGZpZWxkcy4gV2hlbiBgdXNiX3N0YXJ0X3dhaXRfdXJiYCBzdWJtaXRzIHRoZSBVUkIsIHRoZSBIQ0Qgc2hvdWxkLCBpbiB0aGVvcnksIGp1c3Qgc2VlIGB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID09IDBgIGFuZCBza2lwIHRoZSBidWZmZXIsIGJ1dCBJIGhhdmUgYSBuYWdnaW5nIGZlZWxpbmcuXG5cbk5vdywgSSByZW1lbWJlciBzZWVpbmcgYGttYWxsb2MoMClgIGJlaW5nIGNhbGxlZCwgd2hpY2ggKnJldHVybnMqIGBaRVJPX1NJWkVfUFRSYC4gSW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UsIGByODE1Ml9jb250cm9sX21zZ2AgZ2V0cyBhIHplcm8tc2l6ZWQgYnVmZmVyIGZyb20gYGttYWxsb2NgIGFuZCB0aGVuIHBhc3NlcyBpdCBhbGwgdGhlIHdheSBkb3duIHRoZSBjaGFpbiB0byBgdXNiX2ZpbGxfY29udHJvbF91cmJgIGFuZCBmaW5hbGx5IGB1c2Jfc3RhcnRfd2FpdF91cmJgLiBJcyB0aGlzIHJlYWxseSBnb2luZyB0byBiZSBzYWZlPyBJIG5lZWQgdG8gYmUgc3VyZS5cblxuSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGlmIGBzaXplYCBpcyB6ZXJvIGluaXRpYWxseSwgYGdlbmVyaWNfb2NwX3JlYWRgIHdpbGwgcGFzcyB6ZXJvIHRvIGBnZXRfcmVnaXN0ZXJzYC4gVGhpcyB3aG9sZSB0aGluZyBoaW5nZXMgb24gd2hldGhlciBgZ2VuZXJpY19vY3BfcmVhZGAgKmNhbiogYmUgY2FsbGVkIHdpdGggYHNpemUgPSAwYC4gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBwbGFjZXMgd2hlcmUgYGdlbmVyaWNfb2NwX3JlYWRgIGdldHMgY2FsbGVkIGFuZCBkZXRlcm1pbmUgaWYgdGhhdCdzIHBvc3NpYmxlLiBJJ3ZlIGdvdCB0byBlbnN1cmUgdGhlIGNvZGUncyByb2J1c3QgYWdhaW5zdCB0aGVzZSB6ZXJvLWxlbmd0aCB0cmFuc2ZlcnMuIE90aGVyd2lzZSwgdGhpcyBjb3VsZCBiZSBhIG5hc3R5IGJ1ZyBpbiB0aGUgbWFraW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMwNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAxOjM3LjYxODcxMTExOFoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2NjUxMjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdlbmVyaWNfb2NwX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTQxMj1zdGF0aWMgdm9pZCBydGxfc2V0X3VucGx1ZyhzdHJ1Y3QgcjgxNTIgKnRwKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQxNy1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNDE4OnN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0MTktXFx0XFx0XFx0ICAgIHZvaWQgKmRhdGEsIHUxNiB0eXBlKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTUyND1pbnQgcGxhX29jcF9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUyNS17XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTUyNjpcXHRyZXR1cm4gZ2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemUsIGRhdGEsIE1DVV9UWVBFX1BMQSk7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUyNy19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTQxPXN0YXRpYyB1MzIgb2NwX3JlYWRfZHdvcmQoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NDQtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU0NTpcXHRnZW5lcmljX29jcF9yZWFkKHRwLCBpbmRleCwgc2l6ZW9mKGRhdGEpLCBcXHUwMDI2ZGF0YSwgdHlwZSk7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU0Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1NTc9c3RhdGljIHUxNiBvY3BfcmVhZF93b3JkKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTY2LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1Njc6XFx0Z2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemVvZih0bXApLCBcXHUwMDI2dG1wLCB0eXBlIHwgYnllbik7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU2OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1OTc9c3RhdGljIHU4IG9jcF9yZWFkX2J5dGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MDQtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTYwNTpcXHRnZW5lcmljX29jcF9yZWFkKHRwLCBpbmRleCwgc2l6ZW9mKHRtcCksIFxcdTAwMjZ0bXAsIHR5cGUpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MDYtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz05MDc4PXN0YXRpYyB2b2lkIHJ0bDgxNTJfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTkwODYtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6OTA4NzpcXHRnZW5lcmljX29jcF9yZWFkKHRwLCBQTEFfVEFMTFlDTlQsIHNpemVvZih0YWxseSksIFxcdTAwMjZ0YWxseSwgTUNVX1RZUEVfUExBKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy05MDg4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMTozNy44NTUzNzIxODVaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg2ODIxMzI5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUlRMODE1MiBEcml2ZXIgUGF0Y2ggZm9yIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBFeHBvc3VyZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHBhdGNoIGZvciB0aGUgUlRMODE1MiBkcml2ZXIsIHRyeWluZyB0byB1bmRlcnN0YW5kIHdoeSBpdCBtaWdodCBiZSBmbGFnZ2luZyBhIEtNU0FOIGNvbmNlcm4uIFRoZSBtYWluIGlzc3VlIGFwcGVhcnMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgY29kZSBoYW5kbGVzIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyB3aXRoIHBvdGVudGlhbGx5IGRpZmZlcmluZyBzaXplcyBhbmQgYnl0ZSBlbmFibGUgY29uZmlndXJhdGlvbnMuXG5cblRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHNlZW1zIHRvIHN0ZW0gZnJvbSBob3cgYGdlbmVyaWNfb2NwX3dyaXRlYCBhbmQgYGdlbmVyaWNfb2NwX3JlYWRgIGludGVyYWN0IHdpdGggYHNldF9yZWdpc3RlcnNgIGFuZCBgZ2V0X3JlZ2lzdGVyc2AsIHJlc3BlY3RpdmVseS4gVGhlIG5ldyBjb2RlIGluIGBnZW5lcmljX29jcF93cml0ZWAgaGFzIGFsdGVyZWQgdGhlIGxvZ2ljLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSBpZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgYSBzaXR1YXRpb24gd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY2FuIGxlYWsuXG5cbkkgaW5pdGlhbGx5IGhvbmVkIGluIG9uIGEgY2FzZSB3aGVyZSBgc2l6ZWAgbWlnaHQgYmUgcmVkdWNlZCB0byB6ZXJvIGR1ZSB0byBhIGNvbmRpdGlvbmFsIGNoZWNrIChgYnllbiAhPSBCWVRFX0VOX0RXT1JEYCksIHdoaWNoIGNhdXNlcyBhbiBleHRyYSBjYWxsIHdpdGggYSBzaXplIG9mIHplcm8uICBBIHplcm8gc2l6ZSB3cml0ZSAob3IgcmVhZCksIGJ5IGl0c2VsZiwgaXNuJ3QgYSAqYnVnKiwgYmVjYXVzZSBpdCBkb2Vzbid0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBkdWUgdG8gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBsaWtlIGBrbWVtZHVwYCBhbmQgYGttYWxsb2NgIHJldHVybmluZyBgWkVST19TSVpFX1BUUmAuXG5cbkhvd2V2ZXIsIHRoZSBtb3JlIGNvbmNlcm5pbmcgaXNzdWUgaXMgc2hvcnQgcmVhZHMuIFRoZSBgZ2V0X3JlZ2lzdGVyc2AgZnVuY3Rpb24gdXNlcyBga21hbGxvY2AgdG8gYWxsb2NhdGUgYSBidWZmZXIsIGFuZCB0aGVuIGNhbGxzIGByODE1Ml9jb250cm9sX21zZ2AgdG8gcmVhZCBkYXRhIGZyb20gdGhlIGRldmljZS4gQSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHRoZSBkZXZpY2UgKmNvdWxkKiByZXR1cm4gZmV3ZXIgYnl0ZXMgdGhhbiByZXF1ZXN0ZWQuICBJZiBgcjgxNTJfY29udHJvbF9tc2dgIHRyYW5zZmVycyBmZXdlciBieXRlcyB0aGFuIHRoZSBgc2l6ZWAgYWxsb2NhdGVkIHdpdGggYGttYWxsb2NgLCB0aGUgcmVtYWluZGVyIG9mIHRoZSBidWZmZXIgd2lsbCBjb250YWluIHVuaW5pdGlhbGl6ZWQgaGVhcCBtZW1vcnkuIFN1YnNlcXVlbnRseSwgdGhlIGBtZW1jcHlgIGluIGBnZXRfcmVnaXN0ZXJzYCBjb3BpZXMgdGhlIGZ1bGwgYHNpemVgIGJ5dGVzIG9mIGRhdGEgZnJvbSBgdG1wYCB0byB0aGUgb3V0cHV0IGBkYXRhYCBidWZmZXIuIFRoaXMgdHJhbnNmZXIgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgbGVhZCB0byBhIEtNU0FOIGlzc3VlIGlmIHRoZSBgZGF0YWAgYnVmZmVyIGlzIHVzZWQgb3Igc2VudCB0byB1c2Vyc3BhY2UuXG5cblRoZSBwYXRjaCBpdHNlbGYgZG9lcyBub3QgZGlyZWN0bHkgKmludHJvZHVjZSogdGhlIGlzc3VlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGggdGhlIGxvb3AgY2hhbmdlcy4gIEhvd2V2ZXIsIGJlY2F1c2UgdGhlIGNoYW5nZXMgaW4gdGhlIG5ldyBjb2RlIGNoYW5nZSBob3cgdGhlIGBnZXRfcmVnaXN0ZXJzYCBpcyBjYWxsZWQsIGEgS01TQU4gc2Vzc2lvbiBtaWdodCBiZSBqdXN0aWZpZWQgZHVlIHRvIHRoZSBsb29wIGNoYW5nZSByZWZhY3RvcmluZywgYW5kIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha2FnZSB0aGF0IHdhcyBub3QgYWRkcmVzc2VkIHByZXZpb3VzbHkuXG5cblNvLCBpbiBzdW1tYXJ5LCBJIHRoaW5rIHRoZSBzeXpib3QgZmxhZyBpcyByZWFzb25hYmxlLiBUaGUgZXhpc3RpbmcgY29kZSBhbHJlYWR5IGhhcyBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBkdWUgdG8gc2hvcnQgcmVhZHMgaW4gYGdldF9yZWdpc3RlcnNgLiAgVGhlIGxvb3AgbW9kaWZpY2F0aW9ucyBtaWdodCBoYXZlIGEgbGltaXRlZCBlZmZlY3QsIGluIHRoZSBuZXcgYW5kIG9sZCBjb2RlLCBvbiB0aGUgZXhpc3RpbmcgY29uZGl0aW9uIG9mIGhhdmluZyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGFuZCBjb3B5IG9wZXJhdGlvbi4gIEEgS01TQU4gZnV6emluZyBzZXNzaW9uIHdvdWxkIGJlIGp1c3RpZmllZCB0byBjYXRjaCBwb3RlbnRpYWwgcmVncmVzc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTM0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMjowNi41Mzc1MDc4OTdaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMjEzNTgyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5lcmljX29jcF93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNDE4PXN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQ1Mi1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNDUzOnN0YXRpYyBpbnQgZ2VuZXJpY19vY3Bfd3JpdGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgYnl0ZWVuLFxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0NTQtXFx0XFx0XFx0ICAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSwgdTE2IHR5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTMwPWludCBwbGFfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzMS17XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTUzMjpcXHRyZXR1cm4gZ2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieXRlZW4sIHNpemUsIGRhdGEsIE1DVV9UWVBFX1BMQSk7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzMy19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTM2PWludCB1c2Jfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzNy17XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTUzODpcXHRyZXR1cm4gZ2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieXRlZW4sIHNpemUsIGRhdGEsIE1DVV9UWVBFX1VTQik7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTUzOS19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTUwPXN0YXRpYyB2b2lkIG9jcF93cml0ZV9kd29yZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4LCB1MzIgZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NTMtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU1NDpcXHRnZW5lcmljX29jcF93cml0ZSh0cCwgaW5kZXgsIEJZVEVfRU5fRFdPUkQsIHNpemVvZih0bXApLCBcXHUwMDI2dG1wLCB0eXBlKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTU1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1NzY9c3RhdGljIHZvaWQgb2NwX3dyaXRlX3dvcmQoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleCwgdTMyIGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTkzLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1OTQ6XFx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieWVuLCBzaXplb2YodG1wKSwgXFx1MDAyNnRtcCwgdHlwZSk7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU5NS19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNjE0PXN0YXRpYyB2b2lkIG9jcF93cml0ZV9ieXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgsIHUzMiBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTYzMS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNjMyOlxcdGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBpbmRleCwgYnllbiwgc2l6ZW9mKHRtcCksIFxcdTAwMjZ0bXAsIHR5cGUpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MzMtfVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NDUxMT1zdGF0aWMgdm9pZCBydGxfY2xlYXJfYnAoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy00NTQ5LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjQ1NTA6XFx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIFBMQV9CUF8wLCBCWVRFX0VOX0RXT1JELCBicF9udW0gXFx1MDAzY1xcdTAwM2MgMSwgYnAsIHR5cGUpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTQ1NTEtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz01MzA0PXN0YXRpYyB2b2lkIHJ0bF9yYW1fY29kZV9zcGVlZF91cChzdHJ1Y3QgcjgxNTIgKnRwLCBzdHJ1Y3QgZndfcGh5X3NwZWVkX3VwICpwaHksIGJvb2wgd2FpdClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTUzMzQtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NTMzNTpcXHRcXHRnZW5lcmljX29jcF93cml0ZSh0cCwgX19sZTE2X3RvX2NwdShwaHktXFx1MDAzZWZ3X3JlZyksIDB4ZmYsIHNpemUsIGRhdGEsIE1DVV9UWVBFX1VTQik7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTMzNi1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTU0ODU9c3RhdGljIHZvaWQgcnRsODE1Ml9md19tYWNfYXBwbHkoc3RydWN0IHI4MTUyICp0cCwgc3RydWN0IGZ3X21hYyAqbWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTUyNC1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo1NTI1OlxcdGlmIChnZW5lcmljX29jcF93cml0ZSh0cCwgX19sZTE2X3RvX2NwdShtYWMtXFx1MDAzZWZ3X3JlZyksIDB4ZmYsIGxlbmd0aCxcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01NTI2LVxcdFxcdFxcdCAgICAgIGRhdGEsIHR5cGUpIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTUzNC1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo1NTM1OlxcdGlmIChnZW5lcmljX29jcF93cml0ZSh0cCwgX19sZTE2X3RvX2NwdShtYWMtXFx1MDAzZWJwX3N0YXJ0KSwgQllURV9FTl9EV09SRCxcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01NTM2LVxcdFxcdFxcdCAgICAgIEFMSUdOKF9fbGUxNl90b19jcHUobWFjLVxcdTAwM2VicF9udW0pIFxcdTAwM2NcXHUwMDNjIDEsIDQpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMTowMjowNi44Mzk2NDg1MjNaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4MDkxNjkyNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZ2VuZXJpY19vY3Bfd3JpdGVgIEZ1bmN0aW9uIGFuZCBpdHMgUmVjZW50IE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgYmFjayBpbnRvIHRoaXMgYGdlbmVyaWNfb2NwX3dyaXRlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyBjb3JyZWN0bHksIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHJlY2VudCBjaGFuZ2UuIEZpcnN0LCBsZXQgbWUgd2FsayB0aHJvdWdoIHRoZSBjb2RlIGFzIGl0IHN0YW5kcy4gSXQgdGFrZXMgYSBkZXZpY2UgcG9pbnRlciBgdHBgLCBhbiBpbmRleCBgaW5kZXhgLCBhIGJ5dGUgZW5hYmxlIHZhbHVlIGBieXRlZW5gLCBhIHNpemUgYHNpemVgLCBkYXRhIHBvaW50ZXIgYGRhdGFgLCBhbmQgYSB0eXBlIGB0eXBlYC4gVGhlIHNpemUgaXMgY2hlY2tlZCB0byBlbnN1cmUgaXQgaXNuJ3Qgb3ZlciBhIGxpbWl0LCBhbmQgdGhlcmUgYXJlIHNvbWUgc3BlY2lmaWMgbWFza3MgYW5kIFVTQiB0eXBlIGNvbnNpZGVyYXRpb25zIGZvciB0aGUgbWFzayB2YXJpYWJsZS4gIFRoZXJlIGFyZSBhIHNlcmllcyBvZiBpbml0aWFsIGVycm9yIGNoZWNrcy4gTm93LCB0aGUgYGJ5dGVlbmAgdmFsdWUgaXMgaGFuZGxlZCwgd2hpY2ggZGV0ZXJtaW5lcyBob3cgbWFueSBieXRlcyBvZiBhIERXT1JEIGFyZSBlbmFibGVkLlxuXG5Pa2F5LCBzbyBpZiBgYnl0ZWVuYCBpcyBub3QgdGhlIGRlZmF1bHQgYEJZVEVfRU5fRFdPUkRgLCB0aGUgZnVuY3Rpb24gaGFuZGxlcyB0aGUgZmlyc3QgRFdPUkQgd2l0aCB0aGUgc3BlY2lmaWMgYGJ5dGVlbmAgdmFsdWUuIFRoZSBvcmlnaW5hbCBsb2dpYyBjb250YWluZWQgYSBkZWNyZW1lbnQgdG8gdGhlIHNpemUgYW5kIHBvaW50ZXIgZm9yIHVzZSBsYXRlciBpbiB0aGUgZnVuY3Rpb24uXG5cbk5vdywgdGhlcmUncyBhIGxvb3AgdGhhdCBpdGVyYXRlcyB0byB3cml0ZSB0aGUgcmVtYWluaW5nIGRhdGEuIFRoZSB1cGRhdGVkIGNvZGUganVzdCB3cml0ZXMgaW4gdGhlIHJlbWFpbmluZyBibG9ja3MsIHdpdGggYSBsaW1pdCBvZiA1MTIgYnl0ZXMuIE9rYXksIHRoZSBjaGFuZ2UgbG9va3MgbGlrZSBpdCBqdXN0IHJlbW92ZWQgdGhlIGJyYW5jaCB0byBjaGVjayBpZiB0aGUgYHNpemVgIHdhcyBzdGlsbCBncmVhdGVyIHRoYW4gYGxpbWl0YC4gU28gd2Ugbm93IGhhdmUgYSBzaW5nbGUgYHdoaWxlYCBsb29wLCB0aGF0IHNob3VsZCBiZSBsZXNzIGNvbXBsZXggdGhhbiB0aGUgcHJldmlvdXMgb25lIHdpdGggdGhlIGBpZi9lbHNlYCBpbnNpZGUgaXQuIFRoZXJlJ3MgYSBjaGVjayBmb3IgYSAtRU5PREVWIGVycm9yIHdoaWNoIHNob3VsZCBhbHNvIGhhbmRsZSBzZXR0aW5nIHRoZSB1bnBsdWcgc3RhdGUuIEZpbmFsbHkgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGVycm9yIHN0YXR1cy5cblxuV2FpdCBhIHNlY29uZC4uLkknbSBzZWVpbmcgc29tZXRoaW5nLiBJIHdhcyBjZXJ0YWluIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhbiBvdXRlciBgaWYgKHNpemUpYCBjb25kaXRpb24gdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBiZSBjYWxsaW5nIGBzZXRfcmVnaXN0ZXJzYCBhdCBhbGwsIGFuZCBpdCdzIG1pc3NpbmcgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbi4gVGhpcyBsb29rcyBsaWtlIGEgYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg3MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDI6MTcuNjQ4ODIwMTM5WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDgwOlxcdFxcbjE0ODE6XFx0XFx0XFx0aW5kZXggKz0gNDtcXG4xNDgyOlxcdFxcdFxcdGRhdGEgKz0gNDtcXG4xNDgzOlxcdFxcdFxcdHNpemUgLT0gNDtcXG4xNDg0OlxcdFxcdH1cXG4xNDg1OlxcdFxcbjE0ODY6XFx0XFx0aWYgKHNpemUpIHtcXG4xNDg3OlxcdFxcdFxcdGJ5ZW4gPSBieXRlZW5fZW5kIHwgKGJ5dGVlbl9lbmQgXFx1MDAzZVxcdTAwM2UgNCk7XFxuMTQ4ODpcXHRcXG4xNDg5OlxcdFxcdFxcdC8qIFNwbGl0IHRoZSBsYXN0IERXT1JEIGlmIHRoZSBieXRlX2VuIGlzIG5vdCAweGZmICovXFxuMTQ5MDpcXHRcXHRcXHRpZiAoYnllbiAhPSBCWVRFX0VOX0RXT1JEKVxcbjE0OTE6XFx0XFx0XFx0XFx0c2l6ZSAtPSA0O1xcbjE0OTI6XFx0XFxuMTQ5MzpcXHRcXHRcXHR3aGlsZSAoc2l6ZSBcXHUwMDNlIGxpbWl0KSB7XFxuMTQ5NDpcXHRcXHRcXHRcXHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXFxuMTQ5NTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgbGltaXQsIGRhdGEpO1xcbjE0OTY6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTQ5NzpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycm9yMTtcXG4xNDk4OlxcdFxcbjE0OTk6XFx0XFx0XFx0XFx0aW5kZXggKz0gbGltaXQ7XFxuMTUwMDpcXHRcXHRcXHRcXHRkYXRhICs9IGxpbWl0O1xcbjE1MDE6XFx0XFx0XFx0XFx0c2l6ZSAtPSBsaW1pdDtcXG4xNTAyOlxcdFxcdFxcdH1cXG4xNTAzOlxcdFxcbjE1MDQ6XFx0XFx0XFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELCBzaXplLCBkYXRhKTtcXG4xNTA1OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE1MDY6XFx0XFx0XFx0XFx0Z290byBlcnJvcjE7XFxuMTUwNzpcXHRcXG4xNTA4OlxcdFxcdFxcdGluZGV4ICs9IHNpemU7XFxuMTUwOTpcXHRcXHRcXHRkYXRhICs9IHNpemU7XFxuMTUxMDpcXHRcXG4xNTExOlxcdFxcdFxcdC8qIFNldCB0aGUgbGFzdCBEV09SRCAqL1xcbjE1MTI6XFx0XFx0XFx0aWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRClcXG4xNTEzOlxcdFxcdFxcdFxcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgYnllbiwgNCwgZGF0YSk7XFxuMTUxNDpcXHRcXHR9XFxuMTUxNTpcXHRcXG4xNTE2OlxcdGVycm9yMTpcXG4xNTE3OlxcdFxcdGlmIChyZXQgPT0gLUVOT0RFVilcXG4xNTE4OlxcdFxcdFxcdHJ0bF9zZXRfdW5wbHVnKHRwKTtcXG4xNTE5OlxcdFxcbjE1MjA6XFx0XFx0cmV0dXJuIHJldDtcXG4xNTIxOlxcdH1cXG4xNTIyOlxcdFxcbjE1MjM6XFx0c3RhdGljIGlubGluZVxcbjE1MjQ6XFx0aW50IHBsYV9vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbjE1MjU6XFx0e1xcbjE1MjY6XFx0XFx0cmV0dXJuIGdlbmVyaWNfb2NwX3JlYWQodHAsIGluZGV4LCBzaXplLCBkYXRhLCBNQ1VfVFlQRV9QTEEpO1xcbjE1Mjc6XFx0fVxcbjE1Mjg6XFx0XFxuMTUyOTpcXHRzdGF0aWMgaW5saW5lXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIxOjAyOjE3LjY0OTM0OTU4OVoiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzUwNDAwMzIzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQYXRjaCBmb3IgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSByZWZhY3RvcmluZyB0aGUgbG9vcCBzdHJ1Y3R1cmVzIHVzZWQgZm9yIGhhbmRsaW5nIHJlZ2lzdGVyIHJlYWRzIGFuZCB3cml0ZXMgaW4gdGhlIHI4MTUyIGRyaXZlciwgY2h1bmtpbmcgdGhlIGRhdGEgaW50byA1MTItYnl0ZSBibG9ja3MuIE15IHByaW1hcnkgY29uY2VybiwgZ2l2ZW4gdGhlIHByb21wdCwgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgb3IgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCdzIHN0YXJ0IHdpdGggYGdlbmVyaWNfb2NwX3dyaXRlYC4gVGhlIGNyaXRpY2FsIGNoYW5nZSBoZXJlIGlzIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRoZSBcImxhc3QgY2h1bmsuXCIgSW4gdGhlIG9yaWdpbmFsIGNvZGUsIGlmIGBzaXplYCB3YXMgNCBhbmQgYGJ5ZW5gIHdhc24ndCBgQllURV9FTl9EV09SRGAsIHRoZSBsb29wIHdhcyAqc2tpcHBlZCosIGFuZCBhIHNpbmdsZSB3cml0ZSBvZiA0IGJ5dGVzIGhhcHBlbmVkLiBOb3csIHRoZSByZWZhY3RvcmVkIGNvZGUgKmVudGVycyogYSBsb29wIChiZWNhdXNlIGBzaXplYCBiZWNhbWUgMCBhZnRlciB0aGUgY29uZGl0aW9uYWwgc3VidHJhY3Rpb24sIGFuZCBgd2hpbGUgKHNpemUgXHUwMDNlIGxpbWl0KWAgaXMgZmFsc2UsIGFuZCB0aGVyZWZvcmUgc2tpcHBlZCksIGZvbGxvd2VkIGJ5IGEgemVyby1sZW5ndGggY29udHJvbCBtZXNzYWdlLiBUaGlzIG1lYW5zIGBzZXRfcmVnaXN0ZXJzYCAqaXMqIGNhbGxlZCB3aXRoIGBzaXplID0gMGAuIEhvd2V2ZXIsIHRoaXMgaXMgTk9UIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZS4gV2hlbiBgc2l6ZWAgaXMgemVybywgYGttZW1kdXBgIHJldHVybnMgYFpFUk9fU0laRV9QVFJgLCB3aGljaCBpcyBzYWZlLiBUaGUgc3Vic2VxdWVudCBgdXNiX2NvbnRyb2xfbXNnYCBjYWxsIHdpdGggYFpFUk9fU0laRV9QVFJgIHdvbid0IHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBqdXN0IHNlbmRzIGEgMC1sZW5ndGggY29udHJvbCBtZXNzYWdlLCB3aGljaCBpcyB2YWxpZCBVU0IgYmVoYXZpb3IgKGEgemVyby1sZW5ndGggd3JpdGUpLiBUaGlzIG1pZ2h0IGJlIGEgZnVuY3Rpb25hbCBidWcgaWYgdGhlIGRldmljZSBtaXNpbnRlcnByZXRzIHRoZSAwLWxlbmd0aCBtZXNzYWdlIGJ1dCBpdCdzIG5vdCBhIG1lbW9yeSBzYWZldHkgaXNzdWUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBgZ2VuZXJpY19vY3BfcmVhZGAuIEluIHRoaXMgZnVuY3Rpb24sIHRoZSBpbml0aWFsIHNpemUgaXMgdmFsaWRhdGVkIHRvIGJlIGEgbXVsdGlwbGUgb2YgNCAqYW5kKiBub24temVyby4gVGhlIGxvb3AgY29uZGl0aW9uIGB3aGlsZSAoc2l6ZSBcdTAwM2UgbGltaXQpYCBvbmx5IGV4ZWN1dGVzIGlmIGBzaXplYCBpcyBncmVhdGVyIHRoYW4gNTEyIGFuZCBpcyBuZXZlciBkZWNyZWFzZWQgYnkgNC4gVGhlcmVmb3JlIGBnZXRfcmVnaXN0ZXJzYCBpcyBuZXZlciBjYWxsZWQgd2l0aCBgc2l6ZSA9IDBgLiBTbywgbm8gbWVtb3J5IGlzIGxlZnQgdW5pbml0aWFsaXplZC5cblxuU28sIGluIGBnZW5lcmljX29jcF9yZWFkYCB0aGVyZSdzIG5vIHdheSB0byBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIGEgYmFkIHNpemUuIEluIGBnZW5lcmljX29jcF93cml0ZWAgdGhlcmUgaXMgYSB2ZXJ5IHNwZWNpZmljIGNhc2Ugd2hlcmUgaXQgKmNvdWxkKiBzZW5kIGEgMCBsZW5ndGggd3JpdGUuIEJ1dCBpdCBkb2VzICpub3QqIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gYGttZW1kdXBgIGhhbmRsZXMgYSBzaXplIG9mIDAuIGB1c2JfY29udHJvbF9tc2dgIGlzIHNhZmUgd2l0aCBhIHNpemUgb2YgemVyby4gSXQgY291bGQgY2F1c2UgYSBmdW5jdGlvbmFsIGJ1ZyBpZiB0aGUgVVNCIGRldmljZSBkb2Vzbid0IGhhbmRsZSB6ZXJvLWxlbmd0aCBjb250cm9sIG1lc3NhZ2VzLCBidXQgdGhpcyBpc24ndCBhIG1lbW9yeSBzYWZldHkgaXNzdWUuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBvbmx5IHJlZmFjdG9ycyB0aGUgY2h1bmtpbmcgYW5kIG1pZ2h0IGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGRldmljZSBieSBzZW5kaW5nIGEgMC1sZW5ndGggY29udHJvbCBtZXNzYWdlIGluIGEgdmVyeSBwYXJ0aWN1bGFyIGNhc2UuIFRoaXMgY2hhbmdlIGhhcyBubyBpbXBhY3Qgb24gS01TQU4gZnV6emluZy4gSXQncyBub3QgYSBtZW1vcnkgbGVhaywgaXQncyBub3QgbWVtb3J5IGNvcnJ1cHRpb24sIGl0J3MganVzdCBhIHJlZmFjdG9yaW5nIHRoYXQgKmNvdWxkKiBjcmVhdGUgYSBmdW5jdGlvbmFsIGJ1ZyB3aGljaCBpcyBub3QgS01TQU4ncyBjb25jZXJuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTA5MCwiT3V0cHV0VG9rZW5zIjozNDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjE6MDI6NDEuMTUzMzU2NjI1WiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNodW5raW5nIGxvb3BzIGluIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBmb3IgdGhlIHI4MTUyIGRyaXZlci4gSW4gYGdlbmVyaWNfb2NwX3dyaXRlYCwgaWYgYHNpemUgPT0gNGAgYW5kIGBieWVuICE9IEJZVEVfRU5fRFdPUkRgLCBgc2l6ZWAgaXMgZGVjcmVtZW50ZWQgYnkgNCB0byAwLiBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGB3aGlsZSAoc2l6ZSlgIGFuZCBza2lwcGVkIHRoZSBsb29wLCB3aGVyZWFzIHRoZSBuZXcgY29kZSB1c2VzIGB3aGlsZSAoc2l6ZSBcXHUwMDNlIGxpbWl0KWAgYW5kIHVuY29uZGl0aW9uYWxseSBjYWxscyBgc2V0X3JlZ2lzdGVyc2Agd2l0aCB0aGUgcmVtYWluaW5nIGBzaXplYCAod2hpY2ggaXMgMCkuIFRoaXMgcmVzdWx0cyBpbiBhIDAtbGVuZ3RoIGNvbnRyb2wgbWVzc2FnZSBiZWluZyBzZW50IHRvIHRoZSBVU0IgZGV2aWNlLiBBIDAtbGVuZ3RoIHdyaXRlIGFsbG9jYXRlcyBhIGBaRVJPX1NJWkVfUFRSYCB2aWEgYGttZW1kdXAoZGF0YSwgMCwgR0ZQX0tFUk5FTClgIGFuZCBwYXNzZXMgaXQgdG8gYHVzYl9jb250cm9sX21zZ2AsIHdoaWNoIGhhbmRsZXMgMC1sZW5ndGggdHJhbnNmZXJzIHNhZmVseSB3aXRob3V0IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEluIGBnZW5lcmljX29jcF9yZWFkYCwgYHNpemVgIGlzIHZhbGlkYXRlZCB0byBiZSBub24temVybyBhbmQgYSBtdWx0aXBsZSBvZiA0IGluaXRpYWxseSwgYW5kIGlzIG5ldmVyIGRlY3JlbWVudGVkIGJlZm9yZSB0aGUgbG9vcC4gVGh1cywgYGdldF9yZWdpc3RlcnNgIGlzIG5ldmVyIGNhbGxlZCB3aXRoIGBzaXplID0gMGAsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBjb3BpZWQgb3IgZXhwb3NlZC4gU2luY2UgdGhlIHBhdGNoIG9ubHkgaW50cm9kdWNlcyBhIHBvdGVudGlhbCAwLWxlbmd0aCBVU0IgY29udHJvbCBtZXNzYWdlIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcywgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIEFueSBwb3RlbnRpYWwgY3Jhc2hlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjaHVua2luZyBsb29wcyBpbiBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAgZm9yIHRoZSByODE1MiBkcml2ZXIuIEluIGBnZW5lcmljX29jcF93cml0ZWAsIGlmIGBzaXplID09IDRgIGFuZCBgYnllbiAhPSBCWVRFX0VOX0RXT1JEYCwgYHNpemVgIGlzIGRlY3JlbWVudGVkIGJ5IDQgdG8gMC4gVGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBgd2hpbGUgKHNpemUpYCBhbmQgc2tpcHBlZCB0aGUgbG9vcCwgd2hlcmVhcyB0aGUgbmV3IGNvZGUgdXNlcyBgd2hpbGUgKHNpemUgXFx1MDAzZSBsaW1pdClgIGFuZCB1bmNvbmRpdGlvbmFsbHkgY2FsbHMgYHNldF9yZWdpc3RlcnNgIHdpdGggdGhlIHJlbWFpbmluZyBgc2l6ZWAgKHdoaWNoIGlzIDApLiBUaGlzIHJlc3VsdHMgaW4gYSAwLWxlbmd0aCBjb250cm9sIG1lc3NhZ2UgYmVpbmcgc2VudCB0byB0aGUgVVNCIGRldmljZS4gQSAwLWxlbmd0aCB3cml0ZSBhbGxvY2F0ZXMgYSBgWkVST19TSVpFX1BUUmAgdmlhIGBrbWVtZHVwKGRhdGEsIDAsIEdGUF9LRVJORUwpYCBhbmQgcGFzc2VzIGl0IHRvIGB1c2JfY29udHJvbF9tc2dgLCB3aGljaCBoYW5kbGVzIDAtbGVuZ3RoIHRyYW5zZmVycyBzYWZlbHkgd2l0aG91dCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJbiBgZ2VuZXJpY19vY3BfcmVhZGAsIGBzaXplYCBpcyB2YWxpZGF0ZWQgdG8gYmUgbm9uLXplcm8gYW5kIGEgbXVsdGlwbGUgb2YgNCBpbml0aWFsbHksIGFuZCBpcyBuZXZlciBkZWNyZW1lbnRlZCBiZWZvcmUgdGhlIGxvb3AuIFRodXMsIGBnZXRfcmVnaXN0ZXJzYCBpcyBuZXZlciBjYWxsZWQgd2l0aCBgc2l6ZSA9IDBgLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgY29waWVkIG9yIGV4cG9zZWQuIFNpbmNlIHRoZSBwYXRjaCBvbmx5IGludHJvZHVjZXMgYSBwb3RlbnRpYWwgMC1sZW5ndGggVVNCIGNvbnRyb2wgbWVzc2FnZSBhbmQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBBbnkgcG90ZW50aWFsIGNyYXNoZXMgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow6q8zg[1] Phase: Succeeded StartedAt: 2026-08-22 21:02:51 +0000 UTC FinishedAt: 2026-08-22 21:02:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-22 21:02:51 +0000 UTC FinishedAt: 2026-08-22 21:02:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[2] Phase: Running StartedAt: 2026-08-22 21:02:51 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-08-22 21:02:51 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-22 21:02:51 +0000 UTC FinishedAt: 2026-08-22 21:03:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-22 21:02:51 +0000 UTC FinishedAt: 2026-08-22 21:02:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6q8zg/series-workflow6q8zg-convert-artifact-4151728419/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-22 21:03:02 +0000 UTC FinishedAt: 2026-08-22 21:19:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-22 21:03:02 +0000 UTC FinishedAt: 2026-08-22 21:19:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*97b2392b-9154-486a-a66f-ff709a6eef39,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-workflow6q8zg/series-workflow6q8zg-convert-artifact-4151728419/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": "9b7c90de-9aba-4678-9796-bd14e7361f9c", "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-workflow6q8zg/series-workflow6q8zg-build-action-2536557969/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-22 21:03:02 +0000 UTC FinishedAt: 2026-08-22 21:19:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*97b2392b-9154-486a-a66f-ff709a6eef39,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-workflow6q8zg/series-workflow6q8zg-convert-artifact-4151728419/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": "9b7c90de-9aba-4678-9796-bd14e7361f9c", "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-workflow6q8zg/series-workflow6q8zg-build-action-2536557969/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-22 21:19:41 +0000 UTC FinishedAt: 2026-08-22 21:19:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-22 21:19:41 +0000 UTC FinishedAt: 2026-08-22 21:19:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-22 21:19:41 +0000 UTC FinishedAt: 2026-08-22 21:19:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-22 21:19:41 +0000 UTC FinishedAt: 2026-08-22 21:19:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6q8zg/series-workflow6q8zg-convert-artifact-3725914458/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-22 21:19:51 +0000 UTC FinishedAt: 2026-08-22 21:21:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-22 21:19:51 +0000 UTC FinishedAt: 2026-08-22 21:21:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9b7c90de-9aba-4678-9796-bd14e7361f9c,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-workflow6q8zg/series-workflow6q8zg-build-action-2536557969/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-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-22 21:21:53 +0000 UTC FinishedAt: 2026-08-22 21:21:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-22 21:21:53 +0000 UTC FinishedAt: 2026-08-22 21:21:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-22 21:21:53 +0000 UTC FinishedAt: 2026-08-22 21:38:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-22 21:21:53 +0000 UTC FinishedAt: 2026-08-22 21:38:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*97b2392b-9154-486a-a66f-ff709a6eef39,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-workflow6q8zg/series-workflow6q8zg-convert-artifact-3725914458/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": "f3940c2d-a199-4c2f-a02d-122962eb46ea", "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-workflow6q8zg/series-workflow6q8zg-build-action-1399340606/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-22 21:21:53 +0000 UTC FinishedAt: 2026-08-22 21:37:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*97b2392b-9154-486a-a66f-ff709a6eef39,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-workflow6q8zg/series-workflow6q8zg-convert-artifact-3725914458/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": "f3940c2d-a199-4c2f-a02d-122962eb46ea", "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-workflow6q8zg/series-workflow6q8zg-build-action-1399340606/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-22 21:38:07 +0000 UTC FinishedAt: 2026-08-22 21:38:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-22 21:38:07 +0000 UTC FinishedAt: 2026-08-22 21:38:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-22 21:38:07 +0000 UTC FinishedAt: 2026-08-22 21:40:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-22 21:38:07 +0000 UTC FinishedAt: 2026-08-22 21:39:59 +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:*f3940c2d-a199-4c2f-a02d-122962eb46ea,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-workflow6q8zg/series-workflow6q8zg-build-action-1399340606/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-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Running StartedAt: 2026-08-22 21:40:09 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Running StartedAt: 2026-08-22 21:40:09 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*9b7c90de-9aba-4678-9796-bd14e7361f9c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f3940c2d-a199-4c2f-a02d-122962eb46ea,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-workflow6q8zg/series-workflow6q8zg-build-action-2536557969/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-workflow6q8zg/series-workflow6q8zg-build-action-1399340606/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-22 21:40:09 +0000 UTC FinishedAt: 2026-08-22 21:40:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-22 21:40:09 +0000 UTC FinishedAt: 2026-08-22 21:40:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6q8zg/series-workflow6q8zg-convert-artifact-876984847/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-22 21:40:09 +0000 UTC FinishedAt: 2026-08-22 21:40:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-22 21:40:09 +0000 UTC FinishedAt: 2026-08-22 21:40:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-22 21:40:09 +0000 UTC FinishedAt: 2026-08-22 21:40:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Running StartedAt: 2026-08-22 21:40:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6q8zg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8152_probe","rtl8152_open","rtl8152_start_xmit","rtl8152_ioctl","rtl8152_set_mac_address","rtl8152_change_mtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_DRIVERS","USB_RTL8152"],"series_id":"55359059-6b83-4bec-a565-25ff7e16bbbe","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Running StartedAt: 2026-08-22 21:40:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9b7c90de-9aba-4678-9796-bd14e7361f9c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f3940c2d-a199-4c2f-a02d-122962eb46ea,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-workflow6q8zg/series-workflow6q8zg-build-action-2536557969/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-workflow6q8zg/series-workflow6q8zg-build-action-1399340606/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-workflow6q8zg/series-workflow6q8zg-convert-artifact-876984847/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil