Name: series-workflowxdk4m Phase: Running StartedAt: 2026-08-25 23:58:56 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxdk4m[0] Phase: Succeeded StartedAt: 2026-08-25 23:58:56 +0000 UTC FinishedAt: 2026-08-26 00:17:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxdk4m[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 23:58:56 +0000 UTC FinishedAt: 2026-08-26 00:17:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NETFILTER_INGRESS", "NF_CONNTRACK", "NF_TABLES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NETFILTER_INGRESS", "NF_CONNTRACK", "NF_TABLES" ], "series_id": "6bea75eb-00bf-49e8-98fb-49e8c990bfea" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_flow_table_gc_run", "nf_flow_offload_ip_hook" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfZ2NfcnVuJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzIHRvIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCB0byBiYXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRpc3RpY3MgdXBkYXRlcy4gVGhlc2UgZmllbGRzIGFyZSB1cGRhdGVkIHZpYSBgYXRvbWljNjRfYWRkYCBpbiB0aGUgZm9yd2FyZGluZyBwYXRoIGFuZCBwZXJpb2RpY2FsbHkgZmx1c2hlZCB0byB0aGUgY29ubnRyYWNrIGVudHJ5IHZpYSBgYXRvbWljNjRfeGNoZ2AgaW4gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiBcblxuVGhlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkYCBjb250YWluaW5nIHRoZXNlIHR1cGxlcyBpcyBhbHdheXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AgKGluIGBmbG93X29mZmxvYWRfYWxsb2NgKSwgZW5zdXJpbmcgdGhlIG5ldyBhdG9taWMgY291bnRlcnMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBjb3VudGVycyBhcmUgbm90IGRpcmVjdGx5IGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCB0aGVpciB2YWx1ZXMgb25seSByZXByZXNlbnQgcGFja2V0IGFuZCBieXRlIGNvdW50cywgcHJlY2x1ZGluZyBhbnkgaW5mb3JtYXRpb24gbGVhay4gXG5cbldoaWxlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCBpcyBzb21ldGltZXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgdXNlZCBhcyBhIGxvb2t1cCBrZXkgKGUuZy4sIGluIGBuZl9mbG93X29mZmxvYWRfbG9va3VwYCksIHRoZSBoYXNoIGFuZCBjb21wYXJpc29uIGZ1bmN0aW9ucyBvbmx5IG9wZXJhdGUgb24gdGhlIGZpZWxkcyB1cCB0byB0aGUgYF9faGFzaGAgbWFya2VyLCB3aGljaCBwcmVjZWRlcyB0aGUgbmV3bHkgYWRkZWQgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcy4gVGh1cywgdGhlIHVuaW5pdGlhbGl6ZWQgc3RhdGUgb2YgdGhlc2UgZmllbGRzIGluIHN0YWNrLWFsbG9jYXRlZCBrZXlzIGlzIG5ldmVyIHJlYWQuXG5cbkFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBidWdzIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBzdGFuZGFyZCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjb3JlIGxvZ2ljIHRvIHVzZSBhdG9taWMgb3BlcmF0aW9ucyBmb3IgcGFja2V0IGFuZCBieXRlIGNvdW50ZXJzIGluIHRoZSBmYXN0IHBhdGggKG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKSwgYW5kIGRlZmVycyB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZXNlIGNvdW50ZXJzIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHN5c3RlbSB0byB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHN0ZXAgKG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBmbG93IHRhYmxlIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgc3RhdGlzdGljcyBhcmUgdHJhY2tlZCBhbmQgc3luY2hyb25pemVkLCB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgY29uY3VycmVuY3kgaXNzdWVzIG9yIGJ1Z3MgaW4gdGhlIEdDIHByb2Nlc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiNjY3Y2QzZGE2N2U2ODQyZjM3MTIxZDc1ODk3YzY4MjdkNzM3N2Q5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMDA6MTM6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbmluZGV4IGYyZTI3NzFmMTg4ZjQuLjYwNjAyMDIxMzNjNzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5AQCAtMTcxLDYgJiM0MzsxNzEsOSBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHtcbiBcdFx0XHR1MzJcdFx0aWlmaWR4O1xuIFx0XHR9IHRjO1xuIFx0fTtcbiYjNDM7XG4mIzQzO1x0YXRvbWljNjRfdFx0XHRcdHBhY2tldHM7XG4mIzQzO1x0YXRvbWljNjRfdFx0XHRcdGJ5dGVzO1xuIH07XG4gXG4gc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbmluZGV4IDAzMjQxZDRiZmQ1ZTguLmExZjM3Y2E5NTZiOGYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG5AQCAtMTMsNiAmIzQzOzEzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuaFx1MDAzZVxuIFxuIHN0YXRpYyBERUZJTkVfTVVURVgoZmxvd3RhYmxlX2xvY2spO1xuIHN0YXRpYyBMSVNUX0hFQUQoZmxvd3RhYmxlcyk7XG5AQCAtNTY1LDExICYjNDM7NTY2LDI5IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZXh0ZW5kX2N0X3RpbWVvdXQoc3RydWN0IG5mX2Nvbm4gKmN0KVxuIFx0bmZfY3RfcHV0KGN0KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIF9fbmZfZmxvd19zeW5jX2N0X3N0YXRzKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIGludCBkaXIpXG4mIzQzO3tcbiYjNDM7XHR1NjQgcGt0cywgYnl0ZXM7XG4mIzQzO1xuJiM0MztcdHBrdHMgPSBhdG9taWM2NF94Y2hnKFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUucGFja2V0cywgMCk7XG4mIzQzO1x0Ynl0ZXMgPSBhdG9taWM2NF94Y2hnKFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUuYnl0ZXMsIDApO1xuJiM0MztcdG5mX2N0X2FjY3RfYWRkKGZsb3ctXHUwMDNlY3QsIGRpciwgcGt0cywgYnl0ZXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuZl9mbG93X3N5bmNfY3Rfc3RhdHMoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbiYjNDM7e1xuJiM0MztcdF9fbmZfZmxvd19zeW5jX2N0X3N0YXRzKGZsb3csIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xuJiM0MztcdF9fbmZfZmxvd19zeW5jX2N0X3N0YXRzKGZsb3csIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4gXHRcdFx0XHQgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgdm9pZCAqZGF0YSlcbiB7XG4tXHRib29sIHRlYXJkb3duID0gdGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncyk7XG4mIzQzO1x0Ym9vbCB0ZWFyZG93bjtcbiYjNDM7XG4mIzQzO1x0bmZfZmxvd19zeW5jX2N0X3N0YXRzKGZsb3cpO1xuIFxuJiM0MztcdHRlYXJkb3duID0gdGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncyk7XG4gXHRpZiAobmZfZmxvd19oYXNfZXhwaXJlZChmbG93KSB8fFxuIFx0ICAgIG5mX2N0X2lzX2R5aW5nKGZsb3ctXHUwMDNlY3QpIHx8XG4gXHQgICAgIW5mX2Zsb3dfZHN0X2NoZWNrKFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUxdLnR1cGxlKSB8fFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbmluZGV4IGM4YzI5YTlhMTY4NDQuLjY2YmU4MTVhYzJmZWIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbkBAIC01MDksOCAmIzQzOzUwOSwxMCBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRpcF9kZWNyZWFzZV90dGwoaXBoKTtcbiBcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcbiBcbi1cdGlmIChmbG93X3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcbi1cdFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cdTAwM2VjdCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpciwgc2tiLVx1MDAzZWxlbik7XG4mIzQzO1x0aWYgKGZsb3dfdGFibGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GX0ZMT1dUQUJMRV9DT1VOVEVSKSB7XG4mIzQzO1x0XHRhdG9taWM2NF9hZGQoMSwgXHUwMDI2dHVwbGVoYXNoLVx1MDAzZXR1cGxlLnBhY2tldHMpO1xuJiM0MztcdFx0YXRvbWljNjRfYWRkKHNrYi1cdTAwM2VsZW4sIFx1MDAyNnR1cGxlaGFzaC1cdTAwM2V0dXBsZS5ieXRlcyk7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIDE7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9JTkdSRVNTJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9mbG93X3RhYmxlX2djX3J1biYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfaXBfaG9vayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgY29yZSBsb2dpYyB0byB1c2UgYXRvbWljIG9wZXJhdGlvbnMgZm9yIHBhY2tldCBhbmQgYnl0ZSBjb3VudGVycyBpbiB0aGUgZmFzdCBwYXRoIChuZl9mbG93X29mZmxvYWRfZm9yd2FyZCksIGFuZCBkZWZlcnMgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGVzZSBjb3VudGVycyB0byB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBzeXN0ZW0gdG8gdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBzdGVwIChuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IHN0YXRpc3RpY3MgYXJlIHRyYWNrZWQgYW5kIHN5bmNocm9uaXplZCwgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBidWdzIGluIHRoZSBHQyBwcm9jZXNzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjY2N2NkM2RhNjdlNjg0MmYzNzEyMWQ3NTg5N2M2ODI3ZDczNzdkOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDAwOjEzOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKaW5kZXggZjJlMjc3MWYxODhmNC4uNjA2MDIwMjEzM2M3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCkBAIC0xNzEsNiAmIzQzOzE3MSw5IEBAIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgewogCQkJdTMyCQlpaWZpZHg7CiAJCX0gdGM7CiAJfTsKJiM0MzsKJiM0MzsJYXRvbWljNjRfdAkJCXBhY2tldHM7CiYjNDM7CWF0b21pYzY0X3QJCQlieXRlczsKIH07CiAKIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKaW5kZXggMDMyNDFkNGJmZDVlOC4uYTFmMzdjYTk1NmI4ZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jCkBAIC0xMyw2ICYjNDM7MTMsNyBAQAogI2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYWNjdC5oJmd0OwogCiBzdGF0aWMgREVGSU5FX01VVEVYKGZsb3d0YWJsZV9sb2NrKTsKIHN0YXRpYyBMSVNUX0hFQUQoZmxvd3RhYmxlcyk7CkBAIC01NjUsMTEgJiM0Mzs1NjYsMjkgQEAgc3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9leHRlbmRfY3RfdGltZW91dChzdHJ1Y3QgbmZfY29ubiAqY3QpCiAJbmZfY3RfcHV0KGN0KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIF9fbmZfZmxvd19zeW5jX2N0X3N0YXRzKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIGludCBkaXIpCiYjNDM7ewomIzQzOwl1NjQgcGt0cywgYnl0ZXM7CiYjNDM7CiYjNDM7CXBrdHMgPSBhdG9taWM2NF94Y2hnKCZhbXA7Zmxvdy0mZ3Q7dHVwbGVoYXNoW2Rpcl0udHVwbGUucGFja2V0cywgMCk7CiYjNDM7CWJ5dGVzID0gYXRvbWljNjRfeGNoZygmYW1wO2Zsb3ctJmd0O3R1cGxlaGFzaFtkaXJdLnR1cGxlLmJ5dGVzLCAwKTsKJiM0MzsJbmZfY3RfYWNjdF9hZGQoZmxvdy0mZ3Q7Y3QsIGRpciwgcGt0cywgYnl0ZXMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBuZl9mbG93X3N5bmNfY3Rfc3RhdHMoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdykKJiM0Mzt7CiYjNDM7CV9fbmZfZmxvd19zeW5jX2N0X3N0YXRzKGZsb3csIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpOwomIzQzOwlfX25mX2Zsb3dfc3luY19jdF9zdGF0cyhmbG93LCBGTE9XX09GRkxPQURfRElSX1JFUExZKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLAogCQkJCSAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKQogewotCWJvb2wgdGVhcmRvd24gPSB0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCAmYW1wO2Zsb3ctJmd0O2ZsYWdzKTsKJiM0MzsJYm9vbCB0ZWFyZG93bjsKJiM0MzsKJiM0MzsJbmZfZmxvd19zeW5jX2N0X3N0YXRzKGZsb3cpOwogCiYjNDM7CXRlYXJkb3duID0gdGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgJmFtcDtmbG93LSZndDtmbGFncyk7CiAJaWYgKG5mX2Zsb3dfaGFzX2V4cGlyZWQoZmxvdykgfHwKIAkgICAgbmZfY3RfaXNfZHlpbmcoZmxvdy0mZ3Q7Y3QpIHx8CiAJICAgICFuZl9mbG93X2RzdF9jaGVjaygmYW1wO2Zsb3ctJmd0O3R1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX09SSUdJTkFMXS50dXBsZSkgfHwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKaW5kZXggYzhjMjlhOWExNjg0NC4uNjZiZTgxNWFjMmZlYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKQEAgLTUwOSw4ICYjNDM7NTA5LDEwIEBAIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAlpcF9kZWNyZWFzZV90dGwoaXBoKTsKIAlza2JfY2xlYXJfdHN0YW1wKHNrYik7CiAKLQlpZiAoZmxvd190YWJsZS0mZ3Q7ZmxhZ3MgJmFtcDsgTkZfRkxPV1RBQkxFX0NPVU5URVIpCi0JCW5mX2N0X2FjY3RfdXBkYXRlKGZsb3ctJmd0O2N0LCB0dXBsZWhhc2gtJmd0O3R1cGxlLmRpciwgc2tiLSZndDtsZW4pOwomIzQzOwlpZiAoZmxvd190YWJsZS0mZ3Q7ZmxhZ3MgJmFtcDsgTkZfRkxPV1RBQkxFX0NPVU5URVIpIHsKJiM0MzsJCWF0b21pYzY0X2FkZCgxLCAmYW1wO3R1cGxlaGFzaC0mZ3Q7dHVwbGUucGFja2V0cyk7CiYjNDM7CQlhdG9taWM2NF9hZGQoc2tiLSZndDtsZW4sICZhbXA7dHVwbGVoYXNoLSZndDt0dXBsZS5ieXRlcyk7CiYjNDM7CX0KIAogCXJldHVybiAxOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTIyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIEZsb3cgVGFibGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AgYW5kIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBjb3VudGVycywgYm90aCBgYXRvbWljNjRfdGAgdHlwZXMsIHRvIHRoZSBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIGhvdyB0aGVzZSBjb3VudGVycyBhcmUgYmVpbmcgdXNlZC4KClRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc3luY2hyb25pemF0aW9uIHN0ZXAsIGNhbGxpbmcgYG5mX2Zsb3dfc3luY19jdF9zdGF0cyhmbG93KWAgd2l0aGluIGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAuIFRoaXMgdWx0aW1hdGVseSBjYWxscyBgbmZfY3RfYWNjdF9hZGRgIHRvIHVwZGF0ZSB0aGUgY29ubmVjdGlvbiB0cmFja2luZyAoY29ubnRyYWNrKSBzdGF0cy4gQnV0IGhlcmUmIzM5O3MgdGhlIGtpY2tlcjogYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCwgd2hpY2ggaXMgKmluIHRoZSBmYXN0IHBhdGgqIG9mIHBhY2tldCBmb3J3YXJkaW5nLCBub3cgZGlyZWN0bHkgdXNlcyBgYXRvbWljNjRfYWRkYCB0byBpbmNyZW1lbnQgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIG9uIHRoZSB0dXBsZSBpdHNlbGYuIEl0JiMzOTtzIHNraXBwaW5nIHRoZSBgbmZfY3RfYWNjdF91cGRhdGVgIGNhbGwuCgpUaGlzIGlzIGEgY2xldmVyIG9wdGltaXphdGlvbi4gV2UmIzM5O3JlIGF2b2lkaW5nIHBvdGVudGlhbCBsb2NrIGNvbnRlbnRpb24gb3Igc2xvd2Rvd25zIHRoYXQgYG5mX2N0X2FjY3RfdXBkYXRlYCBsaWtlbHkgaW50cm9kdWNlcyBieSB1cGRhdGluZyB0aGUgY29ubnRyYWNrIHN0YXRzIGRpcmVjdGx5IGFuZCBkZWZlcnJpbmcgc3luY2hyb25pemF0aW9uIHVudGlsIGdhcmJhZ2UgY29sbGVjdGlvbi4gRWZmZWN0aXZlbHksIHRoaXMgaXMgbW92aW5nIHRoZSBzdGF0IHVwZGF0ZXMgdG8gYSBtb3JlIGFzeW5jaHJvbm91cyBhcHByb2FjaCBmb3IgcGVyZm9ybWFuY2UuCgpUaGlzIGlzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBoYW5kbGVzIHN0YXRpc3RpY3MuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLCBhbmQgdGhhdCBtYWtlcyBpdCBwcmltZSB0ZXJyaXRvcnkgZm9yIGZ1enppbmcuIEl0JiMzOTtzIGNyaXRpY2FsIHRvIG1ha2Ugc3VyZSB0aGlzIG5ldyBmYXN0LXBhdGggYXBwcm9hY2ggd29ya3MgY29ycmVjdGx5IGluIHRoZSBwcmVzZW5jZSBvZiByYWNlIGNvbmRpdGlvbnMgYW5kIGVkZ2UgY2FzZXMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWcgb3B0aW9ucyBlbmFibGUgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcmVsZXZhbnQgZmlsZXMgYXJlIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jYCBhbmQgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jYCDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd190YWJsZV9jb3JlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE0Mj1vYmotJChDT05GSUdfTkZfRkxPV19UQUJMRSlcdCYjNDM7PSBuZl9mbG93X3RhYmxlLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQzOm5mX2Zsb3dfdGFibGUtb2Jqc1x0XHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ0LVx0XHRcdFx0ICAgbmZfZmxvd190YWJsZV9wYXRoLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODI4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQ29uZmlndXJhdGlvbiBTcGFjZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aCBgQ09ORklHX05GX0ZMT1dfVEFCTEVgLiBUaGF0JiMzOTtzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBpdGVtIHdlIG5lZWQgdG8gZm9jdXMgb24uIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGlzIGp1c3QgYSBzaW5nbGUgZmxhZyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLCBvciBpZiB0aGVyZSYjMzk7cyBhIGZhbWlseSBvZiByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gcXVpY2tseSBleHBsb3JlIHRoZSBhZGphY2VudCBjb25maWd1cmF0aW9uIHNwYWNlLiBBcmUgdGhlcmUgb3RoZXIgZmxhZ3MgdGhhdCBpbnRlcmFjdCB3aXRoIHRoaXMgb25lLCBwZXJoYXBzIGRlcGVuZGVuY2llcywgb3IgbW9yZSBncmFudWxhciBjb250cm9scyBmb3IgdGhlIGZsb3cgdGFibGUgZnVuY3Rpb25hbGl0eT8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSBpdCYjMzk7cyByYXJlbHkganVzdCBvbmUgc29saXRhcnkgc3dpdGNoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZWxzZSBpcyBsdXJraW5nIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9GTE9XX1RBQkxFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzIxOmNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjM3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTkZfRkxPV19UQUJMRSBLY29uZmlnKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGBORl9GTE9XX1RBQkxFYCBLY29uZmlnIG9wdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLiBNeSBicmFpbiBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgcGxhY2VzIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGl0LiBUaGF0IG1lYW5zIEkmIzM5O2xsIGJlIGdvaW5nIHN0cmFpZ2h0IGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGZpbmQgdGhlIHNwZWNpZmljcywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGRlcGVuZGVuY2llcyBvbiByZWxldmFudCBuZXR3b3JraW5nIGZlYXR1cmVzIOKAkyB0aGluZ3MgbGlrZSBjb25uZWN0aW9uIHRyYWNraW5nLCBOQVQsIG9yIHNwZWNpZmljIGhhcmR3YXJlIG9mZmxvYWQgY2FwYWJpbGl0aWVzLiBUaGlzIGFsc28gbGlrZWx5IGNvbnRyb2xzIHRoZSBpbmNsdXNpb24gb2YgdGhlIGNvcmUgZmxvdyB0YWJsZSBjb2RlIGl0c2VsZiBhbmQgYXNzb2NpYXRlZCBtb2R1bGVzLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBoaWRkZW4gbnVhbmNlcyBpbiB0aGUgZGVwZW5kZW5jaWVzLiBJIGFtIGhvcGluZyB0byBnZXQgaW5zaWdodCBpbnRvIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0IHdpdGhpbiBteSBzcGVjaWZpYyB1c2UgY2FzZSwgYW5kIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlc2Ugc2V0dGluZ3MgYXJlIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcxMDpcdFxuIDcxMTpcdGNvbmZpZyBORl9GTE9XX1RBQkxFXG4gNzEyOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcJiMzNDtcbiA3MTM6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0lOR1JFU1NcbiA3MTQ6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4gNzE1Olx0XHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xuIDcxNjpcdFx0aGVscFxuIDcxNzpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBmbG93IHRhYmxlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUuXG4gNzE4Olx0XG4gNzE5Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4gNzIwOlx0XG4gNzIxOlx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXG4gNzIyOlx0XHRib29sIFwmIzM0O1N1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXCYjMzQ7XG4gNzIzOlx0XHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcbiA3MjQ6XHRcdGRlcGVuZHMgb24gUFJPQ19GU1xuIDcyNTpcdFx0aGVscFxuIDcyNjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGZvciB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIHN0YXRpc3RpY3NcbiA3Mjc6XHRcdCAgdG8gYmUgc2hvd24gaW4gcHJvY2ZzIHVuZGVyIG5ldC9uZXRmaWx0ZXIvbmZfZmxvd3RhYmxlLlxuIDcyODpcdFxuIDcyOTpcdGNvbmZpZyBORVRGSUxURVJfWFRBQkxFU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NTkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIE5GX0ZMT1dfVEFCTEUgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIFRoZSBgTkZfRkxPV19UQUJMRWAgbW9kdWxlIGlzIGluIHBsYXkuIEkgbmVlZCB0byBxdWlja2x5IHJ1biB0aHJvdWdoIGl0cyBkZXBlbmRlbmNpZXMgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgcHJvcGVybHkgZW5hYmxlZCBhbmQgdW5kZXJzdG9vZCBmcm9tIGEgY29uZmlndXJhdGlvbiBhbmQgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyB0aGF0IGl0IHJlbGllcyBvbiBgTkVURklMVEVSX0lOR1JFU1NgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9UQUJMRVNgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGZsb3cgdGFibGVzIGFyZSBmdW5kYW1lbnRhbGx5IGFib3V0IGluZ3Jlc3MgaGFuZGxpbmcsIGNvbm5lY3Rpb24gdHJhY2tpbmcgZm9yIHN0YXRlZnVsIG9wZXJhdGlvbiwgYW5kIG9mIGNvdXJzZSwgbGV2ZXJhZ2luZyB0aGUgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlIHdpdGggaXRzIHRhYmxlLWJhc2VkIHJ1bGVzLiBJdCB3b3VsZCBiZSBhIHByb2JsZW0gaWYgdGhvc2UgYXJlbiYjMzk7dCBhdmFpbGFibGUsIG9yIGFyZSBzb21laG93IG1pc2NvbmZpZ3VyZWQuCgpOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGJlY2F1c2UgaXQmIzM5O3MgYWx3YXlzIGdvb2QgcHJhY3RpY2UsIGxldCBtZSBhbHNvIGJyaWVmbHkgbG9vayBhdCBgTkZfRkxPV19UQUJMRV9JTkVUYC4gSXQmIzM5O3MgcG9zc2libGUgSSYjMzk7bGwgbmVlZCBpdHMgZnVuY3Rpb25hbGl0eSwgZGVwZW5kaW5nIG9uIHRoZSBleGFjdCB0cmFmZmljIGZsb3dzIEkmIzM5O20gd29ya2luZyB3aXRoLiBUaGlzIGNoZWNrIGVuc3VyZXMgSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSBjb25maWd1cmF0aW9uIGltcGxpY2F0aW9ucywgYW5kIGVuc3VyZXMgdGhhdCBJJiMzOTt2ZSBhY2NvdW50ZWQgZm9yIElQdjQgYW5kIElQdjYgdHJhZmZpYy4gSXTigJlzIGFsc28gaW1wb3J0YW50IHRoYXQgSSB0YWtlIHRoZSB0aW1lIHRvIGNvbnNpZGVyIGhvdyBlYWNoIGZlYXR1cmUgaXMgaW50ZXItcmVsYXRlZCBhbmQgZGVwZW5kZW50IG9uIG9uZSBhbm90aGVyIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhlIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzAwOlx0XG4gNzAxOlx0ZW5kaWYgIyBORl9UQUJMRVNcbiA3MDI6XHRcbiA3MDM6XHRjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXG4gNzA0Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXCYjMzQ7XG4gNzA1Olx0XHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcbiA3MDY6XHRcdGhlbHBcbiA3MDc6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgc3VwcG9ydC5cbiA3MDg6XHRcbiA3MDk6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiA3MTA6XHRcbiA3MTE6XHRjb25maWcgTkZfRkxPV19UQUJMRVxuIDcxMjpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbW9kdWxlXCYjMzQ7XG4gNzEzOlx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9JTkdSRVNTXG4gNzE0Olx0XHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzI4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmxvdyBUYWJsZSBPZmZsb2FkIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaGl0cyBgbmZfZmxvd190YWJsZV9jb3JlLmNgIGFuZCBgbmZfZmxvd190YWJsZV9pcC5jYC4gVGhlc2UgYXJlIGNvbXBpbGVkIGludG8gYG5mX2Zsb3dfdGFibGUub2AsIHdoaWNoIG1ha2VzIHNlbnNlIHNpbmNlIGBDT05GSUdfTkZfRkxPV19UQUJMRWAgaXMgZW5hYmxlZC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAgYW5kIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSwgc28gSSBzaG91bGQgc2VlIGlmIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGVzZSBmaWxlcyBhcmUgYWxzbyBpbXBhY3RlZC4KCkhhbmcgb24uLi4gYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBpcyBpbiBgbmZfZmxvd190YWJsZV9pcC5jYCwgbm90IHRoZSBjb3JlIGZpbGUuIEkgd29uZGVyIGlmIHRoZXJlJiMzOTtzIGEgc2ltaWxhciBmdW5jdGlvbiBpbiBgbmZfZmxvd190YWJsZV9pcHY2LmNgIHRoYXTigJlzIGJlZW4gb3Zlcmxvb2tlZCBoZXJlLiBDaGVja2luZyB0aGUgZGlmZiBhZ2Fpbi4uLiBub3BlLCBqdXN0IGBuZl9mbG93X3RhYmxlX2lwLmNgLiBPaywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIGBuZl9mbG93X3RhYmxlX2NvcmUuY2AuCgpSaWdodCwgZm9jdXNpbmcgb24gYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYC4gSG9sZCBvbiBhIHNlY29uZCwgaXNuJiMzOTt0IGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAgYSBmYXN0LXBhdGggZnVuY3Rpb24/IFRoYXQgbWlnaHQgbWFrZSBpdCBhIG1vcmUgc2Vuc2l0aXZlIGFyZWEsIHNvIGxldOKAmXMgYmUgY2FyZWZ1bCB3aGVuIHJldmlld2luZyB0aGlzIGNoYW5nZS4gSSBzaG91bGQgYmUgYXdhcmUgdGhhdCBpdCBtaWdodCBpbnRyb2R1Y2Ugc29tZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucy4KCkxldCBtZSBhbHNvIGNoZWNrIGBuZl9mbG93X3N5bmNfY3Rfc3RhdHNgIGFuZCBgX19uZl9mbG93X3N5bmNfY3Rfc3RhdHNgLiBMb29rcyBsaWtlIHRoZXkmIzM5O3JlIHN0YXRpYywgYnV0IHRoYXQgZG9lc24mIzM5O3QgbWVhbiB0aGV5IGFyZW4mIzM5O3QgaW1wb3J0YW50OyB0aGV5IG1heSBiZSBpbXBvcnRhbnQgaW50ZXJuYWwgZnVuY3Rpb25zLiBBbmQsIGFsdGhvdWdoIGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAgaXMgc3RhdGljLCBpdCYjMzk7cyBiZWluZyBwYXNzZWQgYXMgYSBjYWxsYmFjayBvciBjYWxsZWQgZnJvbSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24sIHRoYXTigJlzIGFub3RoZXIgYXJlYSB0byBleGFtaW5lLiBHb3R0YSBkaWcgZGVlcGVyIG9uIGFsbCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NTc4PXN0YXRpYyB2b2lkIG5mX2Zsb3dfc3luY19jdF9zdGF0cyhzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTgzLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo1ODQ6c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTg1LVx0XHRcdFx0ICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz02MjE9dm9pZCBuZl9mbG93X3RhYmxlX2djX3J1bihzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02MjIte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2MjM6XHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd190YWJsZSwgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAsIE5VTEwpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02MjQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzQ5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIEZsb3cgVGFibGUgR2FyYmFnZSBDb2xsZWN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHdvcmtzIGZvciB0aGUgbmV0d29yayBmbG93IHRhYmxlLiBUaGUgZW50cnkgcG9pbnQsIHRoZSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgKmV4ZWN1dGVzKiB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHJvdXRpbmUsIGlzIGBuZl9mbG93X3RhYmxlX2djX3J1bmAuIEFscmlnaHQsIHRoYXQmIzM5O3Mgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBMZXQmIzM5O3MgZ2V0IHJpZ2h0IGludG8gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYC4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMsIHRoZSBjb25kaXRpb25zIGZvciBldmljdGlvbiwgdGhlIGFnaW5nIG1lY2hhbmlzbXMsIHRoZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UsIGFsbCBvZiBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHNlY3JldHMgaXQgaG9sZHMuIFRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX2djX3J1biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NTg0PXN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02MjAtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjYyMTp2b2lkIG5mX2Zsb3dfdGFibGVfZ2NfcnVuKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYyMi17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz02MjY9c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjMwLVx0Zmxvd190YWJsZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmZfZmxvd3RhYmxlLCBnY193b3JrLndvcmspO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2MzE6XHRuZl9mbG93X3RhYmxlX2djX3J1bihmbG93X3RhYmxlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjMyLVx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsIFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlZ2Nfd29yaywgSFopO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NzgyPXZvaWQgbmZfZmxvd190YWJsZV9mcmVlKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTEtXHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd190YWJsZSwgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwLCBOVUxMKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzkyOlx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc5My1cdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaF9jbGVhbnVwKGZsb3dfdGFibGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE2NT12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaF9jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNjgtXHRcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTE2OTpcdFx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd3RhYmxlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3MC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE5NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipGb2N1cyBTeW1ib2wgU2VsZWN0aW9uIC0gQW4gSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBzZWUsIEkmIzM5O20gdHJ5aW5nIHRvIGlkZW50aWZ5IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGBGb2N1c1N5bWJvbHNgLiBDb25zaWRlcmluZyB0aGUgbmF0dXJlIG9mIG5ldGZpbHRlciBmbG93IHRhYmxlcyBhbmQgb2ZmbG9hZGluZywgd2hlcmUgc2hvdWxkIEkgc3RhcnQ/ICpuZl9mbG93X3RhYmxlX2djX3J1biogbG9va3MgcHJvbWlzaW5nLiBHYXJiYWdlIGNvbGxlY3Rpb24gcm91dGluZXMgYXJlIG9mdGVuIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGFuZCBmcmVxdWVudGx5IHRvdWNoZWQuIFRoYXQmIzM5O3MgYSBzdHJvbmcgY29udGVuZGVyLCBJJiMzOTtsbCBrZWVwIHRoYXQgb25lIGluIG1pbmQuCgpXYWl0IGEgc2Vjb25kLCBsZXQgbWUgY2hlY2sgc29tZXRoaW5nLiBBaCwgeWVzLCByaWdodC4gSSBuZWVkIHRvIGJlIG1vcmUgcHJlY2lzZSBhYm91dCB0aGUgbG9jYXRpb24gb2YgdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gKm5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKiwgbm93IHRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gYG5mX2Zsb3dfdGFibGVgIG9mZmxvYWRpbmcuIE5vdyB3aGVyZSBkb2VzIHRoYXQgc2l0PyBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHdpdGhpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNgLiBUaGF0IGZpbGUgbG9jYXRpb24gd2lsbCBjb21lIGluIGhhbmR5IGxhdGVyLiBJIG5lZWQgdG8gbm90ZSB3aGVyZSB0aGUgY29kZSByZXNpZGVzLCB0byB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSByZXN0IG9mIHRoZSBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd19vZmZsb2FkX2ZvcndhcmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00NTc9bmZfZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ2Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ2ODpzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NjktXHRcdFx0XHQgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTg2Nj1uZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg4NS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjg4NjpcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODg3LVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc5MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBGbG93IE9mZmxvYWQgSG9va3MqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGZsb3cgb2ZmbG9hZCwgYW5kIHRoZSBwcmltYXJ5IGhvb2sgZnVuY3Rpb24gc2VlbXMgdG8gYmUgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYC4gTmF0dXJhbGx5LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjb25maXJtIHRoYXQgdGhlIElQdjQgaG9vayBpc24mIzM5O3QgdGhlIHNvbGUgcG9pbnQgb2YgaW50ZXJlc3QuIEEgZ29vZCBwcmFjdGljZSBpcyB0byBhbHdheXMgY29uc2lkZXIgcG90ZW50aWFsIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIGNvdmVyIGFsbCBiYXNlcyBhbmQgZW5zdXJlIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJiMzOTtzIGJlaGF2aW9yLiBUaW1lIHRvIGNoZWNrIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYCBhcyB3ZWxsLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGludGVycGxheSBvciBwb3RlbnRpYWwgZm9yIHJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgdGhlIHdob2xlIHBpY3R1cmUsIElQdjQgKmFuZCogSVB2Ni4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9MTI9bmZfZmxvd19vZmZsb2FkX2luZXRfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtMzgtXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzozOTpcdFx0cmV0dXJuIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2socHJpdiwgc2tiLCBzdGF0ZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTQwLVx0fVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9ODg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NiA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTkzLVx0LmZyZWVcdFx0PSBuZl9mbG93X3RhYmxlX2ZyZWUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjk0Olx0Lmhvb2tcdFx0PSBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy05NS1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTExOTQ9dW5zaWduZWQgaW50XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMTk1Om5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExOTYtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTIyMi19XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMjIzOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDgzCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gSVB2NiBPZmZsb2FkIEhvb2tzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBOZXRmaWx0ZXIgZmxvdyBvZmZsb2FkIGltcGxlbWVudGF0aW9uLCBhbmQgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgd2hlcmUgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgIGxpdmVzLiBBaCwgcmlnaHQsIGl0JiMzOTtzIGJ1cmllZCBpbiBgbmZfZmxvd190YWJsZV9pcC5jYC4gR29vZCwgZ290IGl0LiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gaXMgaG93IHRoaXMgaG9vayBhY3R1YWxseSB3b3Jrcy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoYXQgZm9yd2FyZGluZyBmdW5jdGlvbiBpdCYjMzk7cyB1dGlsaXppbmcuIERvZXMgaXQgZGlyZWN0bHkgY2FsbCBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgLCBvciBpcyB0aGVyZSBhIG1vcmUgc3BlY2lmaWMgSVB2Ni1yZWxhdGVkIGZvcndhcmRlciBsaWtlIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGNhbGwgZmxvdyBoZXJlIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgSVB2NiB0cmFmZmljIGlzIHNwZWNpZmljYWxseSBiZWluZyBoYW5kbGVkIGFuZCBhY2NlbGVyYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTExOTQ9dW5zaWduZWQgaW50XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMTk1Om5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExOTYtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTIyMi19XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMjIzOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTYwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBJJiMzOTttIGFib3V0IHRvIGFuYWx5emU6CgoqKkFuYWx5emluZyBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AgQ2FsbHMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYC4gSXQmIzM5O3MgYSBuZXRmaWx0ZXIgaG9vaywgc28gSSBhbHJlYWR5IGtub3cgaXQmIzM5O3MgYSBjcml0aWNhbCBwb2ludCBmb3IgcGFja2V0IHByb2Nlc3NpbmcgaW4gdGhlIElQdjYgd29ybGQuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGNhbGwgZ3JhcGgg4oCTIEkgbmVlZCB0byBzZWUgKndobyogaXMgY2FsbGluZyB0aGlzIGhvb2suIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIGluc2lnaHQgaW50byB3aGVyZSBJUHY2IGZsb3cgb2ZmbG9hZGluZyBpcyBiZWluZyBpbml0aWF0ZWQsIGNvbnRyb2xsZWQsIGFuZCBwb3RlbnRpYWxseSBtb2RpZmllZC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBhbmFseXNpcyBsaWVzOiBmaWd1cmluZyBvdXQgaG93IHRoZSBzeXN0ZW0gbWFrZXMgdXNlIG9mIHRoaXMgcGFydGljdWxhciBob29rIGluIGEgZGVlcGVyIGxldmVsLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUuIEkmIzM5O20gaG9waW5nIEkgZG9uJiMzOTt0IHJ1biBpbnRvIGFueSBzaWduaWZpY2FudCBtYWNyby1oZWF2eSBvYmZ1c2NhdGlvbiEgTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE5NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTk0Olx0dW5zaWduZWQgaW50XG4xMTk1Olx0bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTE5NjpcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuMTE5NzpcdHtcbjExOTg6XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcbjExOTk6XHRcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPSBwcml2O1xuMTIwMDpcdFx0c3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggY3R4ID0ge1xuMTIwMTpcdFx0XHQuaW5cdD0gc3RhdGUtXHUwMDNlaW4sXG4xMjAyOlx0XHR9O1xuMTIwMzpcdFx0aW50IHJldDtcbjEyMDQ6XHRcbjEyMDU6XHRcdGlmICghbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woXHUwMDI2Y3R4LCBza2IpKVxuMTIwNjpcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuMTIwNzpcdFxuMTIwODpcdFx0aWYgKHVubGlrZWx5KGN0eC5ldGhlcl90eXBlICE9IGh0b25zKEVUSF9QX0lQVjYpKSlcbjEyMDk6XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbjEyMTA6XHRcbjEyMTE6XHRcdHR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHNrYik7XG4xMjEyOlx0XHRpZiAoIXR1cGxlaGFzaClcbjEyMTM6XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbjEyMTQ6XHRcbjEyMTU6XHRcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XG4xMjE2Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTIxNzpcdFx0XHRyZXR1cm4gTkZfRFJPUDtcbjEyMTg6XHRcdGVsc2UgaWYgKHJldCA9PSAwKVxuMTIxOTpcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuMTIyMDpcdFxuMTIyMTpcdFx0cmV0dXJuIG5mX2Zsb3dfcXVldWVfeG1pdDYoc2tiLCB0dXBsZWhhc2gsIHN0YXRlKTtcbjEyMjI6XHR9XG4xMjIzOlx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MjcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgRGlmZiBhbmQgQ29uc2lkZXJpbmcgUG90ZW50aWFsIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGZlZWxzIG9mZi4gSSB3YXMgZXhwZWN0aW5nIHRvIHNlZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGluIHRoYXQgZGlmZiwgYnV0IGl0JiMzOTtzIG5vdCBzaG93aW5nIHVwLiBUaGF0JiMzOTtzIHN0cmFuZ2UuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZS4gVGhlIGJlaGF2aW9yIG9mIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBpcyBjcml0aWNhbCwgYW5kIGFueSBjaGFuZ2UgY291bGQgaGF2ZSBzaWduaWZpY2FudCByYW1pZmljYXRpb25zIGZvci4uLiB3ZWxsLCBldmVyeXRoaW5nLCBmcmFua2x5LiBTbywgYmVmb3JlIEkgY29udGludWUsIEkgKm11c3QqIHZlcmlmeSB0aGF0IGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYCB3YXNuJiMzOTt0LCBpbiBmYWN0LCBtb2RpZmllZC4gUGVyaGFwcyBJIG1pc3NlZCBzb21ldGhpbmcgaW4gbXkgaW5pdGlhbCByZXZpZXcsIG9yIG1heWJlIHRoZXJlJiMzOTtzIGFuIGluZGlyZWN0IGltcGFjdCBJIG5lZWQgdG8gdHJhY2UuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHJ1bGUgb3V0IGFueSB1bmV4cGVjdGVkIG1vZGlmaWNhdGlvbnMuIExldCYjMzk7cyBkaWcgaW4gYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBhcyBpdCBzaG91bGQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMDAwPXN0YXRpYyBpbnQgbmZfZmxvd190dXBsZV9pcHY2KHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTA2NS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEwNjY6c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDY3LVx0XHRcdFx0XHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTExOTU9bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEyMTQtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMjE1Olx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEyMTYtXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMwMQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIG1vZHVsZS4gSSBzZWUgaXQmIzM5O3MgZGVhbGluZyB3aXRoIElQdjYgZm9yd2FyZGluZyBhbmQgZmxvdyBvZmZsb2FkLCB3aGljaCBpcyBhIGtleSBhcmVhIGZvciBoaWdoLXBlcmZvcm1hbmNlIG5ldHdvcmtpbmcsIGVzcGVjaWFsbHkgaW4gbW9kZXJuIGRhdGEgY2VudGVycyBhbmQgY2xvdWQgZW52aXJvbm1lbnRzLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgdGhyb3VnaHB1dCBhbmQgbGF0ZW5jeS4KClRoaXMgbW9kdWxlIGlzIGxpa2VseSBkZXNpZ25lZCB0byBhY2NlbGVyYXRlIHRoZSBmb3J3YXJkaW5nIG9mIElQdjYgcGFja2V0cyBieSBvZmZsb2FkaW5nIHRoZSBwcm9jZXNzaW5nIG9mIHNwZWNpZmljIGZsb3dzIHRvIHRoZSBuZXR3b3JrIGludGVyZmFjZSBjYXJkIChOSUMpIG9yIGEgZGVkaWNhdGVkIGhhcmR3YXJlIGFjY2VsZXJhdG9yLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBvcHRpbWl6YXRpb24gdGVjaG5pcXVlLCBidXQgdGhlIGRldmlsIGlzIGFsd2F5cyBpbiB0aGUgZGV0YWlscywgc28gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGEgZmV3IGNvcmUgY29uY2VwdHMuCgpJ4oCZbSBjdXJpb3VzIGFib3V0IHRoZSBzcGVjaWZpYyBjcml0ZXJpYSB0aGUgbW9kdWxlIHVzZXMgdG8gaWRlbnRpZnkgZmxvd3Mgc3VpdGFibGUgZm9yIG9mZmxvYWRpbmcuIElzIGl0IGJhc2VkIG9uIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzLCBwb3J0cywgcHJvdG9jb2xzLCBvciBhIGNvbWJpbmF0aW9uPyBBbmQgd2hhdCBhYm91dCBjb25uZWN0aW9uIHN0YXRlIHRyYWNraW5nPyBEb2VzIGl0IHN1cHBvcnQgVENQLCBVRFAsIG9yIGJvdGg/IEFyZSB0aGVyZSBhbnkgbGltaXRhdGlvbnMgb24gdGhlIG51bWJlciBvZiBjb25jdXJyZW50IG9mZmxvYWRlZCBmbG93cz8gVGhpcyBraW5kIG9mIGltcGxlbWVudGF0aW9uIGRldGFpbCBjYW4gaGF2ZSBhIG1hc3NpdmUgaW1wYWN0IG9uIG92ZXJhbGwgcGVyZm9ybWFuY2UuCgpUaGVuIHRoZXJlJiMzOTtzIHRoZSBxdWVzdGlvbiBvZiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGV4aXN0aW5nIElQdjYgZm9yd2FyZGluZyBzdGFjay4gRG9lcyBpdCBpbnRlZ3JhdGUgY2xlYW5seSB3aXRoIHRoZSByb3V0aW5nIHRhYmxlIGxvb2t1cHMgYW5kIHRoZSBuZWlnaGJvciBkaXNjb3ZlcnkgcHJvY2Vzcz8gRG9lcyBpdCBuZWVkIHRvIGhhbmRsZSBmcmFnbWVudGF0aW9uIGFuZCByZWFzc2VtYmx5PyBBbmQgaG93IGRvZXMgaXQgaGFuZGxlIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMsIHBhcnRpY3VsYXJseSB0aG9zZSB0aGF0IGFyZSBub3QgY29tbW9ubHkgb2ZmbG9hZGVkPwoKQWxzbywgZXJyb3IgaGFuZGxpbmcgaXMgY3JpdGljYWxseSBpbXBvcnRhbnQsIHNvIEkmIzM5O2xsIHdhbnQgdG8gcmV2aWV3IHRoZSBtZWNoYW5pc20gZm9yIGhhbmRsaW5nIHBhY2tldCBkcm9wcywgY2hlY2tzdW0gZmFpbHVyZXMsIG9yIG90aGVyIGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnMuIEEgcm9idXN0IGltcGxlbWVudGF0aW9uIHdvdWxkIG5lZWQgdG8gZ3JhY2VmdWxseSBmYWxsIGJhY2sgdG8gc29mdHdhcmUgZm9yd2FyZGluZyB3aGVuIG5lY2Vzc2FyeSwgb3IgZXZlbiBzaWduYWwgYW4gaXNzdWUgdXBzdHJlYW0uCgpGaW5hbGx5LCBJ4oCZbGwgbmVlZCB0byBjaGVjayB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBGbG93IG9mZmxvYWQsIGluIGVzc2VuY2UsIGlzIGJ5cGFzc2luZyBzb21lIG9mIHRoZSBzdGFuZGFyZCBjaGVja3MuIEhvdyBkb2VzIGl0IGVuc3VyZSB0aGF0IG9mZmxvYWRlZCBmbG93cyBhcmUgbm90IHVzZWQgZm9yIG1hbGljaW91cyBwdXJwb3NlcywgYW5kIGhvdyBpcyBpdCBpbnRlZ3JhdGVkIHdpdGggYW55IHNlY3VyaXR5IGZlYXR1cmVzIGxpa2UgZmlyZXdhbGxpbmcgYW5kIGludHJ1c2lvbiBkZXRlY3Rpb24/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDY2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNjY6XHRzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbjEwNjc6XHRcdFx0XHRcdFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbjEwNjg6XHRcdFx0XHRcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxuMTA2OTpcdFx0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTA3MDpcdHtcbjEwNzE6XHRcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XG4xMDcyOlx0XHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xuMTA3MzpcdFx0dW5zaWduZWQgaW50IHRob2ZmLCBtdHU7XG4xMDc0Olx0XHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcbjEwNzU6XHRcbjEwNzY6XHRcdGRpciA9IHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kaXI7XG4xMDc3Olx0XHRmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pO1xuMTA3ODpcdFxuMTA3OTpcdFx0bXR1ID0gZmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgJiM0MzsgY3R4LVx1MDAzZW9mZnNldDtcbjEwODA6XHRcdGlmIChmbG93LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS50dW5fbnVtKVxuMTA4MTpcdFx0XHRtdHUgLT0gc2l6ZW9mKCppcDZoKTtcbjEwODI6XHRcbjEwODM6XHRcdGlmICh1bmxpa2VseShuZl9mbG93X2V4Y2VlZHNfbXR1KHNrYiwgbXR1KSkpXG4xMDg0Olx0XHRcdHJldHVybiAwO1xuMTA4NTpcdFxuMTA4NjpcdFx0aXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBjdHgtXHUwMDNlb2Zmc2V0KTtcbjEwODc6XHRcdHRob2ZmID0gc2l6ZW9mKCppcDZoKSAmIzQzOyBjdHgtXHUwMDNlb2Zmc2V0O1xuMTA4ODpcdFx0aWYgKG5mX2Zsb3dfc3RhdGVfY2hlY2soZmxvdywgaXA2aC1cdTAwM2VuZXh0aGRyLCBza2IsIHRob2ZmKSlcbjEwODk6XHRcdFx0cmV0dXJuIDA7XG4xMDkwOlx0XG4xMDkxOlx0XHRpZiAoIW5mX2Zsb3dfZHN0X2NoZWNrKFx1MDAyNnR1cGxlaGFzaC1cdTAwM2V0dXBsZSkpIHtcbjEwOTI6XHRcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuMTA5MzpcdFx0XHRyZXR1cm4gMDtcbjEwOTQ6XHRcdH1cbjEwOTU6XHRcbjEwOTY6XHRcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgdGhvZmYgJiM0MzsgY3R4LVx1MDAzZWhkcnNpemUpKVxuMTA5NzpcdFx0XHRyZXR1cm4gLTE7XG4xMDk4Olx0XG4xMDk5Olx0XHRmbG93X29mZmxvYWRfcmVmcmVzaChmbG93X3RhYmxlLCBmbG93LCBmYWxzZSk7XG4xMTAwOlx0XG4xMTAxOlx0XHRuZl9mbG93X2VuY2FwX3BvcChjdHgsIHNrYiwgdHVwbGVoYXNoKTtcbjExMDI6XHRcbjExMDM6XHRcdGlwNmggPSBpcHY2X2hkcihza2IpO1xuMTEwNDpcdFx0bmZfZmxvd19uYXRfaXB2NihmbG93LCBza2IsIGRpciwgaXA2aCk7XG4xMTA1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDI2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeS4gSGVyZSYjMzk7cyBhIHN1bW1hcnkgZm9ybWF0dGVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBJbiBEZWVwZXIqKgoKQWxyaWdodCwgSSYjMzk7dmUgZ290IHRoZSBpbml0aWFsIGluZm9ybWF0aW9uLCBidXQgaXQmIzM5O3Mgbm90IGVub3VnaCB0byBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZy4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGlzIGZ1cnRoZXIuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlLXJlYWQgdGhlIHRleHQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyB0aGF0IGNvdWxkIGJlIGNydWNpYWwgdG8gdGhlIG92ZXJhbGwgcGljdHVyZS4gSSYjMzk7bSBsb29raW5nIGZvciBudWFuY2UsIGZvciBpbXBsaWNpdCBtZWFuaW5ncywgYW5kIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGNoYWxsZW5nZSBteSBjdXJyZW50IHdvcmtpbmcgaHlwb3RoZXNpcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgdGhpcyBpbmZvcm1hdGlvbiBoYXMgdG8gb2ZmZXIuIEkgbmVlZCB0byBnZXQgdGhpcyByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEwNjpcdFx0aXA2aC1cdTAwM2Vob3BfbGltaXQtLTtcbjExMDc6XHRcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcbjExMDg6XHRcbjExMDk6XHRcdGlmIChmbG93X3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcbjExMTA6XHRcdFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cdTAwM2VjdCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpciwgc2tiLVx1MDAzZWxlbik7XG4xMTExOlx0XG4xMTEyOlx0XHRyZXR1cm4gMTtcbjExMTM6XHR9XG4xMTE0Olx0XG4xMTE1Olx0c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxuMTExNjpcdG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuMTExNzpcdFx0XHRcdCAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuMTExODpcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTExOTpcdHtcbjExMjA6XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcbjExMjE6XHRcbjExMjI6XHRcdGlmIChuZl9mbG93X3R1cGxlX2lwdjYoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMClcbjExMjM6XHRcdFx0cmV0dXJuIE5VTEw7XG4xMTI0Olx0XG4xMTI1Olx0XHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcdTAwMjZ0dXBsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTMyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJldmlld2luZyB0aGUgRmxvdyBPZmZsb2FkIFBhdGNoKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgdGhpcyBkaWZmIG9ubHkgdG91Y2hlcyBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgLiBUaGF0JiMzOTtzIGEgYml0IG9kZC4gV2h5IHdhc24mIzM5O3QgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGFsc28gbW9kaWZpZWQ/IElzIGl0IG5vdCBpbmNsdWRlZCBpbiB0aGUgZGlmZj8gTG9va2luZyBhdCB0aGUgY29kZSBjaGFuZ2UgaXRzZWxmLCBpdCBzZWVtcyBsaWtlIHRoZSBhdXRob3IgcmVwbGFjZWQgYG5mX2N0X2FjY3RfdXBkYXRlYCB3aXRoIGF0b21pYyBhZGRpdGlvbnMgdG8gYHR1cGxlLnBhY2tldHNgIGFuZCBgdHVwbGUuYnl0ZXNgIGZvciB0aGUgY291bnRlciB1cGRhdGUuCgpJZiBJUHY2IHdhc24mIzM5O3QgdG91Y2hlZCwgaXQmIzM5O3Mgc3RpbGwgdXNpbmcgdGhlIG9sZCBgbmZfY3RfYWNjdF91cGRhdGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuICBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCB0aGVuIGBuZl9mbG93X3N5bmNfY3Rfc3RhdHNgIHdpbGwgbGlrZWx5IHplcm8gb3V0IHN0YXRzIGZvciBJUHY2IGJlY2F1c2UgdGhlIGF0b21pYyBjb3VudGVycyBhcmUgb25seSBtb2RpZmllZCBmb3IgSVB2NC4gIEJ1dCB3YWl0LCBgbmZfZmxvd19zeW5jX2N0X3N0YXRzYCBhY3R1YWxseSAqYWRkcyogdGhlIGF0b21pYyB2YWx1ZXMgdG8gY29ubnRyYWNrIHN0YXRzIGFuZCB0aGVuIHplcm9lcyB0aGVtIG91dC4gVGhlIG9sZCBJUHY2IHBhdGggdXBkYXRlcyB0aGUgY29ubnRyYWNrIHN0YXRzIGRpcmVjdGx5LiBBbmQsIGBuZl9mbG93X3N5bmNfY3Rfc3RhdHNgIHdpbGwgYWRkIDAgdG8gdGhlIGNvbm50cmFjayBzdGF0cywgd2hpY2ggaXMgZmluZS4KClNvLCBpcyB0aGlzIGEgYnVnPyBNYXliZSwgYnV0IGl0IG1pZ2h0IHN0aWxsIGJlIG9rYXkuIFJlZ2FyZGxlc3MsIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIGZ1enppbmcuIEl0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0LgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzLiBgTkZfRkxPV19UQUJMRWAgaXMgdGhlIHByaW1hcnkgb25lLCBvZiBjb3Vyc2UuIGBORl9GTE9XX1RBQkxFX0lORVRgIG1pZ2h0IGJlIGltcGxpY2F0ZWQgaWYgSVB2NiB3YXMgdG91Y2hlZCBidXQgdGhlIHBhdGNoIG9ubHkgdG91Y2hlcyBJUHY0LCBhbmQgdGhlIGNvcmUgZ2FyYmFnZSBjb2xsZWN0b3IuIEl0IGxvb2tzIGxpa2UgYE5GX0ZMT1dfVEFCTEVgIGFsb25lIGlzIGVub3VnaC4gVGhhdCBvbmUgcmVsaWVzIG9uIGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuIEFueXRoaW5nIGVsc2U/IEkgZG9uJiMzOTt0ICp0aGluayogYE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTYCBpcyBzdHJpY3RseSByZXF1aXJlZC4KCk9rYXksIHRpbWUgdG8gcGljayBzb21lIGdvb2QgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZy4gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYCBsb29rcyBwcm9taXNpbmcuIEFuZCBvYnZpb3VzbHksIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAgKGFsdGhvdWdoLCBpc24mIzM5O3QgdGhhdCBzdGF0aWM/KSBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd19vZmZsb2FkX2ZvcndhcmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00NTc9bmZfZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ2Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ2ODpzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NjktXHRcdFx0XHQgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTg2Nj1uZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg4NS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjg4NjpcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODg3LVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NzYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvZGUgU3RydWN0dXJlKioKCk9rYXksIHRoaXMgbG9va3Mgc3RhdGljLCB3aGljaCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgaW5saW5lZCB3aXRoaW4gYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYC4gS25vd2luZyB0aGF0LCBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgIGJlY29tZXMgdGhlIGtleSBzeW1ib2wgdG8gZm9jdXMgb24gZm9yIGRlZXBlciBhbmFseXNpcy4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBjb25maXJtIHRoYXQgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gVGhpcyBpcyBhIGNyaXRpY2FsIHN0ZXAgdG8gZW5zdXJlIEkgY2FuIGV4YW1pbmUgaXRzIHVzYWdlIGFuZCBob3cgdGhpcyBpbmxpbmluZywgaWYgaXQgZXhpc3RzLCBpcyBmdW5jdGlvbmluZyB3aXRoaW4gdGhlIGJyb2FkZXIgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipuZl9mbG93X29mZmxvYWRfaXBfaG9vayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTg2Nj1uZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg5My19XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4OTQ6RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19vZmZsb2FkX2lwX2hvb2spO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODk1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgzMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIENvbnVuZHJ1bXMqKgoKQWxyaWdodCwgdGhhdCBzZXR0bGVzIGl0IOKAkyBjb25maXJtZWQuIEJ1dCBub3csIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBjb21wbGV4aXR5IGJlZ2lucywgYW5kIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIG51YW5jZXMgb2YgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZsb3cgdGFibGUuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIGtlcm5lbCBhcmNoaXRlY3R1cmUgYW5kIGhvdyBpdHMgYmVoYXZpb3IgY2FuIGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlcmUgYXJlIGxpa2VseSBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW5oZXJlbnQgdG8gdGhhdCBwcm9jZXNzIHRoYXQgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnMgYWJvdXQgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGdhcmJhZ2UgY29sbGVjdGlvbiwgdGhlIGFsZ29yaXRobXMgZW1wbG95ZWQsIGFuZCBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gVGhpcyByZXF1aXJlcyBhIGRlZXBlciBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKm5mX2Zsb3dfdGFibGVfZ2NfcnVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA2MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyB0aGUgYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYCBTeW1ib2wqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O3ZlIHNlZW4gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYCBiZWZvcmUuIEJ1dCwgd2FpdC4uLiBpc24mIzM5O3QgaXQgaW50ZXJuYWw/IERvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdCYjMzk7cyBiZWVuIGV4cG9ydGVkIGFzIGEgc3ltYm9sLiBUaGF0JiMzOTtzIGEgYml0IHVuZXhwZWN0ZWQuIEkgbmVlZCB0byBjb25maXJtLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIHNvdXJjZSBjb2RlLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIGBuZl9mbG93X3RhYmxlX2NvcmUuY2AuIEkmIzM5O2xsIHF1aWNrbHkgbmF2aWdhdGUgdGhlcmUgYW5kIHZlcmlmeSB3aGV0aGVyIGBuZl9mbG93X3RhYmxlX2djX3J1bmAgaXMgYWN0dWFsbHkgbWVhbnQgdG8gYmUgYWNjZXNzZWQgZnJvbSBvdXRzaWRlIHRoYXQgbW9kdWxlLCBvciBpZiBpdCYjMzk7cyBpbmRlZWQgYW4gaW50ZXJuYWwgZnVuY3Rpb24uIFRoZW4gSSBjYW4gcHJvY2VlZCBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX2djX3J1biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NTg0PXN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02MjAtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjYyMTp2b2lkIG5mX2Zsb3dfdGFibGVfZ2NfcnVuKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYyMi17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz02MjY9c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjMwLVx0Zmxvd190YWJsZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmZfZmxvd3RhYmxlLCBnY193b3JrLndvcmspO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2MzE6XHRuZl9mbG93X3RhYmxlX2djX3J1bihmbG93X3RhYmxlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjMyLVx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsIFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlZ2Nfd29yaywgSFopO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NzgyPXZvaWQgbmZfZmxvd190YWJsZV9mcmVlKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTEtXHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd190YWJsZSwgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwLCBOVUxMKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzkyOlx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc5My1cdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaF9jbGVhbnVwKGZsb3dfdGFibGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE2NT12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaF9jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNjgtXHRcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTE2OTpcdFx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd3RhYmxlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3MC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5MzAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSBlbmNvdW50ZXJpbmcgdGhlc2UgY29uY2VwdHM6CgoqKkludGVybmFsIE1vZHVsZSBWYXJpYWJsZSBBbmFseXNpcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwaWVjZSBvZiBjb2RlLCBhbmQgaW1tZWRpYXRlbHkgbXkgbWluZCBmb2N1c2VzIG9uIHRoaXMgdmFyaWFibGUuIEl0JiMzOTtzICppbnRlcm5hbCogdG8gdGhlIG1vZHVsZSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBpbXBsaWVzIGl0JiMzOTtzIG5vdCBkZXNpZ25lZCBmb3IgZGlyZWN0IGV4dGVybmFsIGFjY2VzcyB3aGljaCBpcyBnZW5lcmFsbHkgYSBzb2xpZCBkZXNpZ24gcHJpbmNpcGxlLiBIb3dldmVyLCBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3RzOiBJdCYjMzk7cyAqdXNlZCogd2l0aGluIHRoZSBtb2R1bGUmIzM5O3Mgc2NvcGUsIHRoYXQmIzM5O3MgY2xlYXIuIEJ1dCBqdXN0IGJlY2F1c2UgaXQmIzM5O3MgbG9jYWwgZG9lc24mIzM5O3QgbWVhbiBpdCYjMzk7cyBjb21wbGV0ZWx5IGlzb2xhdGVkLiBNeSBuZXh0IHF1ZXN0aW9uIGlzOiB3aGF0JiMzOTtzIHRoZSBsaWZlY3ljbGU/IEhvdyBpcyBpdCBhZmZlY3RlZD8KClNvLCBmaXJzdCBJIG5lZWQgdG8gY2hlY2sgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoaXMgdmFyaWFibGUgaXNuJiMzOTt0LCBpbiBzb21lIGluZGlyZWN0IHdheSwgYmVpbmcgdXNlZCBieSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMuIElmIG9uZSBvZiB0aG9zZSBleHBvcnRlZCBmdW5jdGlvbnMgY2FuIHRyaWdnZXIgYW4gaW50ZXJuYWwgYWN0aW9uLCBJIG5lZWQgdG8ga25vdy4gSXQmIzM5O3MgY3JpdGljYWwgdG8gZGV0ZXJtaW5lIGlmIGFueSBvZiB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhhdCBpbnRlcm5hbCB2YXJpYWJsZS4gQW55IHBvaW50IG9mIGludGVyYWN0aW9uIHJlcXVpcmVzIHNjcnV0aW55LgoKTXkgbWluZCBpbW1lZGlhdGVseSB0dXJucyB0byBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMuIE9rYXksIHNvIGlzIHRoZXJlIHNvbWUgb3RoZXIgZnVuY3Rpb24gaW4gdGhpcyBtb2R1bGUuLi5saWtlIGBuZl9mbG93X3RhYmxlX2ZyZWVgPyBJdCYjMzk7cyBleHBvcnRlZCwgaXMgaXQgbm90PyBJIG5lZWQgdG8ga25vdy4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSB0aGUga2V5IGhlcmUsIGl0JiMzOTtzIG9uZSBsaWtlbHkgcG9pbnQgb2YgY29udGFjdCwgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaGFzIGFueSBlZmZlY3Qgb24gdGhlIHZhcmlhYmxlJiMzOTtzIHN0YXRlIG9yIGJlaGF2aW9yLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiB0byBldmFsdWF0ZSBmb3IgZGlyZWN0IG9yIGluZGlyZWN0IGluZmx1ZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbmZfZmxvd190YWJsZV9mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03ODI9dm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc5NS19XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc5NjpFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2ZyZWUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDU5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIEZsb3cgVGFibGUgR2FyYmFnZSBDb2xsZWN0aW9uIGZvciBLZXJuZWwgRnV6emluZyoqCgpPa2F5LCB5ZXMsIHRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgYXBwcm9hY2guIEkgdGhpbmsgZm9jdXNpbmcgb24gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYmVjYXVzZSBpdCYjMzk7cyBub3QgYSBzdGF0aWMgc3ltYm9sLiBUaGF0JiMzOTtzIGtleSwgYmVjYXVzZSBpZiBpdCYjMzk7cyBub3Qgc3RhdGljLCBpdCBoYXMgYSBkZWZpbml0ZSwgdHJhY2VhYmxlIHN5bWJvbCBhZGRyZXNzLiBTeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gaG9vayBpbnRvIHRoYXQuIFNvLCBJJiMzOTtsbCBkZWZpbml0ZWx5IGluY2x1ZGUgYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYCBpbiBteSBhbmFseXNpcywgYW5kIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AgdG9vLCBmb3IgZ29vZCBtZWFzdXJlLgoKTGV0JiMzOTtzIGFsc28gY2hlY2sgaG93IGBuZl9mbG93X3RhYmxlX2l0ZXJhdGVgIGZpdHMgaW50byB0aGlzLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGNhbGxlZCBieSBgbmZfZmxvd190YWJsZV9nY19ydW5gLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZmxvdyBvZiBjb250cm9sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX2l0ZXJhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTQyNj1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjQyNzpuZl9mbG93X3RhYmxlX2l0ZXJhdGUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDI4LVx0XHQgICAgICB2b2lkICgqaXRlcikoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NjIxPXZvaWQgbmZfZmxvd190YWJsZV9nY19ydW4oc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjIyLXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NjIzOlx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwLCBOVUxMKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjI0LX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc2Mz12b2lkIG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NjUte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3NjY6XHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd3RhYmxlLCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAsIGRldik7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc2Ny1cdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZmbG93dGFibGUtXHUwMDNlZ2Nfd29yayk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03ODI9dm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc5MC1cdC8qIC4uLiBubyBtb3JlIHBlbmRpbmcgd29yayBhZnRlciB0aGlzIHN0YWdlIC4uLiAqL1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3OTE6XHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd190YWJsZSwgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwLCBOVUxMKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzkyLVx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzIyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKioKCk9rYXksIGBuZl9mbG93X3RhYmxlX2djX3J1bmAgaXMgbG9va2luZyBnb29kLCBubyBpbW1lZGlhdGUgY29uY2VybnMgdGhlcmUuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGFuZCBtYWtlIHN1cmUgd2UmIzM5O3ZlIGdvdCBldmVyeXRoaW5nIGxpbmVkIHVwIHByb3Blcmx5LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aG9zZSBLY29uZmlnIG9wdGlvbnM6IGBORl9GTE9XX1RBQkxFYCwgYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYC4KCkhtbSwgbm93IHRoYXQgSSYjMzk7bSBsb29raW5nIGF0IGl0LCBgTkZfRkxPV19UQUJMRWAgaGFzIGRlcGVuZGVuY2llcy4gSXQgcmVsaWVzIG9uIGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBlbmFibGVkIHRvby4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbmVkIGNoZWNraW5nICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGZvciBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzLCBhbmQgdGhvc2UgZGVmaW5pdGVseSBzZWVtIHRvIHF1YWxpZnkuCgpTbywgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHdlIGNhbiBjb21waWxlIHRoaXMgc3RhdGljYWxseSwgSSBuZWVkIHRvIGluY2x1ZGUgYE5GX0ZMT1dfVEFCTEVgLCBhbmQgaXRzIHBhcmVudHM6IGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgaXMgYE5GX0ZMT1dfVEFCTEVgIHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBvciBkbyB3ZSBuZWVkIHRvIGNvbnNpZGVyIGBORl9GTE9XX1RBQkxFX0lORVRgIG9yIGV2ZW4gYE5GX0ZMT1dfVEFCTEVfSVBWNGA/IExldCYjMzk7cyB2ZXJpZnkgdGhhdCBxdWlja2x5LCBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgbGFzdCBvbmUgbWlnaHQgbm90IGV2ZW4gZXhpc3QgYW55bW9yZS4gSSYjMzk7bGwgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZfRkxPV19UQUJMRV9JUFY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkyNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5GX0ZMT1dfVEFCTEUgUmVmaW5lbWVudCoqCgpBbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaGFzIGNsZWFybHkgc2hpZnRlZC4gV2UmIzM5O3JlIG5vdyBqdXN0IGRlYWxpbmcgd2l0aCBgTkZfRkxPV19UQUJMRWAgaW4gdGhpcyBjb250ZXh0LiBFdmVyeXRoaW5nIGVsc2UgaXMgc2Vjb25kYXJ5LCBvciBhdCBsZWFzdCBiZWluZyBjb25zaWRlcmVkIHNlcGFyYXRlbHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjcnlzdGFsIGNsZWFyIG9uIHRoaXMgbmV3IHNjb3BlLgoKTXkgbmV4dCBpbW1lZGlhdGUgdGFzayB0aGVuLCBpcyB0byBkZWx2ZSBpbnRvIGBORl9GTE9XX1RBQkxFX0lORVRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIElORVQtc3BlY2lmaWMgYXNwZWN0cyBwbGF5IGludG8gdGhpcyBtb3JlIGdlbmVyYWxpemVkIGZsb3cgdGFibGUuIElzIGl0IGEgc3BlY2lhbGl6ZWQgaW1wbGVtZW50YXRpb24/IEFuIGV4dGVuc2lvbj8gRG9lcyB0aGlzIGNoYW5nZSB0aGUgaW1wbGljYXRpb25zIGRvd25zdHJlYW0/IFVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBpcyBjcml0aWNhbCBmb3IgYW55IHN1YnNlcXVlbnQgYW5hbHlzaXMgb3IgbW9kaWZpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZfRkxPV19UQUJMRV9JTkVUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE1MT1lbmRpZlxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNTItXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1MzpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRV9JTkVUKSAmIzQzOz0gbmZfZmxvd190YWJsZV9pbmV0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTU0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMwOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBGbG93IFRhYmxlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5mX2Zsb3dfdGFibGVfY29yZS5jYCBhbmQgYG5mX2Zsb3dfdGFibGVfaXAuY2AsIGFuZCB0aG9zZSBhcmUgZGVmaW5pdGVseSBjb21waWxlZCB1bmRlciBgQ09ORklHX05GX0ZMT1dfVEFCTEVgLiBObyBxdWVzdGlvbiBhYm91dCB0aGF0LCBzbyBgTkZfRkxPV19UQUJMRWAgaXMgdGhlIGtleSBjb25maWcgaGVyZS4gV2UmIzM5O3JlIGdvb2QgdG8gZ28uCgpOb3csIGxldCYjMzk7cyBkaWcgaW50byB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGUgY2hhbmdlcy4gVGhlIGNvcmUgaWRlYSBzZWVtcyB0byBiZSBzaGlmdGluZyBmcm9tIGRpcmVjdCBjb3VudGVyIHVwZGF0ZXMgaW4gdGhlIGZhc3QgcGF0aCAoYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCkg4oCTIHVzaW5nIGF0b21pY3MsIEkgYXNzdW1lIOKAkyB0byBkZWZlcnJpbmcgc3luY2hyb25pemF0aW9uIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGdhcmJhZ2UgY29sbGVjdGlvbiAoYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYCkuIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gaG93IHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBoYW5kbGVzIHN0YXRpc3RpY3MuIEl0JiMzOTtzIG1vdmluZyB0aGUgY3JpdGljYWwgcG9pbnQgb2YgY291bnRlciB1cGRhdGUsIGFuZCB0aGUgc3luY2hyb25pemF0aW9uIHJlbGF0ZWQgdG8gaXQsIGludG8gdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBwcm9jZXNzLCBhbmQgdGhhdCBjb3VsZCBkZWZpbml0ZWx5IGludHJvZHVjZSBzb21lIGludGVyZXN0aW5nIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBldmVuIHNvbWUgc3VidGxlIGJ1Z3MgaW4gaG93IHRoZSBHQyBvcGVyYXRlcy4gV2UgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGhhdC4KCkkmIzM5O20ga2V5aW5nIGluIG9uIGBuZl9mbG93X3RhYmxlX2djX3J1bmAgYW5kIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AuIFRob3NlIHNlZW0gbGlrZSBpbXBvcnRhbnQgZm9jYWwgcG9pbnRzLiBUaGUgb3RoZXIgY29uZmlncyBJJiMzOTtsbCBrZWVwIGluIG1pbmQgYXJlIGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuCgpKdXN0IHF1aWNrbHkgdmVyaWZ5aW5nLCBgTkZfRkxPV19UQUJMRWAgKmlzKiB0cmlzdGF0ZSwgd2hpY2ggaXMgZ29vZC4gV2UganVzdCBsaXN0IGl0IG91dCBpbiB0aGUgc3ltYm9scy4KCk9rYXksIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgIGlzIHRoZSAqb25seSogaG9vayBiZWluZyB1c2VkLiBUaGVyZSYjMzk7cyBhbHNvIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYCwgYnV0IHRoYXQgd2FzbiYjMzk7dCB0b3VjaGVkIGluIHRoZSBkaWZmLCBzbyBpdCBtdXN0IGJlIG9rYXkuIFdhaXQsIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAgaXMgY2FsbGVkIGJ5IGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AuIElzIHRoZXJlIGFueSBvdGhlciBjYWxsZXI/IEkgbmVlZCB0byBjaGVjayB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X29mZmxvYWRfZm9yd2FyZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTQ1Nz1uZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDY3LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NDY4OnN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ2OS1cdFx0XHRcdCAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9ODY2PW5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODg1LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6ODg2Olx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04ODctXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM4NAoJCQkJCQkJb3V0cHV0OiAxODIKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyB5b3VyIHN1bW1hcnk6CgoqKlRoZSBPZmZsb2FkIEhvb2sgYW5kIFNldHRpbmcgUmVzdWx0cyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGNhcmVmdWxseSByZXZpZXdpbmcgdGhlIHJlY2VudCBjaGFuZ2VzLCBhbmQgdGhlIGtleSBmdW5jdGlvbiBvZiBpbnRlcmVzdCBoZXJlIGlzIGRlZmluaXRpdmVseSBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgLiBGb3JnZXQgYWJvdXQgYW55IG90aGVyIHBvdGVudGlhbCBjYW5kaWRhdGVzOyB0aGF0JiMzOTtzIHRoZSBvbmUuIE15IGZvY3VzIGlzIG9uIHRoZSBjb3JyZWN0IGludGVyYWN0aW9uIHdpdGggdGhhdCBob29rLgoKTm93LCB3aXRoIHRoYXQgY29uZmlybWVkLCBJIG5lZWQgdG8gcHJvY2VlZCB3aXRoIHNldHRpbmcgdGhlIHJlc3VsdHMuIExldCYjMzk7cyBtYWtlIHRoYXQgY2FsbCB0byBgc2V0LXJlc3VsdHNgIGltbWVkaWF0ZWx5IHRvIGVuc3VyZSB0aGUgbmV4dCBzdGFnZSBnZXRzIHRoZSByZXF1aXJlZCBkYXRhLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHdpbGwgY29udGludWUgZnJvbS4gVGltZSB0byBtYWtlIGl0IGhhcHBlbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfZ2NfcnVuJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjb3JlIGxvZ2ljIHRvIHVzZSBhdG9taWMgb3BlcmF0aW9ucyBmb3IgcGFja2V0IGFuZCBieXRlIGNvdW50ZXJzIGluIHRoZSBmYXN0IHBhdGggKG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKSwgYW5kIGRlZmVycyB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZXNlIGNvdW50ZXJzIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHN5c3RlbSB0byB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHN0ZXAgKG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBmbG93IHRhYmxlIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgc3RhdGlzdGljcyBhcmUgdHJhY2tlZCBhbmQgc3luY2hyb25pemVkLCB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgY29uY3VycmVuY3kgaXNzdWVzIG9yIGJ1Z3MgaW4gdGhlIEdDIHByb2Nlc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfZ2NfcnVuJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjb3JlIGxvZ2ljIHRvIHVzZSBhdG9taWMgb3BlcmF0aW9ucyBmb3IgcGFja2V0IGFuZCBieXRlIGNvdW50ZXJzIGluIHRoZSBmYXN0IHBhdGggKG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKSwgYW5kIGRlZmVycyB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZXNlIGNvdW50ZXJzIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHN5c3RlbSB0byB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHN0ZXAgKG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBmbG93IHRhYmxlIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgc3RhdGlzdGljcyBhcmUgdHJhY2tlZCBhbmQgc3luY2hyb25pemVkLCB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgY29uY3VycmVuY3kgaXNzdWVzIG9yIGJ1Z3MgaW4gdGhlIEdDIHByb2Nlc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzIHRvIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCB0byBiYXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRpc3RpY3MgdXBkYXRlcy4gVGhlc2UgZmllbGRzIGFyZSB1cGRhdGVkIHZpYSBgYXRvbWljNjRfYWRkYCBpbiB0aGUgZm9yd2FyZGluZyBwYXRoIGFuZCBwZXJpb2RpY2FsbHkgZmx1c2hlZCB0byB0aGUgY29ubnRyYWNrIGVudHJ5IHZpYSBgYXRvbWljNjRfeGNoZ2AgaW4gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiBcblxuVGhlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkYCBjb250YWluaW5nIHRoZXNlIHR1cGxlcyBpcyBhbHdheXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AgKGluIGBmbG93X29mZmxvYWRfYWxsb2NgKSwgZW5zdXJpbmcgdGhlIG5ldyBhdG9taWMgY291bnRlcnMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBjb3VudGVycyBhcmUgbm90IGRpcmVjdGx5IGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCB0aGVpciB2YWx1ZXMgb25seSByZXByZXNlbnQgcGFja2V0IGFuZCBieXRlIGNvdW50cywgcHJlY2x1ZGluZyBhbnkgaW5mb3JtYXRpb24gbGVhay4gXG5cbldoaWxlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCBpcyBzb21ldGltZXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgdXNlZCBhcyBhIGxvb2t1cCBrZXkgKGUuZy4sIGluIGBuZl9mbG93X29mZmxvYWRfbG9va3VwYCksIHRoZSBoYXNoIGFuZCBjb21wYXJpc29uIGZ1bmN0aW9ucyBvbmx5IG9wZXJhdGUgb24gdGhlIGZpZWxkcyB1cCB0byB0aGUgYF9faGFzaGAgbWFya2VyLCB3aGljaCBwcmVjZWRlcyB0aGUgbmV3bHkgYWRkZWQgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcy4gVGh1cywgdGhlIHVuaW5pdGlhbGl6ZWQgc3RhdGUgb2YgdGhlc2UgZmllbGRzIGluIHN0YWNrLWFsbG9jYXRlZCBrZXlzIGlzIG5ldmVyIHJlYWQuXG5cbkFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBidWdzIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBzdGFuZGFyZCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI2NjdjZDNkYTY3ZTY4NDJmMzcxMjFkNzU4OTdjNjgyN2Q3Mzc3ZDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAwMDoxMzoxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCmluZGV4IGYyZTI3NzFmMTg4ZjQuLjYwNjAyMDIxMzNjNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaApAQCAtMTcxLDYgJiM0MzsxNzEsOSBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHsKIAkJCXUzMgkJaWlmaWR4OwogCQl9IHRjOwogCX07CiYjNDM7CiYjNDM7CWF0b21pYzY0X3QJCQlwYWNrZXRzOwomIzQzOwlhdG9taWM2NF90CQkJYnl0ZXM7CiB9OwogCiBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoIHsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jCmluZGV4IDAzMjQxZDRiZmQ1ZTguLmExZjM3Y2E5NTZiOGYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYwpAQCAtMTMsNiAmIzQzOzEzLDcgQEAKICNpbmNsdWRlICZsdDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuaCZndDsKIAogc3RhdGljIERFRklORV9NVVRFWChmbG93dGFibGVfbG9jayk7CiBzdGF0aWMgTElTVF9IRUFEKGZsb3d0YWJsZXMpOwpAQCAtNTY1LDExICYjNDM7NTY2LDI5IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZXh0ZW5kX2N0X3RpbWVvdXQoc3RydWN0IG5mX2Nvbm4gKmN0KQogCW5mX2N0X3B1dChjdCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBfX25mX2Zsb3dfc3luY19jdF9zdGF0cyhzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBpbnQgZGlyKQomIzQzO3sKJiM0MzsJdTY0IHBrdHMsIGJ5dGVzOwomIzQzOwomIzQzOwlwa3RzID0gYXRvbWljNjRfeGNoZygmYW1wO2Zsb3ctJmd0O3R1cGxlaGFzaFtkaXJdLnR1cGxlLnBhY2tldHMsIDApOwomIzQzOwlieXRlcyA9IGF0b21pYzY0X3hjaGcoJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbZGlyXS50dXBsZS5ieXRlcywgMCk7CiYjNDM7CW5mX2N0X2FjY3RfYWRkKGZsb3ctJmd0O2N0LCBkaXIsIHBrdHMsIGJ5dGVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmZfZmxvd19zeW5jX2N0X3N0YXRzKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpCiYjNDM7ewomIzQzOwlfX25mX2Zsb3dfc3luY19jdF9zdGF0cyhmbG93LCBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTsKJiM0MzsJX19uZl9mbG93X3N5bmNfY3Rfc3RhdHMoZmxvdywgRkxPV19PRkZMT0FEX0RJUl9SRVBMWSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwKIAkJCQkgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgdm9pZCAqZGF0YSkKIHsKLQlib29sIHRlYXJkb3duID0gdGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgJmFtcDtmbG93LSZndDtmbGFncyk7CiYjNDM7CWJvb2wgdGVhcmRvd247CiYjNDM7CiYjNDM7CW5mX2Zsb3dfc3luY19jdF9zdGF0cyhmbG93KTsKIAomIzQzOwl0ZWFyZG93biA9IHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpOwogCWlmIChuZl9mbG93X2hhc19leHBpcmVkKGZsb3cpIHx8CiAJICAgIG5mX2N0X2lzX2R5aW5nKGZsb3ctJmd0O2N0KSB8fAogCSAgICAhbmZfZmxvd19kc3RfY2hlY2soJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0udHVwbGUpIHx8CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jCmluZGV4IGM4YzI5YTlhMTY4NDQuLjY2YmU4MTVhYzJmZWIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jCkBAIC01MDksOCAmIzQzOzUwOSwxMCBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJaXBfZGVjcmVhc2VfdHRsKGlwaCk7CiAJc2tiX2NsZWFyX3RzdGFtcChza2IpOwogCi0JaWYgKGZsb3dfdGFibGUtJmd0O2ZsYWdzICZhbXA7IE5GX0ZMT1dUQUJMRV9DT1VOVEVSKQotCQluZl9jdF9hY2N0X3VwZGF0ZShmbG93LSZndDtjdCwgdHVwbGVoYXNoLSZndDt0dXBsZS5kaXIsIHNrYi0mZ3Q7bGVuKTsKJiM0MzsJaWYgKGZsb3dfdGFibGUtJmd0O2ZsYWdzICZhbXA7IE5GX0ZMT1dUQUJMRV9DT1VOVEVSKSB7CiYjNDM7CQlhdG9taWM2NF9hZGQoMSwgJmFtcDt0dXBsZWhhc2gtJmd0O3R1cGxlLnBhY2tldHMpOwomIzQzOwkJYXRvbWljNjRfYWRkKHNrYi0mZ3Q7bGVuLCAmYW1wO3R1cGxlaGFzaC0mZ3Q7dHVwbGUuYnl0ZXMpOwomIzQzOwl9CiAKIAlyZXR1cm4gMTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MTkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGbG93IE9mZmxvYWQgVHVwbGUgVXBkYXRlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcyB0byB0aGUgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgLiBUaGUgaW50ZW50IHNlZW1zIGNsZWFyOiB3ZSYjMzk7cmUgb2ZmbG9hZGluZyBhY2NvdW50aW5nIGluZm9ybWF0aW9uIHRvIHRoZSBmbG93IHRhYmxlLCByYXRoZXIgdGhhbiBkb2luZyB0aGUgYWNjb3VudGluZyBkaXJlY3RseSBpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBjb2RlLiBTbWFydC4gV2XigJlyZSBpbmNyZW1lbnRpbmcgdGhlc2UgYGF0b21pYzY0X3RgIGZpZWxkcyBpbiBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgLCByYXRoZXIgdGhhbiBjYWxsaW5nIGBuZl9jdF9hY2N0X3VwZGF0ZWAgZGlyZWN0bHkuIFRoaXMgc2hvdWxkIGltcHJvdmUgcGVyZm9ybWFuY2UuIFRoZW4sIHRoZXJlJiMzOTtzIGBuZl9mbG93X3N5bmNfY3Rfc3RhdHNgLCB3aGljaCBzb3VuZHMgbGlrZSBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgcmVhZGluZyBhbmQgKnJlc2V0dGluZyogdGhlc2UgYWNjdW11bGF0ZWQgc3RhdHMgYW5kIHB1c2hpbmcgdGhlbSBpbnRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHN5c3RlbSB1c2luZyBgbmZfY3RfYWNjdF9hZGRgLiBBbmQgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aGluIGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAuIEkgc2VlLi4uIGl0IGxvb2tzIGxpa2UgYSBwZXJpb2RpYyBzeW5jLgoKTm93LCBhIHF1ZXN0aW9uIGlzIGJ1Z2dpbmcgbWUuIEFyZSB0aG9zZSBuZXcgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcyBpbml0aWFsaXplZCB0byB6ZXJvIHdoZW4gYSBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgaXMgYWN0dWFsbHkgY3JlYXRlZD8gSSBjYW7igJl0IGFzc3VtZSBhbnl0aGluZy4gV2UgbmVlZCB0byBiZSBzdXJlIHRoZXNlIGNvdW50ZXJzIHN0YXJ0IGZyb20gYSBrbm93biBiYXNlbGluZS4gSWYgbm90LCB0aGUgYWNjb3VudGluZyBjb3VsZCBiZSBjb21wbGV0ZWx5IG9mZi4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgd2hlcmUgdGhlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzLiBJJiMzOTtsbCByZWFjaCBmb3IgYGdyZXBwZXJgIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbG93X29mZmxvYWRfdHVwbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmM9MzM9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTM0LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jOjM1OnN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy0zNi1icGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmM6Mzc6XHRcdFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSwgX19iZTE2IHByb3RvKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTM4LXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYzozOTpcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy00MC1cdHN0cnVjdCBuZl9mbG93dGFibGUgKm5mX2Zsb3dfdGFibGU7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTU3LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jOjU4Ol9fYnBmX2tmdW5jIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTU5LWJwZl94ZHBfZmxvd19sb29rdXAoc3RydWN0IHhkcF9tZCAqY3R4LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl90dXBsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtNjItXHRzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCA9IChzdHJ1Y3QgeGRwX2J1ZmYgKiljdHg7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmM6NjM6XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTY0LVx0XHQuaWlmaWR4ID0gZmliX3R1cGxlLVx1MDAzZWlmaW5kZXgsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTY5LVx0fTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYzo3MDpcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy03MS1cdF9fYmUxNiBwcm90bztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTIzPWZsb3dfb2ZmbG9hZF9maWxsX2RpcihzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyNDpcdFx0ICAgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjUte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyNjpcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKmZ0ID0gXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjctXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpjdHQgPSBcdTAwMjZmbG93LVx1MDAzZWN0LVx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9Nzg9RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2FsbG9jKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzktXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjgwOnN0YXRpYyB1MzIgZmxvd19vZmZsb2FkX2RzdF9jb29raWUoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqZmxvd190dXBsZSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtODEte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9ODg9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKm5mdF9yb3V0ZV9kc3RfZmV0Y2goc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo4OTpcdFx0XHRcdFx0ICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy05MC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz05OD1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9maWxsX3JvdXRlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTk5LVx0XHRcdFx0ICAgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoxMDA6XHRcdFx0XHQgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xMDEte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoxMDI6XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpmbG93X3R1cGxlID0gXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMTAzLVx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gbmZ0X3JvdXRlX2RzdF9mZXRjaChyb3V0ZSwgZGlyKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTE1OT1zdGF0aWMgdm9pZCBuZnRfZmxvd19kc3RfcmVsZWFzZShzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoxNjA6XHRcdFx0XHQgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMTYxLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTI3Nj1zdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9oYXNoKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yNzcte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyNzg6XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSA9IGRhdGE7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTI3OS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MjgwOlx0cmV0dXJuIGpoYXNoKHR1cGxlLCBvZmZzZXRvZihzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlLCBfX2hhc2gpLCBzZWVkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjgxLX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTI4Mz1zdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9oYXNoX29iaihjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjg0LXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Mjg1Olx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoID0gZGF0YTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjg2LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyODc6XHRyZXR1cm4gamhhc2goXHUwMDI2dHVwbGVoYXNoLVx1MDAzZXR1cGxlLCBvZmZzZXRvZihzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlLCBfX2hhc2gpLCBzZWVkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjg4LX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTI5MD1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9oYXNoX2NtcChzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqYXJnLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjkyLXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MjkzOlx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUgPSBhcmctXHUwMDNla2V5O1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyOTQ6XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp4ID0gcHRyO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yOTUtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjI5NjpcdGlmIChtZW1jbXAoXHUwMDI2eC1cdTAwM2V0dXBsZSwgdHVwbGUsIG9mZnNldG9mKHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUsIF9faGFzaCkpKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yOTctXHRcdHJldHVybiAxO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MzAyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgbmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MzAzOlx0LmhlYWRfb2Zmc2V0XHRcdD0gb2Zmc2V0b2Yoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCwgbm9kZSksXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTMwNC1cdC5oYXNoZm5cdFx0XHQ9IGZsb3dfb2ZmbG9hZF9oYXNoLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9Mzk5PUVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF90ZWFyZG93bik7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQwMC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDAxOnN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MDItZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo0MDM6XHRcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDA0LXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDA1Olx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MDYtXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NDI3PW5mX2Zsb3dfdGFibGVfaXRlcmF0ZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDMxLXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDMyOlx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MzMtXHRzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyIGh0aTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTY3MT12b2lkIG5mX2Zsb3dfc25hdF9wb3J0KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTY3Mi1cdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NjczOlx0XHQgICAgICAgdTggcHJvdG9jb2wsIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTY3NC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz02OTc9dm9pZCBuZl9mbG93X2RuYXRfcG9ydChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02OTgtXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgdGhvZmYsIHU4IHByb3RvY29sLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2OTk6XHRcdCAgICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MDAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9NDU9c3RhdGljIGludCBuZl9mbG93X3J1bGVfcm91dGVfaW5ldChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTQ2LVx0XHRcdFx0ICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6NDc6XHRcdFx0XHQgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy00OC1cdFx0XHRcdCAgIHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtNDkte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo1MDpcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKmZsb3dfdHVwbGUgPSBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy01MS1cdGludCBlcnI7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9ODM9c3RhdGljIHZvaWQgbmZfZmxvd19zbmF0X2lwKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04NC1cdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwaGRyICppcGgsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4NTpcdFx0XHQgICAgdW5zaWduZWQgaW50IHRob2ZmLCBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODYte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTEwNj1zdGF0aWMgdm9pZCBuZl9mbG93X2RuYXRfaXAoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwNy1cdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwaGRyICppcGgsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMDg6XHRcdFx0ICAgIHVuc2lnbmVkIGludCB0aG9mZiwgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwOS17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTI5PXN0YXRpYyB2b2lkIG5mX2Zsb3dfbmF0X2lwKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMzA6XHRcdFx0ICB1bnNpZ25lZCBpbnQgdGhvZmYsIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMzEtXHRcdFx0ICBzdHJ1Y3QgaXBoZHIgKmlwaClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xNjE9c3RhdGljIHZvaWQgbmZfZmxvd190dXBsZV9lbmNhcChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTYyLVx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjE2MzpcdFx0XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTY0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0yMTQ9c3RhdGljIGludCBuZl9mbG93X3R1cGxlX2lwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoyMTU6XHRcdFx0ICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMjE2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00MjQ9c3RhdGljIHZvaWQgbmZfZmxvd19lbmNhcF9wb3Aoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQyNS1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NDI2Olx0XHRcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQyNy17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDU1LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NDU2OnN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ1Ny1uZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDU5LXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ2MDpcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ2MS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00Njg9c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDY5LVx0XHRcdFx0ICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ3MDpcdFx0XHRcdCAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ3MS1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NzIte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NDczOlx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ3NC1cdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9NTg1PXN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXBpcF9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjU4NjpcdFx0XHRcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTU4Ny1cdFx0XHRcdCAgICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIF9fYmUzMiAqaXBfZGFkZHIpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9NjMxPXN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfdjRfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo2MzI6XHRcdFx0XHQgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNjMzLVx0XHRcdFx0ICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsICBfX2JlMzIgKmlwX2RhZGRyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTY0MT1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwNmlwNl9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjY0MjpcdFx0XHRcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNjQzLVx0XHRcdFx0ICAgICAgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTY5Mj1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX3Y2X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NjkzOlx0XHRcdFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTY5NC1cdFx0XHRcdCAgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTcwMz1zdGF0aWMgaW50IG5mX2Zsb3dfZW5jYXBfcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NzA0Olx0XHRcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNzA1LVx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpvdXRkZXYpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9NzMwPXN0cnVjdCBuZl9mbG93X3htaXQge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTczMy1cdHN0cnVjdCBuZXRfZGV2aWNlXHQqb3V0ZGV2O1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NzM0Olx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGU7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy03MzUtXHRib29sXHRcdFx0bmVlZHNfZ3NvX3NlZ21lbnQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9ODAwPXN0YXRpYyBpbnQgbmZfZmxvd19xdWV1ZV94bWl0NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6ODAxOlx0XHRcdCAgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04MDItXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTgwMy17XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4MDQ6XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjgwNTpcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04MDYtXHRzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04NjY9bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04Njgte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6ODY5Olx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODcwLVx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9OTM3PXN0YXRpYyB2b2lkIG5mX2Zsb3dfc25hdF9pcHY2KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtOTM5LVx0XHRcdCAgICAgIHVuc2lnbmVkIGludCB0aG9mZixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjk0MDpcdFx0XHQgICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtOTQxLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz05NjA9c3RhdGljIHZvaWQgbmZfZmxvd19kbmF0X2lwdjYoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05NjItXHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHRob2ZmLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6OTYzOlx0XHRcdCAgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05NjQte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTk4Mz1zdGF0aWMgdm9pZCBuZl9mbG93X25hdF9pcHY2KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05ODQtXHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6OTg1Olx0XHRcdCAgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTk4Ni1cdFx0XHQgICAgIHN0cnVjdCBpcHY2aGRyICppcDZoKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTEwMDA9c3RhdGljIGludCBuZl9mbG93X3R1cGxlX2lwdjYoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEwMDE6XHRcdFx0ICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDAyLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMDY2PXN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTA2Ny1cdFx0XHRcdFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEwNjg6XHRcdFx0XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwNjktXHRcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDcwLXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEwNzE6XHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTA3Mi1cdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTExNC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjExMTU6c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTExNi1uZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTE5LXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjExMjA6XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge307XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTIxLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTExMjg9c3RhdGljIGludCBuZl9mbG93X3F1ZXVlX3htaXQ2KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMTI5Olx0XHRcdCAgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTMwLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTMxLXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjExMzI6XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjExMzM6XHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTEzNC1cdHN0cnVjdCBuZl9mbG93X3htaXQgeG1pdCA9IHt9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTExOTU9bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExOTcte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTE5ODpcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExOTktXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlID0gcHJpdjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTk0PXN0YXRpYyBpbnQgbmZfZmxvd19ydWxlX21hdGNoKHN0cnVjdCBuZl9mbG93X21hdGNoICptYXRjaCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTU6XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk2LVx0XHRcdCAgICAgIHN0cnVjdCBkc3RfZW50cnkgKm90aGVyX2RzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTIzMj1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9ldGhfc3JjKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjMzLVx0XHRcdFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MjM0Olx0XHRcdFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjM1LVx0XHRcdFx0c3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjM4LVx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeTEgPSBmbG93X2FjdGlvbl9lbnRyeV9uZXh0KGZsb3dfcnVsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjIzOTpcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlLCAqdGhpc190dXBsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjQwLVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0yODI9c3RhdGljIGludCBmbG93X29mZmxvYWRfZXRoX2RzdChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTI4My1cdFx0XHRcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjI4NDpcdFx0XHRcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTI4NS1cdFx0XHRcdHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTI4OC1cdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnkxID0gZmxvd19hY3Rpb25fZW50cnlfbmV4dChmbG93X3J1bGUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoyODk6XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZSwgKnRoaXNfdHVwbGU7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTI5MC1cdGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTM0Mj1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY0X3NuYXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0zNDMtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjM0NDpcdFx0XHRcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMzQ1LVx0XHRcdFx0ICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0zNzM9c3RhdGljIGludCBmbG93X29mZmxvYWRfaXB2NF9kbmF0KHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMzc0LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzozNzU6XHRcdFx0XHQgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTM3Ni1cdFx0XHRcdCAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NDIzPXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2lwdjZfc25hdChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQyNC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NDI1Olx0XHRcdFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy00MjYtXHRcdFx0XHQgIHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTQ0OD1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY2X2RuYXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy00NDktXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjQ1MDpcdFx0XHRcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNDUxLVx0XHRcdFx0ICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz00OTI9c3RhdGljIGludCBmbG93X29mZmxvYWRfcG9ydF9zbmF0KHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNDkzLVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo0OTQ6XHRcdFx0XHQgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQ5NS1cdFx0XHRcdCAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NTI2PXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX3BvcnRfZG5hdChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTUyNy1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NTI4Olx0XHRcdFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy01MjktXHRcdFx0XHQgIHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTU4NT1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9yZWRpcmVjdChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTU4Ni1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo1ODc6XHRcdFx0XHQgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNTg4LVx0XHRcdFx0IHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNTg5LXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NTkwOlx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdGhpc190dXBsZSwgKm90aGVyX3R1cGxlO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy01OTEtXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NjI1PXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2VuY2FwX3R1bm5lbChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2MjY6XHRcdFx0XHQgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTYyNy1cdFx0XHRcdCAgICAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02Mjgte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2Mjk6XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0aGlzX3R1cGxlO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02MzAtXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NjU0PXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2RlY2FwX3R1bm5lbChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2NTU6XHRcdFx0XHQgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTY1Ni1cdFx0XHRcdCAgICAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02NTcte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2NTg6XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNjU5LVx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTY4Mz1uZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6Njg0Olx0XHRcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNjg1LVx0XHRcdCAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02ODYte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2ODc6XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6Njg4Olx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGU7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTY4OS1cdGludCBpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NzQzPWludCBuZl9mbG93X3J1bGVfcm91dGVfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjc0NDpcdFx0XHQgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzQ1LVx0XHRcdCAgICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz03NzI9aW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NzczOlx0XHRcdCAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03NzQtXHRcdFx0ICAgIHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTc5OD1uZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc5OS1cdFx0XHQgICBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjgwMDpcdFx0XHQgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04MDEte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04MDItXHRjb25zdCBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUgPSBvZmZsb2FkLVx1MDAzZWZsb3d0YWJsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6ODAzOlx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsICpvdGhlcl90dXBsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODA0LVx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyA9IG9mZmxvYWQtXHUwMDNlZmxvdztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTg4OD1zdGF0aWMgdm9pZCBuZl9mbG93X29mZmxvYWRfaW5pdChzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04OTAtXHRcdFx0XHQgZW51bSBmbG93X2Nsc19jb21tYW5kIGNtZCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6ODkxOlx0XHRcdFx0IGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04OTItXHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTAwLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5MDE6c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfdHVwbGUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05MDItXHRcdFx0XHQgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTAzLVx0XHRcdFx0IHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTA0Olx0XHRcdFx0IGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTkwNS1cdFx0XHRcdCBpbnQgcHJpb3JpdHksIGludCBjbWQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05MzYtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjkzNzpzdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF90dXBsZV9hZGQoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05MzgtXHRcdFx0XHQgIHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTM5Olx0XHRcdFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05NDAte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5NDE6XHRyZXR1cm4gbmZfZmxvd19vZmZsb2FkX3R1cGxlKG9mZmxvYWQtXHUwMDNlZmxvd3RhYmxlLCBvZmZsb2FkLVx1MDAzZWZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk0Mi1cdFx0XHRcdCAgICAgZmxvd19ydWxlLCBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05NDctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk0ODpzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfdHVwbGVfZGVsKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTQ5Olx0XHRcdFx0ICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTUwLXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTUxOlx0bmZfZmxvd19vZmZsb2FkX3R1cGxlKG9mZmxvYWQtXHUwMDNlZmxvd3RhYmxlLCBvZmZsb2FkLVx1MDAzZWZsb3csIE5VTEwsIGRpcixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTUyLVx0XHRcdCAgICAgIG9mZmxvYWQtXHUwMDNlZmxvd3RhYmxlLVx1MDAzZXByaW9yaXR5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9OTU3PXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX3J1bGVfYWRkKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk2MS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTYyOlx0b2tfY291bnQgJiM0Mzs9IGZsb3dfb2ZmbG9hZF90dXBsZV9hZGQob2ZmbG9hZCwgZmxvd19ydWxlWzBdLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05NjMtXHRcdFx0XHRcdCAgIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05NjQtXHRpZiAodGVzdF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlZmxhZ3MpKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5NjU6XHRcdG9rX2NvdW50ICYjNDM7PSBmbG93X29mZmxvYWRfdHVwbGVfYWRkKG9mZmxvYWQsIGZsb3dfcnVsZVsxXSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTY2LVx0XHRcdFx0XHRcdCAgIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9OTkyPXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2RlbChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05OTQtXHRjbGVhcl9iaXQoSVBTX0hXX09GRkxPQURfQklULCBcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlY3QtXHUwMDNlc3RhdHVzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTk1Olx0Zmxvd19vZmZsb2FkX3R1cGxlX2RlbChvZmZsb2FkLCBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTk2LVx0aWYgKHRlc3RfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXHUwMDI2b2ZmbG9hZC1cdTAwM2VmbG93LVx1MDAzZWZsYWdzKSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTk3Olx0XHRmbG93X29mZmxvYWRfdHVwbGVfZGVsKG9mZmxvYWQsIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05OTgtXHRzZXRfYml0KE5GX0ZMT1dfSFdfREVBRCwgXHUwMDI2b2ZmbG9hZC1cdTAwM2VmbG93LVx1MDAzZWZsYWdzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwMDAtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwMDE6c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3R1cGxlX3N0YXRzKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTAwMjpcdFx0XHRcdCAgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTAwMy1cdFx0XHRcdCAgICAgc3RydWN0IGZsb3dfc3RhdHMgKnN0YXRzKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDA0LXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTAwNTpcdG5mX2Zsb3dfb2ZmbG9hZF90dXBsZShvZmZsb2FkLVx1MDAzZWZsb3d0YWJsZSwgb2ZmbG9hZC1cdTAwM2VmbG93LCBOVUxMLCBkaXIsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwMDYtXHRcdFx0ICAgICAgb2ZmbG9hZC1cdTAwM2VmbG93dGFibGUtXHUwMDNlcHJpb3JpdHksXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMDExPXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX3N0YXRzKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwMTUtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwMTY6XHRmbG93X29mZmxvYWRfdHVwbGVfc3RhdHMob2ZmbG9hZCwgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCwgXHUwMDI2c3RhdHNbMF0pO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDE3LVx0aWYgKHRlc3RfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXHUwMDI2b2ZmbG9hZC1cdTAwM2VmbG93LVx1MDAzZWZsYWdzKSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTAxODpcdFx0Zmxvd19vZmZsb2FkX3R1cGxlX3N0YXRzKG9mZmxvYWQsIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFksXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwMTktXHRcdFx0XHRcdCBcdTAwMjZzdGF0c1sxXSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Mjc5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIEZsb3cgT2ZmbG9hZCBTdHJ1Y3R1cmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpbW1lZGlhdGVseSBzZWVzIHRoZSBoaWVyYXJjaHkgaGVyZSDigJMgdGhlIGBmbG93X29mZmxvYWRfdHVwbGVgIGlzICpuZXN0ZWQqIHdpdGhpbiBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaGAsIHdoaWNoIGl0c2VsZiBpcyBhIGNvbXBvbmVudCBvZiB0aGUgb3ZlcmFyY2hpbmcgYHN0cnVjdCBmbG93X29mZmxvYWRgLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBsYXllcmVkIGRlc2lnbiwgbGlrZWx5IGFpbWVkIGF0IGVpdGhlciBtZW1vcnkgZWZmaWNpZW5jeSwgaW1wcm92ZWQgb3JnYW5pemF0aW9uLCBvciBwZXJoYXBzIG1vZHVsYXJpdHkgd2l0aGluIHRoZSBvZmZsb2FkIHByb2Nlc3MuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGhvdyBpcyB0aGUgbWFzdGVyIHN0cnVjdCwgYGZsb3dfb2ZmbG9hZGAgYWxsb2NhdGVkPyBJcyBpdCBvbiB0aGUgc3RhY2ssIHRoZSBoZWFwLCBvciBzb21lIG90aGVyIG1lbW9yeSByZWdpb24/IEtub3dpbmcgdGhhdCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgbGlmZXRpbWUgYW5kIHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24gcmVxdWlyZW1lbnRzIGZvciB0aGVzZSBzdHJ1Y3R1cmVzLiBJdCBpbXBhY3RzIGNhY2hlIGVmZmljaWVuY3kgYW5kIGhvdyB3ZSBzaG91bGQgYXBwcm9hY2ggZGVidWdnaW5nIGlmIHdlIGVuY291bnRlciBhbnkgaXNzdWVzIHdpdGggaXQgbGF0ZXIuIFRoZSBhbGxvY2F0aW9uIG1ldGhvZCB3aWxsIGRldGVybWluZSB0aGUgbGltaXRzIG9mIGl0cyBhdmFpbGFiaWxpdHksIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgaGFyZHdhcmUgb2ZmbG9hZGluZy4gS25vd2luZyB0aGlzIGdpdmVzIHVzIGEgZmFyIGJldHRlciBwaWN0dXJlIG9mIGhvdyB3ZSBjYW4gaW50ZXJhY3Qgd2l0aCBpdCBzYWZlbHkgaW4gYW4gb2ZmbG9hZCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbG93X29mZmxvYWRfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTIzPWZsb3dfb2ZmbG9hZF9maWxsX2RpcihzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjU0OnN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dfb2ZmbG9hZF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqY3QpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTU1LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc3LX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzg6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2FsbG9jKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzktXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz04NjA9c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2Rlc3Ryb3koc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlW10pXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04NjctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjg2ODpzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9hbGxvYyhjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTg2OS1cdFx0XHRcdCBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGVbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTk3Mz1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19hZGQoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTc3LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5Nzg6XHRlcnIgPSBuZl9mbG93X29mZmxvYWRfYWxsb2Mob2ZmbG9hZCwgZmxvd19ydWxlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTc5LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz01MD1zdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTExMS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjExMjpcdGZsb3cgPSBmbG93X29mZmxvYWRfYWxsb2MoY3QpO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTEzLVx0aWYgKCFmbG93KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE4OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBmbG93X29mZmxvYWRfYWxsb2NgIGZ1bmN0aW9uLCBmb2N1c2luZyBvbiB3aGF0IEkgc2VlIGFzIHRoZSBrZXkgYXNwZWN0czoKCioqRGl2aW5nIGludG8gRmxvdyBUYWJsZSBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBmbG93X29mZmxvYWRfYWxsb2NgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhlIGNvcmUgcmVzcG9uc2liaWxpdGllcyBvZiB0aGlzIGFsbG9jYXRpb24gZnVuY3Rpb24/IE9idmlvdXNseSwgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgcmVzb3VyY2VzIGZvciBhIG5ldyBmbG93IGVudHJ5IHRoYXQmIzM5O3MgZ29pbmcgdG8gYmUgb2ZmbG9hZGVkLiBCdXQgSSYjMzk7bSBsb29raW5nIGJleW9uZCB0aGF0IOKAkyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKnN0cmF0ZWd5KiBvZiB0aGUgYWxsb2NhdGlvbi4KCkZpcnN0LCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGhhbmRsZSB0aGUgZnVuZGFtZW50YWwgbWVtb3J5IGFsbG9jYXRpb24gaXRzZWxmLiBUaGlzIG1lYW5zIG1hbmFnaW5nIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgZmxvdyBlbnRyeSwgbGlrZWx5IGluY2x1ZGluZyB0aGUgdmFyaW91cyBmaWVsZHMgdGhhdCBkZWZpbmUgdGhlIGZsb3cgKHNvdXJjZS9kZXN0aW5hdGlvbiBJUHMsIHBvcnRzLCBwcm90b2NvbCwgZXRjLiksIGFuZCBhbnkgYXNzb2NpYXRlZCBtZXRhZGF0YSBuZWVkZWQgYnkgdGhlIG9mZmxvYWQgbWVjaGFuaXNtLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNpemluZyBzdHJhdGVneSwgd2hhdCBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFuZCBpZiBpdCYjMzk7cyBkeW5hbWljIG9yIHVzZXMgcHJlLWFsbG9jYXRlZCBwb29scy4gTWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcyBpbXBhY3QgZWZmaWNpZW5jeS4KCkkgYWxzbyBpbWFnaW5lIHRoYXQgaXQgbmVlZHMgdG8gaGFuZGxlIGluaXRpYWxpemF0aW9uIG9mIHRoaXMgbmV3IGZsb3cgZW50cnkuIFNldHRpbmcgZGVmYXVsdCB2YWx1ZXMgZm9yIGtleSBmaWVsZHMgaXMgY3JpdGljYWwuIFdoYXQgYXJlIHRoZSBlc3NlbnRpYWwgcGFyYW1ldGVycyB0aGF0IGFyZSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQgaGVyZT8gQXJlIGFueSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB1c2VkIHRvIGRlcml2ZSB0aGVzZSBpbml0aWFsIHZhbHVlcz8KCkFub3RoZXIgcG9pbnQgSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaXMgaG93IHRoaXMgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIGZsb3cgdGFibGUgbWFuYWdlbWVudC4gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgZmxvdyB0YWJsZSYjMzk7cyBsb2NraW5nIG1lY2hhbmlzbXM/IElzIGl0IGF3YXJlIG9mIGFueSBsaW1pdGF0aW9ucyBvbiB0aGUgbnVtYmVyIG9mIGZsb3dzIHRoYXQgY2FuIGJlIG9mZmxvYWRlZD8gRXJyb3IgY2hlY2tpbmcgaGVyZSBpcyBwYXJhbW91bnQgdG8gcHJldmVudCByZXNvdXJjZSBleGhhdXN0aW9uIGFuZCBlbnN1cmUgdGhlIHRhYmxlIGRvZXNuJiMzOTt0IGdldCBjb3JydXB0ZWQuCgpGaW5hbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgZm9yIGZ1dHVyZSBvcHRpbWl6YXRpb25zLiBEb2VzIHRoaXMgYWxsb2NhdGlvbiBmdW5jdGlvbiBwcm92aWRlIGFueSBob29rcyBvciBwbGFjZWhvbGRlcnMgZm9yIGFkdmFuY2VkIGZlYXR1cmVzLCBzdWNoIGFzIHByZS1hbGxvY2F0aW9uIG9mIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyBvciBpbnRlZ3JhdGlvbiB3aXRoIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBtZWNoYW5pc21zPyBIb3cgaXQmIzM5O3MgZGVzaWduZWQgd2lsbCBlaXRoZXIgY29uc3RyYWluIG9yIGVuYWJsZSBmdXR1cmUgZW5oYW5jZW1lbnRzLiBJJiMzOTttIGtlZW4gdG8gY29uc2lkZXIgd2hldGhlciB0aGlzIHJvdXRpbmUgaXMgd2VsbC1mYWN0b3JlZCBhbmQgZXh0ZW5zaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1NDpcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dfb2ZmbG9hZF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqY3QpXG4gIDU1Olx0e1xuICA1NjpcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcbiAgNTc6XHRcbiAgNTg6XHRcdGlmICh1bmxpa2VseShuZl9jdF9pc19keWluZyhjdCkpKVxuICA1OTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgNjA6XHRcbiAgNjE6XHRcdGZsb3cgPSBrbWVtX2NhY2hlX3phbGxvYyhmbG93X29mZmxvYWRfY2FjaGVwLCBHRlBfQVRPTUlDKTtcbiAgNjI6XHRcdGlmICghZmxvdylcbiAgNjM6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDY0Olx0XG4gIDY1Olx0XHRyZWZjb3VudF9pbmMoXHUwMDI2Y3QtXHUwMDNlY3RfZ2VuZXJhbC51c2UpO1xuICA2NjpcdFx0Zmxvdy1cdTAwM2VjdCA9IGN0O1xuICA2NzpcdFxuICA2ODpcdFx0Zmxvd19vZmZsb2FkX2ZpbGxfZGlyKGZsb3csIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xuICA2OTpcdFx0Zmxvd19vZmZsb2FkX2ZpbGxfZGlyKGZsb3csIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xuICA3MDpcdFxuICA3MTpcdFx0aWYgKGN0LVx1MDAzZXN0YXR1cyBcdTAwMjYgSVBTX1NSQ19OQVQpXG4gIDcyOlx0XHRcdF9fc2V0X2JpdChORl9GTE9XX1NOQVQsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuICA3MzpcdFx0aWYgKGN0LVx1MDAzZXN0YXR1cyBcdTAwMjYgSVBTX0RTVF9OQVQpXG4gIDc0Olx0XHRcdF9fc2V0X2JpdChORl9GTE9XX0ROQVQsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuICA3NTpcdFxuICA3NjpcdFx0cmV0dXJuIGZsb3c7XG4gIDc3Olx0fVxuICA3ODpcdEVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hbGxvYyk7XG4gIDc5Olx0XG4gIDgwOlx0c3RhdGljIHUzMiBmbG93X29mZmxvYWRfZHN0X2Nvb2tpZShzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpmbG93X3R1cGxlKVxuICA4MTpcdHtcbiAgODI6XHRcdGlmIChmbG93X3R1cGxlLVx1MDAzZWwzcHJvdG8gPT0gTkZQUk9UT19JUFY2KVxuICA4MzpcdFx0XHRyZXR1cm4gcnQ2X2dldF9jb29raWUoZHN0X3J0Nl9pbmZvKGZsb3dfdHVwbGUtXHUwMDNlZHN0X2NhY2hlKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTUzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIFplcm8tSW5pdGlhbGl6YXRpb24gYW5kIEF0b21pYyBPcGVyYXRpb25zKioKCk9rYXksIHNvIHRoaXMgY29kZSBzbmlwcGV0IHN0YXJ0cyBieSB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgLCBtZWFuaW5nIHRoZSBgZmxvd19vZmZsb2FkYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZCByaWdodCBvZmYgdGhlIGJhdC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cg4oCTIGl0IHNldHMgYSBiYXNlbGluZS4gVGhlbiwgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSBzZWUgYSBjaGFuZ2UgaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AgdGhhdCBlbXBsb3lzIGBhdG9taWM2NF9hZGRgIGZvciB0aGUgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcyB3aXRoaW4gYHR1cGxlaGFzaC0mZ3Q7dHVwbGVgLiBBbmQgbm93IHRoZXJlIGlzIGEgbmV3IGZ1bmN0aW9uIGBuZl9mbG93X3N5bmNfY3Rfc3RhdHNgIHdoaWNoIHVzZXMgYGF0b21pYzY0X3hjaGdgIG9uIHRoZXNlIHZlcnkgc2FtZSBmaWVsZHMuIFNpbmNlIGBmbG93X29mZmxvYWRgIGlzIHplcm8tYWxsb2NhdGVkLCBpdCBtZWFucyBgcGFja2V0c2AgYW5kIGBieXRlc2AgYXJlLCBpbml0aWFsbHksIGd1YXJhbnRlZWQgdG8gYmUgemVyby4KCk15IGJyYWluIGlzIGltbWVkaWF0ZWx5IGFza2luZywgaXMgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIGV2ZXIgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgdGhlbiBwYXNzZWQgYWxvbmcgc29tZXdoZXJlIHdoZXJlIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBhcmUgcmVhZD8gVGhpcyBpcyBhIHBvdGVudGlhbCBwb2ludCBvZiBjb250ZW50aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGF0b21pY3MgYXJlIHRydWx5IGJlaW5nIHVzZWQgYXMgaW50ZW5kZWQuIExvb2tpbmcgYXQgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuY2AsIEkgc2VlIGEgc3RhY2sgYWxsb2NhdGlvbiwgbGlrZSB0aGlzOgoKYGBgYwoJc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB0dXBsZSA9IHsKCQkuaWlmaWR4ID0gZmliX3R1cGxlLSZndDtpZmluZGV4LAouLi4KCX07CmBgYAoKU28geWVzLCB0aGVyZSYjMzk7cyBhIHN0YWNrIHZhcmlhYmxlLiBOb3csIGRvZXMgdGhpcyBzdGFjay1hbGxvY2F0ZWQgYHR1cGxlYCBnZXQgcGFzc2VkIHRvIGEgZnVuY3Rpb24gb3IgY29kZSBwYXRoIHRoYXQgc3Vic2VxdWVudGx5IHJlYWRzIHRoZSBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIGJ5IGV4YW1pbmluZyBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jYCBtb3JlIGNsb3NlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1ODpcdF9fYnBmX2tmdW5jIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxuICA1OTpcdGJwZl94ZHBfZmxvd19sb29rdXAoc3RydWN0IHhkcF9tZCAqY3R4LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl90dXBsZSxcbiAgNjA6XHRcdFx0ICAgIHN0cnVjdCBicGZfZmxvd3RhYmxlX29wdHMgKm9wdHMsIHUzMiBvcHRzX2xlbilcbiAgNjE6XHR7XG4gIDYyOlx0XHRzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCA9IChzdHJ1Y3QgeGRwX2J1ZmYgKiljdHg7XG4gIDYzOlx0XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge1xuICA2NDpcdFx0XHQuaWlmaWR4ID0gZmliX3R1cGxlLVx1MDAzZWlmaW5kZXgsXG4gIDY1Olx0XHRcdC5sM3Byb3RvID0gZmliX3R1cGxlLVx1MDAzZWZhbWlseSxcbiAgNjY6XHRcdFx0Lmw0cHJvdG8gPSBmaWJfdHVwbGUtXHUwMDNlbDRfcHJvdG9jb2wsXG4gIDY3Olx0XHRcdC5zcmNfcG9ydCA9IGZpYl90dXBsZS1cdTAwM2VzcG9ydCxcbiAgNjg6XHRcdFx0LmRzdF9wb3J0ID0gZmliX3R1cGxlLVx1MDAzZWRwb3J0LFxuICA2OTpcdFx0fTtcbiAgNzA6XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcbiAgNzE6XHRcdF9fYmUxNiBwcm90bztcbiAgNzI6XHRcbiAgNzM6XHRcdGlmIChvcHRzX2xlbiAhPSBORl9CUEZfRkxPV1RBQkxFX09QVFNfU1opIHtcbiAgNzQ6XHRcdFx0b3B0cy1cdTAwM2VlcnJvciA9IC1FSU5WQUw7XG4gIDc1Olx0XHRcdHJldHVybiBOVUxMO1xuICA3NjpcdFx0fVxuICA3NzpcdFxuICA3ODpcdFx0c3dpdGNoIChmaWJfdHVwbGUtXHUwMDNlZmFtaWx5KSB7XG4gIDc5Olx0XHRjYXNlIEFGX0lORVQ6XG4gIDgwOlx0XHRcdHR1cGxlLnNyY192NC5zX2FkZHIgPSBmaWJfdHVwbGUtXHUwMDNlaXB2NF9zcmM7XG4gIDgxOlx0XHRcdHR1cGxlLmRzdF92NC5zX2FkZHIgPSBmaWJfdHVwbGUtXHUwMDNlaXB2NF9kc3Q7XG4gIDgyOlx0XHRcdHByb3RvID0gaHRvbnMoRVRIX1BfSVApO1xuICA4MzpcdFx0XHRicmVhaztcbiAgODQ6XHRcdGNhc2UgQUZfSU5FVDY6XG4gIDg1Olx0XHRcdHR1cGxlLnNyY192NiA9ICooc3RydWN0IGluNl9hZGRyICopXHUwMDI2ZmliX3R1cGxlLVx1MDAzZWlwdjZfc3JjO1xuICA4NjpcdFx0XHR0dXBsZS5kc3RfdjYgPSAqKHN0cnVjdCBpbjZfYWRkciAqKVx1MDAyNmZpYl90dXBsZS1cdTAwM2VpcHY2X2RzdDtcbiAgODc6XHRcdFx0cHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiAgODg6XHRcdFx0YnJlYWs7XG4gIDg5Olx0XHRkZWZhdWx0OlxuICA5MDpcdFx0XHRvcHRzLVx1MDAzZWVycm9yID0gLUVBRk5PU1VQUE9SVDtcbiAgOTE6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDkyOlx0XHR9XG4gIDkzOlx0XG4gIDk0Olx0XHR0dXBsZWhhc2ggPSBicGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwKHhkcC1cdTAwM2VyeHEtXHUwMDNlZGV2LCBcdTAwMjZ0dXBsZSwgcHJvdG8pO1xuICA5NTpcdFx0aWYgKElTX0VSUih0dXBsZWhhc2gpKSB7XG4gIDk2Olx0XHRcdG9wdHMtXHUwMDNlZXJyb3IgPSBQVFJfRVJSKHR1cGxlaGFzaCk7XG4gIDk3Olx0XHRcdHJldHVybiBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ4NQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIEJQRiBYRFAgRmxvdyBUdXBsZSBMb29rdXAqKgoKQWxyaWdodCwgc28gYHR1cGxlYCBpcyBiZWluZyBwYXNzZWQgaW50byBgYnBmX3hkcF9mbG93X3R1cGxlX2xvb2t1cGAuIEludGVyZXN0aW5nLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbiBjYWxsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYHR1cGxlYCB2YXJpYWJsZSAqaXMqIGFuZCBob3cgYGJwZl94ZHBfZmxvd190dXBsZV9sb29rdXBgIHV0aWxpemVzIGl0LiBJcyBpdCBhIGtleSBmb3IgYSBoYXNoIG1hcD8gQSBzdHJ1Y3R1cmUgY29udGFpbmluZyBmbG93IGluZm9ybWF0aW9uIHRoYXQgdGhlIFhEUCBwcm9ncmFtIGlzIGdvaW5nIHRvIHVzZSBmb3IgbG9va3Vwcz8gSSBuZWVkIHRvIHJldmlldyB0aGUgY29kZSBmb3IgdGhhdCBmdW5jdGlvbiBpbW1lZGlhdGVseS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBsb29rdXAgYWxnb3JpdGhtIGl0IGVtcGxveXMgKGlzIGl0IGEgcGVyZmVjdCBoYXNoLCBhIHNpbXBsZSBrZXkgY29tcGFyaXNvbiwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleCBsaWtlIGEgdHJpZSBvciBhIGJsb29tIGZpbHRlcj8pLCBhbmQgd2hhdCB0aGUgZnVuY3Rpb24gKnJldHVybnMqLiBJcyBpdCBhIG1hdGNoIGluZGljYXRvciwgb3IgZG9lcyBpdCByZXR1cm4gYSBwb2ludGVyIHRvIHNvbWUgYXNzb2NpYXRlZCBkYXRhPyBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgaGVyZSBpcyBjcml0aWNhbCBmb3IgZ3Jhc3BpbmcgdGhlIFhEUCBwcm9ncmFtJiMzOTtzIG92ZXJhbGwgbG9naWMgYW5kIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGRlZmluaXRpb24gb2YgYHR1cGxlYCBhbmQgdGhlbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJwZl94ZHBfZmxvd190dXBsZV9sb29rdXBgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIyCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRzdGF0aWMgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqXG4gIDM2Olx0YnBmX3hkcF9mbG93X3R1cGxlX2xvb2t1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuICAzNzpcdFx0XHRcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsIF9fYmUxNiBwcm90bylcbiAgMzg6XHR7XG4gIDM5Olx0XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7XG4gIDQwOlx0XHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpuZl9mbG93X3RhYmxlO1xuICA0MTpcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqbmZfZmxvdztcbiAgNDI6XHRcbiAgNDM6XHRcdG5mX2Zsb3dfdGFibGUgPSBuZl9mbG93dGFibGVfYnlfZGV2KGRldik7XG4gIDQ0Olx0XHRpZiAoIW5mX2Zsb3dfdGFibGUpXG4gIDQ1Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuICA0NjpcdFxuICA0NzpcdFx0dHVwbGVoYXNoID0gZmxvd19vZmZsb2FkX2xvb2t1cChuZl9mbG93X3RhYmxlLCB0dXBsZSk7XG4gIDQ4Olx0XHRpZiAoIXR1cGxlaGFzaClcbiAgNDk6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4gIDUwOlx0XG4gIDUxOlx0XHRuZl9mbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCxcbiAgNTI6XHRcdFx0XHQgICAgICAgdHVwbGVoYXNoW3R1cGxlaGFzaC1cdTAwM2V0dXBsZS5kaXJdKTtcbiAgNTM6XHRcdGZsb3dfb2ZmbG9hZF9yZWZyZXNoKG5mX2Zsb3dfdGFibGUsIG5mX2Zsb3csIGZhbHNlKTtcbiAgNTQ6XHRcbiAgNTU6XHRcdHJldHVybiB0dXBsZWhhc2g7XG4gIDU2Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE2MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIERhdGEgRmxvdyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIGRhdGEgc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgYSBgdHVwbGVgLCBpcyBiZWluZyBoYW5kbGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgYGZsb3dfb2ZmbG9hZF9sb29rdXBgIGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uIGlzIGNsZWFybHkgYSBjcml0aWNhbCBjb21wb25lbnQgaW4gdGhpcyBmbG93LiBQYXNzaW5nIGEgYHR1cGxlYCB0byBpdCwgaW4gaXRzZWxmLCBpc24mIzM5O3QgaW5oZXJlbnRseSBhbGFybWluZywgYnV0IHRoZSAqaW1wbGljYXRpb25zKiBhcmUgd2hhdCBJIG5lZWQgdG8gdW5wYWNrIHF1aWNrbHkuIFdoYXQgZXhhY3RseSBpcyBgZmxvd19vZmZsb2FkX2xvb2t1cGAgZXhwZWN0aW5nIGZyb20gdGhhdCBgdHVwbGVgPyBJcyBpdCBqdXN0IGEga2V5LCBhIHNldCBvZiBwYXJhbWV0ZXJzLCBvciBhIG1vcmUgY29tcGxleCBjb25maWd1cmF0aW9uIGZvciBvZmZsb2FkaW5nPyBUaGUgc3RydWN0dXJlIG9mIHRoZSBgdHVwbGVgJiMzOTtzIGNvbnRlbnRzIGRpY3RhdGVzIHdoYXQga2luZCBvZiBwcm9jZXNzaW5nIGFuZCBvZmZsb2FkaW5nIG9wdGltaXphdGlvbnMgYXJlIHBvc3NpYmxlIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYW4gZWZmaWNpZW50IHJlcHJlc2VudGF0aW9uLCBvciBpZiBpdCBtaWdodCBiZWNvbWUgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGZ1cnRoZXIgZG93biB0aGUgbGluZS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gdHJhY2UgdGhlIHVzZSBvZiB0aGF0IGB0dXBsZWAgd2l0aGluIHRoZSBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBvciB0aGUgbG9naWMgdGhlIHR1cGxlIGlzIGZlZWRpbmcgdGhlIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMTpcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxuIDQwMjpcdGZsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbiA0MDM6XHRcdFx0ICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlKVxuIDQwNDpcdHtcbiA0MDU6XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcbiA0MDY6XHRcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4gNDA3Olx0XHRpbnQgZGlyO1xuIDQwODpcdFxuIDQwOTpcdFx0dHVwbGVoYXNoID0gcmhhc2h0YWJsZV9sb29rdXAoXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VyaGFzaHRhYmxlLCB0dXBsZSxcbiA0MTA6XHRcdFx0XHRcdCAgICAgIG5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXMpO1xuIDQxMTpcdFx0aWYgKCF0dXBsZWhhc2gpXG4gNDEyOlx0XHRcdHJldHVybiBOVUxMO1xuIDQxMzpcdFxuIDQxNDpcdFx0ZGlyID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpcjtcbiA0MTU6XHRcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XG4gNDE2Olx0XHRpZiAodGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncykpXG4gNDE3Olx0XHRcdHJldHVybiBOVUxMO1xuIDQxODpcdFxuIDQxOTpcdFx0aWYgKHVubGlrZWx5KG5mX2N0X2lzX2R5aW5nKGZsb3ctXHUwMDNlY3QpKSlcbiA0MjA6XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4Nzg5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggbmV0d29yayBmbG93IG9mZmxvYWRpbmc6CgoqKkFuYWx5emluZyBhIEZsb3cgT2ZmbG9hZCBMb29rdXAqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgZmxvdyBlbnRyeSBsb29rdXAgdXNpbmcgYHJoYXNodGFibGVfbG9va3VwYC4gVGhhdCYjMzk7cyBzdGFuZGFyZCBmb3IgdGhpcyBzb3J0IG9mIHRoaW5nIOKAkyBlZmZpY2llbnQsIGNvbGxpc2lvbi1yZXNpc3RhbnQgbG9va3VwcyBhcmUgY3JpdGljYWwgZm9yIHBlcmZvcm1hbmNlIGluIHRoZSBkYXRhcGF0aC4gQW5kIHRoZSBrZXkgd2UmIzM5O3JlIHVzaW5nIGlzIGEgYHR1cGxlYC4gVGhhdCYjMzk7cyB3aGF0IEkmIzM5O2QgZXhwZWN0OyBpdCYjMzk7cyB0aGUgY29yZSBzZXQgb2YgaWRlbnRpZnlpbmcgZmllbGRzIOKAkyBzb3VyY2UvZGVzdGluYXRpb24gSVAsIHBvcnRzLCBwcm90b2NvbCwgZXRjLiAtIHRoYXQgZGVmaW5lcyBhIHBhcnRpY3VsYXIgZmxvdy4gTm93LCBsZXQmIzM5O3MgZGlnIGEgYml0IGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhpcyBgcmhhc2h0YWJsZWAgaXMgY29uZmlndXJlZC4gSSBuZWVkIHRvIGV4YW1pbmUgYG5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXNgLiBUaGF0JiMzOTtsbCB0ZWxsIG1lIHRoZSBoYXNoIGZ1bmN0aW9uLCB0aGUgdGFibGUgc2l6ZSwgYW55IHJlc2l6aW5nIHN0cmF0ZWdpZXMg4oCTIGFsbCB0aGUgY3JpdGljYWwgcGFyYW1ldGVycyB0aGF0IGluZmx1ZW5jZSBsb29rdXAgcGVyZm9ybWFuY2UgYW5kIGNvbGxpc2lvbiBoYW5kbGluZy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpcyB0dW5lZCBhcHByb3ByaWF0ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgbmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyA9IHtcbiAzMDM6XHRcdC5oZWFkX29mZnNldFx0XHQ9IG9mZnNldG9mKHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2gsIG5vZGUpLFxuIDMwNDpcdFx0Lmhhc2hmblx0XHRcdD0gZmxvd19vZmZsb2FkX2hhc2gsXG4gMzA1Olx0XHQub2JqX2hhc2hmblx0XHQ9IGZsb3dfb2ZmbG9hZF9oYXNoX29iaixcbiAzMDY6XHRcdC5vYmpfY21wZm5cdFx0PSBmbG93X29mZmxvYWRfaGFzaF9jbXAsXG4gMzA3Olx0XHQuYXV0b21hdGljX3Nocmlua2luZ1x0PSB0cnVlLFxuIDMwODpcdH07XG4gMzA5Olx0XG4gMzEwOlx0dW5zaWduZWQgbG9uZyBmbG93X29mZmxvYWRfZ2V0X3RpbWVvdXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbiAzMTE6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5Mjc4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdlbGwtdmVyc2VkIGluIHRoaXMgYXJlYToKCioqRGVjb25zdHJ1Y3RpbmcgRmxvdyBPZmZsb2FkIEhhc2hpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpcyBpbW1lZGlhdGVseSBkcmF3biB0byBgZmxvd19vZmZsb2FkX2hhc2hgIGFuZCBgZmxvd19vZmZsb2FkX2hhc2hfY21wYC4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGVzZSBmdW5jdGlvbnMgcmVsYXRlIHRvIHRoZSBjb3JlIG9mIGFueSBnb29kIGZsb3cgb2ZmbG9hZCBtZWNoYW5pc20uIEkmIzM5O20gaW1hZ2luaW5nIGhvdyB0aGV5JiMzOTtyZSB1c2VkIGluIHRoZSBjb250ZXh0IG9mIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiwgYW5kIGhvdyB3ZSBsZXZlcmFnZSBpdC4gV2hhdCBhcmUgd2UgdHJ5aW5nIHRvIGFjaGlldmUgd2l0aCB0aGVzZT8gSSYjMzk7bSBwaWN0dXJpbmcgaG93IHRoZSBoYXNoIGNvbXB1dGF0aW9uIGhlbHBzIHVzIHJhcGlkbHkgaWRlbnRpZnkgYW5kIGNsYXNzaWZ5IG5ldHdvcmsgZmxvd3MuIElzIGl0IGZvciBsb2FkIGJhbGFuY2luZz8gUGFja2V0IGZpbHRlcmluZz8gU2VjdXJpdHk/IFRoZSBjb250ZXh0IGlzIGNyaXRpY2FsLgoKSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiB0byBmdWxseSBncmFzcCBob3cgdGhlIGBmbG93X29mZmxvYWRfaGFzaF9jbXBgIGZ1bmN0aW9uIHdvcmtzIGFsb25nc2lkZSB0aGUgaGFzaCBmdW5jdGlvbiwgYXMgdGhlIGNvbXBhcmlzb24gaXMganVzdCBhcyBpbXBvcnRhbnQuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGVxdWFsaXR5IGNoZWNrLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4IHdpdGggd2lsZGNhcmRzIG9yIHJhbmdlcz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgaG93IHRoZSBoYXJkd2FyZSYjMzk7cyB0YWJsZXMgYXJlIG9yZ2FuaXplZCBhbmQgYWNjZXNzZWQ/IElzIHRoaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyBhIG1hdGNoLCBvciBhcmUgdGhlcmUgYWRkaXRpb25hbCBjcml0ZXJpYSBpbiBwbGF5PwoKV2hhdCBhYm91dCBjb2xsaXNpb24gcmVzb2x1dGlvbj8gSG93IGlzIHRoYXQgaGFuZGxlZD8gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhpcyBzZXR1cCBpcyBzdXNjZXB0aWJsZSB0byBhbnkgaGFzaCBjb2xsaXNpb25zIGFuZCB3aGF0IGltcGFjdCB0aGVzZSB3aWxsIGhhdmUgb24gdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UuIFRoaW5raW5nIGJhY2sgdG8gbXkgZXhwZXJpZW5jZSBpbiB0aGlzIGZpZWxkLCBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgY29tcGFyaW5nIHRoaXMgYXBwcm9hY2ggdG8gb3RoZXIgaGFzaGluZyBtZXRob2RzIEkmIzM5O3ZlIHVzZWQuIEkgbmVlZCB0byBrbm93IGhvdyBlZmZpY2llbnQgdGhpcyBoYXNoaW5nIHNjaGVtZSBpcyBpbiByZWFsLXdvcmxkIHNjZW5hcmlvcy4gSXMgaXQgb3B0aW1pemVkIGZvciBzcGVjaWZpYyBwYWNrZXQgaGVhZGVyIGNvbWJpbmF0aW9ucz8gQW5kLCBtb3N0IGltcG9ydGFudGx5LCBpcyB0aGlzIGVudGlyZSBzb2x1dGlvbiBib3RoIGZ1bmN0aW9uYWxseSBjb3JyZWN0IGFuZCBwZXJmb3JtYW50IGluIGFsbCB0aGUgZGlmZmVyZW50IGVkZ2UgY2FzZXMgSSBjYW4gdGhpbmsgb2Y/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjc2Olx0c3RhdGljIHUzMiBmbG93X29mZmxvYWRfaGFzaChjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcbiAyNzc6XHR7XG4gMjc4Olx0XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSA9IGRhdGE7XG4gMjc5Olx0XG4gMjgwOlx0XHRyZXR1cm4gamhhc2godHVwbGUsIG9mZnNldG9mKHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUsIF9faGFzaCksIHNlZWQpO1xuIDI4MTpcdH1cbiAyODI6XHRcbiAyODM6XHRzdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9oYXNoX29iaihjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcbiAyODQ6XHR7XG4gMjg1Olx0XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2ggPSBkYXRhO1xuIDI4NjpcdFxuIDI4NzpcdFx0cmV0dXJuIGpoYXNoKFx1MDAyNnR1cGxlaGFzaC1cdTAwM2V0dXBsZSwgb2Zmc2V0b2Yoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSwgX19oYXNoKSwgc2VlZCk7XG4gMjg4Olx0fVxuIDI4OTpcdFxuIDI5MDpcdHN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2hhc2hfY21wKHN0cnVjdCByaGFzaHRhYmxlX2NvbXBhcmVfYXJnICphcmcsXG4gMjkxOlx0XHRcdFx0XHRcdGNvbnN0IHZvaWQgKnB0cilcbiAyOTI6XHR7XG4gMjkzOlx0XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSA9IGFyZy1cdTAwM2VrZXk7XG4gMjk0Olx0XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp4ID0gcHRyO1xuIDI5NTpcdFxuIDI5NjpcdFx0aWYgKG1lbWNtcChcdTAwMjZ4LVx1MDAzZXR1cGxlLCB0dXBsZSwgb2Zmc2V0b2Yoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSwgX19oYXNoKSkpXG4gMjk3Olx0XHRcdHJldHVybiAxO1xuIDI5ODpcdFxuIDI5OTpcdFx0cmV0dXJuIDA7XG4gMzAwOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDExOAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmxvdyBPZmZsb2FkIFR1cGxlKioKCk9rYXksIHNvIHRoZSBoYXNoIGFuZCBjb21wYXJpc29uIGZ1bmN0aW9ucyBhcmUgb25seSBjb25jZXJuZWQgd2l0aCBhIHNwZWNpZmljIHBvcnRpb24gb2YgdGhlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYC4gVGhlIGtleSBpcyBpZGVudGlmeWluZyBleGFjdGx5IHdoZXJlIHRoYXQgcmVsZXZhbnQgcG9ydGlvbiBlbmRzLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhIHBvaW50ZXIgdG8gd2hlcmUgaXQgZGVjaWRlcyB3aGF0IGl0IGNvbnNpZGVycy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBgX19oYXNoYCBtZW1iZXIgd2l0aGluIHRoYXQgc3RydWN0dXJlLiBUaGF0IGBvZmZzZXRvZmAgY2FsbCBpcyB0ZWxsaW5nIG1lICpob3cgbWFueSBieXRlcyogaW50byB0aGUgc3RydWN0dXJlIEkgbmVlZCB0byBsb29rIHRvLiBVbmRlcnN0YW5kaW5nIHRoYXQgb2Zmc2V0IHdpbGwgbGV0IG1lIGZ1bGx5IGdyYXNwIHRoZSBzY29wZSBvZiB0aG9zZSBoYXNoaW5nIGFuZCBjb21wYXJpc29uIG9wZXJhdGlvbnMuIEl0JiMzOTtzIGFib3V0IGVmZmljaWVudGx5IGlkZW50aWZ5aW5nIHRoZSByZWxldmFudCBkYXRhIGZvciBwYWNrZXQgY2xhc3NpZmljYXRpb24gYW5kIGZpbHRlcmluZywgYW5kIEkgbmVlZCB0byBiZSBwcmVjaXNlIGFib3V0IHdoYXQgdGhlIGNvbXBhcmlzb24gaXMgYmFzZWQgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQwOlx0XHR1OFx0XHRcdFx0bDRwcm90bztcbiAxNDE6XHRcdHN0cnVjdCB7XG4gMTQyOlx0XHRcdHUxNlx0XHRcdGlkO1xuIDE0MzpcdFx0XHRfX2JlMTZcdFx0XHRwcm90bztcbiAxNDQ6XHRcdH0gZW5jYXBbTkZfRkxPV19UQUJMRV9FTkNBUF9NQVhdO1xuIDE0NTpcdFxuIDE0NjpcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWxcdHR1bjtcbiAxNDc6XHRcbiAxNDg6XHRcdC8qIEFsbCBtZW1iZXJzIGFib3ZlIGFyZSBrZXlzIGZvciBsb29rdXBzLCBzZWUgZmxvd19vZmZsb2FkX2hhc2goKS4gKi9cbiAxNDk6XHRcdHN0cnVjdCB7IH1cdFx0XHRfX2hhc2g7XG4gMTUwOlx0XG4gMTUxOlx0XHR1MTZcdFx0XHRcdGRpcjoyLFxuIDE1MjpcdFx0XHRcdFx0XHR4bWl0X3R5cGU6MyxcbiAxNTM6XHRcdFx0XHRcdFx0ZW5jYXBfbnVtOjIsXG4gMTU0Olx0XHRcdFx0XHRcdG5lZWRzX2dzb19zZWdtZW50OjEsXG4gMTU1Olx0XHRcdFx0XHRcdHR1bl9udW06MixcbiAxNTY6XHRcdFx0XHRcdFx0aW5fdmxhbl9pbmdyZXNzOjI7XG4gMTU3Olx0XHR1MTZcdFx0XHRcdG10dTtcbiAxNTg6XHRcdHUzMlx0XHRcdFx0ZHN0X2Nvb2tpZTtcbiAxNTk6XHRcdHN0cnVjdCBkc3RfZW50cnlcdFx0KmRzdF9jYWNoZTtcbiAxNjA6XHRcbiAxNjE6XHRcdHVuaW9uIHtcbiAxNjI6XHRcdFx0c3RydWN0IHtcbiAxNjM6XHRcdFx0XHR1MzJcdFx0aWZpZHg7XG4gMTY0Olx0XHRcdH07XG4gMTY1Olx0XHRcdHN0cnVjdCB7XG4gMTY2Olx0XHRcdFx0dTMyXHRcdGlmaWR4O1xuIDE2NzpcdFx0XHRcdHU4XHRcdGhfc291cmNlW0VUSF9BTEVOXTtcbiAxNjg6XHRcdFx0XHR1OFx0XHRoX2Rlc3RbRVRIX0FMRU5dO1xuIDE2OTpcdFx0XHR9IG91dDtcbiAxNzA6XHRcdFx0c3RydWN0IHtcbiAxNzE6XHRcdFx0XHR1MzJcdFx0aWlmaWR4O1xuIDE3MjpcdFx0XHR9IHRjO1xuIDE3MzpcdFx0fTtcbiAxNzQ6XHRcbiAxNzU6XHRcdGF0b21pYzY0X3RcdFx0XHRwYWNrZXRzO1xuIDE3NjpcdFx0YXRvbWljNjRfdFx0XHRcdGJ5dGVzO1xuIDE3NzpcdH07XG4gMTc4Olx0XG4gMTc5Olx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODc4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGbG93IE9mZmxvYWQgTG9va3VwKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHNvbWV0aGluZyYjMzk7cyBpbW1lZGlhdGVseSBqdW1waW5nIG91dC4gVGhlIGBfX2hhc2hgIGZ1bmN0aW9uIGlzIGNhbGxlZCAqYmVmb3JlKiB0aGUgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcy4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzIGFyZW4mIzM5O3QgYWN0dWFsbHkgcGFydCBvZiB0aGUgaGFzaCBrZXkgaXRzZWxmLiBBbmQgaWYgdGhleSYjMzk7cmUgbm90IHBhcnQgb2YgdGhlIGhhc2gga2V5LCB0aGV5IHdvdWxkbiYjMzk7dCBiZSBkaXJlY3RseSBjb21wYXJlZCB3aXRoaW4gYSBgbWVtY21wYCBvcGVyYXRpb24gZWl0aGVyLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLgoKTm93LCBob2xkIG9uLi4udGhpcyBtYWtlcyBtZSB0aGluay4gV2hhdCBhYm91dCBgbmZfZmxvd19vZmZsb2FkX2xvb2t1cGA/IEkgbmVlZCB0byBnbyBiYWNrIHRvIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY2AgYW5kIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhhdCBzZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDU2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NTY6XHRzdGF0aWMgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqXG4gNDU3Olx0bmZfZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIDQ1ODpcdFx0XHQgICAgICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA0NTk6XHR7XG4gNDYwOlx0XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge307XG4gNDYxOlx0XG4gNDYyOlx0XHRpZiAobmZfZmxvd190dXBsZV9pcChjdHgsIHNrYiwgXHUwMDI2dHVwbGUpIFx1MDAzYyAwKVxuIDQ2MzpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0NjQ6XHRcbiA0NjU6XHRcdHJldHVybiBmbG93X29mZmxvYWRfbG9va3VwKGZsb3dfdGFibGUsIFx1MDAyNnR1cGxlKTtcbiA0NjY6XHR9XG4gNDY3Olx0XG4gNDY4Olx0c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIDQ2OTpcdFx0XHRcdFx0ICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbiA0NzA6XHRcdFx0XHRcdCAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcbiA0NzE6XHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4gNDcyOlx0e1xuIDQ3MzpcdFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcbiA0NzQ6XHRcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4gNDc1Olx0XHR1bnNpZ25lZCBpbnQgdGhvZmYsIG10dTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0OTQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBUaG91Z2h0cyBvbiBgdHVwbGVgIEluaXRpYWxpemF0aW9uIGFuZCBGdW5jdGlvbiBFeGVjdXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGB0dXBsZWAgYmVpbmcgaW5pdGlhbGl6ZWQuIFRoZSBgPSB7fWAgaXMgYSBjbGV2ZXIgYml0IG9mIHplcm8taW5pdGlhbGl6YXRpb24uIEl0JiMzOTtzIGluaXRpYWxpemluZyB0aGUgZW50aXJlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHRoZSBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzLCBldmVuIGlmIHRoZXkgYXJlbiYjMzk7dCBleHBsaWNpdGx5IHVzZWQgYXQgdGhlIG1vbWVudC4gIFRoaXMgaXMgcHJvYmFibHkgYmVpbmcgZG9uZSBmb3IgYSBjb3VwbGUgb2YgcmVhc29ucy4gIEZpcnN0LCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgZ2FyYmFnZSB2YWx1ZXMgZmxvYXRpbmcgYXJvdW5kLiBTZWNvbmQsIGl0IGdpdmVzIHVzIGEga25vd24gc3RhcnRpbmcgcG9pbnQgaWYgd2UgZGVjaWRlIGxhdGVyIHdlICpkbyogbmVlZCB0byB0cmFjayB0aG9zZSBzdGF0cy4gIENsZWFubGluZXNzIGlzIGFsd2F5cyBnb29kLgoKTm93LCB3ZSYjMzk7cmUgb2ZmIHRvIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXBgLiBJIHdvbmRlciB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGB0dXBsZWAgaW5pdGlhbGl6YXRpb24gaGF2ZSBpbiB0aGUgbG9va3VwIHByb2NlZHVyZS4gVGhpcyB6ZXJvLWluaXRpYWxpemVkIHN0YXRlIGlzIGludGVyZXN0aW5nLiAgTGV0JiMzOTtzIHNlZSB3aGVyZSB0aGlzIGxlYWRzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTE1Olx0c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxuMTExNjpcdG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuMTExNzpcdFx0XHRcdCAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuMTExODpcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTExOTpcdHtcbjExMjA6XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcbjExMjE6XHRcbjExMjI6XHRcdGlmIChuZl9mbG93X3R1cGxlX2lwdjYoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMClcbjExMjM6XHRcdFx0cmV0dXJuIE5VTEw7XG4xMTI0Olx0XG4xMTI1Olx0XHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcdTAwMjZ0dXBsZSk7XG4xMTI2Olx0fVxuMTEyNzpcdFxuMTEyODpcdHN0YXRpYyBpbnQgbmZfZmxvd19xdWV1ZV94bWl0NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTEyOTpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXG4xMTMwOlx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbjExMzE6XHR7XG4xMTMyOlx0XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTtcbjExMzM6XHRcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XG4xMTM0Olx0XHRzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxNDEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgYW5kIFVzZXJzcGFjZSBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgLCB3aGljaCBJIGluaXRpYWxpemVkIGFzIGFuIGVtcHR5IHN0cnVjdHVyZSwganVzdCBsaWtlIEkgd291bGQgaW4gYSBuZXcgcHJvamVjdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyB0aGluZyBpcyBldmVyLCBpbiBhbnkgd2F5LCBzaGFwZSwgb3IgZm9ybSwgY29waWVkIG92ZXIgdG8gdXNlcnNwYWNlLiBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGFuIGludGVybmFsIG5ldGZpbHRlciBzdHJ1Y3R1cmUgc3BlY2lmaWNhbGx5IHVzZWQgZm9yIGZsb3cgb2ZmbG9hZCwgYnV0IEkgbmVlZCB0byBiZSBjZXJ0YWluLgoKTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGltbWVkaWF0ZWx5IGRyYXduIHRvIGBuZl9mbG93X3N5bmNfY3Rfc3RhdHNgLiBUaGF0IGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RhdGlzdGljcy4gQWgsIHllcywgYW5kIEkga25vdyB0aG9zZSBzdGF0cyAqYXJlKiBzZW50IHRvIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgZWl0aGVyIHRocm91Z2ggY29ubnRyYWNrIGV2ZW50cyBvciB0aHJvdWdoIGR1bXBzLiBCdXQgdGhlIGtleSBoZXJlIGlzIHRoZSBgZmxvd19vZmZsb2FkX3R1cGxlYCBpdHNlbGYuIElzIHRoYXQgc3RydWN0dXJlIGRpcmVjdGx5IGludm9sdmVkIGluIHRob3NlIG5ldGxpbmsgbWVzc2FnZXM/IE15IGd1dCBzYXlzIG5vLCBidXQgSSBuZWVkIHRvIHZlcmlmeS4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgaXMgYWN0dWFsbHkgKnVzZWQqIGluIGFueSBuZXRsaW5rIG1lc3NhZ2VzIGF0IGFsbC4gVGhhdCYjMzk7cyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmxhX3B1dC4qZmxvd19vZmZsb2FkX3R1cGxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjU4NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipDaGVja2luZyBgZmxvd19vZmZsb2FkX3R1cGxlYCBVc2FnZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYC4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB1c2Vyc3BhY2UsIHdoaWNoIHdvdWxkIG1ha2UgZGVidWdnaW5nIGhhcmRlciBpZiBzb21ldGhpbmcmIzM5O3Mgb2ZmLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGlzIHN0cnVjdHVyZSBpcyBkaXJlY3RseSBpbnZvbHZlZCBpbiBhbnkgYGNvcHlfdG9fdXNlcmAgb3IgYW5hbG9nb3VzIGNhbGxzLiBJIGFtIGdvaW5nIHRvIHNlZSBpZiBhbnkgY29kZSBwYXRocyBjb3B5IHRoYXQgc3RydWN0IHRvIHVzZXJzcGFjZS4gVGhhdCB3aWxsIGJlIG15IGZpcnN0IGFyZWEgdG8gaW52ZXN0aWdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29weV90b191c2VyLipmbG93X29mZmxvYWRfdHVwbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzgyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmxvdyBPZmZsb2FkIFR1cGxlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGludG8gdGhlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYC4gTWFrZXMgc2Vuc2UsIHdlIG5lZWQgdG8gdHJhY2sgdGhhdC4gQW5kIHRoZXkmIzM5O3JlIHVzaW5nIGBhdG9taWM2NF90YCwgZ29vZCwgdGhyZWFkLXNhZmUgdXBkYXRlcyBhcmUgY3J1Y2lhbCBoZXJlLiBOb3csIHRoZSBtYWluIHVwZGF0ZSBsb2dpYyBzZWVtcyB0byBiZSBoYXBwZW5pbmcgaW4gYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYC4gSSBpbW1lZGlhdGVseSB3b25kZXIgaWYgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGlzIGFsc28gYmVpbmcgdXBkYXRlZCwgZ2l2ZW4gdGhhdCB0aGlzIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSBzaG91bGQgaGFuZGxlIGJvdGggSVB2NCBhbmQgSVB2Ni4gSG1tLCB0aGUgZGlmZiAqb25seSogbWVudGlvbnMgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYC4gVGhhdCYjMzk7cyBhIGJpdCBvZGQuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQgbWUgbG9vayBhdCB0aGUgZGlmZiBhZ2FpbiwganVzdCB0byBiZSBzdXJlLi4uIHllcCwganVzdCBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgIGluIGBuZl9mbG93X3RhYmxlX2lwLmNgLiBPa2F5LCBzbyBpdCBsb29rcyBsaWtlIElQdjYgaXMgYmVpbmcgaGFuZGxlZCBlbHNld2hlcmUsIG9yIHBlcmhhcHMgdXNpbmcgdGhlIHNhbWUgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhhdCBmdXJ0aGVyLiBGb3Igbm93LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBuZl9mbG93X3RhYmxlX2lwLmNgIGFyb3VuZCBsaW5lIDEwNjYgdG8gZ2V0IGEgZ3JpcCBvbiBob3cgdGhpcyBpcyBiZWluZyBoYW5kbGVkLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZSB0byBnZXQgYSBzZW5zZSBvZiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA2NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDY2Olx0c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4xMDY3Olx0XHRcdFx0XHRcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4xMDY4Olx0XHRcdFx0XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcbjEwNjk6XHRcdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcbjEwNzA6XHR7XG4xMDcxOlx0XHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xuMTA3MjpcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcbjEwNzM6XHRcdHVuc2lnbmVkIGludCB0aG9mZiwgbXR1O1xuMTA3NDpcdFx0c3RydWN0IGlwdjZoZHIgKmlwNmg7XG4xMDc1Olx0XG4xMDc2Olx0XHRkaXIgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyO1xuMTA3NzpcdFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbjEwNzg6XHRcbjEwNzk6XHRcdG10dSA9IGZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICYjNDM7IGN0eC1cdTAwM2VvZmZzZXQ7XG4xMDgwOlx0XHRpZiAoZmxvdy1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSlcbjEwODE6XHRcdFx0bXR1IC09IHNpemVvZigqaXA2aCk7XG4xMDgyOlx0XG4xMDgzOlx0XHRpZiAodW5saWtlbHkobmZfZmxvd19leGNlZWRzX210dShza2IsIG10dSkpKVxuMTA4NDpcdFx0XHRyZXR1cm4gMDtcbjEwODU6XHRcbjEwODY6XHRcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgY3R4LVx1MDAzZW9mZnNldCk7XG4xMDg3Olx0XHR0aG9mZiA9IHNpemVvZigqaXA2aCkgJiM0MzsgY3R4LVx1MDAzZW9mZnNldDtcbjEwODg6XHRcdGlmIChuZl9mbG93X3N0YXRlX2NoZWNrKGZsb3csIGlwNmgtXHUwMDNlbmV4dGhkciwgc2tiLCB0aG9mZikpXG4xMDg5Olx0XHRcdHJldHVybiAwO1xuMTA5MDpcdFxuMTA5MTpcdFx0aWYgKCFuZl9mbG93X2RzdF9jaGVjayhcdTAwMjZ0dXBsZWhhc2gtXHUwMDNldHVwbGUpKSB7XG4xMDkyOlx0XHRcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcbjEwOTM6XHRcdFx0cmV0dXJuIDA7XG4xMDk0Olx0XHR9XG4xMDk1Olx0XG4xMDk2Olx0XHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHRob2ZmICYjNDM7IGN0eC1cdTAwM2VoZHJzaXplKSlcbjEwOTc6XHRcdFx0cmV0dXJuIC0xO1xuMTA5ODpcdFxuMTA5OTpcdFx0Zmxvd19vZmZsb2FkX3JlZnJlc2goZmxvd190YWJsZSwgZmxvdywgZmFsc2UpO1xuMTEwMDpcdFxuMTEwMTpcdFx0bmZfZmxvd19lbmNhcF9wb3AoY3R4LCBza2IsIHR1cGxlaGFzaCk7XG4xMTAyOlx0XG4xMTAzOlx0XHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcbjExMDQ6XHRcdG5mX2Zsb3dfbmF0X2lwdjYoZmxvdywgc2tiLCBkaXIsIGlwNmgpO1xuMTEwNTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk0MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBOZXR3b3JrIEZsb3cgT2ZmbG9hZCBEaXNjcmVwYW5jeSoqCgpIbW0sIHNvbWV0aGluZyYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIFRoZSBkaWZmIEkmIzM5O20gcmV2aWV3aW5nIGlzbiYjMzk7dCByZWZsZWN0aW5nIGFueSBtb2RpZmljYXRpb25zIHRvIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYC4gVGhhdCYjMzk7cyB1bmV4cGVjdGVkLCBnaXZlbiB0aGUgY29udGV4dC4gQmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZS4gVGhlIGNoYW5nZSAqc2hvdWxkKiBiZSBpbiB0aGlzIGFyZWEsIHNvIGxldCYjMzk7cyBtZXRpY3Vsb3VzbHkgcmUtZXhhbWluZSB0aGUgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGNvZGUgaXRzZWxmLiBUaGVyZSBjb3VsZCBiZSBzb21ldGhpbmcgc3VidGxlIEkmIzM5O20gbWlzc2luZywgYSBoaWRkZW4gZGVwZW5kZW5jeSwgb3IgbWF5YmUgSSYjMzk7bSBsb29raW5nIGF0IHRoZSB3cm9uZyB2ZXJzaW9uLiBMZXQgbWUgZGlnIGEgYml0IGRlZXBlciBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEwNjpcdFx0aXA2aC1cdTAwM2Vob3BfbGltaXQtLTtcbjExMDc6XHRcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcbjExMDg6XHRcbjExMDk6XHRcdGlmIChmbG93X3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcbjExMTA6XHRcdFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cdTAwM2VjdCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpciwgc2tiLVx1MDAzZWxlbik7XG4xMTExOlx0XG4xMTEyOlx0XHRyZXR1cm4gMTtcbjExMTM6XHR9XG4xMTE0Olx0XG4xMTE1Olx0c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM1MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZsb3cgT2ZmbG9hZCBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgdXNlciBwcm92aWRlZCBhIGRpZmYsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGp1bXAgb24gdGhlIHBvc3NpYmlsaXR5IG9mIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGJlY2F1c2UgdGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBtb3N0IGltbWVkaWF0ZSBjb25jZXJuIHdpdGggY2hhbmdlcyBsaWtlIHRoaXMuIFRoZSBkaWZmIHNob3dzIHRoZSBgbmZfZmxvd190YWJsZV9pcC5jYCBmaWxlIGFuZCBgbmZfZmxvd190YWJsZV9jb3JlLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUgY29kZSBpcyBjaGFuZ2luZyBob3cgY291bnRlcnMgYXJlIGhhbmRsZWQgaW4gdGhlIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAgZnVuY3Rpb24uIE9yaWdpbmFsbHksIGl0IGxvb2tzIGxpa2UgaXQgY2FsbGVkIGBuZl9jdF9hY2N0X3VwZGF0ZWAsIGFuZCBub3cgaXQmIzM5O3MgdXNpbmcgYXRvbWljIG9wZXJhdGlvbnMgdG8gaW5jcmVtZW50IGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMuIFRoZSBvbGQgaW1wbGVtZW50YXRpb24gaXNuJiMzOTt0IGdvbmUgZnJvbSBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAsIHNvIHRoYXQgbWlnaHQgYmUgYSBidWcuCgpIb3dldmVyLCB0aGUgbWFpbiBxdWVzdGlvbiBpcywgJiMzNDtJcyB0aGVyZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkPyYjMzQ7IEdpdmVuIHRoZSBjb250ZXh0LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGFja2V0c2AgYW5kIGBieXRlc2AgdG8gYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgLiBCZWNhdXNlIGBrbWVtX2NhY2hlX3phbGxvY2AgaXMgdXNlZCB0byBhbGxvY2F0ZSBgc3RydWN0IGZsb3dfb2ZmbG9hZGAsIHRob3NlIGZpZWxkcyBhcmUgaW1wbGljaXRseSBpbml0aWFsaXplZCB0byB6ZXJvLCB3aGljaCBtZWFucyB0aGVyZSBzaG91bGQgYmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBpbiB0aGUgY29yZSBvZiB3aGF0JiMzOTtzIHNob3duLiBBbHNvLCBpbiBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgIHRoZXNlIGZpZWxkcyBhcmUgaW5jcmVtZW50ZWQgdXNpbmcgYGF0b21pYzY0X2FkZGAsIGFuZCBpbiBgbmZfZmxvd19zeW5jX2N0X3N0YXRzYCBgYXRvbWljNjRfeGNoZ2AgaXMgdXNlZCwgdGhlbiB0aGUgc3RhdHMgYXJlIGFkZGVkIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNrZXIuIFNvIGZhciwgc28gZ29vZC4KCk5vdywgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBlZGdlIGNhc2VzLiBMZXQgbWUgdGhpbmssIHdoYXQgaWYgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIHBhc3NlZCBhcm91bmQsIGJ5cGFzc2luZyBwcm9wZXIgaW5pdGlhbGl6YXRpb24/IE5vcGUsIGBuZl9mbG93X3N5bmNfY3Rfc3RhdHNgIHRha2VzIGEgYHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dgLCBhbmQgSSBrbm93IHRoYXQgaXMgaGVhcCBhbGxvY2F0ZWQuIENvdWxkIGl0IGJlIGNvcGllZCBzb21ld2hlcmUgZWxzZT8gTGV0IG1lIGNoZWNrIHRoZSBjb2RlIHRvIHNlZSBpZiB0aGUgdHVwbGUgaXMgY29waWVkLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY3B5LipmbG93X29mZmxvYWRfdHVwbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzcxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIERlZXAgaW50byBEYXRhIFN0cnVjdHVyZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIG5vdy4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgbWVtb3J5IGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgc3RydWN0dXJlIGlzIGFzc2lnbmVkIGJ5IHZhbHVlLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXMgY3JpdGljYWwgZm9yIGF2b2lkaW5nIHBvdGVudGlhbCBjb3B5IGlzc3VlcywgZW5zdXJpbmcgY29ycmVjdCBkYXRhIHRyYW5zZmVyLCBhbmQgdWx0aW1hdGVseSwgd3JpdGluZyBlZmZpY2llbnQgYW5kIGJ1Zy1mcmVlIGNvZGUgcmVsYXRlZCB0byB0aGUgZmxvdyBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkuIEEgYnktdmFsdWUgYXNzaWdubWVudCBoYXMgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zIGZvciBob3cgSSYjMzk7bGwgaGFuZGxlIGluc3RhbmNlcyBvZiB0aGlzIHN0cnVjdCBpbiBtZW1vcnkgYW5kIHdoZW4gcGFzc2luZyB0aGVtIGFzIHBhcmFtZXRlcnMgdG8gZnVuY3Rpb25zLiBBIHF1aWNrIGNoZWNrIGhlcmUgc2F2ZXMgYSBoZWFkYWNoZSBsYXRlciBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwqLiogPSBcXCouKnR1cGxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jPTY4Mz1nZXRfdW5pcXVlX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy03MDYtXHRcdFx0aWYgKCFuZl9uYXRfdXNlZF90dXBsZV9uZXcob3JpZ190dXBsZSwgY3QpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM6NzA3Olx0XHRcdFx0KnR1cGxlID0gKm9yaWdfdHVwbGU7XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtNzA4LVx0XHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy03MTgtXHQvKiAyKSBTZWxlY3QgdGhlIGxlYXN0LXVzZWQgSVAvcHJvdG8gY29tYmluYXRpb24gaW4gdGhlIGdpdmVuIHJhbmdlICovXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM6NzE5Olx0KnR1cGxlID0gKm9yaWdfdHVwbGU7XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtNzIwLVx0ZmluZF9iZXN0X2lwc19wcm90byh6b25lLCB0dXBsZSwgcmFuZ2UsIGN0LCBtYW5pcHR5cGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTgwMQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIGBmbG93X29mZmxvYWRfdHVwbGVgIGFuZCBQb3RlbnRpYWwgSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgSSYjMzk7dmUgZ290IGEgc3BlY2lmaWMgY29uY2VybiBhYm91dCB0aGUgYGZsb3dfb2ZmbG9hZF90dXBsZWAuIEkgaW1tZWRpYXRlbHkgbm90ZSB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IGFzc2lnbm1lbnRzICpieSB2YWx1ZSogdG8gdGhpcyBzdHJ1Y3QsIHdoaWNoLCBpbiBteSBleHBlcmllbmNlLCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGZpbmRpbmcgcG90ZW50aWFsIHByb2JsZW1zLgoKV2FpdCBhIG1pbnV0ZSwgd2hhdCBhYm91dCB0aGUgYGJwZl94ZHBfZmxvd19sb29rdXBgIGZ1bmN0aW9uIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmNgPyBBaCwgaGVyZSBpdCBpczoKCmBgYGMKCXN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7CgkJLmlpZmlkeCA9IGZpYl90dXBsZS0mZ3Q7aWZpbmRleCwKCQkubDNwcm90byA9IGZpYl90dXBsZS0mZ3Q7ZmFtaWx5LAoJCS5sNHByb3RvID0gZmliX3R1cGxlLSZndDtsNF9wcm90b2NvbCwKCQkuc3JjX3BvcnQgPSBmaWJfdHVwbGUtJmd0O3Nwb3J0LAoJCS5kc3RfcG9ydCA9IGZpYl90dXBsZS0mZ3Q7ZHBvcnQsCgl9OwpgYGAKClRoaXMgKmlzKiBhIHN0YWNrIHZhcmlhYmxlLCBhbmQgaXQmIzM5O3MgKnBhcnRpYWxseSogaW5pdGlhbGl6ZWQsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZy4gQnV0LCBpdCYjMzk7cyBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgYHsgLi4uIH1gIHN5bnRheC4KCkhvbGQgb24uIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCBoYXMgYSBidW5jaCBvZiBmaWVsZHMsIHJpZ2h0PyBJZiBpdCYjMzk7cyBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgdXNpbmcgdGhhdCBzeW50YXgsIHRoZW4gdGhlIGNvbXBpbGVyICpzaG91bGQqIHplcm8taW5pdGlhbGl6ZSB0aGUgcmVtYWluaW5nIGZpZWxkcy4gSSB0aGluayB0aGF0IGluY2x1ZGVzIHRoaW5ncyBsaWtlIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCwgc28gdGhvc2Ugd291bGQgYmUgemVyb2VkIG91dC4KClNvLCB0aGlzIHN0cnVjdCBgdHVwbGVgIGlzIHRoZW4gcGFzc2VkIHRvIGBicGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwYCwgd2hpY2ggcGFzc2VzIGl0IHRvIGBmbG93X29mZmxvYWRfbG9va3VwYCwgd2hpY2ggZmluYWxseSBwYXNzZXMgaXQgdG8gYHJoYXNodGFibGVfbG9va3VwYC4gYHJoYXNodGFibGVfbG9va3VwYCBoYXNoZXMgdGhlIGtleSB1cCB0byBgX19oYXNoYC4KClNpbmNlIHRoZSBgdHVwbGVgIGlzIGVmZmVjdGl2ZWx5IHplcm8taW5pdGlhbGl6ZWQgKG9yIGF0IGxlYXN0LCB0aGUgZmllbGRzICpzaG91bGQqIGJlKSwgdGhlcmUgc2hvdWxkbiYjMzk7dCBiZSBhbnkgdW5pbml0aWFsaXplZCBieXRlcyBpbiB0aGUgcGFkZGluZyBvciBmaWVsZHMgdXAgdG8gYF9faGFzaGAsIHJpZ2h0PyBXYWl0LCB3aGF0IGFib3V0IHBhZGRpbmcgYnl0ZXM/CgpUaGlzIGlzIHdoZXJlIEkgZ2V0IGEgYml0IGNvbmNlcm5lZC4gSW4gQywgaWYgeW91IHVzZSBgPSB7IC4uLiB9YCwgdGhlIGNvbXBpbGVyICpzaG91bGQqIHplcm8taW5pdGlhbGl6ZSBhbGwgbWVtYmVycyB0aGF0IGFyZW4mIzM5O3QgZXhwbGljaXRseSBhc3NpZ25lZCwgYnV0IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcGFkZGluZyBieXRlcyB0aGF0IG1pZ2h0IGV4aXN0IHdpdGhpbiB0aGUgc3RydWN0LiBQYWRkaW5nIGJ5dGVzIGFyZSAqTk9UKiBndWFyYW50ZWVkIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQhIFdlIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IHBhZGRpbmcgYnl0ZXMgaW4gYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIGJlZm9yZSB0aGUgYF9faGFzaGAgbWVtYmVyLCBhbmQgaWYgc28sIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgbWlnaHQgaGF2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjA6XHRcdHU4XHRpbm5lcl9wcm90bztcbiAxMjE6XHR9O1xuIDEyMjpcdFxuIDEyMzpcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUge1xuIDEyNDpcdFx0dW5pb24ge1xuIDEyNTpcdFx0XHRzdHJ1Y3QgaW5fYWRkclx0XHRzcmNfdjQ7XG4gMTI2Olx0XHRcdHN0cnVjdCBpbjZfYWRkclx0XHRzcmNfdjY7XG4gMTI3Olx0XHR9O1xuIDEyODpcdFx0dW5pb24ge1xuIDEyOTpcdFx0XHRzdHJ1Y3QgaW5fYWRkclx0XHRkc3RfdjQ7XG4gMTMwOlx0XHRcdHN0cnVjdCBpbjZfYWRkclx0XHRkc3RfdjY7XG4gMTMxOlx0XHR9O1xuIDEzMjpcdFx0c3RydWN0IHtcbiAxMzM6XHRcdFx0X19iZTE2XHRcdFx0c3JjX3BvcnQ7XG4gMTM0Olx0XHRcdF9fYmUxNlx0XHRcdGRzdF9wb3J0O1xuIDEzNTpcdFx0fTtcbiAxMzY6XHRcbiAxMzc6XHRcdGludFx0XHRcdFx0aWlmaWR4O1xuIDEzODpcdFxuIDEzOTpcdFx0dThcdFx0XHRcdGwzcHJvdG87XG4gMTQwOlx0XHR1OFx0XHRcdFx0bDRwcm90bztcbiAxNDE6XHRcdHN0cnVjdCB7XG4gMTQyOlx0XHRcdHUxNlx0XHRcdGlkO1xuIDE0MzpcdFx0XHRfX2JlMTZcdFx0XHRwcm90bztcbiAxNDQ6XHRcdH0gZW5jYXBbTkZfRkxPV19UQUJMRV9FTkNBUF9NQVhdO1xuIDE0NTpcdFxuIDE0NjpcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWxcdHR1bjtcbiAxNDc6XHRcbiAxNDg6XHRcdC8qIEFsbCBtZW1iZXJzIGFib3ZlIGFyZSBrZXlzIGZvciBsb29rdXBzLCBzZWUgZmxvd19vZmZsb2FkX2hhc2goKS4gKi9cbiAxNDk6XHRcdHN0cnVjdCB7IH1cdFx0XHRfX2hhc2g7XG4gMTUwOlx0XG4gMTUxOlx0XHR1MTZcdFx0XHRcdGRpcjoyLFxuIDE1MjpcdFx0XHRcdFx0XHR4bWl0X3R5cGU6MyxcbiAxNTM6XHRcdFx0XHRcdFx0ZW5jYXBfbnVtOjIsXG4gMTU0Olx0XHRcdFx0XHRcdG5lZWRzX2dzb19zZWdtZW50OjEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjEwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmxvdyBPZmZsb2FkIFR1cGxlIFN0cnVjdHVyZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBmbG93X29mZmxvYWRfdHVwbGVgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgbGFpZCBvdXQgaW4gbWVtb3J5IGZvciBlZmZpY2llbnQgbG9va3Vwcy4gRmlyc3QsIHRoZSBhZGRyZXNzIHVuaW9ucyDigJMgSVB2NCBhbmQgSVB2NiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcywgZWFjaCB0YWtpbmcgdXAgZWl0aGVyIDQgb3IgMTYgYnl0ZXMuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLiBUaGVuIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvcnRzLCBgc3JjX3BvcnRgIGFuZCBgZHN0X3BvcnRgLCBib3RoIDIgYnl0ZXMgZWFjaCwgYW5kIHRoZSBpbnRlcmZhY2UgaW5kZXggYGlpZmlkeGAsIGEgNC1ieXRlIGludGVnZXIuCgpOb3csIHRoZSBpbnRlcmVzdGluZyBiaXQ6IGBsM3Byb3RvYCBhbmQgYGw0cHJvdG9gLCBlYWNoIGEgc2luZ2xlIGJ5dGUuIFRoZW4sIHRoZSBgZW5jYXBgIGFycmF5LiBUaGVyZSBhcmUgdHdvIGVsZW1lbnRzLCBlYWNoIGEgYHUxNiBpZGAgYW5kIGEgYF9fYmUxNiBwcm90b2AuIFRoYXTigJlzIDImIzQzOzI9NCBieXRlcyBwZXIgZWxlbWVudCwgYW5kIHdlIGhhdmUgdHdvIGVsZW1lbnRzLCBzbyA4IGJ5dGVzIHRvdGFsIGZvciBgZW5jYXBgLiBUaGUgcG90ZW50aWFsIGZvciBwYWRkaW5nIGlzIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LiBMZXQgbWUgdGhpbmsuIGBsM3Byb3RvYCBpcyAxIGJ5dGUsIGBsNHByb3RvYCBpcyAxIGJ5dGUsIHNvIDIgYnl0ZXMgdG9nZXRoZXIuIFRoZW4gdGhlIGBlbmNhcGAgYXJyYXksIHdoaWNoIGlzIGFuIGFsaWdubWVudCBvZiAyIGJ5dGVzLCBzbyBubyBwYWRkaW5nIG5lZWRlZCEKCkZpbmFsbHksIHdlIGhhdmUgdGhlIGBmbG93X29mZmxvYWRfdHVubmVsIHR1bmAgc3RydWN0dXJlLiBUaGlzIGlzIGNyaXRpY2FsIGFzIGl0IHdpbGwgcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiB0dW5uZWxpbmcuIE5vdyB0aGUgcXVlc3Rpb24gaXMgdGhlIG1lbW9yeSBsYXlvdXQgb2YgYHR1bmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE1Olx0XHR1bmlvbiB7XG4gMTE2Olx0XHRcdHN0cnVjdCBpbl9hZGRyXHRkc3RfdjQ7XG4gMTE3Olx0XHRcdHN0cnVjdCBpbjZfYWRkclx0ZHN0X3Y2O1xuIDExODpcdFx0fTtcbiAxMTk6XHRcbiAxMjA6XHRcdHU4XHRpbm5lcl9wcm90bztcbiAxMjE6XHR9O1xuIDEyMjpcdFxuIDEyMzpcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUge1xuIDEyNDpcdFx0dW5pb24ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODExOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWxgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbGAgYWdhaW4uIFJpZ2h0LCBsZXQmIzM5O3MgcmVmcmVzaDogSSBrbm93IGl04oCZcyBrZXkgZm9yIGhhbmRsaW5nIHR1bm5lbCBvZmZsb2FkIHdpdGhpbiB0aGUgZmxvdyBvZmZsb2FkIGZyYW1ld29yay4gSSYjMzk7bSBmb2N1c2luZyBvbiBob3cgaXQgbWFuYWdlcyB0aGUgdHVubmVsLXNwZWNpZmljIGRhdGEuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdHVubmVsIGVuY2Fwc3VsYXRpb24vZGVjYXBzdWxhdGlvbiBkZXRhaWxzIGFyZSBzdG9yZWQgYW5kIHBhc3NlZCBhcm91bmQuIElzIGl0IHRoZSBhY3R1YWwgdHVubmVsIGhlYWRlciBkYXRhIGl0c2VsZj8gUG9pbnRlcnMgdG8gaXQ/IE9mZnNldHM/IEFyZSB0aGVyZSBhbnkgY2xldmVyIHRyaWNrcyB0byBvcHRpbWl6ZSB0aGUgY29weSBvcGVyYXRpb25zIG9yIHRvIGF2b2lkIHJlZHVuZGFudCBjYWxjdWxhdGlvbnM/IEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgZGlmZmVyZW50IHR1bm5lbCB0eXBlcyDigJMgVlhMQU4sIEdSRSwgSVBJUCwgZXRjLiDigJMgYXJlIGhhbmRsZWQuIERvZXMgdGhlIHN0cnVjdCBwcm92aWRlIGEgZ2VuZXJpYyBpbnRlcmZhY2UsIG9yIGRvZXMgaXQgcmVxdWlyZSB0eXBlLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucz8gQXJlIHRoZXJlIGFueSBmbGFncyBvciBiaXRmaWVsZHMgdGhhdCBpbmRpY2F0ZSB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBjZXJ0YWluIHR1bm5lbCBvcHRpb25zLCBsaWtlIGNoZWNrc3VtcyBvciBzZXF1ZW5jZSBudW1iZXJzPyBUaGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBpcyBjcml0aWNhbCBoZXJlLCBhcyB0aGlzIHN0cnVjdHVyZSBsaWtlbHkgbmVlZHMgdG8gYmUgZWZmaWNpZW50bHkgbWFwcGVkIHRvIGhhcmR3YXJlIHJlZ2lzdGVycyBvciBkZXNjcmlwdG9ycy4gV2hhdCBhYm91dCB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgc3RydWN0PyBXaGVyZSBpcyBpdCBhbGxvY2F0ZWQ/IFdoZW4gaXMgaXQgcG9wdWxhdGVkPyBIb3cgaXMgaXQgZGVhbGxvY2F0ZWQ/IE1lbW9yeSBhbGlnbm1lbnQ/IEFueSBwb3RlbnRpYWwgZm9yIGFsaWdubWVudCBpc3N1ZXMgb24gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXM/IEkgbmVlZCB0byBlbnN1cmUgaXQgcGxheXMgbmljZWx5IHdpdGggdGhpbmdzIGxpa2UgRE1BLiBBbmQgb2YgY291cnNlLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBmb3IgZnJhZ21lbnRhdGlvbiBvZiB0aGUgZGF0YS4gRG9lcyB0aGlzIHN0cnVjdHVyZSBuZWVkIHRvIGJlIGJyb2tlbiBkb3duLCBvciBpcyB0aGVyZSBhIHNpbmdsZSAmIzM0O2NodW5rJiMzNDsgdGhhdCBnZXRzIHBhc3NlZCB0byB0aGUgaGFyZHdhcmU/IFRoZSBkZXRhaWxzIGFyZSBjcnVjaWFsIGhlcmUuIFVsdGltYXRlbHksIEkgYW0gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgaW5mbHVlbmNpbmcgb2ZmbG9hZCBwZXJmb3JtYW5jZSBhbmQgdGhlIHN5c3RlbSYjMzk7cyBvdmVyYWxsIGZsZXhpYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MTAwPWVudW0gZmxvd19vZmZsb2FkX3htaXRfdHlwZSB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0xMDktXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjExMDpzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTExMS1cdHVuaW9uIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2NDEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbGAqKgoKT2theSwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbGAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHJpZ2h0PyBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgdHVubmVsLXJlbGF0ZWQgaW5mb3JtYXRpb24gaXMgc3RydWN0dXJlZCBmb3Igb2ZmbG9hZGluZy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBob3cgaXQmIzM5O3MgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggdGhlIGhhcmR3YXJlIGFuZCB0aGUgdmFyaW91cyB0dW5uZWwgcHJvdG9jb2xzIHdlIHN1cHBvcnQuIE15IG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGg6IHdoYXQgZmllbGRzIGFyZSBwcmVzZW50PyBBcmUgdGhleSBhbGlnbmVkIG9wdGltYWxseSBmb3IgaGFyZHdhcmUgYWNjZXNzPyBEb2VzIGl0IHN1cHBvcnQgdGhlIHR5cGljYWwgdHVubmVsIGhlYWRlcnMsIGFuZCBpZiBzbywgaG93IGlzIHRoYXQgcmVwcmVzZW50YXRpb24gaGFuZGxlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmU/IEFueSBwcm90b2NvbC1zcGVjaWZpYyBudWFuY2VzPyBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgd2hlcmUgd2UgbWlnaHQgYmUgYWJsZSB0byBvcHRpbWl6ZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgc29mdHdhcmUgYW5kIHRoZSBmb3J3YXJkaW5nIGVuZ2luZS4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgZ3Jhc3AgdGhlIG1lbW9yeSBsYXlvdXQsIGhvdyB0aGUgZGF0YSBnZXRzIHBhc3NlZCwgYW5kIG1vc3QgaW1wb3J0YW50bHksIGhvdyB0byBpbXByb3ZlIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTA6XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB7XG4gMTExOlx0XHR1bmlvbiB7XG4gMTEyOlx0XHRcdHN0cnVjdCBpbl9hZGRyXHRzcmNfdjQ7XG4gMTEzOlx0XHRcdHN0cnVjdCBpbjZfYWRkclx0c3JjX3Y2O1xuIDExNDpcdFx0fTtcbiAxMTU6XHRcdHVuaW9uIHtcbiAxMTY6XHRcdFx0c3RydWN0IGluX2FkZHJcdGRzdF92NDtcbiAxMTc6XHRcdFx0c3RydWN0IGluNl9hZGRyXHRkc3RfdjY7XG4gMTE4Olx0XHR9O1xuIDExOTpcdFxuIDEyMDpcdFx0dThcdGlubmVyX3Byb3RvO1xuIDEyMTpcdH07XG4gMTIyOlx0XG4gMTIzOlx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB7XG4gMTI0Olx0XHR1bmlvbiB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MDk0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjI5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBhbmQgdGhlIEZsb3cgT2ZmbG9hZCBQYXRjaDogQSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaXNzZWN0aW5nIHRoaXMgZmxvdyBvZmZsb2FkIHBhdGNoIHRvIGFzc2VzcyBpZiBpdCBpbnRyb2R1Y2VzIGFueSBuZXcgS01TQU4gaXNzdWVzLiBJbml0aWFsbHksIEkgaGFkIGNvbmNlcm5zIGFib3V0IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyB3aXRoaW4gYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgLCBwYXJ0aWN1bGFybHkgYmVjYXVzZSBvZiB0aGUgYGpoYXNoYCBmdW5jdGlvbiBhbmQgdGhlIHdheSB0aGVzZSBzdHJ1Y3RzIGFyZSBpbml0aWFsaXplZCwgc29tZXRpbWVzIHdpdGggYD0ge31gLiAgSSBzdGFydGVkIGJ5IGNhbGN1bGF0aW5nIHRoZSBzdHJ1Y3R1cmUgc2l6ZSBhbmQgY29uc2lkZXJpbmcgYWxpZ25tZW50LiBJIHdlbnQgdGhyb3VnaCB0aGUgbGF5b3V0IG9mIHRoZSBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWxgLCBpbmNsdWRpbmcgdGhlIHVuaW9ucyBhbmQgdGhlIGBpbm5lcl9wcm90b2AgZmllbGQsIGFuZCBmaWd1cmVkIG91dCB0aGUgcGFkZGluZyBpbnZvbHZlZC4gSSBjaGVja2VkIHRoZSBsYXlvdXQgdG8gc2VlIGlmIGFkZGluZyB0aGUgbmV3IGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMgY2hhbmdlZCB0aGUgbG9jYXRpb24gb2YgdGhlIHByZS1leGlzdGluZyBwYWRkaW5nLgoKTXkgdGhvdWdodCB3YXMgdGhhdCwgc2luY2UgcGFkZGluZyBieXRlcyBhcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUgemVyb2VkIHdoZW4gdXNpbmcgYD0ge31gLCBhbmQgdGhvc2UgYnl0ZXMgYXJlIHJlYWQgYnkgYGpoYXNoYCwgd2UgY291bGQgaGF2ZSBhIEtNU0FOIHByb2JsZW0uIEJ1dCwgSSByZWNhbGxlZCB0aGF0IHRoZSBoYXNoIGtleSBpbiB0aGlzIHN0cnVjdCBvbmx5IGdvZXMgdXAgdG8gdGhlIGBfX2hhc2hgIG1lbWJlciwgYW5kIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBwYWRkaW5nIHdvdWxkIGhhdmUgYmVlbiBhbiBpc3N1ZSAqYmVmb3JlKiB0aGlzIHBhdGNoLCBzaW5jZSB0aGUgcGF0Y2ggb25seSBhZGRzIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCAqYWZ0ZXIqIHRoZSBzZWN0aW9uIHRoYXQmIzM5O3MgaGFzaGVkLiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IGNoYW5nZSBhbnl0aGluZyBhYm91dCB0aGUgcHJlLWV4aXN0aW5nIGxheW91dC4KCkkgdGhlbiBjaGVja2VkIHdoZXJlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCBpcyBhY3R1YWxseSBjcmVhdGVkIGFuZCB1c2VkLiBJIGxvb2tlZCBhdCBgbmZfZmxvd19vZmZsb2FkX2xvb2t1cGAgYW5kIGBicGZfeGRwX2Zsb3dfbG9va3VwYCwgd2hlcmUgdGhlc2Ugc3RydWN0cyBhcmUgaW5kZWVkIHN0YWNrLWFsbG9jYXRlZCwgYnV0IEkgcmVhbGl6ZWQgdGhleSBhcmUgKm9ubHkqIHVzZWQgYXMgaGFzaCBrZXlzLiBUaGUgY29kZSAqZG9lc24mIzM5O3QqIHJlYWQgZnJvbSB0aGUgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcyBpbiB0aGVzZSBzdGFjayBhbGxvY2F0aW9ucy4KCkkgZm9jdXNlZCBvbiB0aGUgbmV3IGNvZGUgYWRkZWQgYnkgdGhlIHBhdGNoLiBJIHZlcmlmaWVkIHRoYXQgbmV3IGZpZWxkcyAoYHBhY2tldHNgIGFuZCBgYnl0ZXNgKSBhcmUgemVyby1pbml0aWFsaXplZCB0aHJvdWdoIGBrbWVtX2NhY2hlX3phbGxvY2AgYW5kIGFyZSB0aGVuIG9ubHkgYWNjZXNzZWQgdGhyb3VnaCBhdG9taWMgb3BlcmF0aW9ucy4gVGhlIHBhdGNoIGFkZHMgYGF0b21pYzY0X3QgcGFja2V0c2AgYW5kIGBieXRlc2AgdG8gdGhlIHN0cnVjdC4gQW5kIHRoZSBmdW5jdGlvbnMgYWRkZWQgdGhhdCB0b3VjaCB0aGVzZSBmaWVsZHMgdXNlIGBhdG9taWM2NF94Y2hnYCBhbmQgYGF0b21pYzY0X2FkZGAsIHNvIHRoZXkgcmVhZCBhbmQgbW9kaWZ5IHRob3NlIHZhcmlhYmxlcywgd2hpY2ggYXJlIGluaXRpYWxpemVkIHRvIHplcm8uIEkgYWxzbyBlbnN1cmVkIHRoYXQgYG5mX2Zsb3dfc3luY19jdF9zdGF0c2AgY2FuJiMzOTt0IGJlIGNhbGxlZCBvbiBhbiB1bmluaXRpYWxpemVkIGBmbG93YC4gVGhlIHN0cnVjdCBgZmxvd19vZmZsb2FkYCB3aGljaCBjb250YWlucyBgdHVwbGVgIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgLCBtZWFuaW5nIHRoZSBhZGRlZCBmaWVsZHMgYXJlIGluaXRpYWxpemVkIHRvIHplcm8uIEZ1cnRoZXJtb3JlLCB0aGVyZSYjMzk7cyBubyB3YXkgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4KClNvLCBhZnRlciB0aGlzIHJpZ29yb3VzIGV4YW1pbmF0aW9uLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IG5ldyBLTVNBTiB2dWxuZXJhYmlsaXRpZXMuIEFueSBwb3RlbnRpYWwgcGFkZGluZy91bmluaXRpYWxpemVkIHJlYWQgaXNzdWVzIGluIHRoZSBzdHJ1Y3R1cmUgKnByZS1leGlzdGVkKiB0aGlzIGNoYW5nZSwgYW5kIHRoZSBuZXcgZmllbGRzIGFyZSBoYW5kbGVkIGNvcnJlY3RseSwgd2l0aCBwcm9wZXIgaW5pdGlhbGl6YXRpb24gYW5kIGF0b21pYyBhY2Nlc3MuIE5vIG5lZWQgdG8gZmxhZyB0aGlzIGZvciBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZmxvd19vZmZsb2FkIFteO1xcKl0mIzQzOzsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDUzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBgc3RydWN0IGZsb3dfb2ZmbG9hZGAgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyBzb21ldGhpbmcgaGVyZS4gVGhlcmUmIzM5O3Mgbm8gZXZpZGVuY2Ugb2YgYSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBmbG93X29mZmxvYWRgLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhbGxvY2F0aW9uIGJlaGF2aW9yIG9mIHRoaXMgc3RydWN0dXJlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IGlmIGBmbG93X29mZmxvYWRfYWxsb2NgIGlzIHRoZSBzb2xlIG1lY2hhbmlzbSB1c2VkIHRvIGFsbG9jYXRlIGluc3RhbmNlcyBvZiBgc3RydWN0IGZsb3dfb2ZmbG9hZGAuIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIHRvIGFuc3dlci4gS25vd2luZyB0aGF0IHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCB0aGUgaW50ZW5kZWQgbGlmZWN5Y2xlIGFuZCBtYW5hZ2VtZW50IG9mIHRoZXNlIGZsb3cgb2ZmbG9hZCBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBjb25maXJtIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB0aGUgb25seSBlbnRyeSBwb2ludCBmb3IgYWxsb2NhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWFsbG9jLipzaXplb2YuKmZsb3dfb2ZmbG9hZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIzMDIKCQkJCQkJCW91dHB1dDogMzE2CgkJCQkJCQl0aG91Z2h0czogMTUxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBOZWVkc0tNU0FOID0gZmFsc2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoZXkmIzM5O3ZlIGFkZGVkIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBhdG9taWMgY291bnRlcnMgdG8gdGhlIGBmbG93X29mZmxvYWRfdHVwbGVgIHN0cnVjdC4gVGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgb3B0aW1pemF0aW9uLiBJbnN0ZWFkIG9mIHVwZGF0aW5nIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIChDVCkgc3RhdHMgZGlyZWN0bHkgb24gZXZlcnkgcGFja2V0LCB0aGV5JiMzOTtyZSBhY2N1bXVsYXRpbmcgdGhlbSBpbiB0aGVzZSBhdG9taWMgY291bnRlcnMuIFRoaXMgYXZvaWRzIGNhY2hlIGxpbmUgYm91bmNpbmcsIHdoaWNoIGlzIGEgY29tbW9uIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgaW4gbXVsdGktQ1BVIGVudmlyb25tZW50cy4KClRoZSBjcnVjaWFsIHBvaW50IGlzIGhvdyB0aGVzZSBjb3VudGVycyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHVzZWQuIFRoZSBgZmxvd19vZmZsb2FkYCBzdHJ1Y3QsIHdoaWNoIGNvbnRhaW5zIHRoaXMgYGZsb3dfb2ZmbG9hZF90dXBsZWAsIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgLiBUaGlzIGlzIGtleTsgaXQgZW5zdXJlcyB0aGF0IHRoZSBlbnRpcmUgc3RydWN0LCBpbmNsdWRpbmcgdGhlIG5ldyBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzLCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaGVyZS4KClRoZXkmIzM5O3JlIHVzaW5nIGBhdG9taWM2NF9hZGRgIHRvIGluY3JlbWVudCB0aGUgY291bnRlcnMgaW4gYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCwgd2hpY2ggaXMgdGhlIGZhc3QgcGF0aC4gVGhlbiwgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIChHQyksIGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAsIHBlcmlvZGljYWxseSBmbHVzaGVzIHRoZXNlIGNvdW50ZXJzIHRvIHRoZSBDVCBlbnRyeSB1c2luZyBgYXRvbWljNjRfeGNoZ2AuIFRoaXMgY29uZmlybXMgdGhhdCB0aGUgY3JpdGljYWwgZGF0YSBwYXRoIGlzIHNhZmUuCgpOb3csIGFib3V0IHBvdGVudGlhbCBsZWFrcy4gVGhlIHZhbHVlcyBhcmVuJiMzOTt0IGRpcmVjdGx5IGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZXkmIzM5O3JlIGFkZGVkIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRzLCB3aGljaCAqYXJlKiBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYnV0IHdlJiMzOTtyZSBvbmx5IGRlYWxpbmcgd2l0aCBwYWNrZXQgYW5kIGJ5dGUgY291bnRzLCBhbmQgdGhleSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEl0JiMzOTtzIGp1c3QgY291bnRlcnMsIHNvIHRoZXJlJiMzOTtzIG5vIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiB0byBsZWFrLCBhbmQgaXQgaXMgaW1wb3NzaWJsZSB0byByZWFkIG9yIGNvcHkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhLgoKVGhlIG9ubHkgcmVtYWluaW5nIHJpc2tzIGFyZSBsb2dpYyBidWdzIOKAkyBwZXJoYXBzIGEgbWlzc2VkIHVwZGF0ZSwgZG91YmxlLWNvdW50aW5nLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMuIEJ1dCB0aGVzZSBhcmUgdGhlIHR5cGVzIG9mIGJ1Z3MgdGhhdCBLQVNBTi9LQ1NBTiBhbmQgc3RhbmRhcmQgdGVzdGluZyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guIFRoZXkgYXJlIG5vdCBtZW1vcnkgY29ycnVwdGlvbiBwcm9ibGVtcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgoKU28sIGluIHN1bW1hcnksIHRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaGVyZS4gVGhlIGNvdW50ZXJzIGFyZSB6ZXJvLWluaXRpYWxpemVkLCB0aGV5JiMzOTtyZSB1cGRhdGVkIGFuZCBmbHVzaGVkIGF0b21pY2FsbHksIGFuZCB0aGV5IG9ubHkgY29udGFpbiBub24tc2Vuc2l0aXZlIHBhY2tldCBhbmQgYnl0ZSBjb3VudHMuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMgdG8gYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIHRvIGJhdGNoIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RhdGlzdGljcyB1cGRhdGVzLiBUaGVzZSBmaWVsZHMgYXJlIHVwZGF0ZWQgdmlhIGBhdG9taWM2NF9hZGRgIGluIHRoZSBmb3J3YXJkaW5nIHBhdGggYW5kIHBlcmlvZGljYWxseSBmbHVzaGVkIHRvIHRoZSBjb25udHJhY2sgZW50cnkgdmlhIGBhdG9taWM2NF94Y2hnYCBpbiB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuIFxuXG5UaGUgYHN0cnVjdCBmbG93X29mZmxvYWRgIGNvbnRhaW5pbmcgdGhlc2UgdHVwbGVzIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jYCAoaW4gYGZsb3dfb2ZmbG9hZF9hbGxvY2ApLCBlbnN1cmluZyB0aGUgbmV3IGF0b21pYyBjb3VudGVycyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZC4gVGhlIGNvdW50ZXJzIGFyZSBub3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIHRoZWlyIHZhbHVlcyBvbmx5IHJlcHJlc2VudCBwYWNrZXQgYW5kIGJ5dGUgY291bnRzLCBwcmVjbHVkaW5nIGFueSBpbmZvcm1hdGlvbiBsZWFrLiBcblxuV2hpbGUgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIGlzIHNvbWV0aW1lcyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCB1c2VkIGFzIGEgbG9va3VwIGtleSAoZS5nLiwgaW4gYG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXBgKSwgdGhlIGhhc2ggYW5kIGNvbXBhcmlzb24gZnVuY3Rpb25zIG9ubHkgb3BlcmF0ZSBvbiB0aGUgZmllbGRzIHVwIHRvIHRoZSBgX19oYXNoYCBtYXJrZXIsIHdoaWNoIHByZWNlZGVzIHRoZSBuZXdseSBhZGRlZCBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzLiBUaHVzLCB0aGUgdW5pbml0aWFsaXplZCBzdGF0ZSBvZiB0aGVzZSBmaWVsZHMgaW4gc3RhY2stYWxsb2NhdGVkIGtleXMgaXMgbmV2ZXIgcmVhZC5cblxuQW55IHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGJ1Z3Mgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIHN0YW5kYXJkIHRlc3RpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcyB0byBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgdG8gYmF0Y2ggY29ubmVjdGlvbiB0cmFja2luZyBzdGF0aXN0aWNzIHVwZGF0ZXMuIFRoZXNlIGZpZWxkcyBhcmUgdXBkYXRlZCB2aWEgYGF0b21pYzY0X2FkZGAgaW4gdGhlIGZvcndhcmRpbmcgcGF0aCBhbmQgcGVyaW9kaWNhbGx5IGZsdXNoZWQgdG8gdGhlIGNvbm50cmFjayBlbnRyeSB2aWEgYGF0b21pYzY0X3hjaGdgIGluIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4gXG5cblRoZSBgc3RydWN0IGZsb3dfb2ZmbG9hZGAgY29udGFpbmluZyB0aGVzZSB0dXBsZXMgaXMgYWx3YXlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgIChpbiBgZmxvd19vZmZsb2FkX2FsbG9jYCksIGVuc3VyaW5nIHRoZSBuZXcgYXRvbWljIGNvdW50ZXJzIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgY291bnRlcnMgYXJlIG5vdCBkaXJlY3RseSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgdGhlaXIgdmFsdWVzIG9ubHkgcmVwcmVzZW50IHBhY2tldCBhbmQgYnl0ZSBjb3VudHMsIHByZWNsdWRpbmcgYW55IGluZm9ybWF0aW9uIGxlYWsuIFxuXG5XaGlsZSBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgaXMgc29tZXRpbWVzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIHVzZWQgYXMgYSBsb29rdXAga2V5IChlLmcuLCBpbiBgbmZfZmxvd19vZmZsb2FkX2xvb2t1cGApLCB0aGUgaGFzaCBhbmQgY29tcGFyaXNvbiBmdW5jdGlvbnMgb25seSBvcGVyYXRlIG9uIHRoZSBmaWVsZHMgdXAgdG8gdGhlIGBfX2hhc2hgIG1hcmtlciwgd2hpY2ggcHJlY2VkZXMgdGhlIG5ld2x5IGFkZGVkIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMuIFRodXMsIHRoZSB1bmluaXRpYWxpemVkIHN0YXRlIG9mIHRoZXNlIGZpZWxkcyBpbiBzdGFjay1hbGxvY2F0ZWQga2V5cyBpcyBuZXZlciByZWFkLlxuXG5BbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgYnVncyBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4sIEtDU0FOLCBhbmQgc3RhbmRhcmQgdGVzdGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxMzoxNi4zODU4NTUxMDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjExMzk1ODU4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkVURklMVEVSX0lOR1JFU1NcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZmxvd190YWJsZV9nY19ydW5cIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMgdG8gYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIHRvIGJhdGNoIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RhdGlzdGljcyB1cGRhdGVzLiBUaGVzZSBmaWVsZHMgYXJlIHVwZGF0ZWQgdmlhIGBhdG9taWM2NF9hZGRgIGluIHRoZSBmb3J3YXJkaW5nIHBhdGggYW5kIHBlcmlvZGljYWxseSBmbHVzaGVkIHRvIHRoZSBjb25udHJhY2sgZW50cnkgdmlhIGBhdG9taWM2NF94Y2hnYCBpbiB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuIFxcblxcblRoZSBgc3RydWN0IGZsb3dfb2ZmbG9hZGAgY29udGFpbmluZyB0aGVzZSB0dXBsZXMgaXMgYWx3YXlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgIChpbiBgZmxvd19vZmZsb2FkX2FsbG9jYCksIGVuc3VyaW5nIHRoZSBuZXcgYXRvbWljIGNvdW50ZXJzIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgY291bnRlcnMgYXJlIG5vdCBkaXJlY3RseSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgdGhlaXIgdmFsdWVzIG9ubHkgcmVwcmVzZW50IHBhY2tldCBhbmQgYnl0ZSBjb3VudHMsIHByZWNsdWRpbmcgYW55IGluZm9ybWF0aW9uIGxlYWsuIFxcblxcbldoaWxlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCBpcyBzb21ldGltZXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgdXNlZCBhcyBhIGxvb2t1cCBrZXkgKGUuZy4sIGluIGBuZl9mbG93X29mZmxvYWRfbG9va3VwYCksIHRoZSBoYXNoIGFuZCBjb21wYXJpc29uIGZ1bmN0aW9ucyBvbmx5IG9wZXJhdGUgb24gdGhlIGZpZWxkcyB1cCB0byB0aGUgYF9faGFzaGAgbWFya2VyLCB3aGljaCBwcmVjZWRlcyB0aGUgbmV3bHkgYWRkZWQgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcy4gVGh1cywgdGhlIHVuaW5pdGlhbGl6ZWQgc3RhdGUgb2YgdGhlc2UgZmllbGRzIGluIHN0YWNrLWFsbG9jYXRlZCBrZXlzIGlzIG5ldmVyIHJlYWQuXFxuXFxuQW55IHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGJ1Z3Mgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIHN0YW5kYXJkIHRlc3RpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgY29yZSBsb2dpYyB0byB1c2UgYXRvbWljIG9wZXJhdGlvbnMgZm9yIHBhY2tldCBhbmQgYnl0ZSBjb3VudGVycyBpbiB0aGUgZmFzdCBwYXRoIChuZl9mbG93X29mZmxvYWRfZm9yd2FyZCksIGFuZCBkZWZlcnMgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGVzZSBjb3VudGVycyB0byB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBzeXN0ZW0gdG8gdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBzdGVwIChuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IHN0YXRpc3RpY3MgYXJlIHRyYWNrZWQgYW5kIHN5bmNocm9uaXplZCwgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBidWdzIGluIHRoZSBHQyBwcm9jZXNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxMzoxNi4zODU4NTk0NjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MTM0OTQ4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI2NjdjZDNkYTY3ZTY4NDJmMzcxMjFkNzU4OTdjNjgyN2Q3Mzc3ZDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMjYgMDA6MTM6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcXG5pbmRleCBmMmUyNzcxZjE4OGY0Li42MDYwMjAyMTMzYzczIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFxuQEAgLTE3MSw2ICsxNzEsOSBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHtcXG4gXFx0XFx0XFx0dTMyXFx0XFx0aWlmaWR4O1xcbiBcXHRcXHR9IHRjO1xcbiBcXHR9O1xcbitcXG4rXFx0YXRvbWljNjRfdFxcdFxcdFxcdHBhY2tldHM7XFxuK1xcdGF0b21pYzY0X3RcXHRcXHRcXHRieXRlcztcXG4gfTtcXG4gXFxuIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2gge1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xcbmluZGV4IDAzMjQxZDRiZmQ1ZTguLmExZjM3Y2E5NTZiOGYgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcXG5AQCAtMTMsNiArMTMsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuaFxcdTAwM2VcXG4gXFxuIHN0YXRpYyBERUZJTkVfTVVURVgoZmxvd3RhYmxlX2xvY2spO1xcbiBzdGF0aWMgTElTVF9IRUFEKGZsb3d0YWJsZXMpO1xcbkBAIC01NjUsMTEgKzU2NiwyOSBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X3RhYmxlX2V4dGVuZF9jdF90aW1lb3V0KHN0cnVjdCBuZl9jb25uICpjdClcXG4gXFx0bmZfY3RfcHV0KGN0KTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgX19uZl9mbG93X3N5bmNfY3Rfc3RhdHMoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgaW50IGRpcilcXG4re1xcbitcXHR1NjQgcGt0cywgYnl0ZXM7XFxuK1xcbitcXHRwa3RzID0gYXRvbWljNjRfeGNoZyhcXHUwMDI2Zmxvdy1cXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUucGFja2V0cywgMCk7XFxuK1xcdGJ5dGVzID0gYXRvbWljNjRfeGNoZyhcXHUwMDI2Zmxvdy1cXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUuYnl0ZXMsIDApO1xcbitcXHRuZl9jdF9hY2N0X2FkZChmbG93LVxcdTAwM2VjdCwgZGlyLCBwa3RzLCBieXRlcyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG5mX2Zsb3dfc3luY19jdF9zdGF0cyhzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxcbit7XFxuK1xcdF9fbmZfZmxvd19zeW5jX2N0X3N0YXRzKGZsb3csIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xcbitcXHRfX25mX2Zsb3dfc3luY19jdF9zdGF0cyhmbG93LCBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXFxuIHtcXG4tXFx0Ym9vbCB0ZWFyZG93biA9IHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncyk7XFxuK1xcdGJvb2wgdGVhcmRvd247XFxuK1xcbitcXHRuZl9mbG93X3N5bmNfY3Rfc3RhdHMoZmxvdyk7XFxuIFxcbitcXHR0ZWFyZG93biA9IHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncyk7XFxuIFxcdGlmIChuZl9mbG93X2hhc19leHBpcmVkKGZsb3cpIHx8XFxuIFxcdCAgICBuZl9jdF9pc19keWluZyhmbG93LVxcdTAwM2VjdCkgfHxcXG4gXFx0ICAgICFuZl9mbG93X2RzdF9jaGVjayhcXHUwMDI2Zmxvdy1cXHUwMDNldHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUxdLnR1cGxlKSB8fFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXFxuaW5kZXggYzhjMjlhOWExNjg0NC4uNjZiZTgxNWFjMmZlYiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXFxuQEAgLTUwOSw4ICs1MDksMTAgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbiBcXHRpcF9kZWNyZWFzZV90dGwoaXBoKTtcXG4gXFx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xcbiBcXG4tXFx0aWYgKGZsb3dfdGFibGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZfRkxPV1RBQkxFX0NPVU5URVIpXFxuLVxcdFxcdG5mX2N0X2FjY3RfdXBkYXRlKGZsb3ctXFx1MDAzZWN0LCB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRpciwgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHRpZiAoZmxvd190YWJsZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUikge1xcbitcXHRcXHRhdG9taWM2NF9hZGQoMSwgXFx1MDAyNnR1cGxlaGFzaC1cXHUwMDNldHVwbGUucGFja2V0cyk7XFxuK1xcdFxcdGF0b21pYzY0X2FkZChza2ItXFx1MDAzZWxlbiwgXFx1MDAyNnR1cGxlaGFzaC1cXHUwMDNldHVwbGUuYnl0ZXMpO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxMzoxNi43NTc3NDc0MDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDczMDk4MzI1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkVURklMVEVSX0lOR1JFU1NcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZmxvd190YWJsZV9nY19ydW5cIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGNvcmUgbG9naWMgdG8gdXNlIGF0b21pYyBvcGVyYXRpb25zIGZvciBwYWNrZXQgYW5kIGJ5dGUgY291bnRlcnMgaW4gdGhlIGZhc3QgcGF0aCAobmZfZmxvd19vZmZsb2FkX2ZvcndhcmQpLCBhbmQgZGVmZXJzIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlc2UgY291bnRlcnMgdG8gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3lzdGVtIHRvIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gc3RlcCAobmZfZmxvd19vZmZsb2FkX2djX3N0ZXApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBzdGF0aXN0aWNzIGFyZSB0cmFja2VkIGFuZCBzeW5jaHJvbml6ZWQsIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGludHJvZHVjZSBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgYnVncyBpbiB0aGUgR0MgcHJvY2Vzcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjY2N2NkM2RhNjdlNjg0MmYzNzEyMWQ3NTg5N2M2ODI3ZDczNzdkOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDAwOjEzOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbmluZGV4IGYyZTI3NzFmMTg4ZjQuLjYwNjAyMDIxMzNjNzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5AQCAtMTcxLDYgKzE3MSw5IEBAIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUge1xuIFx0XHRcdHUzMlx0XHRpaWZpZHg7XG4gXHRcdH0gdGM7XG4gXHR9O1xuK1xuK1x0YXRvbWljNjRfdFx0XHRcdHBhY2tldHM7XG4rXHRhdG9taWM2NF90XHRcdFx0Ynl0ZXM7XG4gfTtcbiBcbiBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoIHtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuaW5kZXggMDMyNDFkNGJmZDVlOC4uYTFmMzdjYTk1NmI4ZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbkBAIC0xMyw2ICsxMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuaFx1MDAzZVxuIFxuIHN0YXRpYyBERUZJTkVfTVVURVgoZmxvd3RhYmxlX2xvY2spO1xuIHN0YXRpYyBMSVNUX0hFQUQoZmxvd3RhYmxlcyk7XG5AQCAtNTY1LDExICs1NjYsMjkgQEAgc3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9leHRlbmRfY3RfdGltZW91dChzdHJ1Y3QgbmZfY29ubiAqY3QpXG4gXHRuZl9jdF9wdXQoY3QpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBfX25mX2Zsb3dfc3luY19jdF9zdGF0cyhzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBpbnQgZGlyKVxuK3tcbitcdHU2NCBwa3RzLCBieXRlcztcbitcbitcdHBrdHMgPSBhdG9taWM2NF94Y2hnKFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUucGFja2V0cywgMCk7XG4rXHRieXRlcyA9IGF0b21pYzY0X3hjaGcoXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5ieXRlcywgMCk7XG4rXHRuZl9jdF9hY2N0X2FkZChmbG93LVx1MDAzZWN0LCBkaXIsIHBrdHMsIGJ5dGVzKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbmZfZmxvd19zeW5jX2N0X3N0YXRzKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG4re1xuK1x0X19uZl9mbG93X3N5bmNfY3Rfc3RhdHMoZmxvdywgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCk7XG4rXHRfX25mX2Zsb3dfc3luY19jdF9zdGF0cyhmbG93LCBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKVxuIHtcbi1cdGJvb2wgdGVhcmRvd24gPSB0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbitcdGJvb2wgdGVhcmRvd247XG4rXG4rXHRuZl9mbG93X3N5bmNfY3Rfc3RhdHMoZmxvdyk7XG4gXG4rXHR0ZWFyZG93biA9IHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuIFx0aWYgKG5mX2Zsb3dfaGFzX2V4cGlyZWQoZmxvdykgfHxcbiBcdCAgICBuZl9jdF9pc19keWluZyhmbG93LVx1MDAzZWN0KSB8fFxuIFx0ICAgICFuZl9mbG93X2RzdF9jaGVjayhcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX09SSUdJTkFMXS50dXBsZSkgfHxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG5pbmRleCBjOGMyOWE5YTE2ODQ0Li42NmJlODE1YWMyZmViIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG5AQCAtNTA5LDggKzUwOSwxMCBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRpcF9kZWNyZWFzZV90dGwoaXBoKTtcbiBcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcbiBcbi1cdGlmIChmbG93X3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcbi1cdFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cdTAwM2VjdCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpciwgc2tiLVx1MDAzZWxlbik7XG4rXHRpZiAoZmxvd190YWJsZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZfRkxPV1RBQkxFX0NPVU5URVIpIHtcbitcdFx0YXRvbWljNjRfYWRkKDEsIFx1MDAyNnR1cGxlaGFzaC1cdTAwM2V0dXBsZS5wYWNrZXRzKTtcbitcdFx0YXRvbWljNjRfYWRkKHNrYi1cdTAwM2VsZW4sIFx1MDAyNnR1cGxlaGFzaC1cdTAwM2V0dXBsZS5ieXRlcyk7XG4rXHR9XG4gXG4gXHRyZXR1cm4gMTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxMzoxNi43NTc3NDg2MzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTEwMzUxOTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIEZsb3cgVGFibGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AgYW5kIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBhZGRpbmcgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGNvdW50ZXJzLCBib3RoIGBhdG9taWM2NF90YCB0eXBlcywgdG8gdGhlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYC4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgaG93IHRoZXNlIGNvdW50ZXJzIGFyZSBiZWluZyB1c2VkLlxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHN5bmNocm9uaXphdGlvbiBzdGVwLCBjYWxsaW5nIGBuZl9mbG93X3N5bmNfY3Rfc3RhdHMoZmxvdylgIHdpdGhpbiBgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXBgLiBUaGlzIHVsdGltYXRlbHkgY2FsbHMgYG5mX2N0X2FjY3RfYWRkYCB0byB1cGRhdGUgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgKGNvbm50cmFjaykgc3RhdHMuIEJ1dCBoZXJlJ3MgdGhlIGtpY2tlcjogYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCwgd2hpY2ggaXMgKmluIHRoZSBmYXN0IHBhdGgqIG9mIHBhY2tldCBmb3J3YXJkaW5nLCBub3cgZGlyZWN0bHkgdXNlcyBgYXRvbWljNjRfYWRkYCB0byBpbmNyZW1lbnQgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIG9uIHRoZSB0dXBsZSBpdHNlbGYuIEl0J3Mgc2tpcHBpbmcgdGhlIGBuZl9jdF9hY2N0X3VwZGF0ZWAgY2FsbC5cblxuVGhpcyBpcyBhIGNsZXZlciBvcHRpbWl6YXRpb24uIFdlJ3JlIGF2b2lkaW5nIHBvdGVudGlhbCBsb2NrIGNvbnRlbnRpb24gb3Igc2xvd2Rvd25zIHRoYXQgYG5mX2N0X2FjY3RfdXBkYXRlYCBsaWtlbHkgaW50cm9kdWNlcyBieSB1cGRhdGluZyB0aGUgY29ubnRyYWNrIHN0YXRzIGRpcmVjdGx5IGFuZCBkZWZlcnJpbmcgc3luY2hyb25pemF0aW9uIHVudGlsIGdhcmJhZ2UgY29sbGVjdGlvbi4gRWZmZWN0aXZlbHksIHRoaXMgaXMgbW92aW5nIHRoZSBzdGF0IHVwZGF0ZXMgdG8gYSBtb3JlIGFzeW5jaHJvbm91cyBhcHByb2FjaCBmb3IgcGVyZm9ybWFuY2UuXG5cblRoaXMgaXMgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGhhbmRsZXMgc3RhdGlzdGljcy4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZSwgYW5kIHRoYXQgbWFrZXMgaXQgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLiBJdCdzIGNyaXRpY2FsIHRvIG1ha2Ugc3VyZSB0aGlzIG5ldyBmYXN0LXBhdGggYXBwcm9hY2ggd29ya3MgY29ycmVjdGx5IGluIHRoZSBwcmVzZW5jZSBvZiByYWNlIGNvbmRpdGlvbnMgYW5kIGVkZ2UgY2FzZXMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZyBvcHRpb25zIGVuYWJsZSB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LiBMZXQncyBzZWUuLi4gdGhlIHJlbGV2YW50IGZpbGVzIGFyZSBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AgYW5kIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY2Ag4oCTIHRoYXQncyB3aGVyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxMzoyMy42NjgxMDM3ODVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU0Nzg0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd190YWJsZV9jb3JlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNDI9b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXFx0Kz0gbmZfZmxvd190YWJsZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDM6bmZfZmxvd190YWJsZS1vYmpzXFx0XFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NC1cXHRcXHRcXHRcXHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjEzOjIzLjc1MzU4NjkxOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzU1Njc4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIENvbmZpZ3VyYXRpb24gU3BhY2UqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBzdGFydGluZyB3aXRoIGBDT05GSUdfTkZfRkxPV19UQUJMRWAuIFRoYXQncyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaXRlbSB3ZSBuZWVkIHRvIGZvY3VzIG9uLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyBqdXN0IGEgc2luZ2xlIGZsYWcgd2UncmUgZGVhbGluZyB3aXRoLCBvciBpZiB0aGVyZSdzIGEgZmFtaWx5IG9mIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IGV4cGxvcmUgdGhlIGFkamFjZW50IGNvbmZpZ3VyYXRpb24gc3BhY2UuIEFyZSB0aGVyZSBvdGhlciBmbGFncyB0aGF0IGludGVyYWN0IHdpdGggdGhpcyBvbmUsIHBlcmhhcHMgZGVwZW5kZW5jaWVzLCBvciBtb3JlIGdyYW51bGFyIGNvbnRyb2xzIGZvciB0aGUgZmxvdyB0YWJsZSBmdW5jdGlvbmFsaXR5PyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIGl0J3MgcmFyZWx5IGp1c3Qgb25lIHNvbGl0YXJ5IHN3aXRjaC4gTGV0J3Mgc2VlIHdoYXQgZWxzZSBpcyBsdXJraW5nIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODI4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTM6MjYuOTg5MTU2NzM2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODc2NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEyLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MjE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cXHRib29sIFxcXCJTdXBwbHkgZmxvdyB0YWJsZSBzdGF0aXN0aWNzIGluIHByb2Nmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTM6MjcuMDM5MDQyMjMyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4MjY1Mjg4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgTkZfRkxPV19UQUJMRSBLY29uZmlnKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBgTkZfRkxPV19UQUJMRWAgS2NvbmZpZyBvcHRpb24uIExldCdzIHN0YXJ0IHRoZXJlLiBNeSBicmFpbiBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgcGxhY2VzIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gaXQuIFRoYXQgbWVhbnMgSSdsbCBiZSBnb2luZyBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcyB0byBmaW5kIHRoZSBzcGVjaWZpY3MsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgc2V0dGluZ3MuIEknbSBleHBlY3RpbmcgdG8gc2VlIGRlcGVuZGVuY2llcyBvbiByZWxldmFudCBuZXR3b3JraW5nIGZlYXR1cmVzIOKAkyB0aGluZ3MgbGlrZSBjb25uZWN0aW9uIHRyYWNraW5nLCBOQVQsIG9yIHNwZWNpZmljIGhhcmR3YXJlIG9mZmxvYWQgY2FwYWJpbGl0aWVzLiBUaGlzIGFsc28gbGlrZWx5IGNvbnRyb2xzIHRoZSBpbmNsdXNpb24gb2YgdGhlIGNvcmUgZmxvdyB0YWJsZSBjb2RlIGl0c2VsZiBhbmQgYXNzb2NpYXRlZCBtb2R1bGVzLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGhpZGRlbiBudWFuY2VzIGluIHRoZSBkZXBlbmRlbmNpZXMuIEkgYW0gaG9waW5nIHRvIGdldCBpbnNpZ2h0IGludG8gdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQgd2l0aGluIG15IHNwZWNpZmljIHVzZSBjYXNlLCBhbmQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGVzZSBzZXR0aW5ncyBhcmUgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIzNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjEzOjMwLjIyMTY5NzYwNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzEwOlxcdFxcbiA3MTE6XFx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG4gNzEyOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcXFwiXFxuIDcxMzpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9JTkdSRVNTXFxuIDcxNDpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbiA3MTU6XFx0XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcXG4gNzE2OlxcdFxcdGhlbHBcXG4gNzE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBjb3JlIGluZnJhc3RydWN0dXJlLlxcbiA3MTg6XFx0XFxuIDcxOTpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuIDcyMDpcXHRcXG4gNzIxOlxcdGNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xcbiA3MjI6XFx0XFx0Ym9vbCBcXFwiU3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcXFwiXFxuIDcyMzpcXHRcXHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcXG4gNzI0OlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbiA3MjU6XFx0XFx0aGVscFxcbiA3MjY6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGZvciB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIHN0YXRpc3RpY3NcXG4gNzI3OlxcdFxcdCAgdG8gYmUgc2hvd24gaW4gcHJvY2ZzIHVuZGVyIG5ldC9uZXRmaWx0ZXIvbmZfZmxvd3RhYmxlLlxcbiA3Mjg6XFx0XFxuIDcyOTpcXHRjb25maWcgTkVURklMVEVSX1hUQUJMRVNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTM6MzAuMjIxODA2Mjk0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2MjU3MDMxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBORl9GTE9XX1RBQkxFIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gVGhlIGBORl9GTE9XX1RBQkxFYCBtb2R1bGUgaXMgaW4gcGxheS4gSSBuZWVkIHRvIHF1aWNrbHkgcnVuIHRocm91Z2ggaXRzIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgZXZlcnl0aGluZydzIHByb3Blcmx5IGVuYWJsZWQgYW5kIHVuZGVyc3Rvb2QgZnJvbSBhIGNvbmZpZ3VyYXRpb24gYW5kIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUuIFNwZWNpZmljYWxseSwgSSdtIG5vdGluZyB0aGF0IGl0IHJlbGllcyBvbiBgTkVURklMVEVSX0lOR1JFU1NgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9UQUJMRVNgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGZsb3cgdGFibGVzIGFyZSBmdW5kYW1lbnRhbGx5IGFib3V0IGluZ3Jlc3MgaGFuZGxpbmcsIGNvbm5lY3Rpb24gdHJhY2tpbmcgZm9yIHN0YXRlZnVsIG9wZXJhdGlvbiwgYW5kIG9mIGNvdXJzZSwgbGV2ZXJhZ2luZyB0aGUgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlIHdpdGggaXRzIHRhYmxlLWJhc2VkIHJ1bGVzLiBJdCB3b3VsZCBiZSBhIHByb2JsZW0gaWYgdGhvc2UgYXJlbid0IGF2YWlsYWJsZSwgb3IgYXJlIHNvbWVob3cgbWlzY29uZmlndXJlZC5cblxuTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBiZWNhdXNlIGl0J3MgYWx3YXlzIGdvb2QgcHJhY3RpY2UsIGxldCBtZSBhbHNvIGJyaWVmbHkgbG9vayBhdCBgTkZfRkxPV19UQUJMRV9JTkVUYC4gSXQncyBwb3NzaWJsZSBJJ2xsIG5lZWQgaXRzIGZ1bmN0aW9uYWxpdHksIGRlcGVuZGluZyBvbiB0aGUgZXhhY3QgdHJhZmZpYyBmbG93cyBJJ20gd29ya2luZyB3aXRoLiBUaGlzIGNoZWNrIGVuc3VyZXMgSSBoYXZlbid0IG92ZXJsb29rZWQgYW55IGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zLCBhbmQgZW5zdXJlcyB0aGF0IEkndmUgYWNjb3VudGVkIGZvciBJUHY0IGFuZCBJUHY2IHRyYWZmaWMuIEl04oCZcyBhbHNvIGltcG9ydGFudCB0aGF0IEkgdGFrZSB0aGUgdGltZSB0byBjb25zaWRlciBob3cgZWFjaCBmZWF0dXJlIGlzIGludGVyLXJlbGF0ZWQgYW5kIGRlcGVuZGVudCBvbiBvbmUgYW5vdGhlciBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoZSBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTM6MzMuOTg0Mzc4NjgxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzAwLFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzAwOlxcdFxcbiA3MDE6XFx0ZW5kaWYgIyBORl9UQUJMRVNcXG4gNzAyOlxcdFxcbiA3MDM6XFx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbiA3MDQ6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiXFxuIDcwNTpcXHRcXHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcXG4gNzA2OlxcdFxcdGhlbHBcXG4gNzA3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgc3VwcG9ydC5cXG4gNzA4OlxcdFxcbiA3MDk6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcbiA3MTA6XFx0XFxuIDcxMTpcXHRjb25maWcgTkZfRkxPV19UQUJMRVxcbiA3MTI6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4gNzEzOlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0lOR1JFU1NcXG4gNzE0OlxcdFxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjEzOjMzLjk4NDQ4NTg1MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTQ5MDYwMjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRmxvdyBUYWJsZSBPZmZsb2FkIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBoaXRzIGBuZl9mbG93X3RhYmxlX2NvcmUuY2AgYW5kIGBuZl9mbG93X3RhYmxlX2lwLmNgLiBUaGVzZSBhcmUgY29tcGlsZWQgaW50byBgbmZfZmxvd190YWJsZS5vYCwgd2hpY2ggbWFrZXMgc2Vuc2Ugc2luY2UgYENPTkZJR19ORl9GTE9XX1RBQkxFYCBpcyBlbmFibGVkLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLCBzbyBJIHNob3VsZCBzZWUgaWYgb3RoZXIgZnVuY3Rpb25zIGluIHRoZXNlIGZpbGVzIGFyZSBhbHNvIGltcGFjdGVkLlxuXG5IYW5nIG9uLi4uIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAgaXMgaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AsIG5vdCB0aGUgY29yZSBmaWxlLiBJIHdvbmRlciBpZiB0aGVyZSdzIGEgc2ltaWxhciBmdW5jdGlvbiBpbiBgbmZfZmxvd190YWJsZV9pcHY2LmNgIHRoYXTigJlzIGJlZW4gb3Zlcmxvb2tlZCBoZXJlLiBDaGVja2luZyB0aGUgZGlmZiBhZ2Fpbi4uLiBub3BlLCBqdXN0IGBuZl9mbG93X3RhYmxlX2lwLmNgLiBPaywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYG5mX2Zsb3dfdGFibGVfY29yZS5jYC5cblxuUmlnaHQsIGZvY3VzaW5nIG9uIGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAgYW5kIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAuIEhvbGQgb24gYSBzZWNvbmQsIGlzbid0IGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAgYSBmYXN0LXBhdGggZnVuY3Rpb24/IFRoYXQgbWlnaHQgbWFrZSBpdCBhIG1vcmUgc2Vuc2l0aXZlIGFyZWEsIHNvIGxldOKAmXMgYmUgY2FyZWZ1bCB3aGVuIHJldmlld2luZyB0aGlzIGNoYW5nZS4gSSBzaG91bGQgYmUgYXdhcmUgdGhhdCBpdCBtaWdodCBpbnRyb2R1Y2Ugc29tZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucy5cblxuTGV0IG1lIGFsc28gY2hlY2sgYG5mX2Zsb3dfc3luY19jdF9zdGF0c2AgYW5kIGBfX25mX2Zsb3dfc3luY19jdF9zdGF0c2AuIExvb2tzIGxpa2UgdGhleSdyZSBzdGF0aWMsIGJ1dCB0aGF0IGRvZXNuJ3QgbWVhbiB0aGV5IGFyZW4ndCBpbXBvcnRhbnQ7IHRoZXkgbWF5IGJlIGltcG9ydGFudCBpbnRlcm5hbCBmdW5jdGlvbnMuIEFuZCwgYWx0aG91Z2ggYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYCBpcyBzdGF0aWMsIGl0J3MgYmVpbmcgcGFzc2VkIGFzIGEgY2FsbGJhY2sgb3IgY2FsbGVkIGZyb20gYSBub24tc3RhdGljIGZ1bmN0aW9uLCB0aGF04oCZcyBhbm90aGVyIGFyZWEgdG8gZXhhbWluZS4gR290dGEgZGlnIGRlZXBlciBvbiBhbGwgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMyOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjEzOjM5LjkzMzU0ODkxNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM5Njc4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd19vZmZsb2FkX2djX3N0ZXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz01Nzg9c3RhdGljIHZvaWQgbmZfZmxvd19zeW5jX2N0X3N0YXRzKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTU4My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjU4NDpzdGF0aWMgdm9pZCBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTg1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz02MjE9dm9pZCBuZl9mbG93X3RhYmxlX2djX3J1bihzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjIyLXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjYyMzpcXHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd190YWJsZSwgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAsIE5VTEwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjI0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTM6MzkuOTg3NTIxNDAxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MDUyMTM0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGbG93IFRhYmxlIEdhcmJhZ2UgQ29sbGVjdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHdvcmtzIGZvciB0aGUgbmV0d29yayBmbG93IHRhYmxlLiBUaGUgZW50cnkgcG9pbnQsIHRoZSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgKmV4ZWN1dGVzKiB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHJvdXRpbmUsIGlzIGBuZl9mbG93X3RhYmxlX2djX3J1bmAuIEFscmlnaHQsIHRoYXQncyB3aGF0IEknbSBsb29raW5nIGZvci4gTGV0J3MgZ2V0IHJpZ2h0IGludG8gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYC4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyBpdCdzIGltcGxlbWVudGVkLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcywgdGhlIGNvbmRpdGlvbnMgZm9yIGV2aWN0aW9uLCB0aGUgYWdpbmcgbWVjaGFuaXNtcywgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSwgYWxsIG9mIGl0LiBMZXQncyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM0OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjEzOjQ1LjU5MjczODg0MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI2NzAzNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd190YWJsZV9nY19ydW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz01ODQ9c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjIwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NjIxOnZvaWQgbmZfZmxvd190YWJsZV9nY19ydW4oc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYyMi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTYyNj1zdGF0aWMgdm9pZCBuZl9mbG93X29mZmxvYWRfd29ya19nYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYzMC1cXHRmbG93X3RhYmxlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZl9mbG93dGFibGUsIGdjX3dvcmsud29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2MzE6XFx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02MzItXFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsIFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VnY193b3JrLCBIWik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc4Mj12b2lkIG5mX2Zsb3dfdGFibGVfZnJlZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTEtXFx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCwgTlVMTCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3OTI6XFx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTMtXFx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoZmxvd190YWJsZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNjU9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2hfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNjgtXFx0XFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTE2OTpcXHRcXHRuZl9mbG93X3RhYmxlX2djX3J1bihmbG93dGFibGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3MC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjEzOjQ1LjY1NTQxNjEwNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDAzODc3NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipGb2N1cyBTeW1ib2wgU2VsZWN0aW9uIC0gQW4gSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3Mgc2VlLCBJJ20gdHJ5aW5nIHRvIGlkZW50aWZ5IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGBGb2N1c1N5bWJvbHNgLiBDb25zaWRlcmluZyB0aGUgbmF0dXJlIG9mIG5ldGZpbHRlciBmbG93IHRhYmxlcyBhbmQgb2ZmbG9hZGluZywgd2hlcmUgc2hvdWxkIEkgc3RhcnQ/ICpuZl9mbG93X3RhYmxlX2djX3J1biogbG9va3MgcHJvbWlzaW5nLiBHYXJiYWdlIGNvbGxlY3Rpb24gcm91dGluZXMgYXJlIG9mdGVuIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGFuZCBmcmVxdWVudGx5IHRvdWNoZWQuIFRoYXQncyBhIHN0cm9uZyBjb250ZW5kZXIsIEknbGwga2VlcCB0aGF0IG9uZSBpbiBtaW5kLlxuXG5XYWl0IGEgc2Vjb25kLCBsZXQgbWUgY2hlY2sgc29tZXRoaW5nLiBBaCwgeWVzLCByaWdodC4gSSBuZWVkIHRvIGJlIG1vcmUgcHJlY2lzZSBhYm91dCB0aGUgbG9jYXRpb24gb2YgdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gKm5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKiwgbm93IHRoYXQncyBhIGtleSBmdW5jdGlvbiBpbiBgbmZfZmxvd190YWJsZWAgb2ZmbG9hZGluZy4gTm93IHdoZXJlIGRvZXMgdGhhdCBzaXQ/IEl0IGxvb2tzIGxpa2UgaXQncyB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jYC4gVGhhdCBmaWxlIGxvY2F0aW9uIHdpbGwgY29tZSBpbiBoYW5keSBsYXRlci4gSSBuZWVkIHRvIG5vdGUgd2hlcmUgdGhlIGNvZGUgcmVzaWRlcywgdG8gdW5kZXJzdGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxOTcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxMzo0OS42NTkyOTY4MDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NzMyMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTQ1Nz1uZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NjctXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NDY4OnN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NjktXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTg2Nj1uZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODg1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjg4NjpcXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChcXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODg3LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxMzo0OS43MDkwMzQxMjJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxMDc1MDA2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIEZsb3cgT2ZmbG9hZCBIb29rcyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGZsb3cgb2ZmbG9hZCwgYW5kIHRoZSBwcmltYXJ5IGhvb2sgZnVuY3Rpb24gc2VlbXMgdG8gYmUgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYC4gTmF0dXJhbGx5LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjb25maXJtIHRoYXQgdGhlIElQdjQgaG9vayBpc24ndCB0aGUgc29sZSBwb2ludCBvZiBpbnRlcmVzdC4gQSBnb29kIHByYWN0aWNlIGlzIHRvIGFsd2F5cyBjb25zaWRlciBwb3RlbnRpYWwgcmVsYXRlZCBmdW5jdGlvbnMgdG8gY292ZXIgYWxsIGJhc2VzIGFuZCBlbnN1cmUgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0ncyBiZWhhdmlvci4gVGltZSB0byBjaGVjayBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AgYXMgd2VsbCwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgc2VlIGlmIHRoZXJlJ3MgYW55IGludGVycGxheSBvciBwb3RlbnRpYWwgZm9yIHJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzLiBMZXQncyBtYWtlIHN1cmUgd2UndmUgZ290IHRoZSB3aG9sZSBwaWN0dXJlLCBJUHY0ICphbmQqIElQdjYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3OTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxMzo1My4xMTk3ODc2MTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzE0NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz0xMj1uZl9mbG93X29mZmxvYWRfaW5ldF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTM4LVxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzozOTpcXHRcXHRyZXR1cm4gbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayhwcml2LCBza2IsIHN0YXRlKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTQwLVxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9ODg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NiA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtOTMtXFx0LmZyZWVcXHRcXHQ9IG5mX2Zsb3dfdGFibGVfZnJlZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjk0OlxcdC5ob29rXFx0XFx0PSBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtOTUtXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTExOTQ9dW5zaWduZWQgaW50XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTE5NTpuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTE5Ni1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEyMjItfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEyMjM6RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjEzOjUzLjE2ODEwNjY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjUxMTE5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgT2ZmbG9hZCBIb29rcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIE5ldGZpbHRlciBmbG93IG9mZmxvYWQgaW1wbGVtZW50YXRpb24sIGFuZCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiB3aGVyZSBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AgbGl2ZXMuIEFoLCByaWdodCwgaXQncyBidXJpZWQgaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AuIEdvb2QsIGdvdCBpdC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzIGhvdyB0aGlzIGhvb2sgYWN0dWFsbHkgd29ya3MuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGF0IGZvcndhcmRpbmcgZnVuY3Rpb24gaXQncyB1dGlsaXppbmcuIERvZXMgaXQgZGlyZWN0bHkgY2FsbCBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgLCBvciBpcyB0aGVyZSBhIG1vcmUgc3BlY2lmaWMgSVB2Ni1yZWxhdGVkIGZvcndhcmRlciBsaWtlIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGNhbGwgZmxvdyBoZXJlIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgSVB2NiB0cmFmZmljIGlzIHNwZWNpZmljYWxseSBiZWluZyBoYW5kbGVkIGFuZCBhY2NlbGVyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ4MywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjEzOjU2Ljg5MzIyMTA4OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyNDE4OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMTk0PXVuc2lnbmVkIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjExOTU6bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExOTYtXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMjIyLX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMjIzOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxMzo1Ni45Mzg0NjgyOTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1Mzc4NjE3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBJJ20gYWJvdXQgdG8gYW5hbHl6ZTpcblxuKipBbmFseXppbmcgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgIENhbGxzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYC4gSXQncyBhIG5ldGZpbHRlciBob29rLCBzbyBJIGFscmVhZHkga25vdyBpdCdzIGEgY3JpdGljYWwgcG9pbnQgZm9yIHBhY2tldCBwcm9jZXNzaW5nIGluIHRoZSBJUHY2IHdvcmxkLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBtYXAgb3V0IHRoZSBjYWxsIGdyYXBoIOKAkyBJIG5lZWQgdG8gc2VlICp3aG8qIGlzIGNhbGxpbmcgdGhpcyBob29rLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gd2hlcmUgSVB2NiBmbG93IG9mZmxvYWRpbmcgaXMgYmVpbmcgaW5pdGlhdGVkLCBjb250cm9sbGVkLCBhbmQgcG90ZW50aWFsbHkgbW9kaWZpZWQuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBhbmFseXNpcyBsaWVzOiBmaWd1cmluZyBvdXQgaG93IHRoZSBzeXN0ZW0gbWFrZXMgdXNlIG9mIHRoaXMgcGFydGljdWxhciBob29rIGluIGEgZGVlcGVyIGxldmVsLiBJJ2xsIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgZnVuY3Rpb24gdG8gdGhlIGNhbGxpbmcgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZS4gSSdtIGhvcGluZyBJIGRvbid0IHJ1biBpbnRvIGFueSBzaWduaWZpY2FudCBtYWNyby1oZWF2eSBvYmZ1c2NhdGlvbiEgTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NjAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNDowMC42OTIyNTY5NjJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExOTQsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExOTQ6XFx0dW5zaWduZWQgaW50XFxuMTE5NTpcXHRuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuMTE5NjpcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcXG4xMTk3OlxcdHtcXG4xMTk4OlxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcXG4xMTk5OlxcdFxcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPSBwcml2O1xcbjEyMDA6XFx0XFx0c3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggY3R4ID0ge1xcbjEyMDE6XFx0XFx0XFx0LmluXFx0PSBzdGF0ZS1cXHUwMDNlaW4sXFxuMTIwMjpcXHRcXHR9O1xcbjEyMDM6XFx0XFx0aW50IHJldDtcXG4xMjA0OlxcdFxcbjEyMDU6XFx0XFx0aWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChcXHUwMDI2Y3R4LCBza2IpKVxcbjEyMDY6XFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4xMjA3OlxcdFxcbjEyMDg6XFx0XFx0aWYgKHVubGlrZWx5KGN0eC5ldGhlcl90eXBlICE9IGh0b25zKEVUSF9QX0lQVjYpKSlcXG4xMjA5OlxcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuMTIxMDpcXHRcXG4xMjExOlxcdFxcdHR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cChcXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xcbjEyMTI6XFx0XFx0aWYgKCF0dXBsZWhhc2gpXFxuMTIxMzpcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbjEyMTQ6XFx0XFxuMTIxNTpcXHRcXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcXG4xMjE2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjEyMTc6XFx0XFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuMTIxODpcXHRcXHRlbHNlIGlmIChyZXQgPT0gMClcXG4xMjE5OlxcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuMTIyMDpcXHRcXG4xMjIxOlxcdFxcdHJldHVybiBuZl9mbG93X3F1ZXVlX3htaXQ2KHNrYiwgdHVwbGVoYXNoLCBzdGF0ZSk7XFxuMTIyMjpcXHR9XFxuMTIyMzpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTQ6MDAuNjkyMzY1NjMyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTMzNjcxMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgdGhlIERpZmYgYW5kIENvbnNpZGVyaW5nIFBvdGVudGlhbCBNb2RpZmljYXRpb25zKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGZlZWxzIG9mZi4gSSB3YXMgZXhwZWN0aW5nIHRvIHNlZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGluIHRoYXQgZGlmZiwgYnV0IGl0J3Mgbm90IHNob3dpbmcgdXAuIFRoYXQncyBzdHJhbmdlLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUuIFRoZSBiZWhhdmlvciBvZiB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgY3JpdGljYWwsIGFuZCBhbnkgY2hhbmdlIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgcmFtaWZpY2F0aW9ucyBmb3IuLi4gd2VsbCwgZXZlcnl0aGluZywgZnJhbmtseS4gU28sIGJlZm9yZSBJIGNvbnRpbnVlLCBJICptdXN0KiB2ZXJpZnkgdGhhdCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAgd2Fzbid0LCBpbiBmYWN0LCBtb2RpZmllZC4gUGVyaGFwcyBJIG1pc3NlZCBzb21ldGhpbmcgaW4gbXkgaW5pdGlhbCByZXZpZXcsIG9yIG1heWJlIHRoZXJlJ3MgYW4gaW5kaXJlY3QgaW1wYWN0IEkgbmVlZCB0byB0cmFjZS4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgcnVsZSBvdXQgYW55IHVuZXhwZWN0ZWQgbW9kaWZpY2F0aW9ucy4gTGV0J3MgZGlnIGluIGFuZCBtYWtlIHN1cmUgaXQncyBhcyBpdCBzaG91bGQgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MjcsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE0OjA0LjE4NTczNTcwN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2NTU3NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMDAwPXN0YXRpYyBpbnQgbmZfZmxvd190dXBsZV9pcHY2KHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDY1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEwNjY6c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTA2Ny1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTE5NT1uZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMjE0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEyMTU6XFx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChcXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTIxNi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTQ6MDQuMjM1Mzk0NjMzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDYyMDU3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYCBtb2R1bGUuIEkgc2VlIGl0J3MgZGVhbGluZyB3aXRoIElQdjYgZm9yd2FyZGluZyBhbmQgZmxvdyBvZmZsb2FkLCB3aGljaCBpcyBhIGtleSBhcmVhIGZvciBoaWdoLXBlcmZvcm1hbmNlIG5ldHdvcmtpbmcsIGVzcGVjaWFsbHkgaW4gbW9kZXJuIGRhdGEgY2VudGVycyBhbmQgY2xvdWQgZW52aXJvbm1lbnRzLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbmV0d29yayB0aHJvdWdocHV0IGFuZCBsYXRlbmN5LlxuXG5UaGlzIG1vZHVsZSBpcyBsaWtlbHkgZGVzaWduZWQgdG8gYWNjZWxlcmF0ZSB0aGUgZm9yd2FyZGluZyBvZiBJUHY2IHBhY2tldHMgYnkgb2ZmbG9hZGluZyB0aGUgcHJvY2Vzc2luZyBvZiBzcGVjaWZpYyBmbG93cyB0byB0aGUgbmV0d29yayBpbnRlcmZhY2UgY2FyZCAoTklDKSBvciBhIGRlZGljYXRlZCBoYXJkd2FyZSBhY2NlbGVyYXRvci4gVGhhdCdzIGEgY2xhc3NpYyBvcHRpbWl6YXRpb24gdGVjaG5pcXVlLCBidXQgdGhlIGRldmlsIGlzIGFsd2F5cyBpbiB0aGUgZGV0YWlscywgc28gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGEgZmV3IGNvcmUgY29uY2VwdHMuXG5cbknigJltIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIGNyaXRlcmlhIHRoZSBtb2R1bGUgdXNlcyB0byBpZGVudGlmeSBmbG93cyBzdWl0YWJsZSBmb3Igb2ZmbG9hZGluZy4gSXMgaXQgYmFzZWQgb24gc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMsIHBvcnRzLCBwcm90b2NvbHMsIG9yIGEgY29tYmluYXRpb24/IEFuZCB3aGF0IGFib3V0IGNvbm5lY3Rpb24gc3RhdGUgdHJhY2tpbmc/IERvZXMgaXQgc3VwcG9ydCBUQ1AsIFVEUCwgb3IgYm90aD8gQXJlIHRoZXJlIGFueSBsaW1pdGF0aW9ucyBvbiB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnQgb2ZmbG9hZGVkIGZsb3dzPyBUaGlzIGtpbmQgb2YgaW1wbGVtZW50YXRpb24gZGV0YWlsIGNhbiBoYXZlIGEgbWFzc2l2ZSBpbXBhY3Qgb24gb3ZlcmFsbCBwZXJmb3JtYW5jZS5cblxuVGhlbiB0aGVyZSdzIHRoZSBxdWVzdGlvbiBvZiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGV4aXN0aW5nIElQdjYgZm9yd2FyZGluZyBzdGFjay4gRG9lcyBpdCBpbnRlZ3JhdGUgY2xlYW5seSB3aXRoIHRoZSByb3V0aW5nIHRhYmxlIGxvb2t1cHMgYW5kIHRoZSBuZWlnaGJvciBkaXNjb3ZlcnkgcHJvY2Vzcz8gRG9lcyBpdCBuZWVkIHRvIGhhbmRsZSBmcmFnbWVudGF0aW9uIGFuZCByZWFzc2VtYmx5PyBBbmQgaG93IGRvZXMgaXQgaGFuZGxlIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMsIHBhcnRpY3VsYXJseSB0aG9zZSB0aGF0IGFyZSBub3QgY29tbW9ubHkgb2ZmbG9hZGVkP1xuXG5BbHNvLCBlcnJvciBoYW5kbGluZyBpcyBjcml0aWNhbGx5IGltcG9ydGFudCwgc28gSSdsbCB3YW50IHRvIHJldmlldyB0aGUgbWVjaGFuaXNtIGZvciBoYW5kbGluZyBwYWNrZXQgZHJvcHMsIGNoZWNrc3VtIGZhaWx1cmVzLCBvciBvdGhlciBleGNlcHRpb25hbCBjb25kaXRpb25zLiBBIHJvYnVzdCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBuZWVkIHRvIGdyYWNlZnVsbHkgZmFsbCBiYWNrIHRvIHNvZnR3YXJlIGZvcndhcmRpbmcgd2hlbiBuZWNlc3NhcnksIG9yIGV2ZW4gc2lnbmFsIGFuIGlzc3VlIHVwc3RyZWFtLlxuXG5GaW5hbGx5LCBJ4oCZbGwgbmVlZCB0byBjaGVjayB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBGbG93IG9mZmxvYWQsIGluIGVzc2VuY2UsIGlzIGJ5cGFzc2luZyBzb21lIG9mIHRoZSBzdGFuZGFyZCBjaGVja3MuIEhvdyBkb2VzIGl0IGVuc3VyZSB0aGF0IG9mZmxvYWRlZCBmbG93cyBhcmUgbm90IHVzZWQgZm9yIG1hbGljaW91cyBwdXJwb3NlcywgYW5kIGhvdyBpcyBpdCBpbnRlZ3JhdGVkIHdpdGggYW55IHNlY3VyaXR5IGZlYXR1cmVzIGxpa2UgZmlyZXdhbGxpbmcgYW5kIGludHJ1c2lvbiBkZXRlY3Rpb24/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzAxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTQ6MDguNDgxNjAzMjIzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNjYsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNjY6XFx0c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuMTA2NzpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbjEwNjg6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxcbjEwNjk6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMDcwOlxcdHtcXG4xMDcxOlxcdFxcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XFxuMTA3MjpcXHRcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xcbjEwNzM6XFx0XFx0dW5zaWduZWQgaW50IHRob2ZmLCBtdHU7XFxuMTA3NDpcXHRcXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcXG4xMDc1OlxcdFxcbjEwNzY6XFx0XFx0ZGlyID0gdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5kaXI7XFxuMTA3NzpcXHRcXHRmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pO1xcbjEwNzg6XFx0XFxuMTA3OTpcXHRcXHRtdHUgPSBmbG93LVxcdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgKyBjdHgtXFx1MDAzZW9mZnNldDtcXG4xMDgwOlxcdFxcdGlmIChmbG93LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSlcXG4xMDgxOlxcdFxcdFxcdG10dSAtPSBzaXplb2YoKmlwNmgpO1xcbjEwODI6XFx0XFxuMTA4MzpcXHRcXHRpZiAodW5saWtlbHkobmZfZmxvd19leGNlZWRzX210dShza2IsIG10dSkpKVxcbjEwODQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTA4NTpcXHRcXG4xMDg2OlxcdFxcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBjdHgtXFx1MDAzZW9mZnNldCk7XFxuMTA4NzpcXHRcXHR0aG9mZiA9IHNpemVvZigqaXA2aCkgKyBjdHgtXFx1MDAzZW9mZnNldDtcXG4xMDg4OlxcdFxcdGlmIChuZl9mbG93X3N0YXRlX2NoZWNrKGZsb3csIGlwNmgtXFx1MDAzZW5leHRoZHIsIHNrYiwgdGhvZmYpKVxcbjEwODk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTA5MDpcXHRcXG4xMDkxOlxcdFxcdGlmICghbmZfZmxvd19kc3RfY2hlY2soXFx1MDAyNnR1cGxlaGFzaC1cXHUwMDNldHVwbGUpKSB7XFxuMTA5MjpcXHRcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuMTA5MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMDk0OlxcdFxcdH1cXG4xMDk1OlxcdFxcbjEwOTY6XFx0XFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB0aG9mZiArIGN0eC1cXHUwMDNlaGRyc2l6ZSkpXFxuMTA5NzpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMTA5ODpcXHRcXG4xMDk5OlxcdFxcdGZsb3dfb2ZmbG9hZF9yZWZyZXNoKGZsb3dfdGFibGUsIGZsb3csIGZhbHNlKTtcXG4xMTAwOlxcdFxcbjExMDE6XFx0XFx0bmZfZmxvd19lbmNhcF9wb3AoY3R4LCBza2IsIHR1cGxlaGFzaCk7XFxuMTEwMjpcXHRcXG4xMTAzOlxcdFxcdGlwNmggPSBpcHY2X2hkcihza2IpO1xcbjExMDQ6XFx0XFx0bmZfZmxvd19uYXRfaXB2NihmbG93LCBza2IsIGRpciwgaXA2aCk7XFxuMTEwNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTQ6MDguNDgxNjkyMTczWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjU5NjkyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeS4gSGVyZSdzIGEgc3VtbWFyeSBmb3JtYXR0ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaXZpbmcgSW4gRGVlcGVyKipcblxuQWxyaWdodCwgSSd2ZSBnb3QgdGhlIGluaXRpYWwgaW5mb3JtYXRpb24sIGJ1dCBpdCdzIG5vdCBlbm91Z2ggdG8gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGlzIGZ1cnRoZXIuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmUtcmVhZCB0aGUgdGV4dC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgdGhhdCBjb3VsZCBiZSBjcnVjaWFsIHRvIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEknbSBsb29raW5nIGZvciBudWFuY2UsIGZvciBpbXBsaWNpdCBtZWFuaW5ncywgYW5kIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGNoYWxsZW5nZSBteSBjdXJyZW50IHdvcmtpbmcgaHlwb3RoZXNpcy4gTGV0J3Mgc2VlIHdoYXQgZWxzZSB0aGlzIGluZm9ybWF0aW9uIGhhcyB0byBvZmZlci4gSSBuZWVkIHRvIGdldCB0aGlzIHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQyNiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNDoxMi4xMDc2NjMxNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTA2LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTA2OlxcdFxcdGlwNmgtXFx1MDAzZWhvcF9saW1pdC0tO1xcbjExMDc6XFx0XFx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xcbjExMDg6XFx0XFxuMTEwOTpcXHRcXHRpZiAoZmxvd190YWJsZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcXG4xMTEwOlxcdFxcdFxcdG5mX2N0X2FjY3RfdXBkYXRlKGZsb3ctXFx1MDAzZWN0LCB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRpciwgc2tiLVxcdTAwM2VsZW4pO1xcbjExMTE6XFx0XFxuMTExMjpcXHRcXHRyZXR1cm4gMTtcXG4xMTEzOlxcdH1cXG4xMTE0OlxcdFxcbjExMTU6XFx0c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxcbjExMTY6XFx0bmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuMTExNzpcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4xMTE4OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjExMTk6XFx0e1xcbjExMjA6XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB0dXBsZSA9IHt9O1xcbjExMjE6XFx0XFxuMTEyMjpcXHRcXHRpZiAobmZfZmxvd190dXBsZV9pcHY2KGN0eCwgc2tiLCBcXHUwMDI2dHVwbGUpIFxcdTAwM2MgMClcXG4xMTIzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjExMjQ6XFx0XFxuMTEyNTpcXHRcXHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcXHUwMDI2dHVwbGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNDoxMi4xMDc3NTExOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzgyNTAzMDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJldmlld2luZyB0aGUgRmxvdyBPZmZsb2FkIFBhdGNoKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCB0aGlzIGRpZmYgb25seSB0b3VjaGVzIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAuIFRoYXQncyBhIGJpdCBvZGQuIFdoeSB3YXNuJ3QgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGFsc28gbW9kaWZpZWQ/IElzIGl0IG5vdCBpbmNsdWRlZCBpbiB0aGUgZGlmZj8gTG9va2luZyBhdCB0aGUgY29kZSBjaGFuZ2UgaXRzZWxmLCBpdCBzZWVtcyBsaWtlIHRoZSBhdXRob3IgcmVwbGFjZWQgYG5mX2N0X2FjY3RfdXBkYXRlYCB3aXRoIGF0b21pYyBhZGRpdGlvbnMgdG8gYHR1cGxlLnBhY2tldHNgIGFuZCBgdHVwbGUuYnl0ZXNgIGZvciB0aGUgY291bnRlciB1cGRhdGUuXG5cbklmIElQdjYgd2Fzbid0IHRvdWNoZWQsIGl0J3Mgc3RpbGwgdXNpbmcgdGhlIG9sZCBgbmZfY3RfYWNjdF91cGRhdGVgLiBUaGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gIElmIHRoYXQncyB0aGUgY2FzZSwgdGhlbiBgbmZfZmxvd19zeW5jX2N0X3N0YXRzYCB3aWxsIGxpa2VseSB6ZXJvIG91dCBzdGF0cyBmb3IgSVB2NiBiZWNhdXNlIHRoZSBhdG9taWMgY291bnRlcnMgYXJlIG9ubHkgbW9kaWZpZWQgZm9yIElQdjQuICBCdXQgd2FpdCwgYG5mX2Zsb3dfc3luY19jdF9zdGF0c2AgYWN0dWFsbHkgKmFkZHMqIHRoZSBhdG9taWMgdmFsdWVzIHRvIGNvbm50cmFjayBzdGF0cyBhbmQgdGhlbiB6ZXJvZXMgdGhlbSBvdXQuIFRoZSBvbGQgSVB2NiBwYXRoIHVwZGF0ZXMgdGhlIGNvbm50cmFjayBzdGF0cyBkaXJlY3RseS4gQW5kLCBgbmZfZmxvd19zeW5jX2N0X3N0YXRzYCB3aWxsIGFkZCAwIHRvIHRoZSBjb25udHJhY2sgc3RhdHMsIHdoaWNoIGlzIGZpbmUuXG5cblNvLCBpcyB0aGlzIGEgYnVnPyBNYXliZSwgYnV0IGl0IG1pZ2h0IHN0aWxsIGJlIG9rYXkuIFJlZ2FyZGxlc3MsIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIGZ1enppbmcuIEl0J3MgYSBwcmltZSB0YXJnZXQuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzLiBgTkZfRkxPV19UQUJMRWAgaXMgdGhlIHByaW1hcnkgb25lLCBvZiBjb3Vyc2UuIGBORl9GTE9XX1RBQkxFX0lORVRgIG1pZ2h0IGJlIGltcGxpY2F0ZWQgaWYgSVB2NiB3YXMgdG91Y2hlZCBidXQgdGhlIHBhdGNoIG9ubHkgdG91Y2hlcyBJUHY0LCBhbmQgdGhlIGNvcmUgZ2FyYmFnZSBjb2xsZWN0b3IuIEl0IGxvb2tzIGxpa2UgYE5GX0ZMT1dfVEFCTEVgIGFsb25lIGlzIGVub3VnaC4gVGhhdCBvbmUgcmVsaWVzIG9uIGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuIEFueXRoaW5nIGVsc2U/IEkgZG9uJ3QgKnRoaW5rKiBgTkZfRkxPV19UQUJMRV9QUk9DRlNgIGlzIHN0cmljdGx5IHJlcXVpcmVkLlxuXG5Pa2F5LCB0aW1lIHRvIHBpY2sgc29tZSBnb29kIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuIGBuZl9mbG93X3RhYmxlX2djX3J1bmAgbG9va3MgcHJvbWlzaW5nLiBBbmQgb2J2aW91c2x5LCBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgIChhbHRob3VnaCwgaXNuJ3QgdGhhdCBzdGF0aWM/KSBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNDoyMS44OTAyNTY1OTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MjcwNzYzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X29mZmxvYWRfZm9yd2FyZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00NTc9bmZfZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDY3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ2ODpzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDY5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04NjY9bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg4NS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4ODY6XFx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoXFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg4Ny1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTQ6MjIuMjUyOTY4NjM0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODg3NjE1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb2RlIFN0cnVjdHVyZSoqXG5cbk9rYXksIHRoaXMgbG9va3Mgc3RhdGljLCB3aGljaCBzdWdnZXN0cyBpdCdzIGxpa2VseSBpbmxpbmVkIHdpdGhpbiBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgLiBLbm93aW5nIHRoYXQsIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AgYmVjb21lcyB0aGUga2V5IHN5bWJvbCB0byBmb2N1cyBvbiBmb3IgZGVlcGVyIGFuYWx5c2lzLiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGNvbmZpcm0gdGhhdCBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGlzIGlzIGEgY3JpdGljYWwgc3RlcCB0byBlbnN1cmUgSSBjYW4gZXhhbWluZSBpdHMgdXNhZ2UgYW5kIGhvdyB0aGlzIGlubGluaW5nLCBpZiBpdCBleGlzdHMsIGlzIGZ1bmN0aW9uaW5nIHdpdGhpbiB0aGUgYnJvYWRlciBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDc2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTQ6MjYuNTQxNzMzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODE0MjQ5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipuZl9mbG93X29mZmxvYWRfaXBfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04NjY9bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg5My19XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6ODk0OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04OTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE0OjI2LjYyOTg4MTYzM1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTg5NzI4Mzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBDb251bmRydW1zKipcblxuQWxyaWdodCwgdGhhdCBzZXR0bGVzIGl0IOKAkyBjb25maXJtZWQuIEJ1dCBub3csIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBjb21wbGV4aXR5IGJlZ2lucywgYW5kIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbnVhbmNlcyBvZiB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBOZXRmaWx0ZXIgZmxvdyB0YWJsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIga2VybmVsIGFyY2hpdGVjdHVyZSBhbmQgaG93IGl0cyBiZWhhdmlvciBjYW4gaW1wYWN0IHBlcmZvcm1hbmNlLiBUaGVyZSBhcmUgbGlrZWx5IGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcyBpbmhlcmVudCB0byB0aGF0IHByb2Nlc3MgdGhhdCB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgcXVlc3Rpb25zIGFib3V0IHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBnYXJiYWdlIGNvbGxlY3Rpb24sIHRoZSBhbGdvcml0aG1zIGVtcGxveWVkLCBhbmQgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFRoaXMgcmVxdWlyZXMgYSBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNDoyOS42MTk2MTMwOThaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjgzODQ2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipuZl9mbG93X3RhYmxlX2djX3J1blwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTQ6MjkuNjcxMzA2MDE0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0Njg5NzIxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYCBTeW1ib2wqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIEknbSBwcmV0dHkgc3VyZSBJJ3ZlIHNlZW4gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYCBiZWZvcmUuIEJ1dCwgd2FpdC4uLiBpc24ndCBpdCBpbnRlcm5hbD8gRG9lc24ndCBsb29rIGxpa2UgaXQncyBiZWVuIGV4cG9ydGVkIGFzIGEgc3ltYm9sLiBUaGF0J3MgYSBiaXQgdW5leHBlY3RlZC4gSSBuZWVkIHRvIGNvbmZpcm0uIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgc291cmNlIGNvZGUuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgYG5mX2Zsb3dfdGFibGVfY29yZS5jYC4gSSdsbCBxdWlja2x5IG5hdmlnYXRlIHRoZXJlIGFuZCB2ZXJpZnkgd2hldGhlciBgbmZfZmxvd190YWJsZV9nY19ydW5gIGlzIGFjdHVhbGx5IG1lYW50IHRvIGJlIGFjY2Vzc2VkIGZyb20gb3V0c2lkZSB0aGF0IG1vZHVsZSwgb3IgaWYgaXQncyBpbmRlZWQgYW4gaW50ZXJuYWwgZnVuY3Rpb24uIFRoZW4gSSBjYW4gcHJvY2VlZCBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA2MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE0OjM0LjE0MDI4MjY5OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc4MDMyODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd190YWJsZV9nY19ydW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz01ODQ9c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjIwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NjIxOnZvaWQgbmZfZmxvd190YWJsZV9nY19ydW4oc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYyMi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTYyNj1zdGF0aWMgdm9pZCBuZl9mbG93X29mZmxvYWRfd29ya19nYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYzMC1cXHRmbG93X3RhYmxlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZl9mbG93dGFibGUsIGdjX3dvcmsud29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2MzE6XFx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02MzItXFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsIFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VnY193b3JrLCBIWik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc4Mj12b2lkIG5mX2Zsb3dfdGFibGVfZnJlZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTEtXFx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCwgTlVMTCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3OTI6XFx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTMtXFx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoZmxvd190YWJsZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNjU9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2hfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNjgtXFx0XFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTE2OTpcXHRcXHRuZl9mbG93X3RhYmxlX2djX3J1bihmbG93dGFibGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3MC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE0OjM0LjE5ODA5MTkwNFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzMwNjg0ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgZW5jb3VudGVyaW5nIHRoZXNlIGNvbmNlcHRzOlxuXG4qKkludGVybmFsIE1vZHVsZSBWYXJpYWJsZSBBbmFseXNpcyoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGllY2Ugb2YgY29kZSwgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQgZm9jdXNlcyBvbiB0aGlzIHZhcmlhYmxlLiBJdCdzICppbnRlcm5hbCogdG8gdGhlIG1vZHVsZSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBpbXBsaWVzIGl0J3Mgbm90IGRlc2lnbmVkIGZvciBkaXJlY3QgZXh0ZXJuYWwgYWNjZXNzIHdoaWNoIGlzIGdlbmVyYWxseSBhIHNvbGlkIGRlc2lnbiBwcmluY2lwbGUuIEhvd2V2ZXIsIEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0czogSXQncyAqdXNlZCogd2l0aGluIHRoZSBtb2R1bGUncyBzY29wZSwgdGhhdCdzIGNsZWFyLiBCdXQganVzdCBiZWNhdXNlIGl0J3MgbG9jYWwgZG9lc24ndCBtZWFuIGl0J3MgY29tcGxldGVseSBpc29sYXRlZC4gTXkgbmV4dCBxdWVzdGlvbiBpczogd2hhdCdzIHRoZSBsaWZlY3ljbGU/IEhvdyBpcyBpdCBhZmZlY3RlZD9cblxuU28sIGZpcnN0IEkgbmVlZCB0byBjaGVjayBhbmQgbWFrZSBzdXJlIHRoYXQgdGhpcyB2YXJpYWJsZSBpc24ndCwgaW4gc29tZSBpbmRpcmVjdCB3YXksIGJlaW5nIHVzZWQgYnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zLiBJZiBvbmUgb2YgdGhvc2UgZXhwb3J0ZWQgZnVuY3Rpb25zIGNhbiB0cmlnZ2VyIGFuIGludGVybmFsIGFjdGlvbiwgSSBuZWVkIHRvIGtub3cuIEl0J3MgY3JpdGljYWwgdG8gZGV0ZXJtaW5lIGlmIGFueSBvZiB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhhdCBpbnRlcm5hbCB2YXJpYWJsZS4gQW55IHBvaW50IG9mIGludGVyYWN0aW9uIHJlcXVpcmVzIHNjcnV0aW55LlxuXG5NeSBtaW5kIGltbWVkaWF0ZWx5IHR1cm5zIHRvIG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucy4gT2theSwgc28gaXMgdGhlcmUgc29tZSBvdGhlciBmdW5jdGlvbiBpbiB0aGlzIG1vZHVsZS4uLmxpa2UgYG5mX2Zsb3dfdGFibGVfZnJlZWA/IEl0J3MgZXhwb3J0ZWQsIGlzIGl0IG5vdD8gSSBuZWVkIHRvIGtub3cuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgdGhlIGtleSBoZXJlLCBpdCdzIG9uZSBsaWtlbHkgcG9pbnQgb2YgY29udGFjdCwgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaGFzIGFueSBlZmZlY3Qgb24gdGhlIHZhcmlhYmxlJ3Mgc3RhdGUgb3IgYmVoYXZpb3IuIEl0J3MgYSBrZXkgZnVuY3Rpb24gdG8gZXZhbHVhdGUgZm9yIGRpcmVjdCBvciBpbmRpcmVjdCBpbmZsdWVuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTMwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTQ6MzguNTI4NzgwNzg3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzQ5MjYxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipuZl9mbG93X3RhYmxlX2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03ODI9dm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzk1LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc5NjpFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2ZyZWUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzk3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNDozOC41ODYyNzkwODJaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4NDg4NzQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBGbG93IFRhYmxlIEdhcmJhZ2UgQ29sbGVjdGlvbiBmb3IgS2VybmVsIEZ1enppbmcqKlxuXG5Pa2F5LCB5ZXMsIHRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgYXBwcm9hY2guIEkgdGhpbmsgZm9jdXNpbmcgb24gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYmVjYXVzZSBpdCdzIG5vdCBhIHN0YXRpYyBzeW1ib2wuIFRoYXQncyBrZXksIGJlY2F1c2UgaWYgaXQncyBub3Qgc3RhdGljLCBpdCBoYXMgYSBkZWZpbml0ZSwgdHJhY2VhYmxlIHN5bWJvbCBhZGRyZXNzLiBTeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gaG9vayBpbnRvIHRoYXQuIFNvLCBJJ2xsIGRlZmluaXRlbHkgaW5jbHVkZSBgbmZfZmxvd190YWJsZV9nY19ydW5gIGluIG15IGFuYWx5c2lzLCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCB0b28sIGZvciBnb29kIG1lYXN1cmUuXG5cbkxldCdzIGFsc28gY2hlY2sgaG93IGBuZl9mbG93X3RhYmxlX2l0ZXJhdGVgIGZpdHMgaW50byB0aGlzLiBJdCdzIGRlZmluaXRlbHkgY2FsbGVkIGJ5IGBuZl9mbG93X3RhYmxlX2djX3J1bmAsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBmbG93IG9mIGNvbnRyb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDU5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE0OjQyLjg3MTE2OTAwOVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5MTgyODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd190YWJsZV9pdGVyYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NDI2PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjQyNzpuZl9mbG93X3RhYmxlX2l0ZXJhdGUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQyOC1cXHRcXHQgICAgICB2b2lkICgqaXRlcikoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz02MjE9dm9pZCBuZl9mbG93X3RhYmxlX2djX3J1bihzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjIyLXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjYyMzpcXHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd190YWJsZSwgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAsIE5VTEwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjI0LX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NzYzPXZvaWQgbmZfZmxvd190YWJsZV9nY19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzY1LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc2NjpcXHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd3RhYmxlLCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAsIGRldik7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NjctXFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWdjX3dvcmspO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03ODI9dm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzkwLVxcdC8qIC4uLiBubyBtb3JlIHBlbmRpbmcgd29yayBhZnRlciB0aGlzIHN0YWdlIC4uLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzkxOlxcdG5mX2Zsb3dfdGFibGVfaXRlcmF0ZShmbG93X3RhYmxlLCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAsIE5VTEwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzkyLVxcdG5mX2Zsb3dfdGFibGVfZ2NfcnVuKGZsb3dfdGFibGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNDo0Mi45MjIwOTExMDVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA0NjY3ODIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIENvbnVuZHJ1bSoqXG5cbk9rYXksIGBuZl9mbG93X3RhYmxlX2djX3J1bmAgaXMgbG9va2luZyBnb29kLCBubyBpbW1lZGlhdGUgY29uY2VybnMgdGhlcmUuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGFuZCBtYWtlIHN1cmUgd2UndmUgZ290IGV2ZXJ5dGhpbmcgbGluZWQgdXAgcHJvcGVybHkuIExldCdzIHN0YXJ0IHdpdGggdGhvc2UgS2NvbmZpZyBvcHRpb25zOiBgTkZfRkxPV19UQUJMRWAsIGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuXG5cbkhtbSwgbm93IHRoYXQgSSdtIGxvb2tpbmcgYXQgaXQsIGBORl9GTE9XX1RBQkxFYCBoYXMgZGVwZW5kZW5jaWVzLiBJdCByZWxpZXMgb24gYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYC4gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIGVuYWJsZWQgdG9vLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9uZWQgY2hlY2tpbmcgXCJkZXBlbmRzIG9uXCIgbGluZXMgZm9yIG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MsIGFuZCB0aG9zZSBkZWZpbml0ZWx5IHNlZW0gdG8gcXVhbGlmeS5cblxuU28sIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB3ZSBjYW4gY29tcGlsZSB0aGlzIHN0YXRpY2FsbHksIEkgbmVlZCB0byBpbmNsdWRlIGBORl9GTE9XX1RBQkxFYCwgYW5kIGl0cyBwYXJlbnRzOiBgTkVURklMVEVSX0lOR1JFU1NgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9UQUJMRVNgLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgaXMgYE5GX0ZMT1dfVEFCTEVgIHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBvciBkbyB3ZSBuZWVkIHRvIGNvbnNpZGVyIGBORl9GTE9XX1RBQkxFX0lORVRgIG9yIGV2ZW4gYE5GX0ZMT1dfVEFCTEVfSVBWNGA/IExldCdzIHZlcmlmeSB0aGF0IHF1aWNrbHksIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBsYXN0IG9uZSBtaWdodCBub3QgZXZlbiBleGlzdCBhbnltb3JlLiBJJ2xsIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMyMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNDo0OC45Njg3NzIyNTlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMjAyODI2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORl9GTE9XX1RBQkxFX0lQVjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE0OjQ5LjAxOTk4MjQ1NVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjI1ODc5OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipORl9GTE9XX1RBQkxFIFJlZmluZW1lbnQqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaGFzIGNsZWFybHkgc2hpZnRlZC4gV2UncmUgbm93IGp1c3QgZGVhbGluZyB3aXRoIGBORl9GTE9XX1RBQkxFYCBpbiB0aGlzIGNvbnRleHQuIEV2ZXJ5dGhpbmcgZWxzZSBpcyBzZWNvbmRhcnksIG9yIGF0IGxlYXN0IGJlaW5nIGNvbnNpZGVyZWQgc2VwYXJhdGVseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY3J5c3RhbCBjbGVhciBvbiB0aGlzIG5ldyBzY29wZS5cblxuTXkgbmV4dCBpbW1lZGlhdGUgdGFzayB0aGVuLCBpcyB0byBkZWx2ZSBpbnRvIGBORl9GTE9XX1RBQkxFX0lORVRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIElORVQtc3BlY2lmaWMgYXNwZWN0cyBwbGF5IGludG8gdGhpcyBtb3JlIGdlbmVyYWxpemVkIGZsb3cgdGFibGUuIElzIGl0IGEgc3BlY2lhbGl6ZWQgaW1wbGVtZW50YXRpb24/IEFuIGV4dGVuc2lvbj8gRG9lcyB0aGlzIGNoYW5nZSB0aGUgaW1wbGljYXRpb25zIGRvd25zdHJlYW0/IFVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBpcyBjcml0aWNhbCBmb3IgYW55IHN1YnNlcXVlbnQgYW5hbHlzaXMgb3IgbW9kaWZpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MjYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNDo1Mi4yNDU4NjUzMjJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTg5MDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GX0ZMT1dfVEFCTEVfSU5FVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAxPWVuZGlmICMgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAzOmNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzA0LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNTE9ZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1Mi1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1MzpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRV9JTkVUKSArPSBuZl9mbG93X3RhYmxlX2luZXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTU0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNDo1Mi4yOTYwNjM3NzhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ1Mzk3MTIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBGbG93IFRhYmxlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmZfZmxvd190YWJsZV9jb3JlLmNgIGFuZCBgbmZfZmxvd190YWJsZV9pcC5jYCwgYW5kIHRob3NlIGFyZSBkZWZpbml0ZWx5IGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfTkZfRkxPV19UQUJMRWAuIE5vIHF1ZXN0aW9uIGFib3V0IHRoYXQsIHNvIGBORl9GTE9XX1RBQkxFYCBpcyB0aGUga2V5IGNvbmZpZyBoZXJlLiBXZSdyZSBnb29kIHRvIGdvLlxuXG5Ob3csIGxldCdzIGRpZyBpbnRvIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBjaGFuZ2VzLiBUaGUgY29yZSBpZGVhIHNlZW1zIHRvIGJlIHNoaWZ0aW5nIGZyb20gZGlyZWN0IGNvdW50ZXIgdXBkYXRlcyBpbiB0aGUgZmFzdCBwYXRoIChgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgKSDigJMgdXNpbmcgYXRvbWljcywgSSBhc3N1bWUg4oCTIHRvIGRlZmVycmluZyBzeW5jaHJvbml6YXRpb24gdG8gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uIChgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXBgKS4gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGNoYW5nZSBpbiBob3cgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGhhbmRsZXMgc3RhdGlzdGljcy4gSXQncyBtb3ZpbmcgdGhlIGNyaXRpY2FsIHBvaW50IG9mIGNvdW50ZXIgdXBkYXRlLCBhbmQgdGhlIHN5bmNocm9uaXphdGlvbiByZWxhdGVkIHRvIGl0LCBpbnRvIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gcHJvY2VzcywgYW5kIHRoYXQgY291bGQgZGVmaW5pdGVseSBpbnRyb2R1Y2Ugc29tZSBpbnRlcmVzdGluZyBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgZXZlbiBzb21lIHN1YnRsZSBidWdzIGluIGhvdyB0aGUgR0Mgb3BlcmF0ZXMuIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoYXQuXG5cbkknbSBrZXlpbmcgaW4gb24gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYC4gVGhvc2Ugc2VlbSBsaWtlIGltcG9ydGFudCBmb2NhbCBwb2ludHMuIFRoZSBvdGhlciBjb25maWdzIEknbGwga2VlcCBpbiBtaW5kIGFyZSBgTkVURklMVEVSX0lOR1JFU1NgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9UQUJMRVNgLlxuXG5KdXN0IHF1aWNrbHkgdmVyaWZ5aW5nLCBgTkZfRkxPV19UQUJMRWAgKmlzKiB0cmlzdGF0ZSwgd2hpY2ggaXMgZ29vZC4gV2UganVzdCBsaXN0IGl0IG91dCBpbiB0aGUgc3ltYm9scy5cblxuT2theSwgbGV0J3MgbWFrZSBzdXJlIHRoYXQgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCBpcyB0aGUgKm9ubHkqIGhvb2sgYmVpbmcgdXNlZC4gVGhlcmUncyBhbHNvIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYCwgYnV0IHRoYXQgd2Fzbid0IHRvdWNoZWQgaW4gdGhlIGRpZmYsIHNvIGl0IG11c3QgYmUgb2theS4gV2FpdCwgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBpcyBjYWxsZWQgYnkgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYC4gSXMgdGhlcmUgYW55IG90aGVyIGNhbGxlcj8gSSBuZWVkIHRvIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzA5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE0OjU5Ljc1MDAzODYzMloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0ODY4MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd19vZmZsb2FkX2ZvcndhcmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9NDU3PW5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ2Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo0Njg6c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ2OS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9ODY2PW5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04ODUtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6ODg2OlxcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04ODctXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE0OjU5LjgwMjUzMDk4OFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg1NDA4OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgeW91ciBzdW1tYXJ5OlxuXG4qKlRoZSBPZmZsb2FkIEhvb2sgYW5kIFNldHRpbmcgUmVzdWx0cyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoZSByZWNlbnQgY2hhbmdlcywgYW5kIHRoZSBrZXkgZnVuY3Rpb24gb2YgaW50ZXJlc3QgaGVyZSBpcyBkZWZpbml0aXZlbHkgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYC4gRm9yZ2V0IGFib3V0IGFueSBvdGhlciBwb3RlbnRpYWwgY2FuZGlkYXRlczsgdGhhdCdzIHRoZSBvbmUuIE15IGZvY3VzIGlzIG9uIHRoZSBjb3JyZWN0IGludGVyYWN0aW9uIHdpdGggdGhhdCBob29rLlxuXG5Ob3csIHdpdGggdGhhdCBjb25maXJtZWQsIEkgbmVlZCB0byBwcm9jZWVkIHdpdGggc2V0dGluZyB0aGUgcmVzdWx0cy4gTGV0J3MgbWFrZSB0aGF0IGNhbGwgdG8gYHNldC1yZXN1bHRzYCBpbW1lZGlhdGVseSB0byBlbnN1cmUgdGhlIG5leHQgc3RhZ2UgZ2V0cyB0aGUgcmVxdWlyZWQgZGF0YS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyB3aWxsIGNvbnRpbnVlIGZyb20uIFRpbWUgdG8gbWFrZSBpdCBoYXBwZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Mzg0LCJPdXRwdXRUb2tlbnMiOjE4MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE1OjAzLjk4Nzk0MjYxMVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NjM0Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORVRGSUxURVJfSU5HUkVTU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9mbG93X3RhYmxlX2djX3J1blwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwX2hvb2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgY29yZSBsb2dpYyB0byB1c2UgYXRvbWljIG9wZXJhdGlvbnMgZm9yIHBhY2tldCBhbmQgYnl0ZSBjb3VudGVycyBpbiB0aGUgZmFzdCBwYXRoIChuZl9mbG93X29mZmxvYWRfZm9yd2FyZCksIGFuZCBkZWZlcnMgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGVzZSBjb3VudGVycyB0byB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBzeXN0ZW0gdG8gdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBzdGVwIChuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IHN0YXRpc3RpY3MgYXJlIHRyYWNrZWQgYW5kIHN5bmNocm9uaXplZCwgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBidWdzIGluIHRoZSBHQyBwcm9jZXNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5FVEZJTFRFUl9JTkdSRVNTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2Zsb3dfdGFibGVfZ2NfcnVuXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXBfaG9va1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjb3JlIGxvZ2ljIHRvIHVzZSBhdG9taWMgb3BlcmF0aW9ucyBmb3IgcGFja2V0IGFuZCBieXRlIGNvdW50ZXJzIGluIHRoZSBmYXN0IHBhdGggKG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKSwgYW5kIGRlZmVycyB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZXNlIGNvdW50ZXJzIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHN5c3RlbSB0byB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHN0ZXAgKG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBmbG93IHRhYmxlIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgc3RhdGlzdGljcyBhcmUgdHJhY2tlZCBhbmQgc3luY2hyb25pemVkLCB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgY29uY3VycmVuY3kgaXNzdWVzIG9yIGJ1Z3MgaW4gdGhlIEdDIHByb2Nlc3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE1OjA0LjA2NzU4Mjk1NVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNDU3ODQ5NjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTU6MDQuMDY3OTk4MDg1WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1MzQ1NzQzMTIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzIHRvIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCB0byBiYXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRpc3RpY3MgdXBkYXRlcy4gVGhlc2UgZmllbGRzIGFyZSB1cGRhdGVkIHZpYSBgYXRvbWljNjRfYWRkYCBpbiB0aGUgZm9yd2FyZGluZyBwYXRoIGFuZCBwZXJpb2RpY2FsbHkgZmx1c2hlZCB0byB0aGUgY29ubnRyYWNrIGVudHJ5IHZpYSBgYXRvbWljNjRfeGNoZ2AgaW4gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiBcXG5cXG5UaGUgYHN0cnVjdCBmbG93X29mZmxvYWRgIGNvbnRhaW5pbmcgdGhlc2UgdHVwbGVzIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jYCAoaW4gYGZsb3dfb2ZmbG9hZF9hbGxvY2ApLCBlbnN1cmluZyB0aGUgbmV3IGF0b21pYyBjb3VudGVycyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZC4gVGhlIGNvdW50ZXJzIGFyZSBub3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIHRoZWlyIHZhbHVlcyBvbmx5IHJlcHJlc2VudCBwYWNrZXQgYW5kIGJ5dGUgY291bnRzLCBwcmVjbHVkaW5nIGFueSBpbmZvcm1hdGlvbiBsZWFrLiBcXG5cXG5XaGlsZSBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgaXMgc29tZXRpbWVzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIHVzZWQgYXMgYSBsb29rdXAga2V5IChlLmcuLCBpbiBgbmZfZmxvd19vZmZsb2FkX2xvb2t1cGApLCB0aGUgaGFzaCBhbmQgY29tcGFyaXNvbiBmdW5jdGlvbnMgb25seSBvcGVyYXRlIG9uIHRoZSBmaWVsZHMgdXAgdG8gdGhlIGBfX2hhc2hgIG1hcmtlciwgd2hpY2ggcHJlY2VkZXMgdGhlIG5ld2x5IGFkZGVkIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMuIFRodXMsIHRoZSB1bmluaXRpYWxpemVkIHN0YXRlIG9mIHRoZXNlIGZpZWxkcyBpbiBzdGFjay1hbGxvY2F0ZWQga2V5cyBpcyBuZXZlciByZWFkLlxcblxcbkFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBidWdzIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBzdGFuZGFyZCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjY2N2NkM2RhNjdlNjg0MmYzNzEyMWQ3NTg5N2M2ODI3ZDczNzdkOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDAwOjEzOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbmluZGV4IGYyZTI3NzFmMTg4ZjQuLjYwNjAyMDIxMzNjNzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5AQCAtMTcxLDYgKzE3MSw5IEBAIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUge1xuIFx0XHRcdHUzMlx0XHRpaWZpZHg7XG4gXHRcdH0gdGM7XG4gXHR9O1xuK1xuK1x0YXRvbWljNjRfdFx0XHRcdHBhY2tldHM7XG4rXHRhdG9taWM2NF90XHRcdFx0Ynl0ZXM7XG4gfTtcbiBcbiBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoIHtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuaW5kZXggMDMyNDFkNGJmZDVlOC4uYTFmMzdjYTk1NmI4ZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbkBAIC0xMyw2ICsxMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuaFx1MDAzZVxuIFxuIHN0YXRpYyBERUZJTkVfTVVURVgoZmxvd3RhYmxlX2xvY2spO1xuIHN0YXRpYyBMSVNUX0hFQUQoZmxvd3RhYmxlcyk7XG5AQCAtNTY1LDExICs1NjYsMjkgQEAgc3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9leHRlbmRfY3RfdGltZW91dChzdHJ1Y3QgbmZfY29ubiAqY3QpXG4gXHRuZl9jdF9wdXQoY3QpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBfX25mX2Zsb3dfc3luY19jdF9zdGF0cyhzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBpbnQgZGlyKVxuK3tcbitcdHU2NCBwa3RzLCBieXRlcztcbitcbitcdHBrdHMgPSBhdG9taWM2NF94Y2hnKFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUucGFja2V0cywgMCk7XG4rXHRieXRlcyA9IGF0b21pYzY0X3hjaGcoXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5ieXRlcywgMCk7XG4rXHRuZl9jdF9hY2N0X2FkZChmbG93LVx1MDAzZWN0LCBkaXIsIHBrdHMsIGJ5dGVzKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbmZfZmxvd19zeW5jX2N0X3N0YXRzKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG4re1xuK1x0X19uZl9mbG93X3N5bmNfY3Rfc3RhdHMoZmxvdywgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCk7XG4rXHRfX25mX2Zsb3dfc3luY19jdF9zdGF0cyhmbG93LCBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKVxuIHtcbi1cdGJvb2wgdGVhcmRvd24gPSB0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbitcdGJvb2wgdGVhcmRvd247XG4rXG4rXHRuZl9mbG93X3N5bmNfY3Rfc3RhdHMoZmxvdyk7XG4gXG4rXHR0ZWFyZG93biA9IHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuIFx0aWYgKG5mX2Zsb3dfaGFzX2V4cGlyZWQoZmxvdykgfHxcbiBcdCAgICBuZl9jdF9pc19keWluZyhmbG93LVx1MDAzZWN0KSB8fFxuIFx0ICAgICFuZl9mbG93X2RzdF9jaGVjayhcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX09SSUdJTkFMXS50dXBsZSkgfHxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG5pbmRleCBjOGMyOWE5YTE2ODQ0Li42NmJlODE1YWMyZmViIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG5AQCAtNTA5LDggKzUwOSwxMCBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRpcF9kZWNyZWFzZV90dGwoaXBoKTtcbiBcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcbiBcbi1cdGlmIChmbG93X3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcbi1cdFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cdTAwM2VjdCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpciwgc2tiLVx1MDAzZWxlbik7XG4rXHRpZiAoZmxvd190YWJsZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZfRkxPV1RBQkxFX0NPVU5URVIpIHtcbitcdFx0YXRvbWljNjRfYWRkKDEsIFx1MDAyNnR1cGxlaGFzaC1cdTAwM2V0dXBsZS5wYWNrZXRzKTtcbitcdFx0YXRvbWljNjRfYWRkKHNrYi1cdTAwM2VsZW4sIFx1MDAyNnR1cGxlaGFzaC1cdTAwM2V0dXBsZS5ieXRlcyk7XG4rXHR9XG4gXG4gXHRyZXR1cm4gMTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNTowNC4wNjc5OTkwMzVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ1MjQ1ODkzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZsb3cgT2ZmbG9hZCBUdXBsZSBVcGRhdGUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMgdG8gdGhlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYC4gVGhlIGludGVudCBzZWVtcyBjbGVhcjogd2UncmUgb2ZmbG9hZGluZyBhY2NvdW50aW5nIGluZm9ybWF0aW9uIHRvIHRoZSBmbG93IHRhYmxlLCByYXRoZXIgdGhhbiBkb2luZyB0aGUgYWNjb3VudGluZyBkaXJlY3RseSBpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBjb2RlLiBTbWFydC4gV2XigJlyZSBpbmNyZW1lbnRpbmcgdGhlc2UgYGF0b21pYzY0X3RgIGZpZWxkcyBpbiBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgLCByYXRoZXIgdGhhbiBjYWxsaW5nIGBuZl9jdF9hY2N0X3VwZGF0ZWAgZGlyZWN0bHkuIFRoaXMgc2hvdWxkIGltcHJvdmUgcGVyZm9ybWFuY2UuIFRoZW4sIHRoZXJlJ3MgYG5mX2Zsb3dfc3luY19jdF9zdGF0c2AsIHdoaWNoIHNvdW5kcyBsaWtlIGl0J3MgcmVzcG9uc2libGUgZm9yIHJlYWRpbmcgYW5kICpyZXNldHRpbmcqIHRoZXNlIGFjY3VtdWxhdGVkIHN0YXRzIGFuZCBwdXNoaW5nIHRoZW0gaW50byB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBzeXN0ZW0gdXNpbmcgYG5mX2N0X2FjY3RfYWRkYC4gQW5kIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGhpbiBgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXBgLiBJIHNlZS4uLiBpdCBsb29rcyBsaWtlIGEgcGVyaW9kaWMgc3luYy5cblxuTm93LCBhIHF1ZXN0aW9uIGlzIGJ1Z2dpbmcgbWUuIEFyZSB0aG9zZSBuZXcgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcyBpbml0aWFsaXplZCB0byB6ZXJvIHdoZW4gYSBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgaXMgYWN0dWFsbHkgY3JlYXRlZD8gSSBjYW7igJl0IGFzc3VtZSBhbnl0aGluZy4gV2UgbmVlZCB0byBiZSBzdXJlIHRoZXNlIGNvdW50ZXJzIHN0YXJ0IGZyb20gYSBrbm93biBiYXNlbGluZS4gSWYgbm90LCB0aGUgYWNjb3VudGluZyBjb3VsZCBiZSBjb21wbGV0ZWx5IG9mZi4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgd2hlcmUgdGhlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzLiBJJ2xsIHJlYWNoIGZvciBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNTowOS41MjA0NjAzODFaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTI4NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZsb3dfb2ZmbG9hZF90dXBsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmM9MzM9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy0zNC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmM6MzU6c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy0zNi1icGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jOjM3OlxcdFxcdFxcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsIF9fYmUxNiBwcm90bylcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtMzgte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYzozOTpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTQwLVxcdHN0cnVjdCBuZl9mbG93dGFibGUgKm5mX2Zsb3dfdGFibGU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtNTctXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jOjU4Ol9fYnBmX2tmdW5jIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy01OS1icGZfeGRwX2Zsb3dfbG9va3VwKHN0cnVjdCB4ZHBfbWQgKmN0eCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpmaWJfdHVwbGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtNjItXFx0c3RydWN0IHhkcF9idWZmICp4ZHAgPSAoc3RydWN0IHhkcF9idWZmICopY3R4O1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYzo2MzpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy02NC1cXHRcXHQuaWlmaWR4ID0gZmliX3R1cGxlLVxcdTAwM2VpZmluZGV4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTY5LVxcdH07XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jOjcwOlxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtNzEtXFx0X19iZTE2IHByb3RvO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0yMz1mbG93X29mZmxvYWRfZmlsbF9kaXIoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjI0OlxcdFxcdCAgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yNS17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyNjpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpmdCA9IFxcdTAwMjZmbG93LVxcdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTI3LVxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmN0dCA9IFxcdTAwMjZmbG93LVxcdTAwM2VjdC1cXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc4PUVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hbGxvYyk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjgwOnN0YXRpYyB1MzIgZmxvd19vZmZsb2FkX2RzdF9jb29raWUoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqZmxvd190dXBsZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTgxLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9ODg9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKm5mdF9yb3V0ZV9kc3RfZmV0Y2goc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6ODk6XFx0XFx0XFx0XFx0XFx0ICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtOTAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz05OD1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9maWxsX3JvdXRlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy05OS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoxMDA6XFx0XFx0XFx0XFx0ICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTEwMS17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoxMDI6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqZmxvd190dXBsZSA9IFxcdTAwMjZmbG93LVxcdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTEwMy1cXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBuZnRfcm91dGVfZHN0X2ZldGNoKHJvdXRlLCBkaXIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0xNTk9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfZHN0X3JlbGVhc2Uoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjE2MDpcXHRcXHRcXHRcXHQgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTE2MS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTI3Nj1zdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9oYXNoKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjc3LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjI3ODpcXHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSA9IGRhdGE7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yNzktXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyODA6XFx0cmV0dXJuIGpoYXNoKHR1cGxlLCBvZmZzZXRvZihzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlLCBfX2hhc2gpLCBzZWVkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTI4MS19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTI4Mz1zdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9oYXNoX29iaihjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTI4NC17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyODU6XFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoID0gZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTI4Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjI4NzpcXHRyZXR1cm4gamhhc2goXFx1MDAyNnR1cGxlaGFzaC1cXHUwMDNldHVwbGUsIG9mZnNldG9mKHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUsIF9faGFzaCksIHNlZWQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjg4LX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MjkwPXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2hhc2hfY21wKHN0cnVjdCByaGFzaHRhYmxlX2NvbXBhcmVfYXJnICphcmcsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTI5Mi17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyOTM6XFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUgPSBhcmctXFx1MDAzZWtleTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjI5NDpcXHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp4ID0gcHRyO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjk1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Mjk2OlxcdGlmIChtZW1jbXAoXFx1MDAyNngtXFx1MDAzZXR1cGxlLCB0dXBsZSwgb2Zmc2V0b2Yoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSwgX19oYXNoKSkpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yOTctXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTMwMj1zdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIG5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXMgPSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozMDM6XFx0LmhlYWRfb2Zmc2V0XFx0XFx0PSBvZmZzZXRvZihzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoLCBub2RlKSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTMwNC1cXHQuaGFzaGZuXFx0XFx0XFx0PSBmbG93X29mZmxvYWRfaGFzaCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9Mzk5PUVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF90ZWFyZG93bik7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MDAtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo0MDE6c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MDItZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDAzOlxcdFxcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQwNC17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo0MDU6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDA2LVxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTQyNz1uZl9mbG93X3RhYmxlX2l0ZXJhdGUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDMxLXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjQzMjpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MzMtXFx0c3RydWN0IHJoYXNodGFibGVfaXRlciBodGk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTY3MT12b2lkIG5mX2Zsb3dfc25hdF9wb3J0KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02NzItXFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjY3MzpcXHRcXHQgICAgICAgdTggcHJvdG9jb2wsIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02NzQte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz02OTc9dm9pZCBuZl9mbG93X2RuYXRfcG9ydChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjk4LVxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgdGhvZmYsIHU4IHByb3RvY29sLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Njk5OlxcdFxcdCAgICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzAwLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9NDU9c3RhdGljIGludCBuZl9mbG93X3J1bGVfcm91dGVfaW5ldChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy00Ni1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6NDc6XFx0XFx0XFx0XFx0ICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTQ4LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTQ5LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjUwOlxcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKmZsb3dfdHVwbGUgPSBcXHUwMDI2Zmxvdy1cXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGU7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy01MS1cXHRpbnQgZXJyO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9ODM9c3RhdGljIHZvaWQgbmZfZmxvd19zbmF0X2lwKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODQtXFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcGhkciAqaXBoLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjg1OlxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgdGhvZmYsIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODYte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTA2PXN0YXRpYyB2b2lkIG5mX2Zsb3dfZG5hdF9pcChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwNy1cXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwaGRyICppcGgsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTA4OlxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgdGhvZmYsIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTA5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTEyOT1zdGF0aWMgdm9pZCBuZl9mbG93X25hdF9pcChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEzMDpcXHRcXHRcXHQgIHVuc2lnbmVkIGludCB0aG9mZiwgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMzEtXFx0XFx0XFx0ICBzdHJ1Y3QgaXBoZHIgKmlwaClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTE2MT1zdGF0aWMgdm9pZCBuZl9mbG93X3R1cGxlX2VuY2FwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTYyLVxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTYzOlxcdFxcdFxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTE2NC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0yMTQ9c3RhdGljIGludCBuZl9mbG93X3R1cGxlX2lwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MjE1OlxcdFxcdFxcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0yMTYte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9NDI0PXN0YXRpYyB2b2lkIG5mX2Zsb3dfZW5jYXBfcG9wKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDI1LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NDI2OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00Mjcte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDU1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ1NjpzdGF0aWMgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDU3LW5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ1OS17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NDYwOlxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NjEtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00Njg9c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ2OS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ3MDpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDcxLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDcyLXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo0NzM6XFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NzQtXFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTU4NT1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwaXBfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NTg2OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy01ODctXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgX19iZTMyICppcF9kYWRkcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTYzMT1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX3Y0X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjYzMjpcXHRcXHRcXHRcXHQgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTYzMy1cXHRcXHRcXHRcXHQgIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgIF9fYmUzMiAqaXBfZGFkZHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz02NDE9c3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcDZpcDZfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NjQyOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTY0My1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz02OTI9c3RhdGljIGludCBuZl9mbG93X3R1bm5lbF92Nl9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo2OTM6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy02OTQtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz03MDM9c3RhdGljIGludCBuZl9mbG93X2VuY2FwX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo3MDQ6XFx0XFx0XFx0ICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNzA1LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpvdXRkZXYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz03MzA9c3RydWN0IG5mX2Zsb3dfeG1pdCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy03MzMtXFx0c3RydWN0IG5ldF9kZXZpY2VcXHQqb3V0ZGV2O1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjczNDpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy03MzUtXFx0Ym9vbFxcdFxcdFxcdG5lZWRzX2dzb19zZWdtZW50O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9ODAwPXN0YXRpYyBpbnQgbmZfZmxvd19xdWV1ZV94bWl0NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjgwMTpcXHRcXHRcXHQgICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTgwMi1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTgwMy17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6ODA0OlxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjgwNTpcXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTgwNi1cXHRzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTg2Nj1uZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODY4LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4Njk6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg3MC1cXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlID0gcHJpdjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTkzNz1zdGF0aWMgdm9pZCBuZl9mbG93X3NuYXRfaXB2Nihjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtOTM5LVxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCB0aG9mZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo5NDA6XFx0XFx0XFx0ICAgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05NDEte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9OTYwPXN0YXRpYyB2b2lkIG5mX2Zsb3dfZG5hdF9pcHY2KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05NjItXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHRob2ZmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjk2MzpcXHRcXHRcXHQgICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTk2NC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz05ODM9c3RhdGljIHZvaWQgbmZfZmxvd19uYXRfaXB2Nihjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTk4NC1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6OTg1OlxcdFxcdFxcdCAgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05ODYtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaXB2NmhkciAqaXA2aClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTEwMDA9c3RhdGljIGludCBuZl9mbG93X3R1cGxlX2lwdjYoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMDAxOlxcdFxcdFxcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwMDIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTA2Nj1zdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDY3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTA2ODpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTA2OS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwNzAte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEwNzE6XFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDcyLVxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTE0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjExMTU6c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExMTYtbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTE5LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMTIwOlxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTIxLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTEyOD1zdGF0aWMgaW50IG5mX2Zsb3dfcXVldWVfeG1pdDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMTI5OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTEzMC1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExMzEte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjExMzI6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqb3RoZXJfdHVwbGU7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTEzMzpcXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExMzQtXFx0c3RydWN0IG5mX2Zsb3dfeG1pdCB4bWl0ID0ge307XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMTk1PW5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExOTcte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjExOTg6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExOTktXFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTk0PXN0YXRpYyBpbnQgbmZfZmxvd19ydWxlX21hdGNoKHN0cnVjdCBuZl9mbG93X21hdGNoICptYXRjaCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk1OlxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTYtXFx0XFx0XFx0ICAgICAgc3RydWN0IGRzdF9lbnRyeSAqb3RoZXJfZHN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0yMzI9c3RhdGljIGludCBmbG93X29mZmxvYWRfZXRoX3NyYyhzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0yMzMtXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjIzNDpcXHRcXHRcXHRcXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjM1LVxcdFxcdFxcdFxcdHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjM4LVxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnkxID0gZmxvd19hY3Rpb25fZW50cnlfbmV4dChmbG93X3J1bGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MjM5OlxcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlLCAqdGhpc190dXBsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTI0MC1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MjgyPXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2V0aF9kc3Qoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjgzLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoyODQ6XFx0XFx0XFx0XFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTI4NS1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTI4OC1cXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5MSA9IGZsb3dfYWN0aW9uX2VudHJ5X25leHQoZmxvd19ydWxlKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjI4OTpcXHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZSwgKnRoaXNfdHVwbGU7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0yOTAtXFx0Y29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0zNDI9c3RhdGljIGludCBmbG93X29mZmxvYWRfaXB2NF9zbmF0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTM0My1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzozNDQ6XFx0XFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMzQ1LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0zNzM9c3RhdGljIGludCBmbG93X29mZmxvYWRfaXB2NF9kbmF0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTM3NC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzozNzU6XFx0XFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMzc2LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz00MjM9c3RhdGljIGludCBmbG93X29mZmxvYWRfaXB2Nl9zbmF0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQyNC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo0MjU6XFx0XFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNDI2LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz00NDg9c3RhdGljIGludCBmbG93X29mZmxvYWRfaXB2Nl9kbmF0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQ0OS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo0NTA6XFx0XFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNDUxLVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz00OTI9c3RhdGljIGludCBmbG93X29mZmxvYWRfcG9ydF9zbmF0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQ5My1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo0OTQ6XFx0XFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNDk1LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz01MjY9c3RhdGljIGludCBmbG93X29mZmxvYWRfcG9ydF9kbmF0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTUyNy1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo1Mjg6XFx0XFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNTI5LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz01ODU9c3RhdGljIGludCBmbG93X29mZmxvYWRfcmVkaXJlY3Qoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNTg2LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NTg3OlxcdFxcdFxcdFxcdCBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNTg4LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy01ODkte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NTkwOlxcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnRoaXNfdHVwbGUsICpvdGhlcl90dXBsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTU5MS1cXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz02MjU9c3RhdGljIGludCBmbG93X29mZmxvYWRfZW5jYXBfdHVubmVsKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2MjY6XFx0XFx0XFx0XFx0ICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNjI3LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNjI4LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjYyOTpcXHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0aGlzX3R1cGxlO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNjMwLVxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTY1ND1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9kZWNhcF90dW5uZWwoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjY1NTpcXHRcXHRcXHRcXHQgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02NTYtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02NTcte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NjU4OlxcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNjU5LVxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTY4Mz1uZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjY4NDpcXHRcXHRcXHQgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02ODUtXFx0XFx0XFx0ICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02ODYte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6Njg3OlxcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6Njg4OlxcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNjg5LVxcdGludCBpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz03NDM9aW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjc0NDpcXHRcXHRcXHQgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc0NS1cXHRcXHRcXHQgICAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz03NzI9aW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjc3MzpcXHRcXHRcXHQgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc3NC1cXHRcXHRcXHQgICAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz03OTg9bmZfZmxvd19vZmZsb2FkX3J1bGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzk5LVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjgwMDpcXHRcXHRcXHQgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODAxLXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTgwMi1cXHRjb25zdCBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUgPSBvZmZsb2FkLVxcdTAwM2VmbG93dGFibGU7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo4MDM6XFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsICpvdGhlcl90dXBsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTgwNC1cXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93ID0gb2ZmbG9hZC1cXHUwMDNlZmxvdztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9ODg4PXN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9pbml0KHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODkwLVxcdFxcdFxcdFxcdCBlbnVtIGZsb3dfY2xzX2NvbW1hbmQgY21kLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6ODkxOlxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTg5Mi1cXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05MDAtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5MDE6c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfdHVwbGUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTAyLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTAzLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5MDQ6XFx0XFx0XFx0XFx0IGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05MDUtXFx0XFx0XFx0XFx0IGludCBwcmlvcml0eSwgaW50IGNtZCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTM2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTM3OnN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX3R1cGxlX2FkZChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05MzgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5Mzk6XFx0XFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTQwLXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk0MTpcXHRyZXR1cm4gbmZfZmxvd19vZmZsb2FkX3R1cGxlKG9mZmxvYWQtXFx1MDAzZWZsb3d0YWJsZSwgb2ZmbG9hZC1cXHUwMDNlZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk0Mi1cXHRcXHRcXHRcXHQgICAgIGZsb3dfcnVsZSwgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05NDctXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5NDg6c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3R1cGxlX2RlbChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5NDk6XFx0XFx0XFx0XFx0ICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk1MC17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5NTE6XFx0bmZfZmxvd19vZmZsb2FkX3R1cGxlKG9mZmxvYWQtXFx1MDAzZWZsb3d0YWJsZSwgb2ZmbG9hZC1cXHUwMDNlZmxvdywgTlVMTCwgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTUyLVxcdFxcdFxcdCAgICAgIG9mZmxvYWQtXFx1MDAzZWZsb3d0YWJsZS1cXHUwMDNlcHJpb3JpdHksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTk1Nz1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9ydWxlX2FkZChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk2MS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk2MjpcXHRva19jb3VudCArPSBmbG93X29mZmxvYWRfdHVwbGVfYWRkKG9mZmxvYWQsIGZsb3dfcnVsZVswXSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk2My1cXHRcXHRcXHRcXHRcXHQgICBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk2NC1cXHRpZiAodGVzdF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcXHUwMDI2b2ZmbG9hZC1cXHUwMDNlZmxvdy1cXHUwMDNlZmxhZ3MpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTY1OlxcdFxcdG9rX2NvdW50ICs9IGZsb3dfb2ZmbG9hZF90dXBsZV9hZGQob2ZmbG9hZCwgZmxvd19ydWxlWzFdLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTY2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz05OTI9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfZGVsKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTk0LVxcdGNsZWFyX2JpdChJUFNfSFdfT0ZGTE9BRF9CSVQsIFxcdTAwMjZvZmZsb2FkLVxcdTAwM2VmbG93LVxcdTAwM2VjdC1cXHUwMDNlc3RhdHVzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk5NTpcXHRmbG93X29mZmxvYWRfdHVwbGVfZGVsKG9mZmxvYWQsIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTk2LVxcdGlmICh0ZXN0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFxcdTAwMjZvZmZsb2FkLVxcdTAwM2VmbG93LVxcdTAwM2VmbGFncykpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5OTc6XFx0XFx0Zmxvd19vZmZsb2FkX3R1cGxlX2RlbChvZmZsb2FkLCBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk5OC1cXHRzZXRfYml0KE5GX0ZMT1dfSFdfREVBRCwgXFx1MDAyNm9mZmxvYWQtXFx1MDAzZWZsb3ctXFx1MDAzZWZsYWdzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTAwMC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwMDE6c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3R1cGxlX3N0YXRzKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwMDI6XFx0XFx0XFx0XFx0ICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTAwMy1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBmbG93X3N0YXRzICpzdGF0cylcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwMDQte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTAwNTpcXHRuZl9mbG93X29mZmxvYWRfdHVwbGUob2ZmbG9hZC1cXHUwMDNlZmxvd3RhYmxlLCBvZmZsb2FkLVxcdTAwM2VmbG93LCBOVUxMLCBkaXIsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDA2LVxcdFxcdFxcdCAgICAgIG9mZmxvYWQtXFx1MDAzZWZsb3d0YWJsZS1cXHUwMDNlcHJpb3JpdHksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwMTE9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfc3RhdHMoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDE1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTAxNjpcXHRmbG93X29mZmxvYWRfdHVwbGVfc3RhdHMob2ZmbG9hZCwgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCwgXFx1MDAyNnN0YXRzWzBdKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwMTctXFx0aWYgKHRlc3RfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXFx1MDAyNm9mZmxvYWQtXFx1MDAzZWZsb3ctXFx1MDAzZWZsYWdzKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwMTg6XFx0XFx0Zmxvd19vZmZsb2FkX3R1cGxlX3N0YXRzKG9mZmxvYWQsIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFksXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDE5LVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2c3RhdHNbMV0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNTowOS41NzI5OTI5NTdaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNzEzODU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IG93biBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIEZsb3cgT2ZmbG9hZCBTdHJ1Y3R1cmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IG1pbmQgaW1tZWRpYXRlbHkgc2VlcyB0aGUgaGllcmFyY2h5IGhlcmUg4oCTIHRoZSBgZmxvd19vZmZsb2FkX3R1cGxlYCBpcyAqbmVzdGVkKiB3aXRoaW4gYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2hgLCB3aGljaCBpdHNlbGYgaXMgYSBjb21wb25lbnQgb2YgdGhlIG92ZXJhcmNoaW5nIGBzdHJ1Y3QgZmxvd19vZmZsb2FkYC4gVGhhdCdzIGEgY2xhc3NpYyBsYXllcmVkIGRlc2lnbiwgbGlrZWx5IGFpbWVkIGF0IGVpdGhlciBtZW1vcnkgZWZmaWNpZW5jeSwgaW1wcm92ZWQgb3JnYW5pemF0aW9uLCBvciBwZXJoYXBzIG1vZHVsYXJpdHkgd2l0aGluIHRoZSBvZmZsb2FkIHByb2Nlc3MuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGhvdyBpcyB0aGUgbWFzdGVyIHN0cnVjdCwgYGZsb3dfb2ZmbG9hZGAgYWxsb2NhdGVkPyBJcyBpdCBvbiB0aGUgc3RhY2ssIHRoZSBoZWFwLCBvciBzb21lIG90aGVyIG1lbW9yeSByZWdpb24/IEtub3dpbmcgdGhhdCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgbGlmZXRpbWUgYW5kIHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24gcmVxdWlyZW1lbnRzIGZvciB0aGVzZSBzdHJ1Y3R1cmVzLiBJdCBpbXBhY3RzIGNhY2hlIGVmZmljaWVuY3kgYW5kIGhvdyB3ZSBzaG91bGQgYXBwcm9hY2ggZGVidWdnaW5nIGlmIHdlIGVuY291bnRlciBhbnkgaXNzdWVzIHdpdGggaXQgbGF0ZXIuIFRoZSBhbGxvY2F0aW9uIG1ldGhvZCB3aWxsIGRldGVybWluZSB0aGUgbGltaXRzIG9mIGl0cyBhdmFpbGFiaWxpdHksIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgaGFyZHdhcmUgb2ZmbG9hZGluZy4gS25vd2luZyB0aGlzIGdpdmVzIHVzIGEgZmFyIGJldHRlciBwaWN0dXJlIG9mIGhvdyB3ZSBjYW4gaW50ZXJhY3Qgd2l0aCBpdCBzYWZlbHkgaW4gYW4gb2ZmbG9hZCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI3OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE1OjEzLjYwMDEzNDMyOVoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0MTkzNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmxvd19vZmZsb2FkX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MjM9Zmxvd19vZmZsb2FkX2ZpbGxfZGlyKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTUzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NTQ6c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvd19vZmZsb2FkX2FsbG9jKHN0cnVjdCBuZl9jb25uICpjdClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTU1LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzctfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzg6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2FsbG9jKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc5LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz04NjA9c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2Rlc3Ryb3koc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlW10pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTg2Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjg2ODpzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9hbGxvYyhjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04NjktXFx0XFx0XFx0XFx0IHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZVtdKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz05NzM9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfYWRkKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTc3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTc4OlxcdGVyciA9IG5mX2Zsb3dfb2ZmbG9hZF9hbGxvYyhvZmZsb2FkLCBmbG93X3J1bGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTc5LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NTA9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTExMS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxMTI6XFx0ZmxvdyA9IGZsb3dfb2ZmbG9hZF9hbGxvYyhjdCk7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTEzLVxcdGlmICghZmxvdylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTU6MTMuNjQ3NTU2OTk2WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjU0MzUwMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgZmxvd19vZmZsb2FkX2FsbG9jYCBmdW5jdGlvbiwgZm9jdXNpbmcgb24gd2hhdCBJIHNlZSBhcyB0aGUga2V5IGFzcGVjdHM6XG5cbioqRGl2aW5nIGludG8gRmxvdyBUYWJsZSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgZmxvd19vZmZsb2FkX2FsbG9jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgYXJlIHRoZSBjb3JlIHJlc3BvbnNpYmlsaXRpZXMgb2YgdGhpcyBhbGxvY2F0aW9uIGZ1bmN0aW9uPyBPYnZpb3VzbHksIGl0J3MgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgcmVzb3VyY2VzIGZvciBhIG5ldyBmbG93IGVudHJ5IHRoYXQncyBnb2luZyB0byBiZSBvZmZsb2FkZWQuIEJ1dCBJJ20gbG9va2luZyBiZXlvbmQgdGhhdCDigJMgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICpzdHJhdGVneSogb2YgdGhlIGFsbG9jYXRpb24uXG5cbkZpcnN0LCBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gaGFuZGxlIHRoZSBmdW5kYW1lbnRhbCBtZW1vcnkgYWxsb2NhdGlvbiBpdHNlbGYuIFRoaXMgbWVhbnMgbWFuYWdpbmcgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG93IGVudHJ5LCBsaWtlbHkgaW5jbHVkaW5nIHRoZSB2YXJpb3VzIGZpZWxkcyB0aGF0IGRlZmluZSB0aGUgZmxvdyAoc291cmNlL2Rlc3RpbmF0aW9uIElQcywgcG9ydHMsIHByb3RvY29sLCBldGMuKSwgYW5kIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhIG5lZWRlZCBieSB0aGUgb2ZmbG9hZCBtZWNoYW5pc20uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzaXppbmcgc3RyYXRlZ3ksIHdoYXQgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBhbmQgaWYgaXQncyBkeW5hbWljIG9yIHVzZXMgcHJlLWFsbG9jYXRlZCBwb29scy4gTWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcyBpbXBhY3QgZWZmaWNpZW5jeS5cblxuSSBhbHNvIGltYWdpbmUgdGhhdCBpdCBuZWVkcyB0byBoYW5kbGUgaW5pdGlhbGl6YXRpb24gb2YgdGhpcyBuZXcgZmxvdyBlbnRyeS4gU2V0dGluZyBkZWZhdWx0IHZhbHVlcyBmb3Iga2V5IGZpZWxkcyBpcyBjcml0aWNhbC4gV2hhdCBhcmUgdGhlIGVzc2VudGlhbCBwYXJhbWV0ZXJzIHRoYXQgYXJlIHplcm9lZCBvciBpbml0aWFsaXplZCBoZXJlPyBBcmUgYW55IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHVzZWQgdG8gZGVyaXZlIHRoZXNlIGluaXRpYWwgdmFsdWVzP1xuXG5Bbm90aGVyIHBvaW50IEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaXMgaG93IHRoaXMgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIGZsb3cgdGFibGUgbWFuYWdlbWVudC4gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgZmxvdyB0YWJsZSdzIGxvY2tpbmcgbWVjaGFuaXNtcz8gSXMgaXQgYXdhcmUgb2YgYW55IGxpbWl0YXRpb25zIG9uIHRoZSBudW1iZXIgb2YgZmxvd3MgdGhhdCBjYW4gYmUgb2ZmbG9hZGVkPyBFcnJvciBjaGVja2luZyBoZXJlIGlzIHBhcmFtb3VudCB0byBwcmV2ZW50IHJlc291cmNlIGV4aGF1c3Rpb24gYW5kIGVuc3VyZSB0aGUgdGFibGUgZG9lc24ndCBnZXQgY29ycnVwdGVkLlxuXG5GaW5hbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBmb3IgZnV0dXJlIG9wdGltaXphdGlvbnMuIERvZXMgdGhpcyBhbGxvY2F0aW9uIGZ1bmN0aW9uIHByb3ZpZGUgYW55IGhvb2tzIG9yIHBsYWNlaG9sZGVycyBmb3IgYWR2YW5jZWQgZmVhdHVyZXMsIHN1Y2ggYXMgcHJlLWFsbG9jYXRpb24gb2Ygc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIG9yIGludGVncmF0aW9uIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0aW9uIG1lY2hhbmlzbXM/IEhvdyBpdCdzIGRlc2lnbmVkIHdpbGwgZWl0aGVyIGNvbnN0cmFpbiBvciBlbmFibGUgZnV0dXJlIGVuaGFuY2VtZW50cy4gSSdtIGtlZW4gdG8gY29uc2lkZXIgd2hldGhlciB0aGlzIHJvdXRpbmUgaXMgd2VsbC1mYWN0b3JlZCBhbmQgZXh0ZW5zaWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxODksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNToxOC4xNzI5OTU1NTRaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1NDpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93X29mZmxvYWRfYWxsb2Moc3RydWN0IG5mX2Nvbm4gKmN0KVxcbiAgNTU6XFx0e1xcbiAgNTY6XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcXG4gIDU3OlxcdFxcbiAgNTg6XFx0XFx0aWYgKHVubGlrZWx5KG5mX2N0X2lzX2R5aW5nKGN0KSkpXFxuICA1OTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0ZmxvdyA9IGttZW1fY2FjaGVfemFsbG9jKGZsb3dfb2ZmbG9hZF9jYWNoZXAsIEdGUF9BVE9NSUMpO1xcbiAgNjI6XFx0XFx0aWYgKCFmbG93KVxcbiAgNjM6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA2NDpcXHRcXG4gIDY1OlxcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2Y3QtXFx1MDAzZWN0X2dlbmVyYWwudXNlKTtcXG4gIDY2OlxcdFxcdGZsb3ctXFx1MDAzZWN0ID0gY3Q7XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdGZsb3dfb2ZmbG9hZF9maWxsX2RpcihmbG93LCBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTtcXG4gIDY5OlxcdFxcdGZsb3dfb2ZmbG9hZF9maWxsX2RpcihmbG93LCBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcXG4gIDcwOlxcdFxcbiAgNzE6XFx0XFx0aWYgKGN0LVxcdTAwM2VzdGF0dXMgXFx1MDAyNiBJUFNfU1JDX05BVClcXG4gIDcyOlxcdFxcdFxcdF9fc2V0X2JpdChORl9GTE9XX1NOQVQsIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncyk7XFxuICA3MzpcXHRcXHRpZiAoY3QtXFx1MDAzZXN0YXR1cyBcXHUwMDI2IElQU19EU1RfTkFUKVxcbiAgNzQ6XFx0XFx0XFx0X19zZXRfYml0KE5GX0ZMT1dfRE5BVCwgXFx1MDAyNmZsb3ctXFx1MDAzZWZsYWdzKTtcXG4gIDc1OlxcdFxcbiAgNzY6XFx0XFx0cmV0dXJuIGZsb3c7XFxuICA3NzpcXHR9XFxuICA3ODpcXHRFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYWxsb2MpO1xcbiAgNzk6XFx0XFxuICA4MDpcXHRzdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9kc3RfY29va2llKHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKmZsb3dfdHVwbGUpXFxuICA4MTpcXHR7XFxuICA4MjpcXHRcXHRpZiAoZmxvd190dXBsZS1cXHUwMDNlbDNwcm90byA9PSBORlBST1RPX0lQVjYpXFxuICA4MzpcXHRcXHRcXHRyZXR1cm4gcnQ2X2dldF9jb29raWUoZHN0X3J0Nl9pbmZvKGZsb3dfdHVwbGUtXFx1MDAzZWRzdF9jYWNoZSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNToxOC4xNzMwODc1NTRaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM2NzQwMTY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBaZXJvLUluaXRpYWxpemF0aW9uIGFuZCBBdG9taWMgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIHRoaXMgY29kZSBzbmlwcGV0IHN0YXJ0cyBieSB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgLCBtZWFuaW5nIHRoZSBgZmxvd19vZmZsb2FkYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZCByaWdodCBvZmYgdGhlIGJhdC4gVGhhdCdzIGdvb2QgdG8ga25vdyDigJMgaXQgc2V0cyBhIGJhc2VsaW5lLiBUaGVuLCB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJIHNlZSBhIGNoYW5nZSBpbiBgbmZfZmxvd190YWJsZV9pcC5jYCB0aGF0IGVtcGxveXMgYGF0b21pYzY0X2FkZGAgZm9yIHRoZSBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzIHdpdGhpbiBgdHVwbGVoYXNoLVx1MDAzZXR1cGxlYC4gQW5kIG5vdyB0aGVyZSBpcyBhIG5ldyBmdW5jdGlvbiBgbmZfZmxvd19zeW5jX2N0X3N0YXRzYCB3aGljaCB1c2VzIGBhdG9taWM2NF94Y2hnYCBvbiB0aGVzZSB2ZXJ5IHNhbWUgZmllbGRzLiBTaW5jZSBgZmxvd19vZmZsb2FkYCBpcyB6ZXJvLWFsbG9jYXRlZCwgaXQgbWVhbnMgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGFyZSwgaW5pdGlhbGx5LCBndWFyYW50ZWVkIHRvIGJlIHplcm8uXG5cbk15IGJyYWluIGlzIGltbWVkaWF0ZWx5IGFza2luZywgaXMgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIGV2ZXIgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgdGhlbiBwYXNzZWQgYWxvbmcgc29tZXdoZXJlIHdoZXJlIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBhcmUgcmVhZD8gVGhpcyBpcyBhIHBvdGVudGlhbCBwb2ludCBvZiBjb250ZW50aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGF0b21pY3MgYXJlIHRydWx5IGJlaW5nIHVzZWQgYXMgaW50ZW5kZWQuIExvb2tpbmcgYXQgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuY2AsIEkgc2VlIGEgc3RhY2sgYWxsb2NhdGlvbiwgbGlrZSB0aGlzOlxuXG5gYGBjXG5cdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7XG5cdFx0LmlpZmlkeCA9IGZpYl90dXBsZS1cdTAwM2VpZmluZGV4LFxuLi4uXG5cdH07XG5gYGBcblxuU28geWVzLCB0aGVyZSdzIGEgc3RhY2sgdmFyaWFibGUuIE5vdywgZG9lcyB0aGlzIHN0YWNrLWFsbG9jYXRlZCBgdHVwbGVgIGdldCBwYXNzZWQgdG8gYSBmdW5jdGlvbiBvciBjb2RlIHBhdGggdGhhdCBzdWJzZXF1ZW50bHkgcmVhZHMgdGhlIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHM/IFRoYXQncyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gSSBuZWVkIHRvIGFuc3dlciBieSBleGFtaW5pbmcgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuY2AgbW9yZSBjbG9zZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE1MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE1OjI0LjU0MDQ5MjNaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDU4OlxcdF9fYnBmX2tmdW5jIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxcbiAgNTk6XFx0YnBmX3hkcF9mbG93X2xvb2t1cChzdHJ1Y3QgeGRwX21kICpjdHgsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqZmliX3R1cGxlLFxcbiAgNjA6XFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfZmxvd3RhYmxlX29wdHMgKm9wdHMsIHUzMiBvcHRzX2xlbilcXG4gIDYxOlxcdHtcXG4gIDYyOlxcdFxcdHN0cnVjdCB4ZHBfYnVmZiAqeGRwID0gKHN0cnVjdCB4ZHBfYnVmZiAqKWN0eDtcXG4gIDYzOlxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7XFxuICA2NDpcXHRcXHRcXHQuaWlmaWR4ID0gZmliX3R1cGxlLVxcdTAwM2VpZmluZGV4LFxcbiAgNjU6XFx0XFx0XFx0LmwzcHJvdG8gPSBmaWJfdHVwbGUtXFx1MDAzZWZhbWlseSxcXG4gIDY2OlxcdFxcdFxcdC5sNHByb3RvID0gZmliX3R1cGxlLVxcdTAwM2VsNF9wcm90b2NvbCxcXG4gIDY3OlxcdFxcdFxcdC5zcmNfcG9ydCA9IGZpYl90dXBsZS1cXHUwMDNlc3BvcnQsXFxuICA2ODpcXHRcXHRcXHQuZHN0X3BvcnQgPSBmaWJfdHVwbGUtXFx1MDAzZWRwb3J0LFxcbiAgNjk6XFx0XFx0fTtcXG4gIDcwOlxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcXG4gIDcxOlxcdFxcdF9fYmUxNiBwcm90bztcXG4gIDcyOlxcdFxcbiAgNzM6XFx0XFx0aWYgKG9wdHNfbGVuICE9IE5GX0JQRl9GTE9XVEFCTEVfT1BUU19TWikge1xcbiAgNzQ6XFx0XFx0XFx0b3B0cy1cXHUwMDNlZXJyb3IgPSAtRUlOVkFMO1xcbiAgNzU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA3NjpcXHRcXHR9XFxuICA3NzpcXHRcXG4gIDc4OlxcdFxcdHN3aXRjaCAoZmliX3R1cGxlLVxcdTAwM2VmYW1pbHkpIHtcXG4gIDc5OlxcdFxcdGNhc2UgQUZfSU5FVDpcXG4gIDgwOlxcdFxcdFxcdHR1cGxlLnNyY192NC5zX2FkZHIgPSBmaWJfdHVwbGUtXFx1MDAzZWlwdjRfc3JjO1xcbiAgODE6XFx0XFx0XFx0dHVwbGUuZHN0X3Y0LnNfYWRkciA9IGZpYl90dXBsZS1cXHUwMDNlaXB2NF9kc3Q7XFxuICA4MjpcXHRcXHRcXHRwcm90byA9IGh0b25zKEVUSF9QX0lQKTtcXG4gIDgzOlxcdFxcdFxcdGJyZWFrO1xcbiAgODQ6XFx0XFx0Y2FzZSBBRl9JTkVUNjpcXG4gIDg1OlxcdFxcdFxcdHR1cGxlLnNyY192NiA9ICooc3RydWN0IGluNl9hZGRyICopXFx1MDAyNmZpYl90dXBsZS1cXHUwMDNlaXB2Nl9zcmM7XFxuICA4NjpcXHRcXHRcXHR0dXBsZS5kc3RfdjYgPSAqKHN0cnVjdCBpbjZfYWRkciAqKVxcdTAwMjZmaWJfdHVwbGUtXFx1MDAzZWlwdjZfZHN0O1xcbiAgODc6XFx0XFx0XFx0cHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcXG4gIDg4OlxcdFxcdFxcdGJyZWFrO1xcbiAgODk6XFx0XFx0ZGVmYXVsdDpcXG4gIDkwOlxcdFxcdFxcdG9wdHMtXFx1MDAzZWVycm9yID0gLUVBRk5PU1VQUE9SVDtcXG4gIDkxOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgOTI6XFx0XFx0fVxcbiAgOTM6XFx0XFxuICA5NDpcXHRcXHR0dXBsZWhhc2ggPSBicGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwKHhkcC1cXHUwMDNlcnhxLVxcdTAwM2VkZXYsIFxcdTAwMjZ0dXBsZSwgcHJvdG8pO1xcbiAgOTU6XFx0XFx0aWYgKElTX0VSUih0dXBsZWhhc2gpKSB7XFxuICA5NjpcXHRcXHRcXHRvcHRzLVxcdTAwM2VlcnJvciA9IFBUUl9FUlIodHVwbGVoYXNoKTtcXG4gIDk3OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNToyNC41NDA1NjMzNloiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTkxNDU2MzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIEJQRiBYRFAgRmxvdyBUdXBsZSBMb29rdXAqKlxuXG5BbHJpZ2h0LCBzbyBgdHVwbGVgIGlzIGJlaW5nIHBhc3NlZCBpbnRvIGBicGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwYC4gSW50ZXJlc3RpbmcuIExldCdzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGB0dXBsZWAgdmFyaWFibGUgKmlzKiBhbmQgaG93IGBicGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwYCB1dGlsaXplcyBpdC4gSXMgaXQgYSBrZXkgZm9yIGEgaGFzaCBtYXA/IEEgc3RydWN0dXJlIGNvbnRhaW5pbmcgZmxvdyBpbmZvcm1hdGlvbiB0aGF0IHRoZSBYRFAgcHJvZ3JhbSBpcyBnb2luZyB0byB1c2UgZm9yIGxvb2t1cHM/IEkgbmVlZCB0byByZXZpZXcgdGhlIGNvZGUgZm9yIHRoYXQgZnVuY3Rpb24gaW1tZWRpYXRlbHkuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBsb29rdXAgYWxnb3JpdGhtIGl0IGVtcGxveXMgKGlzIGl0IGEgcGVyZmVjdCBoYXNoLCBhIHNpbXBsZSBrZXkgY29tcGFyaXNvbiwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleCBsaWtlIGEgdHJpZSBvciBhIGJsb29tIGZpbHRlcj8pLCBhbmQgd2hhdCB0aGUgZnVuY3Rpb24gKnJldHVybnMqLiBJcyBpdCBhIG1hdGNoIGluZGljYXRvciwgb3IgZG9lcyBpdCByZXR1cm4gYSBwb2ludGVyIHRvIHNvbWUgYXNzb2NpYXRlZCBkYXRhPyBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgaGVyZSBpcyBjcml0aWNhbCBmb3IgZ3Jhc3BpbmcgdGhlIFhEUCBwcm9ncmFtJ3Mgb3ZlcmFsbCBsb2dpYyBhbmQgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLiBMZXQncyBzZWUuLi4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGRlZmluaXRpb24gb2YgYHR1cGxlYCBhbmQgdGhlbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJwZl94ZHBfZmxvd190dXBsZV9sb29rdXBgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ4NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTU6MjguNTMyMDIyMzU3WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNSxcbiAgXCJMaW5lQ291bnRcIjogMjJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzNTpcXHRzdGF0aWMgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqXFxuICAzNjpcXHRicGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuICAzNzpcXHRcXHRcXHRcXHQgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLCBfX2JlMTYgcHJvdG8pXFxuICAzODpcXHR7XFxuICAzOTpcXHRcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7XFxuICA0MDpcXHRcXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpuZl9mbG93X3RhYmxlO1xcbiAgNDE6XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqbmZfZmxvdztcXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0bmZfZmxvd190YWJsZSA9IG5mX2Zsb3d0YWJsZV9ieV9kZXYoZGV2KTtcXG4gIDQ0OlxcdFxcdGlmICghbmZfZmxvd190YWJsZSlcXG4gIDQ1OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xcbiAgNDY6XFx0XFxuICA0NzpcXHRcXHR0dXBsZWhhc2ggPSBmbG93X29mZmxvYWRfbG9va3VwKG5mX2Zsb3dfdGFibGUsIHR1cGxlKTtcXG4gIDQ4OlxcdFxcdGlmICghdHVwbGVoYXNoKVxcbiAgNDk6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdG5mX2Zsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLFxcbiAgNTI6XFx0XFx0XFx0XFx0ICAgICAgIHR1cGxlaGFzaFt0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRpcl0pO1xcbiAgNTM6XFx0XFx0Zmxvd19vZmZsb2FkX3JlZnJlc2gobmZfZmxvd190YWJsZSwgbmZfZmxvdywgZmFsc2UpO1xcbiAgNTQ6XFx0XFxuICA1NTpcXHRcXHRyZXR1cm4gdHVwbGVoYXNoO1xcbiAgNTY6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNToyOC41MzIwODkyNzdaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwMzAzMTcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgRGF0YSBGbG93KipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGlzIGRhdGEgc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgYSBgdHVwbGVgLCBpcyBiZWluZyBoYW5kbGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgYGZsb3dfb2ZmbG9hZF9sb29rdXBgIGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uIGlzIGNsZWFybHkgYSBjcml0aWNhbCBjb21wb25lbnQgaW4gdGhpcyBmbG93LiBQYXNzaW5nIGEgYHR1cGxlYCB0byBpdCwgaW4gaXRzZWxmLCBpc24ndCBpbmhlcmVudGx5IGFsYXJtaW5nLCBidXQgdGhlICppbXBsaWNhdGlvbnMqIGFyZSB3aGF0IEkgbmVlZCB0byB1bnBhY2sgcXVpY2tseS4gV2hhdCBleGFjdGx5IGlzIGBmbG93X29mZmxvYWRfbG9va3VwYCBleHBlY3RpbmcgZnJvbSB0aGF0IGB0dXBsZWA/IElzIGl0IGp1c3QgYSBrZXksIGEgc2V0IG9mIHBhcmFtZXRlcnMsIG9yIGEgbW9yZSBjb21wbGV4IGNvbmZpZ3VyYXRpb24gZm9yIG9mZmxvYWRpbmc/IFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGB0dXBsZWAncyBjb250ZW50cyBkaWN0YXRlcyB3aGF0IGtpbmQgb2YgcHJvY2Vzc2luZyBhbmQgb2ZmbG9hZGluZyBvcHRpbWl6YXRpb25zIGFyZSBwb3NzaWJsZSBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGlzIGFuIGVmZmljaWVudCByZXByZXNlbnRhdGlvbiwgb3IgaWYgaXQgbWlnaHQgYmVjb21lIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBmdXJ0aGVyIGRvd24gdGhlIGxpbmUuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gdHJhY2UgdGhlIHVzZSBvZiB0aGF0IGB0dXBsZWAgd2l0aGluIHRoZSBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBvciB0aGUgbG9naWMgdGhlIHR1cGxlIGlzIGZlZWRpbmcgdGhlIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE2MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTU6MzIuODM1MTIzMDM0WiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMTpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcXG4gNDAyOlxcdGZsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4gNDAzOlxcdFxcdFxcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSlcXG4gNDA0OlxcdHtcXG4gNDA1OlxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcXG4gNDA2OlxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XFxuIDQwNzpcXHRcXHRpbnQgZGlyO1xcbiA0MDg6XFx0XFxuIDQwOTpcXHRcXHR0dXBsZWhhc2ggPSByaGFzaHRhYmxlX2xvb2t1cChcXHUwMDI2Zmxvd190YWJsZS1cXHUwMDNlcmhhc2h0YWJsZSwgdHVwbGUsXFxuIDQxMDpcXHRcXHRcXHRcXHRcXHQgICAgICBuZl9mbG93X29mZmxvYWRfcmhhc2hfcGFyYW1zKTtcXG4gNDExOlxcdFxcdGlmICghdHVwbGVoYXNoKVxcbiA0MTI6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQxMzpcXHRcXG4gNDE0OlxcdFxcdGRpciA9IHR1cGxlaGFzaC1cXHUwMDNldHVwbGUuZGlyO1xcbiA0MTU6XFx0XFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcXG4gNDE2OlxcdFxcdGlmICh0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpKVxcbiA0MTc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQxODpcXHRcXG4gNDE5OlxcdFxcdGlmICh1bmxpa2VseShuZl9jdF9pc19keWluZyhmbG93LVxcdTAwM2VjdCkpKVxcbiA0MjA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE1OjMyLjgzNTIzMjc2NFoiLCJTZXEiOjYzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk3NjA4MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggbmV0d29yayBmbG93IG9mZmxvYWRpbmc6XG5cbioqQW5hbHl6aW5nIGEgRmxvdyBPZmZsb2FkIExvb2t1cCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgZmxvdyBlbnRyeSBsb29rdXAgdXNpbmcgYHJoYXNodGFibGVfbG9va3VwYC4gVGhhdCdzIHN0YW5kYXJkIGZvciB0aGlzIHNvcnQgb2YgdGhpbmcg4oCTIGVmZmljaWVudCwgY29sbGlzaW9uLXJlc2lzdGFudCBsb29rdXBzIGFyZSBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgaW4gdGhlIGRhdGFwYXRoLiBBbmQgdGhlIGtleSB3ZSdyZSB1c2luZyBpcyBhIGB0dXBsZWAuIFRoYXQncyB3aGF0IEknZCBleHBlY3Q7IGl0J3MgdGhlIGNvcmUgc2V0IG9mIGlkZW50aWZ5aW5nIGZpZWxkcyDigJMgc291cmNlL2Rlc3RpbmF0aW9uIElQLCBwb3J0cywgcHJvdG9jb2wsIGV0Yy4gLSB0aGF0IGRlZmluZXMgYSBwYXJ0aWN1bGFyIGZsb3cuIE5vdywgbGV0J3MgZGlnIGEgYml0IGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhpcyBgcmhhc2h0YWJsZWAgaXMgY29uZmlndXJlZC4gSSBuZWVkIHRvIGV4YW1pbmUgYG5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXNgLiBUaGF0J2xsIHRlbGwgbWUgdGhlIGhhc2ggZnVuY3Rpb24sIHRoZSB0YWJsZSBzaXplLCBhbnkgcmVzaXppbmcgc3RyYXRlZ2llcyDigJMgYWxsIHRoZSBjcml0aWNhbCBwYXJhbWV0ZXJzIHRoYXQgaW5mbHVlbmNlIGxvb2t1cCBwZXJmb3JtYW5jZSBhbmQgY29sbGlzaW9uIGhhbmRsaW5nLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIGlzIHR1bmVkIGFwcHJvcHJpYXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Nzg5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNTozNi44MzI4NDMxWiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAyLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzAyOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgbmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyA9IHtcXG4gMzAzOlxcdFxcdC5oZWFkX29mZnNldFxcdFxcdD0gb2Zmc2V0b2Yoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCwgbm9kZSksXFxuIDMwNDpcXHRcXHQuaGFzaGZuXFx0XFx0XFx0PSBmbG93X29mZmxvYWRfaGFzaCxcXG4gMzA1OlxcdFxcdC5vYmpfaGFzaGZuXFx0XFx0PSBmbG93X29mZmxvYWRfaGFzaF9vYmosXFxuIDMwNjpcXHRcXHQub2JqX2NtcGZuXFx0XFx0PSBmbG93X29mZmxvYWRfaGFzaF9jbXAsXFxuIDMwNzpcXHRcXHQuYXV0b21hdGljX3Nocmlua2luZ1xcdD0gdHJ1ZSxcXG4gMzA4OlxcdH07XFxuIDMwOTpcXHRcXG4gMzEwOlxcdHVuc2lnbmVkIGxvbmcgZmxvd19vZmZsb2FkX2dldF90aW1lb3V0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuIDMxMTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE1OjM2LjgzMjkzNDIyWiIsIlNlcSI6NjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NzczODA5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOlxuXG4qKkRlY29uc3RydWN0aW5nIEZsb3cgT2ZmbG9hZCBIYXNoaW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtaW5kIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIGBmbG93X29mZmxvYWRfaGFzaGAgYW5kIGBmbG93X29mZmxvYWRfaGFzaF9jbXBgLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoZXNlIGZ1bmN0aW9ucyByZWxhdGUgdG8gdGhlIGNvcmUgb2YgYW55IGdvb2QgZmxvdyBvZmZsb2FkIG1lY2hhbmlzbS4gSSdtIGltYWdpbmluZyBob3cgdGhleSdyZSB1c2VkIGluIHRoZSBjb250ZXh0IG9mIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiwgYW5kIGhvdyB3ZSBsZXZlcmFnZSBpdC4gV2hhdCBhcmUgd2UgdHJ5aW5nIHRvIGFjaGlldmUgd2l0aCB0aGVzZT8gSSdtIHBpY3R1cmluZyBob3cgdGhlIGhhc2ggY29tcHV0YXRpb24gaGVscHMgdXMgcmFwaWRseSBpZGVudGlmeSBhbmQgY2xhc3NpZnkgbmV0d29yayBmbG93cy4gSXMgaXQgZm9yIGxvYWQgYmFsYW5jaW5nPyBQYWNrZXQgZmlsdGVyaW5nPyBTZWN1cml0eT8gVGhlIGNvbnRleHQgaXMgY3JpdGljYWwuXG5cbkknbSBwcm9iYWJseSBnb2luZyB0byBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiB0byBmdWxseSBncmFzcCBob3cgdGhlIGBmbG93X29mZmxvYWRfaGFzaF9jbXBgIGZ1bmN0aW9uIHdvcmtzIGFsb25nc2lkZSB0aGUgaGFzaCBmdW5jdGlvbiwgYXMgdGhlIGNvbXBhcmlzb24gaXMganVzdCBhcyBpbXBvcnRhbnQuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGVxdWFsaXR5IGNoZWNrLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4IHdpdGggd2lsZGNhcmRzIG9yIHJhbmdlcz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgaG93IHRoZSBoYXJkd2FyZSdzIHRhYmxlcyBhcmUgb3JnYW5pemVkIGFuZCBhY2Nlc3NlZD8gSXMgdGhpcyB0aGUgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIGEgbWF0Y2gsIG9yIGFyZSB0aGVyZSBhZGRpdGlvbmFsIGNyaXRlcmlhIGluIHBsYXk/XG5cbldoYXQgYWJvdXQgY29sbGlzaW9uIHJlc29sdXRpb24/IEhvdyBpcyB0aGF0IGhhbmRsZWQ/IEknbSB3b25kZXJpbmcgaWYgdGhpcyBzZXR1cCBpcyBzdXNjZXB0aWJsZSB0byBhbnkgaGFzaCBjb2xsaXNpb25zIGFuZCB3aGF0IGltcGFjdCB0aGVzZSB3aWxsIGhhdmUgb24gdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UuIFRoaW5raW5nIGJhY2sgdG8gbXkgZXhwZXJpZW5jZSBpbiB0aGlzIGZpZWxkLCBJJ20gYWxyZWFkeSBtZW50YWxseSBjb21wYXJpbmcgdGhpcyBhcHByb2FjaCB0byBvdGhlciBoYXNoaW5nIG1ldGhvZHMgSSd2ZSB1c2VkLiBJIG5lZWQgdG8ga25vdyBob3cgZWZmaWNpZW50IHRoaXMgaGFzaGluZyBzY2hlbWUgaXMgaW4gcmVhbC13b3JsZCBzY2VuYXJpb3MuIElzIGl0IG9wdGltaXplZCBmb3Igc3BlY2lmaWMgcGFja2V0IGhlYWRlciBjb21iaW5hdGlvbnM/IEFuZCwgbW9zdCBpbXBvcnRhbnRseSwgaXMgdGhpcyBlbnRpcmUgc29sdXRpb24gYm90aCBmdW5jdGlvbmFsbHkgY29ycmVjdCBhbmQgcGVyZm9ybWFudCBpbiBhbGwgdGhlIGRpZmZlcmVudCBlZGdlIGNhc2VzIEkgY2FuIHRoaW5rIG9mP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI3OCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTU6NDEuNjEwMzE3Njk2WiIsIlNlcSI6NjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NixcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3NjpcXHRzdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9oYXNoKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKVxcbiAyNzc6XFx0e1xcbiAyNzg6XFx0XFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUgPSBkYXRhO1xcbiAyNzk6XFx0XFxuIDI4MDpcXHRcXHRyZXR1cm4gamhhc2godHVwbGUsIG9mZnNldG9mKHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUsIF9faGFzaCksIHNlZWQpO1xcbiAyODE6XFx0fVxcbiAyODI6XFx0XFxuIDI4MzpcXHRzdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9oYXNoX29iaihjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcXG4gMjg0OlxcdHtcXG4gMjg1OlxcdFxcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCA9IGRhdGE7XFxuIDI4NjpcXHRcXG4gMjg3OlxcdFxcdHJldHVybiBqaGFzaChcXHUwMDI2dHVwbGVoYXNoLVxcdTAwM2V0dXBsZSwgb2Zmc2V0b2Yoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSwgX19oYXNoKSwgc2VlZCk7XFxuIDI4ODpcXHR9XFxuIDI4OTpcXHRcXG4gMjkwOlxcdHN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2hhc2hfY21wKHN0cnVjdCByaGFzaHRhYmxlX2NvbXBhcmVfYXJnICphcmcsXFxuIDI5MTpcXHRcXHRcXHRcXHRcXHRcXHRjb25zdCB2b2lkICpwdHIpXFxuIDI5MjpcXHR7XFxuIDI5MzpcXHRcXHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSA9IGFyZy1cXHUwMDNla2V5O1xcbiAyOTQ6XFx0XFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqeCA9IHB0cjtcXG4gMjk1OlxcdFxcbiAyOTY6XFx0XFx0aWYgKG1lbWNtcChcXHUwMDI2eC1cXHUwMDNldHVwbGUsIHR1cGxlLCBvZmZzZXRvZihzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlLCBfX2hhc2gpKSlcXG4gMjk3OlxcdFxcdFxcdHJldHVybiAxO1xcbiAyOTg6XFx0XFxuIDI5OTpcXHRcXHRyZXR1cm4gMDtcXG4gMzAwOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTU6NDEuNjEwNDQ2NDk2WiIsIlNlcSI6NjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzc1NTI1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGbG93IE9mZmxvYWQgVHVwbGUqKlxuXG5Pa2F5LCBzbyB0aGUgaGFzaCBhbmQgY29tcGFyaXNvbiBmdW5jdGlvbnMgYXJlIG9ubHkgY29uY2VybmVkIHdpdGggYSBzcGVjaWZpYyBwb3J0aW9uIG9mIHRoZSBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAuIFRoZSBrZXkgaXMgaWRlbnRpZnlpbmcgZXhhY3RseSB3aGVyZSB0aGF0IHJlbGV2YW50IHBvcnRpb24gZW5kcy4gSXQncyBlc3NlbnRpYWxseSBhIHBvaW50ZXIgdG8gd2hlcmUgaXQgZGVjaWRlcyB3aGF0IGl0IGNvbnNpZGVycy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBgX19oYXNoYCBtZW1iZXIgd2l0aGluIHRoYXQgc3RydWN0dXJlLiBUaGF0IGBvZmZzZXRvZmAgY2FsbCBpcyB0ZWxsaW5nIG1lICpob3cgbWFueSBieXRlcyogaW50byB0aGUgc3RydWN0dXJlIEkgbmVlZCB0byBsb29rIHRvLiBVbmRlcnN0YW5kaW5nIHRoYXQgb2Zmc2V0IHdpbGwgbGV0IG1lIGZ1bGx5IGdyYXNwIHRoZSBzY29wZSBvZiB0aG9zZSBoYXNoaW5nIGFuZCBjb21wYXJpc29uIG9wZXJhdGlvbnMuIEl0J3MgYWJvdXQgZWZmaWNpZW50bHkgaWRlbnRpZnlpbmcgdGhlIHJlbGV2YW50IGRhdGEgZm9yIHBhY2tldCBjbGFzc2lmaWNhdGlvbiBhbmQgZmlsdGVyaW5nLCBhbmQgSSBuZWVkIHRvIGJlIHByZWNpc2UgYWJvdXQgd2hhdCB0aGUgY29tcGFyaXNvbiBpcyBiYXNlZCBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxMTgsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE1OjQ0Ljk4ODAwMjA3OFoiLCJTZXEiOjY4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0XFx0dThcXHRcXHRcXHRcXHRsNHByb3RvO1xcbiAxNDE6XFx0XFx0c3RydWN0IHtcXG4gMTQyOlxcdFxcdFxcdHUxNlxcdFxcdFxcdGlkO1xcbiAxNDM6XFx0XFx0XFx0X19iZTE2XFx0XFx0XFx0cHJvdG87XFxuIDE0NDpcXHRcXHR9IGVuY2FwW05GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYXTtcXG4gMTQ1OlxcdFxcbiAxNDY6XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWxcXHR0dW47XFxuIDE0NzpcXHRcXG4gMTQ4OlxcdFxcdC8qIEFsbCBtZW1iZXJzIGFib3ZlIGFyZSBrZXlzIGZvciBsb29rdXBzLCBzZWUgZmxvd19vZmZsb2FkX2hhc2goKS4gKi9cXG4gMTQ5OlxcdFxcdHN0cnVjdCB7IH1cXHRcXHRcXHRfX2hhc2g7XFxuIDE1MDpcXHRcXG4gMTUxOlxcdFxcdHUxNlxcdFxcdFxcdFxcdGRpcjoyLFxcbiAxNTI6XFx0XFx0XFx0XFx0XFx0XFx0eG1pdF90eXBlOjMsXFxuIDE1MzpcXHRcXHRcXHRcXHRcXHRcXHRlbmNhcF9udW06MixcXG4gMTU0OlxcdFxcdFxcdFxcdFxcdFxcdG5lZWRzX2dzb19zZWdtZW50OjEsXFxuIDE1NTpcXHRcXHRcXHRcXHRcXHRcXHR0dW5fbnVtOjIsXFxuIDE1NjpcXHRcXHRcXHRcXHRcXHRcXHRpbl92bGFuX2luZ3Jlc3M6MjtcXG4gMTU3OlxcdFxcdHUxNlxcdFxcdFxcdFxcdG10dTtcXG4gMTU4OlxcdFxcdHUzMlxcdFxcdFxcdFxcdGRzdF9jb29raWU7XFxuIDE1OTpcXHRcXHRzdHJ1Y3QgZHN0X2VudHJ5XFx0XFx0KmRzdF9jYWNoZTtcXG4gMTYwOlxcdFxcbiAxNjE6XFx0XFx0dW5pb24ge1xcbiAxNjI6XFx0XFx0XFx0c3RydWN0IHtcXG4gMTYzOlxcdFxcdFxcdFxcdHUzMlxcdFxcdGlmaWR4O1xcbiAxNjQ6XFx0XFx0XFx0fTtcXG4gMTY1OlxcdFxcdFxcdHN0cnVjdCB7XFxuIDE2NjpcXHRcXHRcXHRcXHR1MzJcXHRcXHRpZmlkeDtcXG4gMTY3OlxcdFxcdFxcdFxcdHU4XFx0XFx0aF9zb3VyY2VbRVRIX0FMRU5dO1xcbiAxNjg6XFx0XFx0XFx0XFx0dThcXHRcXHRoX2Rlc3RbRVRIX0FMRU5dO1xcbiAxNjk6XFx0XFx0XFx0fSBvdXQ7XFxuIDE3MDpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAxNzE6XFx0XFx0XFx0XFx0dTMyXFx0XFx0aWlmaWR4O1xcbiAxNzI6XFx0XFx0XFx0fSB0YztcXG4gMTczOlxcdFxcdH07XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdGF0b21pYzY0X3RcXHRcXHRcXHRwYWNrZXRzO1xcbiAxNzY6XFx0XFx0YXRvbWljNjRfdFxcdFxcdFxcdGJ5dGVzO1xcbiAxNzc6XFx0fTtcXG4gMTc4OlxcdFxcbiAxNzk6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE1OjQ0Ljk4ODE3NjA1OFoiLCJTZXEiOjY5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc2NTMxNTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRmxvdyBPZmZsb2FkIExvb2t1cCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgc29tZXRoaW5nJ3MgaW1tZWRpYXRlbHkganVtcGluZyBvdXQuIFRoZSBgX19oYXNoYCBmdW5jdGlvbiBpcyBjYWxsZWQgKmJlZm9yZSogdGhlIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcyBhcmVuJ3QgYWN0dWFsbHkgcGFydCBvZiB0aGUgaGFzaCBrZXkgaXRzZWxmLiBBbmQgaWYgdGhleSdyZSBub3QgcGFydCBvZiB0aGUgaGFzaCBrZXksIHRoZXkgd291bGRuJ3QgYmUgZGlyZWN0bHkgY29tcGFyZWQgd2l0aGluIGEgYG1lbWNtcGAgb3BlcmF0aW9uIGVpdGhlci4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLlxuXG5Ob3csIGhvbGQgb24uLi50aGlzIG1ha2VzIG1lIHRoaW5rLiBXaGF0IGFib3V0IGBuZl9mbG93X29mZmxvYWRfbG9va3VwYD8gSSBuZWVkIHRvIGdvIGJhY2sgdG8gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jYCBhbmQgbWFrZSBzdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCB0aGF0IHNlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODc4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNTo0OC44NjQ3MTA0MzRaIiwiU2VxIjo3MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDU2LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDU2OlxcdHN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcXG4gNDU3OlxcdG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gNDU4OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA0NTk6XFx0e1xcbiA0NjA6XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB0dXBsZSA9IHt9O1xcbiA0NjE6XFx0XFxuIDQ2MjpcXHRcXHRpZiAobmZfZmxvd190dXBsZV9pcChjdHgsIHNrYiwgXFx1MDAyNnR1cGxlKSBcXHUwMDNjIDApXFxuIDQ2MzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNDY0OlxcdFxcbiA0NjU6XFx0XFx0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXFx1MDAyNnR1cGxlKTtcXG4gNDY2OlxcdH1cXG4gNDY3OlxcdFxcbiA0Njg6XFx0c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbiA0Njk6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4gNDcwOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcXG4gNDcxOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpXFxuIDQ3MjpcXHR7XFxuIDQ3MzpcXHRcXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xcbiA0NzQ6XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcXG4gNDc1OlxcdFxcdHVuc2lnbmVkIGludCB0aG9mZiwgbXR1O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNTo0OC44NjQ4MDE2NTRaIiwiU2VxIjo3MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4NTMzODUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgVGhvdWdodHMgb24gYHR1cGxlYCBJbml0aWFsaXphdGlvbiBhbmQgRnVuY3Rpb24gRXhlY3V0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIHN0YXJ0aW5nIHdpdGggYHR1cGxlYCBiZWluZyBpbml0aWFsaXplZC4gVGhlIGA9IHt9YCBpcyBhIGNsZXZlciBiaXQgb2YgemVyby1pbml0aWFsaXphdGlvbi4gSXQncyBpbml0aWFsaXppbmcgdGhlIGVudGlyZSBzdHJ1Y3R1cmUsIGluY2x1ZGluZyB0aGUgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcywgZXZlbiBpZiB0aGV5IGFyZW4ndCBleHBsaWNpdGx5IHVzZWQgYXQgdGhlIG1vbWVudC4gIFRoaXMgaXMgcHJvYmFibHkgYmVpbmcgZG9uZSBmb3IgYSBjb3VwbGUgb2YgcmVhc29ucy4gIEZpcnN0LCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBnYXJiYWdlIHZhbHVlcyBmbG9hdGluZyBhcm91bmQuIFNlY29uZCwgaXQgZ2l2ZXMgdXMgYSBrbm93biBzdGFydGluZyBwb2ludCBpZiB3ZSBkZWNpZGUgbGF0ZXIgd2UgKmRvKiBuZWVkIHRvIHRyYWNrIHRob3NlIHN0YXRzLiAgQ2xlYW5saW5lc3MgaXMgYWx3YXlzIGdvb2QuXG5cbk5vdywgd2UncmUgb2ZmIHRvIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXBgLiBJIHdvbmRlciB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGB0dXBsZWAgaW5pdGlhbGl6YXRpb24gaGF2ZSBpbiB0aGUgbG9va3VwIHByb2NlZHVyZS4gVGhpcyB6ZXJvLWluaXRpYWxpemVkIHN0YXRlIGlzIGludGVyZXN0aW5nLiAgTGV0J3Mgc2VlIHdoZXJlIHRoaXMgbGVhZHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDk0LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNTo1My40NTAxNDI3MjVaIiwiU2VxIjo3MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMTU6XFx0c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxcbjExMTY6XFx0bmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuMTExNzpcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4xMTE4OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjExMTk6XFx0e1xcbjExMjA6XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB0dXBsZSA9IHt9O1xcbjExMjE6XFx0XFxuMTEyMjpcXHRcXHRpZiAobmZfZmxvd190dXBsZV9pcHY2KGN0eCwgc2tiLCBcXHUwMDI2dHVwbGUpIFxcdTAwM2MgMClcXG4xMTIzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjExMjQ6XFx0XFxuMTEyNTpcXHRcXHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcXHUwMDI2dHVwbGUpO1xcbjExMjY6XFx0fVxcbjExMjc6XFx0XFxuMTEyODpcXHRzdGF0aWMgaW50IG5mX2Zsb3dfcXVldWVfeG1pdDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xMTI5OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXFxuMTEzMDpcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbjExMzE6XFx0e1xcbjExMzI6XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqb3RoZXJfdHVwbGU7XFxuMTEzMzpcXHRcXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xcbjExMzQ6XFx0XFx0c3RydWN0IG5mX2Zsb3dfeG1pdCB4bWl0ID0ge307XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE1OjUzLjQ1MDI1NjMxNVoiLCJTZXEiOjczLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTI1NDk3NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIGFuZCBVc2Vyc3BhY2UgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAsIHdoaWNoIEkgaW5pdGlhbGl6ZWQgYXMgYW4gZW1wdHkgc3RydWN0dXJlLCBqdXN0IGxpa2UgSSB3b3VsZCBpbiBhIG5ldyBwcm9qZWN0LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHRoaW5nIGlzIGV2ZXIsIGluIGFueSB3YXksIHNoYXBlLCBvciBmb3JtLCBjb3BpZWQgb3ZlciB0byB1c2Vyc3BhY2UuIEknbSBwcmV0dHkgc3VyZSBpdCdzIGFuIGludGVybmFsIG5ldGZpbHRlciBzdHJ1Y3R1cmUgc3BlY2lmaWNhbGx5IHVzZWQgZm9yIGZsb3cgb2ZmbG9hZCwgYnV0IEkgbmVlZCB0byBiZSBjZXJ0YWluLlxuXG5MZXQncyBzZWUuLi4gSSdtIGltbWVkaWF0ZWx5IGRyYXduIHRvIGBuZl9mbG93X3N5bmNfY3Rfc3RhdHNgLiBUaGF0IGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RhdGlzdGljcy4gQWgsIHllcywgYW5kIEkga25vdyB0aG9zZSBzdGF0cyAqYXJlKiBzZW50IHRvIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgZWl0aGVyIHRocm91Z2ggY29ubnRyYWNrIGV2ZW50cyBvciB0aHJvdWdoIGR1bXBzLiBCdXQgdGhlIGtleSBoZXJlIGlzIHRoZSBgZmxvd19vZmZsb2FkX3R1cGxlYCBpdHNlbGYuIElzIHRoYXQgc3RydWN0dXJlIGRpcmVjdGx5IGludm9sdmVkIGluIHRob3NlIG5ldGxpbmsgbWVzc2FnZXM/IE15IGd1dCBzYXlzIG5vLCBidXQgSSBuZWVkIHRvIHZlcmlmeS4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgaXMgYWN0dWFsbHkgKnVzZWQqIGluIGFueSBuZXRsaW5rIG1lc3NhZ2VzIGF0IGFsbC4gVGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxNDEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNTo1OC4zNzU3NTU4NjhaIiwiU2VxIjo3NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNDg4NjExNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmxhX3B1dC4qZmxvd19vZmZsb2FkX3R1cGxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNTo1OC42OTA2NDc4NzVaIiwiU2VxIjo3NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyNzkzODUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKkNoZWNraW5nIGBmbG93X29mZmxvYWRfdHVwbGVgIFVzYWdlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBzb21lIGludGVyYWN0aW9uIHdpdGggdXNlcnNwYWNlLCB3aGljaCB3b3VsZCBtYWtlIGRlYnVnZ2luZyBoYXJkZXIgaWYgc29tZXRoaW5nJ3Mgb2ZmLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGlzIHN0cnVjdHVyZSBpcyBkaXJlY3RseSBpbnZvbHZlZCBpbiBhbnkgYGNvcHlfdG9fdXNlcmAgb3IgYW5hbG9nb3VzIGNhbGxzLiBJIGFtIGdvaW5nIHRvIHNlZSBpZiBhbnkgY29kZSBwYXRocyBjb3B5IHRoYXQgc3RydWN0IHRvIHVzZXJzcGFjZS4gVGhhdCB3aWxsIGJlIG15IGZpcnN0IGFyZWEgdG8gaW52ZXN0aWdhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTg0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTY6MDEuOTE4NTg5NjQyWiIsIlNlcSI6NzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQ4MjU4NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29weV90b191c2VyLipmbG93X29mZmxvYWRfdHVwbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE2OjAxLjk2NzA4MTIyOFoiLCJTZXEiOjc3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDYwNTM0NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRmxvdyBPZmZsb2FkIFR1cGxlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgcGFja2V0c2AgYW5kIGBieXRlc2AgaW50byB0aGUgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgLiBNYWtlcyBzZW5zZSwgd2UgbmVlZCB0byB0cmFjayB0aGF0LiBBbmQgdGhleSdyZSB1c2luZyBgYXRvbWljNjRfdGAsIGdvb2QsIHRocmVhZC1zYWZlIHVwZGF0ZXMgYXJlIGNydWNpYWwgaGVyZS4gTm93LCB0aGUgbWFpbiB1cGRhdGUgbG9naWMgc2VlbXMgdG8gYmUgaGFwcGVuaW5nIGluIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAuIEkgaW1tZWRpYXRlbHkgd29uZGVyIGlmIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYCBpcyBhbHNvIGJlaW5nIHVwZGF0ZWQsIGdpdmVuIHRoYXQgdGhpcyBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGhhbmRsZSBib3RoIElQdjQgYW5kIElQdjYuIEhtbSwgdGhlIGRpZmYgKm9ubHkqIG1lbnRpb25zIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAuIFRoYXQncyBhIGJpdCBvZGQuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQgbWUgbG9vayBhdCB0aGUgZGlmZiBhZ2FpbiwganVzdCB0byBiZSBzdXJlLi4uIHllcCwganVzdCBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgIGluIGBuZl9mbG93X3RhYmxlX2lwLmNgLiBPa2F5LCBzbyBpdCBsb29rcyBsaWtlIElQdjYgaXMgYmVpbmcgaGFuZGxlZCBlbHNld2hlcmUsIG9yIHBlcmhhcHMgdXNpbmcgdGhlIHNhbWUgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGF0IGZ1cnRoZXIuIEZvciBub3csIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbmZfZmxvd190YWJsZV9pcC5jYCBhcm91bmQgbGluZSAxMDY2IHRvIGdldCBhIGdyaXAgb24gaG93IHRoaXMgaXMgYmVpbmcgaGFuZGxlZC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZSB0byBnZXQgYSBzZW5zZSBvZiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc4MiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNjoxMC4wMjc2MTg1MzRaIiwiU2VxIjo3OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNjYsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNjY6XFx0c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuMTA2NzpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbjEwNjg6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxcbjEwNjk6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMDcwOlxcdHtcXG4xMDcxOlxcdFxcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XFxuMTA3MjpcXHRcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xcbjEwNzM6XFx0XFx0dW5zaWduZWQgaW50IHRob2ZmLCBtdHU7XFxuMTA3NDpcXHRcXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcXG4xMDc1OlxcdFxcbjEwNzY6XFx0XFx0ZGlyID0gdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5kaXI7XFxuMTA3NzpcXHRcXHRmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pO1xcbjEwNzg6XFx0XFxuMTA3OTpcXHRcXHRtdHUgPSBmbG93LVxcdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgKyBjdHgtXFx1MDAzZW9mZnNldDtcXG4xMDgwOlxcdFxcdGlmIChmbG93LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSlcXG4xMDgxOlxcdFxcdFxcdG10dSAtPSBzaXplb2YoKmlwNmgpO1xcbjEwODI6XFx0XFxuMTA4MzpcXHRcXHRpZiAodW5saWtlbHkobmZfZmxvd19leGNlZWRzX210dShza2IsIG10dSkpKVxcbjEwODQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTA4NTpcXHRcXG4xMDg2OlxcdFxcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBjdHgtXFx1MDAzZW9mZnNldCk7XFxuMTA4NzpcXHRcXHR0aG9mZiA9IHNpemVvZigqaXA2aCkgKyBjdHgtXFx1MDAzZW9mZnNldDtcXG4xMDg4OlxcdFxcdGlmIChuZl9mbG93X3N0YXRlX2NoZWNrKGZsb3csIGlwNmgtXFx1MDAzZW5leHRoZHIsIHNrYiwgdGhvZmYpKVxcbjEwODk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTA5MDpcXHRcXG4xMDkxOlxcdFxcdGlmICghbmZfZmxvd19kc3RfY2hlY2soXFx1MDAyNnR1cGxlaGFzaC1cXHUwMDNldHVwbGUpKSB7XFxuMTA5MjpcXHRcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuMTA5MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMDk0OlxcdFxcdH1cXG4xMDk1OlxcdFxcbjEwOTY6XFx0XFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB0aG9mZiArIGN0eC1cXHUwMDNlaGRyc2l6ZSkpXFxuMTA5NzpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMTA5ODpcXHRcXG4xMDk5OlxcdFxcdGZsb3dfb2ZmbG9hZF9yZWZyZXNoKGZsb3dfdGFibGUsIGZsb3csIGZhbHNlKTtcXG4xMTAwOlxcdFxcbjExMDE6XFx0XFx0bmZfZmxvd19lbmNhcF9wb3AoY3R4LCBza2IsIHR1cGxlaGFzaCk7XFxuMTEwMjpcXHRcXG4xMTAzOlxcdFxcdGlwNmggPSBpcHY2X2hkcihza2IpO1xcbjExMDQ6XFx0XFx0bmZfZmxvd19uYXRfaXB2NihmbG93LCBza2IsIGRpciwgaXA2aCk7XFxuMTEwNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTY6MTAuMDI3Nzk1NDQzWiIsIlNlcSI6NzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzI2Njk1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBOZXR3b3JrIEZsb3cgT2ZmbG9hZCBEaXNjcmVwYW5jeSoqXG5cbkhtbSwgc29tZXRoaW5nJ3Mgbm90IHF1aXRlIHJpZ2h0LiBUaGUgZGlmZiBJJ20gcmV2aWV3aW5nIGlzbid0IHJlZmxlY3RpbmcgYW55IG1vZGlmaWNhdGlvbnMgdG8gYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgLiBUaGF0J3MgdW5leHBlY3RlZCwgZ2l2ZW4gdGhlIGNvbnRleHQuIEJlZm9yZSBJIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUuIFRoZSBjaGFuZ2UgKnNob3VsZCogYmUgaW4gdGhpcyBhcmVhLCBzbyBsZXQncyBtZXRpY3Vsb3VzbHkgcmUtZXhhbWluZSB0aGUgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGNvZGUgaXRzZWxmLiBUaGVyZSBjb3VsZCBiZSBzb21ldGhpbmcgc3VidGxlIEknbSBtaXNzaW5nLCBhIGhpZGRlbiBkZXBlbmRlbmN5LCBvciBtYXliZSBJJ20gbG9va2luZyBhdCB0aGUgd3JvbmcgdmVyc2lvbi4gTGV0IG1lIGRpZyBhIGJpdCBkZWVwZXIgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzOTQxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNjoxMy41NjA0Njc3MzVaIiwiU2VxIjo4MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwNixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEwNjpcXHRcXHRpcDZoLVxcdTAwM2Vob3BfbGltaXQtLTtcXG4xMTA3OlxcdFxcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcXG4xMTA4OlxcdFxcbjExMDk6XFx0XFx0aWYgKGZsb3dfdGFibGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZfRkxPV1RBQkxFX0NPVU5URVIpXFxuMTExMDpcXHRcXHRcXHRuZl9jdF9hY2N0X3VwZGF0ZShmbG93LVxcdTAwM2VjdCwgdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5kaXIsIHNrYi1cXHUwMDNlbGVuKTtcXG4xMTExOlxcdFxcbjExMTI6XFx0XFx0cmV0dXJuIDE7XFxuMTExMzpcXHR9XFxuMTExNDpcXHRcXG4xMTE1OlxcdHN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTY6MTMuNTYwNTU3ODg1WiIsIlNlcSI6ODEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1MzE3MjgwODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGbG93IE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciBwcm92aWRlZCBhIGRpZmYsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGp1bXAgb24gdGhlIHBvc3NpYmlsaXR5IG9mIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGJlY2F1c2UgdGhhdCdzIHVzdWFsbHkgdGhlIG1vc3QgaW1tZWRpYXRlIGNvbmNlcm4gd2l0aCBjaGFuZ2VzIGxpa2UgdGhpcy4gVGhlIGRpZmYgc2hvd3MgdGhlIGBuZl9mbG93X3RhYmxlX2lwLmNgIGZpbGUgYW5kIGBuZl9mbG93X3RhYmxlX2NvcmUuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBjb2RlIGlzIGNoYW5naW5nIGhvdyBjb3VudGVycyBhcmUgaGFuZGxlZCBpbiB0aGUgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBmdW5jdGlvbi4gT3JpZ2luYWxseSwgaXQgbG9va3MgbGlrZSBpdCBjYWxsZWQgYG5mX2N0X2FjY3RfdXBkYXRlYCwgYW5kIG5vdyBpdCdzIHVzaW5nIGF0b21pYyBvcGVyYXRpb25zIHRvIGluY3JlbWVudCBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzLiBUaGUgb2xkIGltcGxlbWVudGF0aW9uIGlzbid0IGdvbmUgZnJvbSBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAsIHNvIHRoYXQgbWlnaHQgYmUgYSBidWcuXG5cbkhvd2V2ZXIsIHRoZSBtYWluIHF1ZXN0aW9uIGlzLCBcIklzIHRoZXJlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQ/XCIgR2l2ZW4gdGhlIGNvbnRleHQsIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCB0byBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAuIEJlY2F1c2UgYGttZW1fY2FjaGVfemFsbG9jYCBpcyB1c2VkIHRvIGFsbG9jYXRlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkYCwgdGhvc2UgZmllbGRzIGFyZSBpbXBsaWNpdGx5IGluaXRpYWxpemVkIHRvIHplcm8sIHdoaWNoIG1lYW5zIHRoZXJlIHNob3VsZCBiZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGluIHRoZSBjb3JlIG9mIHdoYXQncyBzaG93bi4gQWxzbywgaW4gYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCB0aGVzZSBmaWVsZHMgYXJlIGluY3JlbWVudGVkIHVzaW5nIGBhdG9taWM2NF9hZGRgLCBhbmQgaW4gYG5mX2Zsb3dfc3luY19jdF9zdGF0c2AgYGF0b21pYzY0X3hjaGdgIGlzIHVzZWQsIHRoZW4gdGhlIHN0YXRzIGFyZSBhZGRlZCB0byB0aGUgY29ubmVjdGlvbiB0cmFja2VyLiBTbyBmYXIsIHNvIGdvb2QuXG5cbk5vdywgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBlZGdlIGNhc2VzLiBMZXQgbWUgdGhpbmssIHdoYXQgaWYgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIHBhc3NlZCBhcm91bmQsIGJ5cGFzc2luZyBwcm9wZXIgaW5pdGlhbGl6YXRpb24/IE5vcGUsIGBuZl9mbG93X3N5bmNfY3Rfc3RhdHNgIHRha2VzIGEgYHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dgLCBhbmQgSSBrbm93IHRoYXQgaXMgaGVhcCBhbGxvY2F0ZWQuIENvdWxkIGl0IGJlIGNvcGllZCBzb21ld2hlcmUgZWxzZT8gTGV0IG1lIGNoZWNrIHRoZSBjb2RlIHRvIHNlZSBpZiB0aGUgdHVwbGUgaXMgY29waWVkLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzUxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTY6MjIuMDkyMjg3ODE3WiIsIlNlcSI6ODIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjg0MDIxNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY3B5LipmbG93X29mZmxvYWRfdHVwbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE2OjIyLjE0NTEzODkwM1oiLCJTZXEiOjgzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYwODY2ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgRGVlcCBpbnRvIERhdGEgU3RydWN0dXJlcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIG5vdy4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgbWVtb3J5IGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBzdHJ1Y3R1cmUgaXMgYXNzaWduZWQgYnkgdmFsdWUuIFVuZGVyc3RhbmRpbmcgdGhpcyBpcyBjcml0aWNhbCBmb3IgYXZvaWRpbmcgcG90ZW50aWFsIGNvcHkgaXNzdWVzLCBlbnN1cmluZyBjb3JyZWN0IGRhdGEgdHJhbnNmZXIsIGFuZCB1bHRpbWF0ZWx5LCB3cml0aW5nIGVmZmljaWVudCBhbmQgYnVnLWZyZWUgY29kZSByZWxhdGVkIHRvIHRoZSBmbG93IG9mZmxvYWQgZnVuY3Rpb25hbGl0eS4gQSBieS12YWx1ZSBhc3NpZ25tZW50IGhhcyBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIGhvdyBJJ2xsIGhhbmRsZSBpbnN0YW5jZXMgb2YgdGhpcyBzdHJ1Y3QgaW4gbWVtb3J5IGFuZCB3aGVuIHBhc3NpbmcgdGhlbSBhcyBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9ucy4gQSBxdWljayBjaGVjayBoZXJlIHNhdmVzIGEgaGVhZGFjaGUgbGF0ZXIgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzcxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTY6MjUuNjA2MDA4ODg5WiIsIlNlcSI6ODQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMzMDQyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcKi4qID0gXFxcXCouKnR1cGxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYz02ODM9Z2V0X3VuaXF1ZV90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy03MDYtXFx0XFx0XFx0aWYgKCFuZl9uYXRfdXNlZF90dXBsZV9uZXcob3JpZ190dXBsZSwgY3QpKSB7XFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jOjcwNzpcXHRcXHRcXHRcXHQqdHVwbGUgPSAqb3JpZ190dXBsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtNzA4LVxcdFxcdFxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy03MTgtXFx0LyogMikgU2VsZWN0IHRoZSBsZWFzdC11c2VkIElQL3Byb3RvIGNvbWJpbmF0aW9uIGluIHRoZSBnaXZlbiByYW5nZSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYzo3MTk6XFx0KnR1cGxlID0gKm9yaWdfdHVwbGU7XFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTcyMC1cXHRmaW5kX2Jlc3RfaXBzX3Byb3RvKHpvbmUsIHR1cGxlLCByYW5nZSwgY3QsIG1hbmlwdHlwZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE2OjI1LjY1NjM0MzE3NVoiLCJTZXEiOjg1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTQ3MjkwMDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gYGZsb3dfb2ZmbG9hZF90dXBsZWAgYW5kIFBvdGVudGlhbCBJc3N1ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgSSd2ZSBnb3QgYSBzcGVjaWZpYyBjb25jZXJuIGFib3V0IHRoZSBgZmxvd19vZmZsb2FkX3R1cGxlYC4gSSBpbW1lZGlhdGVseSBub3RlIHRoYXQgdGhlcmUgYXJlbid0IGFueSBhc3NpZ25tZW50cyAqYnkgdmFsdWUqIHRvIHRoaXMgc3RydWN0LCB3aGljaCwgaW4gbXkgZXhwZXJpZW5jZSwgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmaW5kaW5nIHBvdGVudGlhbCBwcm9ibGVtcy5cblxuV2FpdCBhIG1pbnV0ZSwgd2hhdCBhYm91dCB0aGUgYGJwZl94ZHBfZmxvd19sb29rdXBgIGZ1bmN0aW9uIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmNgPyBBaCwgaGVyZSBpdCBpczpcblxuYGBgY1xuXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge1xuXHRcdC5paWZpZHggPSBmaWJfdHVwbGUtXHUwMDNlaWZpbmRleCxcblx0XHQubDNwcm90byA9IGZpYl90dXBsZS1cdTAwM2VmYW1pbHksXG5cdFx0Lmw0cHJvdG8gPSBmaWJfdHVwbGUtXHUwMDNlbDRfcHJvdG9jb2wsXG5cdFx0LnNyY19wb3J0ID0gZmliX3R1cGxlLVx1MDAzZXNwb3J0LFxuXHRcdC5kc3RfcG9ydCA9IGZpYl90dXBsZS1cdTAwM2VkcG9ydCxcblx0fTtcbmBgYFxuXG5UaGlzICppcyogYSBzdGFjayB2YXJpYWJsZSwgYW5kIGl0J3MgKnBhcnRpYWxseSogaW5pdGlhbGl6ZWQsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZy4gQnV0LCBpdCdzIHBhcnRpYWxseSBpbml0aWFsaXplZCB3aXRoIHRoZSBgeyAuLi4gfWAgc3ludGF4LlxuXG5Ib2xkIG9uLiBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgaGFzIGEgYnVuY2ggb2YgZmllbGRzLCByaWdodD8gSWYgaXQncyBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgdXNpbmcgdGhhdCBzeW50YXgsIHRoZW4gdGhlIGNvbXBpbGVyICpzaG91bGQqIHplcm8taW5pdGlhbGl6ZSB0aGUgcmVtYWluaW5nIGZpZWxkcy4gSSB0aGluayB0aGF0IGluY2x1ZGVzIHRoaW5ncyBsaWtlIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCwgc28gdGhvc2Ugd291bGQgYmUgemVyb2VkIG91dC5cblxuU28sIHRoaXMgc3RydWN0IGB0dXBsZWAgaXMgdGhlbiBwYXNzZWQgdG8gYGJwZl94ZHBfZmxvd190dXBsZV9sb29rdXBgLCB3aGljaCBwYXNzZXMgaXQgdG8gYGZsb3dfb2ZmbG9hZF9sb29rdXBgLCB3aGljaCBmaW5hbGx5IHBhc3NlcyBpdCB0byBgcmhhc2h0YWJsZV9sb29rdXBgLiBgcmhhc2h0YWJsZV9sb29rdXBgIGhhc2hlcyB0aGUga2V5IHVwIHRvIGBfX2hhc2hgLlxuXG5TaW5jZSB0aGUgYHR1cGxlYCBpcyBlZmZlY3RpdmVseSB6ZXJvLWluaXRpYWxpemVkIChvciBhdCBsZWFzdCwgdGhlIGZpZWxkcyAqc2hvdWxkKiBiZSksIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgdW5pbml0aWFsaXplZCBieXRlcyBpbiB0aGUgcGFkZGluZyBvciBmaWVsZHMgdXAgdG8gYF9faGFzaGAsIHJpZ2h0PyBXYWl0LCB3aGF0IGFib3V0IHBhZGRpbmcgYnl0ZXM/XG5cblRoaXMgaXMgd2hlcmUgSSBnZXQgYSBiaXQgY29uY2VybmVkLiBJbiBDLCBpZiB5b3UgdXNlIGA9IHsgLi4uIH1gLCB0aGUgY29tcGlsZXIgKnNob3VsZCogemVyby1pbml0aWFsaXplIGFsbCBtZW1iZXJzIHRoYXQgYXJlbid0IGV4cGxpY2l0bHkgYXNzaWduZWQsIGJ1dCBJJ20gdGhpbmtpbmcgYWJvdXQgcGFkZGluZyBieXRlcyB0aGF0IG1pZ2h0IGV4aXN0IHdpdGhpbiB0aGUgc3RydWN0LiBQYWRkaW5nIGJ5dGVzIGFyZSAqTk9UKiBndWFyYW50ZWVkIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQhIFdlIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IHBhZGRpbmcgYnl0ZXMgaW4gYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIGJlZm9yZSB0aGUgYF9faGFzaGAgbWVtYmVyLCBhbmQgaWYgc28sIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgbWlnaHQgaGF2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4MDEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTY6MzQuODAzNjM3MTFaIiwiU2VxIjo4NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdFxcdHU4XFx0aW5uZXJfcHJvdG87XFxuIDEyMTpcXHR9O1xcbiAxMjI6XFx0XFxuIDEyMzpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHtcXG4gMTI0OlxcdFxcdHVuaW9uIHtcXG4gMTI1OlxcdFxcdFxcdHN0cnVjdCBpbl9hZGRyXFx0XFx0c3JjX3Y0O1xcbiAxMjY6XFx0XFx0XFx0c3RydWN0IGluNl9hZGRyXFx0XFx0c3JjX3Y2O1xcbiAxMjc6XFx0XFx0fTtcXG4gMTI4OlxcdFxcdHVuaW9uIHtcXG4gMTI5OlxcdFxcdFxcdHN0cnVjdCBpbl9hZGRyXFx0XFx0ZHN0X3Y0O1xcbiAxMzA6XFx0XFx0XFx0c3RydWN0IGluNl9hZGRyXFx0XFx0ZHN0X3Y2O1xcbiAxMzE6XFx0XFx0fTtcXG4gMTMyOlxcdFxcdHN0cnVjdCB7XFxuIDEzMzpcXHRcXHRcXHRfX2JlMTZcXHRcXHRcXHRzcmNfcG9ydDtcXG4gMTM0OlxcdFxcdFxcdF9fYmUxNlxcdFxcdFxcdGRzdF9wb3J0O1xcbiAxMzU6XFx0XFx0fTtcXG4gMTM2OlxcdFxcbiAxMzc6XFx0XFx0aW50XFx0XFx0XFx0XFx0aWlmaWR4O1xcbiAxMzg6XFx0XFxuIDEzOTpcXHRcXHR1OFxcdFxcdFxcdFxcdGwzcHJvdG87XFxuIDE0MDpcXHRcXHR1OFxcdFxcdFxcdFxcdGw0cHJvdG87XFxuIDE0MTpcXHRcXHRzdHJ1Y3Qge1xcbiAxNDI6XFx0XFx0XFx0dTE2XFx0XFx0XFx0aWQ7XFxuIDE0MzpcXHRcXHRcXHRfX2JlMTZcXHRcXHRcXHRwcm90bztcXG4gMTQ0OlxcdFxcdH0gZW5jYXBbTkZfRkxPV19UQUJMRV9FTkNBUF9NQVhdO1xcbiAxNDU6XFx0XFxuIDE0NjpcXHRcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbFxcdHR1bjtcXG4gMTQ3OlxcdFxcbiAxNDg6XFx0XFx0LyogQWxsIG1lbWJlcnMgYWJvdmUgYXJlIGtleXMgZm9yIGxvb2t1cHMsIHNlZSBmbG93X29mZmxvYWRfaGFzaCgpLiAqL1xcbiAxNDk6XFx0XFx0c3RydWN0IHsgfVxcdFxcdFxcdF9faGFzaDtcXG4gMTUwOlxcdFxcbiAxNTE6XFx0XFx0dTE2XFx0XFx0XFx0XFx0ZGlyOjIsXFxuIDE1MjpcXHRcXHRcXHRcXHRcXHRcXHR4bWl0X3R5cGU6MyxcXG4gMTUzOlxcdFxcdFxcdFxcdFxcdFxcdGVuY2FwX251bToyLFxcbiAxNTQ6XFx0XFx0XFx0XFx0XFx0XFx0bmVlZHNfZ3NvX3NlZ21lbnQ6MSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTY6MzQuODAzNzQ4MTdaIiwiU2VxIjo4NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc0NzcyOTY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZsb3cgT2ZmbG9hZCBUdXBsZSBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgYGZsb3dfb2ZmbG9hZF90dXBsZWAgc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBsYWlkIG91dCBpbiBtZW1vcnkgZm9yIGVmZmljaWVudCBsb29rdXBzLiBGaXJzdCwgdGhlIGFkZHJlc3MgdW5pb25zIOKAkyBJUHY0IGFuZCBJUHY2IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzLCBlYWNoIHRha2luZyB1cCBlaXRoZXIgNCBvciAxNiBieXRlcy4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlbiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBwb3J0cywgYHNyY19wb3J0YCBhbmQgYGRzdF9wb3J0YCwgYm90aCAyIGJ5dGVzIGVhY2gsIGFuZCB0aGUgaW50ZXJmYWNlIGluZGV4IGBpaWZpZHhgLCBhIDQtYnl0ZSBpbnRlZ2VyLlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyBiaXQ6IGBsM3Byb3RvYCBhbmQgYGw0cHJvdG9gLCBlYWNoIGEgc2luZ2xlIGJ5dGUuIFRoZW4sIHRoZSBgZW5jYXBgIGFycmF5LiBUaGVyZSBhcmUgdHdvIGVsZW1lbnRzLCBlYWNoIGEgYHUxNiBpZGAgYW5kIGEgYF9fYmUxNiBwcm90b2AuIFRoYXTigJlzIDIrMj00IGJ5dGVzIHBlciBlbGVtZW50LCBhbmQgd2UgaGF2ZSB0d28gZWxlbWVudHMsIHNvIDggYnl0ZXMgdG90YWwgZm9yIGBlbmNhcGAuIFRoZSBwb3RlbnRpYWwgZm9yIHBhZGRpbmcgaXMgd2hhdCBJJ20gbG9va2luZyBhdC4gTGV0IG1lIHRoaW5rLiBgbDNwcm90b2AgaXMgMSBieXRlLCBgbDRwcm90b2AgaXMgMSBieXRlLCBzbyAyIGJ5dGVzIHRvZ2V0aGVyLiBUaGVuIHRoZSBgZW5jYXBgIGFycmF5LCB3aGljaCBpcyBhbiBhbGlnbm1lbnQgb2YgMiBieXRlcywgc28gbm8gcGFkZGluZyBuZWVkZWQhXG5cbkZpbmFsbHksIHdlIGhhdmUgdGhlIGBmbG93X29mZmxvYWRfdHVubmVsIHR1bmAgc3RydWN0dXJlLiBUaGlzIGlzIGNyaXRpY2FsIGFzIGl0IHdpbGwgcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiB0dW5uZWxpbmcuIE5vdyB0aGUgcXVlc3Rpb24gaXMgdGhlIG1lbW9yeSBsYXlvdXQgb2YgYHR1bmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MjEwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTY6NDEuNTUxNDgxNDk4WiIsIlNlcSI6ODgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTE1OlxcdFxcdHVuaW9uIHtcXG4gMTE2OlxcdFxcdFxcdHN0cnVjdCBpbl9hZGRyXFx0ZHN0X3Y0O1xcbiAxMTc6XFx0XFx0XFx0c3RydWN0IGluNl9hZGRyXFx0ZHN0X3Y2O1xcbiAxMTg6XFx0XFx0fTtcXG4gMTE5OlxcdFxcbiAxMjA6XFx0XFx0dThcXHRpbm5lcl9wcm90bztcXG4gMTIxOlxcdH07XFxuIDEyMjpcXHRcXG4gMTIzOlxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUge1xcbiAxMjQ6XFx0XFx0dW5pb24ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNjo0MS41NTE1NzQzMzhaIiwiU2VxIjo4OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg2ODAxNTU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbGAqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbGAgYWdhaW4uIFJpZ2h0LCBsZXQncyByZWZyZXNoOiBJIGtub3cgaXTigJlzIGtleSBmb3IgaGFuZGxpbmcgdHVubmVsIG9mZmxvYWQgd2l0aGluIHRoZSBmbG93IG9mZmxvYWQgZnJhbWV3b3JrLiBJJ20gZm9jdXNpbmcgb24gaG93IGl0IG1hbmFnZXMgdGhlIHR1bm5lbC1zcGVjaWZpYyBkYXRhLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHR1bm5lbCBlbmNhcHN1bGF0aW9uL2RlY2Fwc3VsYXRpb24gZGV0YWlscyBhcmUgc3RvcmVkIGFuZCBwYXNzZWQgYXJvdW5kLiBJcyBpdCB0aGUgYWN0dWFsIHR1bm5lbCBoZWFkZXIgZGF0YSBpdHNlbGY/IFBvaW50ZXJzIHRvIGl0PyBPZmZzZXRzPyBBcmUgdGhlcmUgYW55IGNsZXZlciB0cmlja3MgdG8gb3B0aW1pemUgdGhlIGNvcHkgb3BlcmF0aW9ucyBvciB0byBhdm9pZCByZWR1bmRhbnQgY2FsY3VsYXRpb25zPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IGRpZmZlcmVudCB0dW5uZWwgdHlwZXMg4oCTIFZYTEFOLCBHUkUsIElQSVAsIGV0Yy4g4oCTIGFyZSBoYW5kbGVkLiBEb2VzIHRoZSBzdHJ1Y3QgcHJvdmlkZSBhIGdlbmVyaWMgaW50ZXJmYWNlLCBvciBkb2VzIGl0IHJlcXVpcmUgdHlwZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnM/IEFyZSB0aGVyZSBhbnkgZmxhZ3Mgb3IgYml0ZmllbGRzIHRoYXQgaW5kaWNhdGUgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgY2VydGFpbiB0dW5uZWwgb3B0aW9ucywgbGlrZSBjaGVja3N1bXMgb3Igc2VxdWVuY2UgbnVtYmVycz8gVGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgaXMgY3JpdGljYWwgaGVyZSwgYXMgdGhpcyBzdHJ1Y3R1cmUgbGlrZWx5IG5lZWRzIHRvIGJlIGVmZmljaWVudGx5IG1hcHBlZCB0byBoYXJkd2FyZSByZWdpc3RlcnMgb3IgZGVzY3JpcHRvcnMuIFdoYXQgYWJvdXQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHN0cnVjdD8gV2hlcmUgaXMgaXQgYWxsb2NhdGVkPyBXaGVuIGlzIGl0IHBvcHVsYXRlZD8gSG93IGlzIGl0IGRlYWxsb2NhdGVkPyBNZW1vcnkgYWxpZ25tZW50PyBBbnkgcG90ZW50aWFsIGZvciBhbGlnbm1lbnQgaXNzdWVzIG9uIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzPyBJIG5lZWQgdG8gZW5zdXJlIGl0IHBsYXlzIG5pY2VseSB3aXRoIHRoaW5ncyBsaWtlIERNQS4gQW5kIG9mIGNvdXJzZSwgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgZm9yIGZyYWdtZW50YXRpb24gb2YgdGhlIGRhdGEuIERvZXMgdGhpcyBzdHJ1Y3R1cmUgbmVlZCB0byBiZSBicm9rZW4gZG93biwgb3IgaXMgdGhlcmUgYSBzaW5nbGUgXCJjaHVua1wiIHRoYXQgZ2V0cyBwYXNzZWQgdG8gdGhlIGhhcmR3YXJlPyBUaGUgZGV0YWlscyBhcmUgY3J1Y2lhbCBoZXJlLiBVbHRpbWF0ZWx5LCBJIGFtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIGluZmx1ZW5jaW5nIG9mZmxvYWQgcGVyZm9ybWFuY2UgYW5kIHRoZSBzeXN0ZW0ncyBvdmVyYWxsIGZsZXhpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODExOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTY6NDYuNDE5NTkzNDU2WiIsIlNlcSI6OTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA0MTA4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MTAwPWVudW0gZmxvd19vZmZsb2FkX3htaXRfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTEwOS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjExMDpzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0xMTEtXFx0dW5pb24ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNjo0Ni40NjY2NDA1MDNaIiwiU2VxIjo5MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNDc5NzU5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWxgKipcblxuT2theSwgbGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVubmVsYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgcmlnaHQ/IEkgd2FudCB0byBzZWUgaG93IHRoZSB0dW5uZWwtcmVsYXRlZCBpbmZvcm1hdGlvbiBpcyBzdHJ1Y3R1cmVkIGZvciBvZmZsb2FkaW5nLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IGl0J3MgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggdGhlIGhhcmR3YXJlIGFuZCB0aGUgdmFyaW91cyB0dW5uZWwgcHJvdG9jb2xzIHdlIHN1cHBvcnQuIE15IG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGg6IHdoYXQgZmllbGRzIGFyZSBwcmVzZW50PyBBcmUgdGhleSBhbGlnbmVkIG9wdGltYWxseSBmb3IgaGFyZHdhcmUgYWNjZXNzPyBEb2VzIGl0IHN1cHBvcnQgdGhlIHR5cGljYWwgdHVubmVsIGhlYWRlcnMsIGFuZCBpZiBzbywgaG93IGlzIHRoYXQgcmVwcmVzZW50YXRpb24gaGFuZGxlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmU/IEFueSBwcm90b2NvbC1zcGVjaWZpYyBudWFuY2VzPyBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB3aGVyZSB3ZSBtaWdodCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBzb2Z0d2FyZSBhbmQgdGhlIGZvcndhcmRpbmcgZW5naW5lLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCB0aGUgbWVtb3J5IGxheW91dCwgaG93IHRoZSBkYXRhIGdldHMgcGFzc2VkLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgaG93IHRvIGltcHJvdmUgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5IVxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY0MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE2OjQ5LjY4MTQzOTg0NloiLCJTZXEiOjkyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExMDpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB7XFxuIDExMTpcXHRcXHR1bmlvbiB7XFxuIDExMjpcXHRcXHRcXHRzdHJ1Y3QgaW5fYWRkclxcdHNyY192NDtcXG4gMTEzOlxcdFxcdFxcdHN0cnVjdCBpbjZfYWRkclxcdHNyY192NjtcXG4gMTE0OlxcdFxcdH07XFxuIDExNTpcXHRcXHR1bmlvbiB7XFxuIDExNjpcXHRcXHRcXHRzdHJ1Y3QgaW5fYWRkclxcdGRzdF92NDtcXG4gMTE3OlxcdFxcdFxcdHN0cnVjdCBpbjZfYWRkclxcdGRzdF92NjtcXG4gMTE4OlxcdFxcdH07XFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdHU4XFx0aW5uZXJfcHJvdG87XFxuIDEyMTpcXHR9O1xcbiAxMjI6XFx0XFxuIDEyMzpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHtcXG4gMTI0OlxcdFxcdHVuaW9uIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTY6NDkuNjgxNTE1MzU2WiIsIlNlcSI6OTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0Njk4MTc0NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIGFuZCB0aGUgRmxvdyBPZmZsb2FkIFBhdGNoOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaXNzZWN0aW5nIHRoaXMgZmxvdyBvZmZsb2FkIHBhdGNoIHRvIGFzc2VzcyBpZiBpdCBpbnRyb2R1Y2VzIGFueSBuZXcgS01TQU4gaXNzdWVzLiBJbml0aWFsbHksIEkgaGFkIGNvbmNlcm5zIGFib3V0IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyB3aXRoaW4gYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgLCBwYXJ0aWN1bGFybHkgYmVjYXVzZSBvZiB0aGUgYGpoYXNoYCBmdW5jdGlvbiBhbmQgdGhlIHdheSB0aGVzZSBzdHJ1Y3RzIGFyZSBpbml0aWFsaXplZCwgc29tZXRpbWVzIHdpdGggYD0ge31gLiAgSSBzdGFydGVkIGJ5IGNhbGN1bGF0aW5nIHRoZSBzdHJ1Y3R1cmUgc2l6ZSBhbmQgY29uc2lkZXJpbmcgYWxpZ25tZW50LiBJIHdlbnQgdGhyb3VnaCB0aGUgbGF5b3V0IG9mIHRoZSBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWxgLCBpbmNsdWRpbmcgdGhlIHVuaW9ucyBhbmQgdGhlIGBpbm5lcl9wcm90b2AgZmllbGQsIGFuZCBmaWd1cmVkIG91dCB0aGUgcGFkZGluZyBpbnZvbHZlZC4gSSBjaGVja2VkIHRoZSBsYXlvdXQgdG8gc2VlIGlmIGFkZGluZyB0aGUgbmV3IGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMgY2hhbmdlZCB0aGUgbG9jYXRpb24gb2YgdGhlIHByZS1leGlzdGluZyBwYWRkaW5nLlxuXG5NeSB0aG91Z2h0IHdhcyB0aGF0LCBzaW5jZSBwYWRkaW5nIGJ5dGVzIGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSB6ZXJvZWQgd2hlbiB1c2luZyBgPSB7fWAsIGFuZCB0aG9zZSBieXRlcyBhcmUgcmVhZCBieSBgamhhc2hgLCB3ZSBjb3VsZCBoYXZlIGEgS01TQU4gcHJvYmxlbS4gQnV0LCBJIHJlY2FsbGVkIHRoYXQgdGhlIGhhc2gga2V5IGluIHRoaXMgc3RydWN0IG9ubHkgZ29lcyB1cCB0byB0aGUgYF9faGFzaGAgbWVtYmVyLCBhbmQgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHBhZGRpbmcgd291bGQgaGF2ZSBiZWVuIGFuIGlzc3VlICpiZWZvcmUqIHRoaXMgcGF0Y2gsIHNpbmNlIHRoZSBwYXRjaCBvbmx5IGFkZHMgYHBhY2tldHNgIGFuZCBgYnl0ZXNgICphZnRlciogdGhlIHNlY3Rpb24gdGhhdCdzIGhhc2hlZC4gVGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSBhbnl0aGluZyBhYm91dCB0aGUgcHJlLWV4aXN0aW5nIGxheW91dC5cblxuSSB0aGVuIGNoZWNrZWQgd2hlcmUgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIGlzIGFjdHVhbGx5IGNyZWF0ZWQgYW5kIHVzZWQuIEkgbG9va2VkIGF0IGBuZl9mbG93X29mZmxvYWRfbG9va3VwYCBhbmQgYGJwZl94ZHBfZmxvd19sb29rdXBgLCB3aGVyZSB0aGVzZSBzdHJ1Y3RzIGFyZSBpbmRlZWQgc3RhY2stYWxsb2NhdGVkLCBidXQgSSByZWFsaXplZCB0aGV5IGFyZSAqb25seSogdXNlZCBhcyBoYXNoIGtleXMuIFRoZSBjb2RlICpkb2Vzbid0KiByZWFkIGZyb20gdGhlIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMgaW4gdGhlc2Ugc3RhY2sgYWxsb2NhdGlvbnMuXG5cbkkgZm9jdXNlZCBvbiB0aGUgbmV3IGNvZGUgYWRkZWQgYnkgdGhlIHBhdGNoLiBJIHZlcmlmaWVkIHRoYXQgbmV3IGZpZWxkcyAoYHBhY2tldHNgIGFuZCBgYnl0ZXNgKSBhcmUgemVyby1pbml0aWFsaXplZCB0aHJvdWdoIGBrbWVtX2NhY2hlX3phbGxvY2AgYW5kIGFyZSB0aGVuIG9ubHkgYWNjZXNzZWQgdGhyb3VnaCBhdG9taWMgb3BlcmF0aW9ucy4gVGhlIHBhdGNoIGFkZHMgYGF0b21pYzY0X3QgcGFja2V0c2AgYW5kIGBieXRlc2AgdG8gdGhlIHN0cnVjdC4gQW5kIHRoZSBmdW5jdGlvbnMgYWRkZWQgdGhhdCB0b3VjaCB0aGVzZSBmaWVsZHMgdXNlIGBhdG9taWM2NF94Y2hnYCBhbmQgYGF0b21pYzY0X2FkZGAsIHNvIHRoZXkgcmVhZCBhbmQgbW9kaWZ5IHRob3NlIHZhcmlhYmxlcywgd2hpY2ggYXJlIGluaXRpYWxpemVkIHRvIHplcm8uIEkgYWxzbyBlbnN1cmVkIHRoYXQgYG5mX2Zsb3dfc3luY19jdF9zdGF0c2AgY2FuJ3QgYmUgY2FsbGVkIG9uIGFuIHVuaW5pdGlhbGl6ZWQgYGZsb3dgLiBUaGUgc3RydWN0IGBmbG93X29mZmxvYWRgIHdoaWNoIGNvbnRhaW5zIGB0dXBsZWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AsIG1lYW5pbmcgdGhlIGFkZGVkIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gRnVydGhlcm1vcmUsIHRoZXJlJ3Mgbm8gd2F5IHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblNvLCBhZnRlciB0aGlzIHJpZ29yb3VzIGV4YW1pbmF0aW9uLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBhbnkgbmV3IEtNU0FOIHZ1bG5lcmFiaWxpdGllcy4gQW55IHBvdGVudGlhbCBwYWRkaW5nL3VuaW5pdGlhbGl6ZWQgcmVhZCBpc3N1ZXMgaW4gdGhlIHN0cnVjdHVyZSAqcHJlLWV4aXN0ZWQqIHRoaXMgY2hhbmdlLCBhbmQgdGhlIG5ldyBmaWVsZHMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LCB3aXRoIHByb3BlciBpbml0aWFsaXphdGlvbiBhbmQgYXRvbWljIGFjY2Vzcy4gTm8gbmVlZCB0byBmbGFnIHRoaXMgZm9yIEtNU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA5NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNzoxNC4zNzk2OTI1OTFaIiwiU2VxIjo5NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NTU3MzMyNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGZsb3dfb2ZmbG9hZCBbXjtcXFxcKl0rO1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTc6MTQuNzI1MjczODU1WiIsIlNlcSI6OTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODQzODA0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYHN0cnVjdCBmbG93X29mZmxvYWRgIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHNvbWV0aGluZyBoZXJlLiBUaGVyZSdzIG5vIGV2aWRlbmNlIG9mIGEgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgZmxvd19vZmZsb2FkYC4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhbGxvY2F0aW9uIGJlaGF2aW9yIG9mIHRoaXMgc3RydWN0dXJlLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgaWYgYGZsb3dfb2ZmbG9hZF9hbGxvY2AgaXMgdGhlIHNvbGUgbWVjaGFuaXNtIHVzZWQgdG8gYWxsb2NhdGUgaW5zdGFuY2VzIG9mIGBzdHJ1Y3QgZmxvd19vZmZsb2FkYC4gVGhhdCdzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiB0byBhbnN3ZXIuIEtub3dpbmcgdGhhdCB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIGludGVuZGVkIGxpZmVjeWNsZSBhbmQgbWFuYWdlbWVudCBvZiB0aGVzZSBmbG93IG9mZmxvYWQgc3RydWN0dXJlcyB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIGlmIHdlIGNhbiBjb25maXJtIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB0aGUgb25seSBlbnRyeSBwb2ludCBmb3IgYWxsb2NhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwNTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNzoxOC45MDk2NTcwNDJaIiwiU2VxIjo5NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjIyNDQ2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbWFsbG9jLipzaXplb2YuKmZsb3dfb2ZmbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTc6MTguOTU4ODg3ODg4WiIsIlNlcSI6OTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4NTY2NTIxNzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5lZWRzS01TQU4gPSBmYWxzZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoZXkndmUgYWRkZWQgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGF0b21pYyBjb3VudGVycyB0byB0aGUgYGZsb3dfb2ZmbG9hZF90dXBsZWAgc3RydWN0LiBUaGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCBvcHRpbWl6YXRpb24uIEluc3RlYWQgb2YgdXBkYXRpbmcgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgKENUKSBzdGF0cyBkaXJlY3RseSBvbiBldmVyeSBwYWNrZXQsIHRoZXkncmUgYWNjdW11bGF0aW5nIHRoZW0gaW4gdGhlc2UgYXRvbWljIGNvdW50ZXJzLiBUaGlzIGF2b2lkcyBjYWNoZSBsaW5lIGJvdW5jaW5nLCB3aGljaCBpcyBhIGNvbW1vbiBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGluIG11bHRpLUNQVSBlbnZpcm9ubWVudHMuXG5cblRoZSBjcnVjaWFsIHBvaW50IGlzIGhvdyB0aGVzZSBjb3VudGVycyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHVzZWQuIFRoZSBgZmxvd19vZmZsb2FkYCBzdHJ1Y3QsIHdoaWNoIGNvbnRhaW5zIHRoaXMgYGZsb3dfb2ZmbG9hZF90dXBsZWAsIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgLiBUaGlzIGlzIGtleTsgaXQgZW5zdXJlcyB0aGF0IHRoZSBlbnRpcmUgc3RydWN0LCBpbmNsdWRpbmcgdGhlIG5ldyBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzLCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaGVyZS5cblxuVGhleSdyZSB1c2luZyBgYXRvbWljNjRfYWRkYCB0byBpbmNyZW1lbnQgdGhlIGNvdW50ZXJzIGluIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAsIHdoaWNoIGlzIHRoZSBmYXN0IHBhdGguIFRoZW4sIHRoZSBnYXJiYWdlIGNvbGxlY3RvciAoR0MpLCBgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXBgLCBwZXJpb2RpY2FsbHkgZmx1c2hlcyB0aGVzZSBjb3VudGVycyB0byB0aGUgQ1QgZW50cnkgdXNpbmcgYGF0b21pYzY0X3hjaGdgLiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhlIGNyaXRpY2FsIGRhdGEgcGF0aCBpcyBzYWZlLlxuXG5Ob3csIGFib3V0IHBvdGVudGlhbCBsZWFrcy4gVGhlIHZhbHVlcyBhcmVuJ3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhleSdyZSBhZGRlZCB0byB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBzdGF0cywgd2hpY2ggKmFyZSogZXhwb3NlZCB0byB1c2Vyc3BhY2UsIGJ1dCB3ZSdyZSBvbmx5IGRlYWxpbmcgd2l0aCBwYWNrZXQgYW5kIGJ5dGUgY291bnRzLCBhbmQgdGhleSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEl0J3MganVzdCBjb3VudGVycywgc28gdGhlcmUncyBubyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdG8gbGVhaywgYW5kIGl0IGlzIGltcG9zc2libGUgdG8gcmVhZCBvciBjb3B5IHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuVGhlIG9ubHkgcmVtYWluaW5nIHJpc2tzIGFyZSBsb2dpYyBidWdzIOKAkyBwZXJoYXBzIGEgbWlzc2VkIHVwZGF0ZSwgZG91YmxlLWNvdW50aW5nLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMuIEJ1dCB0aGVzZSBhcmUgdGhlIHR5cGVzIG9mIGJ1Z3MgdGhhdCBLQVNBTi9LQ1NBTiBhbmQgc3RhbmRhcmQgdGVzdGluZyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guIFRoZXkgYXJlIG5vdCBtZW1vcnkgY29ycnVwdGlvbiBwcm9ibGVtcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuXG5TbywgaW4gc3VtbWFyeSwgdGhlcmUncyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUuIFRoZSBjb3VudGVycyBhcmUgemVyby1pbml0aWFsaXplZCwgdGhleSdyZSB1cGRhdGVkIGFuZCBmbHVzaGVkIGF0b21pY2FsbHksIGFuZCB0aGV5IG9ubHkgY29udGFpbiBub24tc2Vuc2l0aXZlIHBhY2tldCBhbmQgYnl0ZSBjb3VudHMuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjMwMiwiT3V0cHV0VG9rZW5zIjozMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE3OjM3LjUyNTQxMjgxN1oiLCJTZXEiOjk4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzIHRvIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCB0byBiYXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRpc3RpY3MgdXBkYXRlcy4gVGhlc2UgZmllbGRzIGFyZSB1cGRhdGVkIHZpYSBgYXRvbWljNjRfYWRkYCBpbiB0aGUgZm9yd2FyZGluZyBwYXRoIGFuZCBwZXJpb2RpY2FsbHkgZmx1c2hlZCB0byB0aGUgY29ubnRyYWNrIGVudHJ5IHZpYSBgYXRvbWljNjRfeGNoZ2AgaW4gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiBcXG5cXG5UaGUgYHN0cnVjdCBmbG93X29mZmxvYWRgIGNvbnRhaW5pbmcgdGhlc2UgdHVwbGVzIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jYCAoaW4gYGZsb3dfb2ZmbG9hZF9hbGxvY2ApLCBlbnN1cmluZyB0aGUgbmV3IGF0b21pYyBjb3VudGVycyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZC4gVGhlIGNvdW50ZXJzIGFyZSBub3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIHRoZWlyIHZhbHVlcyBvbmx5IHJlcHJlc2VudCBwYWNrZXQgYW5kIGJ5dGUgY291bnRzLCBwcmVjbHVkaW5nIGFueSBpbmZvcm1hdGlvbiBsZWFrLiBcXG5cXG5XaGlsZSBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgaXMgc29tZXRpbWVzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIHVzZWQgYXMgYSBsb29rdXAga2V5IChlLmcuLCBpbiBgbmZfZmxvd19vZmZsb2FkX2xvb2t1cGApLCB0aGUgaGFzaCBhbmQgY29tcGFyaXNvbiBmdW5jdGlvbnMgb25seSBvcGVyYXRlIG9uIHRoZSBmaWVsZHMgdXAgdG8gdGhlIGBfX2hhc2hgIG1hcmtlciwgd2hpY2ggcHJlY2VkZXMgdGhlIG5ld2x5IGFkZGVkIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMuIFRodXMsIHRoZSB1bmluaXRpYWxpemVkIHN0YXRlIG9mIHRoZXNlIGZpZWxkcyBpbiBzdGFjay1hbGxvY2F0ZWQga2V5cyBpcyBuZXZlciByZWFkLlxcblxcbkFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBidWdzIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBzdGFuZGFyZCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzIHRvIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCB0byBiYXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRpc3RpY3MgdXBkYXRlcy4gVGhlc2UgZmllbGRzIGFyZSB1cGRhdGVkIHZpYSBgYXRvbWljNjRfYWRkYCBpbiB0aGUgZm9yd2FyZGluZyBwYXRoIGFuZCBwZXJpb2RpY2FsbHkgZmx1c2hlZCB0byB0aGUgY29ubnRyYWNrIGVudHJ5IHZpYSBgYXRvbWljNjRfeGNoZ2AgaW4gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiBcXG5cXG5UaGUgYHN0cnVjdCBmbG93X29mZmxvYWRgIGNvbnRhaW5pbmcgdGhlc2UgdHVwbGVzIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jYCAoaW4gYGZsb3dfb2ZmbG9hZF9hbGxvY2ApLCBlbnN1cmluZyB0aGUgbmV3IGF0b21pYyBjb3VudGVycyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZC4gVGhlIGNvdW50ZXJzIGFyZSBub3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIHRoZWlyIHZhbHVlcyBvbmx5IHJlcHJlc2VudCBwYWNrZXQgYW5kIGJ5dGUgY291bnRzLCBwcmVjbHVkaW5nIGFueSBpbmZvcm1hdGlvbiBsZWFrLiBcXG5cXG5XaGlsZSBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgaXMgc29tZXRpbWVzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIHVzZWQgYXMgYSBsb29rdXAga2V5IChlLmcuLCBpbiBgbmZfZmxvd19vZmZsb2FkX2xvb2t1cGApLCB0aGUgaGFzaCBhbmQgY29tcGFyaXNvbiBmdW5jdGlvbnMgb25seSBvcGVyYXRlIG9uIHRoZSBmaWVsZHMgdXAgdG8gdGhlIGBfX2hhc2hgIG1hcmtlciwgd2hpY2ggcHJlY2VkZXMgdGhlIG5ld2x5IGFkZGVkIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMuIFRodXMsIHRoZSB1bmluaXRpYWxpemVkIHN0YXRlIG9mIHRoZXNlIGZpZWxkcyBpbiBzdGFjay1hbGxvY2F0ZWQga2V5cyBpcyBuZXZlciByZWFkLlxcblxcbkFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBidWdzIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBzdGFuZGFyZCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxdk4m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 23:58:56 +0000 UTC FinishedAt: 2026-08-26 00:17:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NETFILTER_INGRESS", "NF_CONNTRACK", "NF_TABLES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NETFILTER_INGRESS", "NF_CONNTRACK", "NF_TABLES" ], "series_id": "6bea75eb-00bf-49e8-98fb-49e8c990bfea" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_flow_table_gc_run", "nf_flow_offload_ip_hook" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfZ2NfcnVuJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzIHRvIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCB0byBiYXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRpc3RpY3MgdXBkYXRlcy4gVGhlc2UgZmllbGRzIGFyZSB1cGRhdGVkIHZpYSBgYXRvbWljNjRfYWRkYCBpbiB0aGUgZm9yd2FyZGluZyBwYXRoIGFuZCBwZXJpb2RpY2FsbHkgZmx1c2hlZCB0byB0aGUgY29ubnRyYWNrIGVudHJ5IHZpYSBgYXRvbWljNjRfeGNoZ2AgaW4gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiBcblxuVGhlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkYCBjb250YWluaW5nIHRoZXNlIHR1cGxlcyBpcyBhbHdheXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AgKGluIGBmbG93X29mZmxvYWRfYWxsb2NgKSwgZW5zdXJpbmcgdGhlIG5ldyBhdG9taWMgY291bnRlcnMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBjb3VudGVycyBhcmUgbm90IGRpcmVjdGx5IGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCB0aGVpciB2YWx1ZXMgb25seSByZXByZXNlbnQgcGFja2V0IGFuZCBieXRlIGNvdW50cywgcHJlY2x1ZGluZyBhbnkgaW5mb3JtYXRpb24gbGVhay4gXG5cbldoaWxlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCBpcyBzb21ldGltZXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgdXNlZCBhcyBhIGxvb2t1cCBrZXkgKGUuZy4sIGluIGBuZl9mbG93X29mZmxvYWRfbG9va3VwYCksIHRoZSBoYXNoIGFuZCBjb21wYXJpc29uIGZ1bmN0aW9ucyBvbmx5IG9wZXJhdGUgb24gdGhlIGZpZWxkcyB1cCB0byB0aGUgYF9faGFzaGAgbWFya2VyLCB3aGljaCBwcmVjZWRlcyB0aGUgbmV3bHkgYWRkZWQgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcy4gVGh1cywgdGhlIHVuaW5pdGlhbGl6ZWQgc3RhdGUgb2YgdGhlc2UgZmllbGRzIGluIHN0YWNrLWFsbG9jYXRlZCBrZXlzIGlzIG5ldmVyIHJlYWQuXG5cbkFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBidWdzIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBzdGFuZGFyZCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjb3JlIGxvZ2ljIHRvIHVzZSBhdG9taWMgb3BlcmF0aW9ucyBmb3IgcGFja2V0IGFuZCBieXRlIGNvdW50ZXJzIGluIHRoZSBmYXN0IHBhdGggKG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKSwgYW5kIGRlZmVycyB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZXNlIGNvdW50ZXJzIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHN5c3RlbSB0byB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHN0ZXAgKG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBmbG93IHRhYmxlIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgc3RhdGlzdGljcyBhcmUgdHJhY2tlZCBhbmQgc3luY2hyb25pemVkLCB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgY29uY3VycmVuY3kgaXNzdWVzIG9yIGJ1Z3MgaW4gdGhlIEdDIHByb2Nlc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiNjY3Y2QzZGE2N2U2ODQyZjM3MTIxZDc1ODk3YzY4MjdkNzM3N2Q5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMDA6MTM6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbmluZGV4IGYyZTI3NzFmMTg4ZjQuLjYwNjAyMDIxMzNjNzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5AQCAtMTcxLDYgJiM0MzsxNzEsOSBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHtcbiBcdFx0XHR1MzJcdFx0aWlmaWR4O1xuIFx0XHR9IHRjO1xuIFx0fTtcbiYjNDM7XG4mIzQzO1x0YXRvbWljNjRfdFx0XHRcdHBhY2tldHM7XG4mIzQzO1x0YXRvbWljNjRfdFx0XHRcdGJ5dGVzO1xuIH07XG4gXG4gc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbmluZGV4IDAzMjQxZDRiZmQ1ZTguLmExZjM3Y2E5NTZiOGYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXG5AQCAtMTMsNiAmIzQzOzEzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuaFx1MDAzZVxuIFxuIHN0YXRpYyBERUZJTkVfTVVURVgoZmxvd3RhYmxlX2xvY2spO1xuIHN0YXRpYyBMSVNUX0hFQUQoZmxvd3RhYmxlcyk7XG5AQCAtNTY1LDExICYjNDM7NTY2LDI5IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZXh0ZW5kX2N0X3RpbWVvdXQoc3RydWN0IG5mX2Nvbm4gKmN0KVxuIFx0bmZfY3RfcHV0KGN0KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIF9fbmZfZmxvd19zeW5jX2N0X3N0YXRzKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIGludCBkaXIpXG4mIzQzO3tcbiYjNDM7XHR1NjQgcGt0cywgYnl0ZXM7XG4mIzQzO1xuJiM0MztcdHBrdHMgPSBhdG9taWM2NF94Y2hnKFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUucGFja2V0cywgMCk7XG4mIzQzO1x0Ynl0ZXMgPSBhdG9taWM2NF94Y2hnKFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUuYnl0ZXMsIDApO1xuJiM0MztcdG5mX2N0X2FjY3RfYWRkKGZsb3ctXHUwMDNlY3QsIGRpciwgcGt0cywgYnl0ZXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuZl9mbG93X3N5bmNfY3Rfc3RhdHMoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbiYjNDM7e1xuJiM0MztcdF9fbmZfZmxvd19zeW5jX2N0X3N0YXRzKGZsb3csIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xuJiM0MztcdF9fbmZfZmxvd19zeW5jX2N0X3N0YXRzKGZsb3csIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4gXHRcdFx0XHQgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgdm9pZCAqZGF0YSlcbiB7XG4tXHRib29sIHRlYXJkb3duID0gdGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncyk7XG4mIzQzO1x0Ym9vbCB0ZWFyZG93bjtcbiYjNDM7XG4mIzQzO1x0bmZfZmxvd19zeW5jX2N0X3N0YXRzKGZsb3cpO1xuIFxuJiM0MztcdHRlYXJkb3duID0gdGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncyk7XG4gXHRpZiAobmZfZmxvd19oYXNfZXhwaXJlZChmbG93KSB8fFxuIFx0ICAgIG5mX2N0X2lzX2R5aW5nKGZsb3ctXHUwMDNlY3QpIHx8XG4gXHQgICAgIW5mX2Zsb3dfZHN0X2NoZWNrKFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUxdLnR1cGxlKSB8fFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbmluZGV4IGM4YzI5YTlhMTY4NDQuLjY2YmU4MTVhYzJmZWIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbkBAIC01MDksOCAmIzQzOzUwOSwxMCBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRpcF9kZWNyZWFzZV90dGwoaXBoKTtcbiBcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcbiBcbi1cdGlmIChmbG93X3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcbi1cdFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cdTAwM2VjdCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpciwgc2tiLVx1MDAzZWxlbik7XG4mIzQzO1x0aWYgKGZsb3dfdGFibGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GX0ZMT1dUQUJMRV9DT1VOVEVSKSB7XG4mIzQzO1x0XHRhdG9taWM2NF9hZGQoMSwgXHUwMDI2dHVwbGVoYXNoLVx1MDAzZXR1cGxlLnBhY2tldHMpO1xuJiM0MztcdFx0YXRvbWljNjRfYWRkKHNrYi1cdTAwM2VsZW4sIFx1MDAyNnR1cGxlaGFzaC1cdTAwM2V0dXBsZS5ieXRlcyk7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIDE7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9JTkdSRVNTJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9mbG93X3RhYmxlX2djX3J1biYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfaXBfaG9vayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgY29yZSBsb2dpYyB0byB1c2UgYXRvbWljIG9wZXJhdGlvbnMgZm9yIHBhY2tldCBhbmQgYnl0ZSBjb3VudGVycyBpbiB0aGUgZmFzdCBwYXRoIChuZl9mbG93X29mZmxvYWRfZm9yd2FyZCksIGFuZCBkZWZlcnMgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGVzZSBjb3VudGVycyB0byB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBzeXN0ZW0gdG8gdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBzdGVwIChuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IHN0YXRpc3RpY3MgYXJlIHRyYWNrZWQgYW5kIHN5bmNocm9uaXplZCwgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBidWdzIGluIHRoZSBHQyBwcm9jZXNzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjY2N2NkM2RhNjdlNjg0MmYzNzEyMWQ3NTg5N2M2ODI3ZDczNzdkOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDAwOjEzOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKaW5kZXggZjJlMjc3MWYxODhmNC4uNjA2MDIwMjEzM2M3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCkBAIC0xNzEsNiAmIzQzOzE3MSw5IEBAIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgewogCQkJdTMyCQlpaWZpZHg7CiAJCX0gdGM7CiAJfTsKJiM0MzsKJiM0MzsJYXRvbWljNjRfdAkJCXBhY2tldHM7CiYjNDM7CWF0b21pYzY0X3QJCQlieXRlczsKIH07CiAKIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKaW5kZXggMDMyNDFkNGJmZDVlOC4uYTFmMzdjYTk1NmI4ZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jCkBAIC0xMyw2ICYjNDM7MTMsNyBAQAogI2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYWNjdC5oJmd0OwogCiBzdGF0aWMgREVGSU5FX01VVEVYKGZsb3d0YWJsZV9sb2NrKTsKIHN0YXRpYyBMSVNUX0hFQUQoZmxvd3RhYmxlcyk7CkBAIC01NjUsMTEgJiM0Mzs1NjYsMjkgQEAgc3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9leHRlbmRfY3RfdGltZW91dChzdHJ1Y3QgbmZfY29ubiAqY3QpCiAJbmZfY3RfcHV0KGN0KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIF9fbmZfZmxvd19zeW5jX2N0X3N0YXRzKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIGludCBkaXIpCiYjNDM7ewomIzQzOwl1NjQgcGt0cywgYnl0ZXM7CiYjNDM7CiYjNDM7CXBrdHMgPSBhdG9taWM2NF94Y2hnKCZhbXA7Zmxvdy0mZ3Q7dHVwbGVoYXNoW2Rpcl0udHVwbGUucGFja2V0cywgMCk7CiYjNDM7CWJ5dGVzID0gYXRvbWljNjRfeGNoZygmYW1wO2Zsb3ctJmd0O3R1cGxlaGFzaFtkaXJdLnR1cGxlLmJ5dGVzLCAwKTsKJiM0MzsJbmZfY3RfYWNjdF9hZGQoZmxvdy0mZ3Q7Y3QsIGRpciwgcGt0cywgYnl0ZXMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBuZl9mbG93X3N5bmNfY3Rfc3RhdHMoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdykKJiM0Mzt7CiYjNDM7CV9fbmZfZmxvd19zeW5jX2N0X3N0YXRzKGZsb3csIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpOwomIzQzOwlfX25mX2Zsb3dfc3luY19jdF9zdGF0cyhmbG93LCBGTE9XX09GRkxPQURfRElSX1JFUExZKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLAogCQkJCSAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKQogewotCWJvb2wgdGVhcmRvd24gPSB0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCAmYW1wO2Zsb3ctJmd0O2ZsYWdzKTsKJiM0MzsJYm9vbCB0ZWFyZG93bjsKJiM0MzsKJiM0MzsJbmZfZmxvd19zeW5jX2N0X3N0YXRzKGZsb3cpOwogCiYjNDM7CXRlYXJkb3duID0gdGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgJmFtcDtmbG93LSZndDtmbGFncyk7CiAJaWYgKG5mX2Zsb3dfaGFzX2V4cGlyZWQoZmxvdykgfHwKIAkgICAgbmZfY3RfaXNfZHlpbmcoZmxvdy0mZ3Q7Y3QpIHx8CiAJICAgICFuZl9mbG93X2RzdF9jaGVjaygmYW1wO2Zsb3ctJmd0O3R1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX09SSUdJTkFMXS50dXBsZSkgfHwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKaW5kZXggYzhjMjlhOWExNjg0NC4uNjZiZTgxNWFjMmZlYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKQEAgLTUwOSw4ICYjNDM7NTA5LDEwIEBAIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAlpcF9kZWNyZWFzZV90dGwoaXBoKTsKIAlza2JfY2xlYXJfdHN0YW1wKHNrYik7CiAKLQlpZiAoZmxvd190YWJsZS0mZ3Q7ZmxhZ3MgJmFtcDsgTkZfRkxPV1RBQkxFX0NPVU5URVIpCi0JCW5mX2N0X2FjY3RfdXBkYXRlKGZsb3ctJmd0O2N0LCB0dXBsZWhhc2gtJmd0O3R1cGxlLmRpciwgc2tiLSZndDtsZW4pOwomIzQzOwlpZiAoZmxvd190YWJsZS0mZ3Q7ZmxhZ3MgJmFtcDsgTkZfRkxPV1RBQkxFX0NPVU5URVIpIHsKJiM0MzsJCWF0b21pYzY0X2FkZCgxLCAmYW1wO3R1cGxlaGFzaC0mZ3Q7dHVwbGUucGFja2V0cyk7CiYjNDM7CQlhdG9taWM2NF9hZGQoc2tiLSZndDtsZW4sICZhbXA7dHVwbGVoYXNoLSZndDt0dXBsZS5ieXRlcyk7CiYjNDM7CX0KIAogCXJldHVybiAxOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTIyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIEZsb3cgVGFibGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AgYW5kIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBjb3VudGVycywgYm90aCBgYXRvbWljNjRfdGAgdHlwZXMsIHRvIHRoZSBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIGhvdyB0aGVzZSBjb3VudGVycyBhcmUgYmVpbmcgdXNlZC4KClRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc3luY2hyb25pemF0aW9uIHN0ZXAsIGNhbGxpbmcgYG5mX2Zsb3dfc3luY19jdF9zdGF0cyhmbG93KWAgd2l0aGluIGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAuIFRoaXMgdWx0aW1hdGVseSBjYWxscyBgbmZfY3RfYWNjdF9hZGRgIHRvIHVwZGF0ZSB0aGUgY29ubmVjdGlvbiB0cmFja2luZyAoY29ubnRyYWNrKSBzdGF0cy4gQnV0IGhlcmUmIzM5O3MgdGhlIGtpY2tlcjogYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCwgd2hpY2ggaXMgKmluIHRoZSBmYXN0IHBhdGgqIG9mIHBhY2tldCBmb3J3YXJkaW5nLCBub3cgZGlyZWN0bHkgdXNlcyBgYXRvbWljNjRfYWRkYCB0byBpbmNyZW1lbnQgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIG9uIHRoZSB0dXBsZSBpdHNlbGYuIEl0JiMzOTtzIHNraXBwaW5nIHRoZSBgbmZfY3RfYWNjdF91cGRhdGVgIGNhbGwuCgpUaGlzIGlzIGEgY2xldmVyIG9wdGltaXphdGlvbi4gV2UmIzM5O3JlIGF2b2lkaW5nIHBvdGVudGlhbCBsb2NrIGNvbnRlbnRpb24gb3Igc2xvd2Rvd25zIHRoYXQgYG5mX2N0X2FjY3RfdXBkYXRlYCBsaWtlbHkgaW50cm9kdWNlcyBieSB1cGRhdGluZyB0aGUgY29ubnRyYWNrIHN0YXRzIGRpcmVjdGx5IGFuZCBkZWZlcnJpbmcgc3luY2hyb25pemF0aW9uIHVudGlsIGdhcmJhZ2UgY29sbGVjdGlvbi4gRWZmZWN0aXZlbHksIHRoaXMgaXMgbW92aW5nIHRoZSBzdGF0IHVwZGF0ZXMgdG8gYSBtb3JlIGFzeW5jaHJvbm91cyBhcHByb2FjaCBmb3IgcGVyZm9ybWFuY2UuCgpUaGlzIGlzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBoYW5kbGVzIHN0YXRpc3RpY3MuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLCBhbmQgdGhhdCBtYWtlcyBpdCBwcmltZSB0ZXJyaXRvcnkgZm9yIGZ1enppbmcuIEl0JiMzOTtzIGNyaXRpY2FsIHRvIG1ha2Ugc3VyZSB0aGlzIG5ldyBmYXN0LXBhdGggYXBwcm9hY2ggd29ya3MgY29ycmVjdGx5IGluIHRoZSBwcmVzZW5jZSBvZiByYWNlIGNvbmRpdGlvbnMgYW5kIGVkZ2UgY2FzZXMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWcgb3B0aW9ucyBlbmFibGUgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcmVsZXZhbnQgZmlsZXMgYXJlIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jYCBhbmQgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jYCDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd190YWJsZV9jb3JlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE0Mj1vYmotJChDT05GSUdfTkZfRkxPV19UQUJMRSlcdCYjNDM7PSBuZl9mbG93X3RhYmxlLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQzOm5mX2Zsb3dfdGFibGUtb2Jqc1x0XHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ0LVx0XHRcdFx0ICAgbmZfZmxvd190YWJsZV9wYXRoLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODI4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQ29uZmlndXJhdGlvbiBTcGFjZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aCBgQ09ORklHX05GX0ZMT1dfVEFCTEVgLiBUaGF0JiMzOTtzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBpdGVtIHdlIG5lZWQgdG8gZm9jdXMgb24uIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGlzIGp1c3QgYSBzaW5nbGUgZmxhZyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLCBvciBpZiB0aGVyZSYjMzk7cyBhIGZhbWlseSBvZiByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gcXVpY2tseSBleHBsb3JlIHRoZSBhZGphY2VudCBjb25maWd1cmF0aW9uIHNwYWNlLiBBcmUgdGhlcmUgb3RoZXIgZmxhZ3MgdGhhdCBpbnRlcmFjdCB3aXRoIHRoaXMgb25lLCBwZXJoYXBzIGRlcGVuZGVuY2llcywgb3IgbW9yZSBncmFudWxhciBjb250cm9scyBmb3IgdGhlIGZsb3cgdGFibGUgZnVuY3Rpb25hbGl0eT8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSBpdCYjMzk7cyByYXJlbHkganVzdCBvbmUgc29saXRhcnkgc3dpdGNoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZWxzZSBpcyBsdXJraW5nIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9GTE9XX1RBQkxFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzIxOmNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjM3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTkZfRkxPV19UQUJMRSBLY29uZmlnKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGBORl9GTE9XX1RBQkxFYCBLY29uZmlnIG9wdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLiBNeSBicmFpbiBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgcGxhY2VzIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGl0LiBUaGF0IG1lYW5zIEkmIzM5O2xsIGJlIGdvaW5nIHN0cmFpZ2h0IGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGZpbmQgdGhlIHNwZWNpZmljcywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGRlcGVuZGVuY2llcyBvbiByZWxldmFudCBuZXR3b3JraW5nIGZlYXR1cmVzIOKAkyB0aGluZ3MgbGlrZSBjb25uZWN0aW9uIHRyYWNraW5nLCBOQVQsIG9yIHNwZWNpZmljIGhhcmR3YXJlIG9mZmxvYWQgY2FwYWJpbGl0aWVzLiBUaGlzIGFsc28gbGlrZWx5IGNvbnRyb2xzIHRoZSBpbmNsdXNpb24gb2YgdGhlIGNvcmUgZmxvdyB0YWJsZSBjb2RlIGl0c2VsZiBhbmQgYXNzb2NpYXRlZCBtb2R1bGVzLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBoaWRkZW4gbnVhbmNlcyBpbiB0aGUgZGVwZW5kZW5jaWVzLiBJIGFtIGhvcGluZyB0byBnZXQgaW5zaWdodCBpbnRvIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0IHdpdGhpbiBteSBzcGVjaWZpYyB1c2UgY2FzZSwgYW5kIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlc2Ugc2V0dGluZ3MgYXJlIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcxMDpcdFxuIDcxMTpcdGNvbmZpZyBORl9GTE9XX1RBQkxFXG4gNzEyOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcJiMzNDtcbiA3MTM6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0lOR1JFU1NcbiA3MTQ6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4gNzE1Olx0XHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xuIDcxNjpcdFx0aGVscFxuIDcxNzpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBmbG93IHRhYmxlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUuXG4gNzE4Olx0XG4gNzE5Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4gNzIwOlx0XG4gNzIxOlx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXG4gNzIyOlx0XHRib29sIFwmIzM0O1N1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXCYjMzQ7XG4gNzIzOlx0XHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcbiA3MjQ6XHRcdGRlcGVuZHMgb24gUFJPQ19GU1xuIDcyNTpcdFx0aGVscFxuIDcyNjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGZvciB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIHN0YXRpc3RpY3NcbiA3Mjc6XHRcdCAgdG8gYmUgc2hvd24gaW4gcHJvY2ZzIHVuZGVyIG5ldC9uZXRmaWx0ZXIvbmZfZmxvd3RhYmxlLlxuIDcyODpcdFxuIDcyOTpcdGNvbmZpZyBORVRGSUxURVJfWFRBQkxFU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NTkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIE5GX0ZMT1dfVEFCTEUgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIFRoZSBgTkZfRkxPV19UQUJMRWAgbW9kdWxlIGlzIGluIHBsYXkuIEkgbmVlZCB0byBxdWlja2x5IHJ1biB0aHJvdWdoIGl0cyBkZXBlbmRlbmNpZXMgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgcHJvcGVybHkgZW5hYmxlZCBhbmQgdW5kZXJzdG9vZCBmcm9tIGEgY29uZmlndXJhdGlvbiBhbmQgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyB0aGF0IGl0IHJlbGllcyBvbiBgTkVURklMVEVSX0lOR1JFU1NgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9UQUJMRVNgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGZsb3cgdGFibGVzIGFyZSBmdW5kYW1lbnRhbGx5IGFib3V0IGluZ3Jlc3MgaGFuZGxpbmcsIGNvbm5lY3Rpb24gdHJhY2tpbmcgZm9yIHN0YXRlZnVsIG9wZXJhdGlvbiwgYW5kIG9mIGNvdXJzZSwgbGV2ZXJhZ2luZyB0aGUgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlIHdpdGggaXRzIHRhYmxlLWJhc2VkIHJ1bGVzLiBJdCB3b3VsZCBiZSBhIHByb2JsZW0gaWYgdGhvc2UgYXJlbiYjMzk7dCBhdmFpbGFibGUsIG9yIGFyZSBzb21laG93IG1pc2NvbmZpZ3VyZWQuCgpOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGJlY2F1c2UgaXQmIzM5O3MgYWx3YXlzIGdvb2QgcHJhY3RpY2UsIGxldCBtZSBhbHNvIGJyaWVmbHkgbG9vayBhdCBgTkZfRkxPV19UQUJMRV9JTkVUYC4gSXQmIzM5O3MgcG9zc2libGUgSSYjMzk7bGwgbmVlZCBpdHMgZnVuY3Rpb25hbGl0eSwgZGVwZW5kaW5nIG9uIHRoZSBleGFjdCB0cmFmZmljIGZsb3dzIEkmIzM5O20gd29ya2luZyB3aXRoLiBUaGlzIGNoZWNrIGVuc3VyZXMgSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSBjb25maWd1cmF0aW9uIGltcGxpY2F0aW9ucywgYW5kIGVuc3VyZXMgdGhhdCBJJiMzOTt2ZSBhY2NvdW50ZWQgZm9yIElQdjQgYW5kIElQdjYgdHJhZmZpYy4gSXTigJlzIGFsc28gaW1wb3J0YW50IHRoYXQgSSB0YWtlIHRoZSB0aW1lIHRvIGNvbnNpZGVyIGhvdyBlYWNoIGZlYXR1cmUgaXMgaW50ZXItcmVsYXRlZCBhbmQgZGVwZW5kZW50IG9uIG9uZSBhbm90aGVyIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhlIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzAwOlx0XG4gNzAxOlx0ZW5kaWYgIyBORl9UQUJMRVNcbiA3MDI6XHRcbiA3MDM6XHRjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXG4gNzA0Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXCYjMzQ7XG4gNzA1Olx0XHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcbiA3MDY6XHRcdGhlbHBcbiA3MDc6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgc3VwcG9ydC5cbiA3MDg6XHRcbiA3MDk6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiA3MTA6XHRcbiA3MTE6XHRjb25maWcgTkZfRkxPV19UQUJMRVxuIDcxMjpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbW9kdWxlXCYjMzQ7XG4gNzEzOlx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9JTkdSRVNTXG4gNzE0Olx0XHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzI4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmxvdyBUYWJsZSBPZmZsb2FkIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaGl0cyBgbmZfZmxvd190YWJsZV9jb3JlLmNgIGFuZCBgbmZfZmxvd190YWJsZV9pcC5jYC4gVGhlc2UgYXJlIGNvbXBpbGVkIGludG8gYG5mX2Zsb3dfdGFibGUub2AsIHdoaWNoIG1ha2VzIHNlbnNlIHNpbmNlIGBDT05GSUdfTkZfRkxPV19UQUJMRWAgaXMgZW5hYmxlZC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAgYW5kIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSwgc28gSSBzaG91bGQgc2VlIGlmIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGVzZSBmaWxlcyBhcmUgYWxzbyBpbXBhY3RlZC4KCkhhbmcgb24uLi4gYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBpcyBpbiBgbmZfZmxvd190YWJsZV9pcC5jYCwgbm90IHRoZSBjb3JlIGZpbGUuIEkgd29uZGVyIGlmIHRoZXJlJiMzOTtzIGEgc2ltaWxhciBmdW5jdGlvbiBpbiBgbmZfZmxvd190YWJsZV9pcHY2LmNgIHRoYXTigJlzIGJlZW4gb3Zlcmxvb2tlZCBoZXJlLiBDaGVja2luZyB0aGUgZGlmZiBhZ2Fpbi4uLiBub3BlLCBqdXN0IGBuZl9mbG93X3RhYmxlX2lwLmNgLiBPaywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIGBuZl9mbG93X3RhYmxlX2NvcmUuY2AuCgpSaWdodCwgZm9jdXNpbmcgb24gYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYC4gSG9sZCBvbiBhIHNlY29uZCwgaXNuJiMzOTt0IGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAgYSBmYXN0LXBhdGggZnVuY3Rpb24/IFRoYXQgbWlnaHQgbWFrZSBpdCBhIG1vcmUgc2Vuc2l0aXZlIGFyZWEsIHNvIGxldOKAmXMgYmUgY2FyZWZ1bCB3aGVuIHJldmlld2luZyB0aGlzIGNoYW5nZS4gSSBzaG91bGQgYmUgYXdhcmUgdGhhdCBpdCBtaWdodCBpbnRyb2R1Y2Ugc29tZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucy4KCkxldCBtZSBhbHNvIGNoZWNrIGBuZl9mbG93X3N5bmNfY3Rfc3RhdHNgIGFuZCBgX19uZl9mbG93X3N5bmNfY3Rfc3RhdHNgLiBMb29rcyBsaWtlIHRoZXkmIzM5O3JlIHN0YXRpYywgYnV0IHRoYXQgZG9lc24mIzM5O3QgbWVhbiB0aGV5IGFyZW4mIzM5O3QgaW1wb3J0YW50OyB0aGV5IG1heSBiZSBpbXBvcnRhbnQgaW50ZXJuYWwgZnVuY3Rpb25zLiBBbmQsIGFsdGhvdWdoIGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAgaXMgc3RhdGljLCBpdCYjMzk7cyBiZWluZyBwYXNzZWQgYXMgYSBjYWxsYmFjayBvciBjYWxsZWQgZnJvbSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24sIHRoYXTigJlzIGFub3RoZXIgYXJlYSB0byBleGFtaW5lLiBHb3R0YSBkaWcgZGVlcGVyIG9uIGFsbCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NTc4PXN0YXRpYyB2b2lkIG5mX2Zsb3dfc3luY19jdF9zdGF0cyhzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTgzLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo1ODQ6c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTg1LVx0XHRcdFx0ICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz02MjE9dm9pZCBuZl9mbG93X3RhYmxlX2djX3J1bihzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02MjIte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2MjM6XHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd190YWJsZSwgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAsIE5VTEwpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02MjQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzQ5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIEZsb3cgVGFibGUgR2FyYmFnZSBDb2xsZWN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHdvcmtzIGZvciB0aGUgbmV0d29yayBmbG93IHRhYmxlLiBUaGUgZW50cnkgcG9pbnQsIHRoZSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgKmV4ZWN1dGVzKiB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHJvdXRpbmUsIGlzIGBuZl9mbG93X3RhYmxlX2djX3J1bmAuIEFscmlnaHQsIHRoYXQmIzM5O3Mgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBMZXQmIzM5O3MgZ2V0IHJpZ2h0IGludG8gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYC4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMsIHRoZSBjb25kaXRpb25zIGZvciBldmljdGlvbiwgdGhlIGFnaW5nIG1lY2hhbmlzbXMsIHRoZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UsIGFsbCBvZiBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHNlY3JldHMgaXQgaG9sZHMuIFRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX2djX3J1biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NTg0PXN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02MjAtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjYyMTp2b2lkIG5mX2Zsb3dfdGFibGVfZ2NfcnVuKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYyMi17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz02MjY9c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjMwLVx0Zmxvd190YWJsZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmZfZmxvd3RhYmxlLCBnY193b3JrLndvcmspO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2MzE6XHRuZl9mbG93X3RhYmxlX2djX3J1bihmbG93X3RhYmxlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjMyLVx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsIFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlZ2Nfd29yaywgSFopO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NzgyPXZvaWQgbmZfZmxvd190YWJsZV9mcmVlKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTEtXHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd190YWJsZSwgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwLCBOVUxMKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzkyOlx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc5My1cdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaF9jbGVhbnVwKGZsb3dfdGFibGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE2NT12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaF9jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNjgtXHRcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTE2OTpcdFx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd3RhYmxlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3MC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE5NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipGb2N1cyBTeW1ib2wgU2VsZWN0aW9uIC0gQW4gSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBzZWUsIEkmIzM5O20gdHJ5aW5nIHRvIGlkZW50aWZ5IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGBGb2N1c1N5bWJvbHNgLiBDb25zaWRlcmluZyB0aGUgbmF0dXJlIG9mIG5ldGZpbHRlciBmbG93IHRhYmxlcyBhbmQgb2ZmbG9hZGluZywgd2hlcmUgc2hvdWxkIEkgc3RhcnQ/ICpuZl9mbG93X3RhYmxlX2djX3J1biogbG9va3MgcHJvbWlzaW5nLiBHYXJiYWdlIGNvbGxlY3Rpb24gcm91dGluZXMgYXJlIG9mdGVuIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGFuZCBmcmVxdWVudGx5IHRvdWNoZWQuIFRoYXQmIzM5O3MgYSBzdHJvbmcgY29udGVuZGVyLCBJJiMzOTtsbCBrZWVwIHRoYXQgb25lIGluIG1pbmQuCgpXYWl0IGEgc2Vjb25kLCBsZXQgbWUgY2hlY2sgc29tZXRoaW5nLiBBaCwgeWVzLCByaWdodC4gSSBuZWVkIHRvIGJlIG1vcmUgcHJlY2lzZSBhYm91dCB0aGUgbG9jYXRpb24gb2YgdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gKm5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKiwgbm93IHRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gYG5mX2Zsb3dfdGFibGVgIG9mZmxvYWRpbmcuIE5vdyB3aGVyZSBkb2VzIHRoYXQgc2l0PyBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHdpdGhpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNgLiBUaGF0IGZpbGUgbG9jYXRpb24gd2lsbCBjb21lIGluIGhhbmR5IGxhdGVyLiBJIG5lZWQgdG8gbm90ZSB3aGVyZSB0aGUgY29kZSByZXNpZGVzLCB0byB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSByZXN0IG9mIHRoZSBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd19vZmZsb2FkX2ZvcndhcmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00NTc9bmZfZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ2Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ2ODpzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NjktXHRcdFx0XHQgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTg2Nj1uZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg4NS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjg4NjpcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODg3LVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc5MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBGbG93IE9mZmxvYWQgSG9va3MqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGZsb3cgb2ZmbG9hZCwgYW5kIHRoZSBwcmltYXJ5IGhvb2sgZnVuY3Rpb24gc2VlbXMgdG8gYmUgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYC4gTmF0dXJhbGx5LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjb25maXJtIHRoYXQgdGhlIElQdjQgaG9vayBpc24mIzM5O3QgdGhlIHNvbGUgcG9pbnQgb2YgaW50ZXJlc3QuIEEgZ29vZCBwcmFjdGljZSBpcyB0byBhbHdheXMgY29uc2lkZXIgcG90ZW50aWFsIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIGNvdmVyIGFsbCBiYXNlcyBhbmQgZW5zdXJlIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJiMzOTtzIGJlaGF2aW9yLiBUaW1lIHRvIGNoZWNrIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYCBhcyB3ZWxsLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGludGVycGxheSBvciBwb3RlbnRpYWwgZm9yIHJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgdGhlIHdob2xlIHBpY3R1cmUsIElQdjQgKmFuZCogSVB2Ni4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9MTI9bmZfZmxvd19vZmZsb2FkX2luZXRfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtMzgtXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzozOTpcdFx0cmV0dXJuIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2socHJpdiwgc2tiLCBzdGF0ZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTQwLVx0fVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9ODg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NiA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTkzLVx0LmZyZWVcdFx0PSBuZl9mbG93X3RhYmxlX2ZyZWUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjk0Olx0Lmhvb2tcdFx0PSBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy05NS1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTExOTQ9dW5zaWduZWQgaW50XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMTk1Om5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExOTYtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTIyMi19XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMjIzOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDgzCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gSVB2NiBPZmZsb2FkIEhvb2tzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBOZXRmaWx0ZXIgZmxvdyBvZmZsb2FkIGltcGxlbWVudGF0aW9uLCBhbmQgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgd2hlcmUgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgIGxpdmVzLiBBaCwgcmlnaHQsIGl0JiMzOTtzIGJ1cmllZCBpbiBgbmZfZmxvd190YWJsZV9pcC5jYC4gR29vZCwgZ290IGl0LiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gaXMgaG93IHRoaXMgaG9vayBhY3R1YWxseSB3b3Jrcy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoYXQgZm9yd2FyZGluZyBmdW5jdGlvbiBpdCYjMzk7cyB1dGlsaXppbmcuIERvZXMgaXQgZGlyZWN0bHkgY2FsbCBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgLCBvciBpcyB0aGVyZSBhIG1vcmUgc3BlY2lmaWMgSVB2Ni1yZWxhdGVkIGZvcndhcmRlciBsaWtlIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGNhbGwgZmxvdyBoZXJlIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgSVB2NiB0cmFmZmljIGlzIHNwZWNpZmljYWxseSBiZWluZyBoYW5kbGVkIGFuZCBhY2NlbGVyYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTExOTQ9dW5zaWduZWQgaW50XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMTk1Om5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExOTYtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTIyMi19XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMjIzOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTYwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBJJiMzOTttIGFib3V0IHRvIGFuYWx5emU6CgoqKkFuYWx5emluZyBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AgQ2FsbHMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYC4gSXQmIzM5O3MgYSBuZXRmaWx0ZXIgaG9vaywgc28gSSBhbHJlYWR5IGtub3cgaXQmIzM5O3MgYSBjcml0aWNhbCBwb2ludCBmb3IgcGFja2V0IHByb2Nlc3NpbmcgaW4gdGhlIElQdjYgd29ybGQuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGNhbGwgZ3JhcGgg4oCTIEkgbmVlZCB0byBzZWUgKndobyogaXMgY2FsbGluZyB0aGlzIGhvb2suIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIGluc2lnaHQgaW50byB3aGVyZSBJUHY2IGZsb3cgb2ZmbG9hZGluZyBpcyBiZWluZyBpbml0aWF0ZWQsIGNvbnRyb2xsZWQsIGFuZCBwb3RlbnRpYWxseSBtb2RpZmllZC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBhbmFseXNpcyBsaWVzOiBmaWd1cmluZyBvdXQgaG93IHRoZSBzeXN0ZW0gbWFrZXMgdXNlIG9mIHRoaXMgcGFydGljdWxhciBob29rIGluIGEgZGVlcGVyIGxldmVsLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUuIEkmIzM5O20gaG9waW5nIEkgZG9uJiMzOTt0IHJ1biBpbnRvIGFueSBzaWduaWZpY2FudCBtYWNyby1oZWF2eSBvYmZ1c2NhdGlvbiEgTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE5NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTk0Olx0dW5zaWduZWQgaW50XG4xMTk1Olx0bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTE5NjpcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuMTE5NzpcdHtcbjExOTg6XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcbjExOTk6XHRcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPSBwcml2O1xuMTIwMDpcdFx0c3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggY3R4ID0ge1xuMTIwMTpcdFx0XHQuaW5cdD0gc3RhdGUtXHUwMDNlaW4sXG4xMjAyOlx0XHR9O1xuMTIwMzpcdFx0aW50IHJldDtcbjEyMDQ6XHRcbjEyMDU6XHRcdGlmICghbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woXHUwMDI2Y3R4LCBza2IpKVxuMTIwNjpcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuMTIwNzpcdFxuMTIwODpcdFx0aWYgKHVubGlrZWx5KGN0eC5ldGhlcl90eXBlICE9IGh0b25zKEVUSF9QX0lQVjYpKSlcbjEyMDk6XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbjEyMTA6XHRcbjEyMTE6XHRcdHR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHNrYik7XG4xMjEyOlx0XHRpZiAoIXR1cGxlaGFzaClcbjEyMTM6XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbjEyMTQ6XHRcbjEyMTU6XHRcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XG4xMjE2Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTIxNzpcdFx0XHRyZXR1cm4gTkZfRFJPUDtcbjEyMTg6XHRcdGVsc2UgaWYgKHJldCA9PSAwKVxuMTIxOTpcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuMTIyMDpcdFxuMTIyMTpcdFx0cmV0dXJuIG5mX2Zsb3dfcXVldWVfeG1pdDYoc2tiLCB0dXBsZWhhc2gsIHN0YXRlKTtcbjEyMjI6XHR9XG4xMjIzOlx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MjcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgRGlmZiBhbmQgQ29uc2lkZXJpbmcgUG90ZW50aWFsIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGZlZWxzIG9mZi4gSSB3YXMgZXhwZWN0aW5nIHRvIHNlZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGluIHRoYXQgZGlmZiwgYnV0IGl0JiMzOTtzIG5vdCBzaG93aW5nIHVwLiBUaGF0JiMzOTtzIHN0cmFuZ2UuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZS4gVGhlIGJlaGF2aW9yIG9mIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBpcyBjcml0aWNhbCwgYW5kIGFueSBjaGFuZ2UgY291bGQgaGF2ZSBzaWduaWZpY2FudCByYW1pZmljYXRpb25zIGZvci4uLiB3ZWxsLCBldmVyeXRoaW5nLCBmcmFua2x5LiBTbywgYmVmb3JlIEkgY29udGludWUsIEkgKm11c3QqIHZlcmlmeSB0aGF0IGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYCB3YXNuJiMzOTt0LCBpbiBmYWN0LCBtb2RpZmllZC4gUGVyaGFwcyBJIG1pc3NlZCBzb21ldGhpbmcgaW4gbXkgaW5pdGlhbCByZXZpZXcsIG9yIG1heWJlIHRoZXJlJiMzOTtzIGFuIGluZGlyZWN0IGltcGFjdCBJIG5lZWQgdG8gdHJhY2UuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHJ1bGUgb3V0IGFueSB1bmV4cGVjdGVkIG1vZGlmaWNhdGlvbnMuIExldCYjMzk7cyBkaWcgaW4gYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBhcyBpdCBzaG91bGQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMDAwPXN0YXRpYyBpbnQgbmZfZmxvd190dXBsZV9pcHY2KHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTA2NS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEwNjY6c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDY3LVx0XHRcdFx0XHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTExOTU9bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEyMTQtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMjE1Olx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEyMTYtXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMwMQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIG1vZHVsZS4gSSBzZWUgaXQmIzM5O3MgZGVhbGluZyB3aXRoIElQdjYgZm9yd2FyZGluZyBhbmQgZmxvdyBvZmZsb2FkLCB3aGljaCBpcyBhIGtleSBhcmVhIGZvciBoaWdoLXBlcmZvcm1hbmNlIG5ldHdvcmtpbmcsIGVzcGVjaWFsbHkgaW4gbW9kZXJuIGRhdGEgY2VudGVycyBhbmQgY2xvdWQgZW52aXJvbm1lbnRzLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgdGhyb3VnaHB1dCBhbmQgbGF0ZW5jeS4KClRoaXMgbW9kdWxlIGlzIGxpa2VseSBkZXNpZ25lZCB0byBhY2NlbGVyYXRlIHRoZSBmb3J3YXJkaW5nIG9mIElQdjYgcGFja2V0cyBieSBvZmZsb2FkaW5nIHRoZSBwcm9jZXNzaW5nIG9mIHNwZWNpZmljIGZsb3dzIHRvIHRoZSBuZXR3b3JrIGludGVyZmFjZSBjYXJkIChOSUMpIG9yIGEgZGVkaWNhdGVkIGhhcmR3YXJlIGFjY2VsZXJhdG9yLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBvcHRpbWl6YXRpb24gdGVjaG5pcXVlLCBidXQgdGhlIGRldmlsIGlzIGFsd2F5cyBpbiB0aGUgZGV0YWlscywgc28gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGEgZmV3IGNvcmUgY29uY2VwdHMuCgpJ4oCZbSBjdXJpb3VzIGFib3V0IHRoZSBzcGVjaWZpYyBjcml0ZXJpYSB0aGUgbW9kdWxlIHVzZXMgdG8gaWRlbnRpZnkgZmxvd3Mgc3VpdGFibGUgZm9yIG9mZmxvYWRpbmcuIElzIGl0IGJhc2VkIG9uIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzLCBwb3J0cywgcHJvdG9jb2xzLCBvciBhIGNvbWJpbmF0aW9uPyBBbmQgd2hhdCBhYm91dCBjb25uZWN0aW9uIHN0YXRlIHRyYWNraW5nPyBEb2VzIGl0IHN1cHBvcnQgVENQLCBVRFAsIG9yIGJvdGg/IEFyZSB0aGVyZSBhbnkgbGltaXRhdGlvbnMgb24gdGhlIG51bWJlciBvZiBjb25jdXJyZW50IG9mZmxvYWRlZCBmbG93cz8gVGhpcyBraW5kIG9mIGltcGxlbWVudGF0aW9uIGRldGFpbCBjYW4gaGF2ZSBhIG1hc3NpdmUgaW1wYWN0IG9uIG92ZXJhbGwgcGVyZm9ybWFuY2UuCgpUaGVuIHRoZXJlJiMzOTtzIHRoZSBxdWVzdGlvbiBvZiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGV4aXN0aW5nIElQdjYgZm9yd2FyZGluZyBzdGFjay4gRG9lcyBpdCBpbnRlZ3JhdGUgY2xlYW5seSB3aXRoIHRoZSByb3V0aW5nIHRhYmxlIGxvb2t1cHMgYW5kIHRoZSBuZWlnaGJvciBkaXNjb3ZlcnkgcHJvY2Vzcz8gRG9lcyBpdCBuZWVkIHRvIGhhbmRsZSBmcmFnbWVudGF0aW9uIGFuZCByZWFzc2VtYmx5PyBBbmQgaG93IGRvZXMgaXQgaGFuZGxlIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMsIHBhcnRpY3VsYXJseSB0aG9zZSB0aGF0IGFyZSBub3QgY29tbW9ubHkgb2ZmbG9hZGVkPwoKQWxzbywgZXJyb3IgaGFuZGxpbmcgaXMgY3JpdGljYWxseSBpbXBvcnRhbnQsIHNvIEkmIzM5O2xsIHdhbnQgdG8gcmV2aWV3IHRoZSBtZWNoYW5pc20gZm9yIGhhbmRsaW5nIHBhY2tldCBkcm9wcywgY2hlY2tzdW0gZmFpbHVyZXMsIG9yIG90aGVyIGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnMuIEEgcm9idXN0IGltcGxlbWVudGF0aW9uIHdvdWxkIG5lZWQgdG8gZ3JhY2VmdWxseSBmYWxsIGJhY2sgdG8gc29mdHdhcmUgZm9yd2FyZGluZyB3aGVuIG5lY2Vzc2FyeSwgb3IgZXZlbiBzaWduYWwgYW4gaXNzdWUgdXBzdHJlYW0uCgpGaW5hbGx5LCBJ4oCZbGwgbmVlZCB0byBjaGVjayB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBGbG93IG9mZmxvYWQsIGluIGVzc2VuY2UsIGlzIGJ5cGFzc2luZyBzb21lIG9mIHRoZSBzdGFuZGFyZCBjaGVja3MuIEhvdyBkb2VzIGl0IGVuc3VyZSB0aGF0IG9mZmxvYWRlZCBmbG93cyBhcmUgbm90IHVzZWQgZm9yIG1hbGljaW91cyBwdXJwb3NlcywgYW5kIGhvdyBpcyBpdCBpbnRlZ3JhdGVkIHdpdGggYW55IHNlY3VyaXR5IGZlYXR1cmVzIGxpa2UgZmlyZXdhbGxpbmcgYW5kIGludHJ1c2lvbiBkZXRlY3Rpb24/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDY2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNjY6XHRzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbjEwNjc6XHRcdFx0XHRcdFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbjEwNjg6XHRcdFx0XHRcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxuMTA2OTpcdFx0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTA3MDpcdHtcbjEwNzE6XHRcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XG4xMDcyOlx0XHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xuMTA3MzpcdFx0dW5zaWduZWQgaW50IHRob2ZmLCBtdHU7XG4xMDc0Olx0XHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcbjEwNzU6XHRcbjEwNzY6XHRcdGRpciA9IHR1cGxlaGFzaC1cdTAwM2V0dXBsZS5kaXI7XG4xMDc3Olx0XHRmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pO1xuMTA3ODpcdFxuMTA3OTpcdFx0bXR1ID0gZmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgJiM0MzsgY3R4LVx1MDAzZW9mZnNldDtcbjEwODA6XHRcdGlmIChmbG93LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS50dW5fbnVtKVxuMTA4MTpcdFx0XHRtdHUgLT0gc2l6ZW9mKCppcDZoKTtcbjEwODI6XHRcbjEwODM6XHRcdGlmICh1bmxpa2VseShuZl9mbG93X2V4Y2VlZHNfbXR1KHNrYiwgbXR1KSkpXG4xMDg0Olx0XHRcdHJldHVybiAwO1xuMTA4NTpcdFxuMTA4NjpcdFx0aXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBjdHgtXHUwMDNlb2Zmc2V0KTtcbjEwODc6XHRcdHRob2ZmID0gc2l6ZW9mKCppcDZoKSAmIzQzOyBjdHgtXHUwMDNlb2Zmc2V0O1xuMTA4ODpcdFx0aWYgKG5mX2Zsb3dfc3RhdGVfY2hlY2soZmxvdywgaXA2aC1cdTAwM2VuZXh0aGRyLCBza2IsIHRob2ZmKSlcbjEwODk6XHRcdFx0cmV0dXJuIDA7XG4xMDkwOlx0XG4xMDkxOlx0XHRpZiAoIW5mX2Zsb3dfZHN0X2NoZWNrKFx1MDAyNnR1cGxlaGFzaC1cdTAwM2V0dXBsZSkpIHtcbjEwOTI6XHRcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuMTA5MzpcdFx0XHRyZXR1cm4gMDtcbjEwOTQ6XHRcdH1cbjEwOTU6XHRcbjEwOTY6XHRcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgdGhvZmYgJiM0MzsgY3R4LVx1MDAzZWhkcnNpemUpKVxuMTA5NzpcdFx0XHRyZXR1cm4gLTE7XG4xMDk4Olx0XG4xMDk5Olx0XHRmbG93X29mZmxvYWRfcmVmcmVzaChmbG93X3RhYmxlLCBmbG93LCBmYWxzZSk7XG4xMTAwOlx0XG4xMTAxOlx0XHRuZl9mbG93X2VuY2FwX3BvcChjdHgsIHNrYiwgdHVwbGVoYXNoKTtcbjExMDI6XHRcbjExMDM6XHRcdGlwNmggPSBpcHY2X2hkcihza2IpO1xuMTEwNDpcdFx0bmZfZmxvd19uYXRfaXB2NihmbG93LCBza2IsIGRpciwgaXA2aCk7XG4xMTA1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDI2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeS4gSGVyZSYjMzk7cyBhIHN1bW1hcnkgZm9ybWF0dGVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBJbiBEZWVwZXIqKgoKQWxyaWdodCwgSSYjMzk7dmUgZ290IHRoZSBpbml0aWFsIGluZm9ybWF0aW9uLCBidXQgaXQmIzM5O3Mgbm90IGVub3VnaCB0byBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZy4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGlzIGZ1cnRoZXIuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlLXJlYWQgdGhlIHRleHQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyB0aGF0IGNvdWxkIGJlIGNydWNpYWwgdG8gdGhlIG92ZXJhbGwgcGljdHVyZS4gSSYjMzk7bSBsb29raW5nIGZvciBudWFuY2UsIGZvciBpbXBsaWNpdCBtZWFuaW5ncywgYW5kIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGNoYWxsZW5nZSBteSBjdXJyZW50IHdvcmtpbmcgaHlwb3RoZXNpcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgdGhpcyBpbmZvcm1hdGlvbiBoYXMgdG8gb2ZmZXIuIEkgbmVlZCB0byBnZXQgdGhpcyByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEwNjpcdFx0aXA2aC1cdTAwM2Vob3BfbGltaXQtLTtcbjExMDc6XHRcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcbjExMDg6XHRcbjExMDk6XHRcdGlmIChmbG93X3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcbjExMTA6XHRcdFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cdTAwM2VjdCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpciwgc2tiLVx1MDAzZWxlbik7XG4xMTExOlx0XG4xMTEyOlx0XHRyZXR1cm4gMTtcbjExMTM6XHR9XG4xMTE0Olx0XG4xMTE1Olx0c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxuMTExNjpcdG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuMTExNzpcdFx0XHRcdCAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuMTExODpcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTExOTpcdHtcbjExMjA6XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcbjExMjE6XHRcbjExMjI6XHRcdGlmIChuZl9mbG93X3R1cGxlX2lwdjYoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMClcbjExMjM6XHRcdFx0cmV0dXJuIE5VTEw7XG4xMTI0Olx0XG4xMTI1Olx0XHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcdTAwMjZ0dXBsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTMyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJldmlld2luZyB0aGUgRmxvdyBPZmZsb2FkIFBhdGNoKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgdGhpcyBkaWZmIG9ubHkgdG91Y2hlcyBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgLiBUaGF0JiMzOTtzIGEgYml0IG9kZC4gV2h5IHdhc24mIzM5O3QgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGFsc28gbW9kaWZpZWQ/IElzIGl0IG5vdCBpbmNsdWRlZCBpbiB0aGUgZGlmZj8gTG9va2luZyBhdCB0aGUgY29kZSBjaGFuZ2UgaXRzZWxmLCBpdCBzZWVtcyBsaWtlIHRoZSBhdXRob3IgcmVwbGFjZWQgYG5mX2N0X2FjY3RfdXBkYXRlYCB3aXRoIGF0b21pYyBhZGRpdGlvbnMgdG8gYHR1cGxlLnBhY2tldHNgIGFuZCBgdHVwbGUuYnl0ZXNgIGZvciB0aGUgY291bnRlciB1cGRhdGUuCgpJZiBJUHY2IHdhc24mIzM5O3QgdG91Y2hlZCwgaXQmIzM5O3Mgc3RpbGwgdXNpbmcgdGhlIG9sZCBgbmZfY3RfYWNjdF91cGRhdGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuICBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCB0aGVuIGBuZl9mbG93X3N5bmNfY3Rfc3RhdHNgIHdpbGwgbGlrZWx5IHplcm8gb3V0IHN0YXRzIGZvciBJUHY2IGJlY2F1c2UgdGhlIGF0b21pYyBjb3VudGVycyBhcmUgb25seSBtb2RpZmllZCBmb3IgSVB2NC4gIEJ1dCB3YWl0LCBgbmZfZmxvd19zeW5jX2N0X3N0YXRzYCBhY3R1YWxseSAqYWRkcyogdGhlIGF0b21pYyB2YWx1ZXMgdG8gY29ubnRyYWNrIHN0YXRzIGFuZCB0aGVuIHplcm9lcyB0aGVtIG91dC4gVGhlIG9sZCBJUHY2IHBhdGggdXBkYXRlcyB0aGUgY29ubnRyYWNrIHN0YXRzIGRpcmVjdGx5LiBBbmQsIGBuZl9mbG93X3N5bmNfY3Rfc3RhdHNgIHdpbGwgYWRkIDAgdG8gdGhlIGNvbm50cmFjayBzdGF0cywgd2hpY2ggaXMgZmluZS4KClNvLCBpcyB0aGlzIGEgYnVnPyBNYXliZSwgYnV0IGl0IG1pZ2h0IHN0aWxsIGJlIG9rYXkuIFJlZ2FyZGxlc3MsIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIGZ1enppbmcuIEl0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0LgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzLiBgTkZfRkxPV19UQUJMRWAgaXMgdGhlIHByaW1hcnkgb25lLCBvZiBjb3Vyc2UuIGBORl9GTE9XX1RBQkxFX0lORVRgIG1pZ2h0IGJlIGltcGxpY2F0ZWQgaWYgSVB2NiB3YXMgdG91Y2hlZCBidXQgdGhlIHBhdGNoIG9ubHkgdG91Y2hlcyBJUHY0LCBhbmQgdGhlIGNvcmUgZ2FyYmFnZSBjb2xsZWN0b3IuIEl0IGxvb2tzIGxpa2UgYE5GX0ZMT1dfVEFCTEVgIGFsb25lIGlzIGVub3VnaC4gVGhhdCBvbmUgcmVsaWVzIG9uIGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuIEFueXRoaW5nIGVsc2U/IEkgZG9uJiMzOTt0ICp0aGluayogYE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTYCBpcyBzdHJpY3RseSByZXF1aXJlZC4KCk9rYXksIHRpbWUgdG8gcGljayBzb21lIGdvb2QgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZy4gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYCBsb29rcyBwcm9taXNpbmcuIEFuZCBvYnZpb3VzbHksIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAgKGFsdGhvdWdoLCBpc24mIzM5O3QgdGhhdCBzdGF0aWM/KSBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd19vZmZsb2FkX2ZvcndhcmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00NTc9bmZfZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ2Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ2ODpzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NjktXHRcdFx0XHQgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTg2Nj1uZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg4NS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjg4NjpcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODg3LVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NzYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvZGUgU3RydWN0dXJlKioKCk9rYXksIHRoaXMgbG9va3Mgc3RhdGljLCB3aGljaCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgaW5saW5lZCB3aXRoaW4gYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYC4gS25vd2luZyB0aGF0LCBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgIGJlY29tZXMgdGhlIGtleSBzeW1ib2wgdG8gZm9jdXMgb24gZm9yIGRlZXBlciBhbmFseXNpcy4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBjb25maXJtIHRoYXQgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gVGhpcyBpcyBhIGNyaXRpY2FsIHN0ZXAgdG8gZW5zdXJlIEkgY2FuIGV4YW1pbmUgaXRzIHVzYWdlIGFuZCBob3cgdGhpcyBpbmxpbmluZywgaWYgaXQgZXhpc3RzLCBpcyBmdW5jdGlvbmluZyB3aXRoaW4gdGhlIGJyb2FkZXIgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipuZl9mbG93X29mZmxvYWRfaXBfaG9vayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTg2Nj1uZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg5My19XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4OTQ6RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19vZmZsb2FkX2lwX2hvb2spO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODk1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgzMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIENvbnVuZHJ1bXMqKgoKQWxyaWdodCwgdGhhdCBzZXR0bGVzIGl0IOKAkyBjb25maXJtZWQuIEJ1dCBub3csIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBjb21wbGV4aXR5IGJlZ2lucywgYW5kIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIG51YW5jZXMgb2YgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZsb3cgdGFibGUuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIGtlcm5lbCBhcmNoaXRlY3R1cmUgYW5kIGhvdyBpdHMgYmVoYXZpb3IgY2FuIGltcGFjdCBwZXJmb3JtYW5jZS4gVGhlcmUgYXJlIGxpa2VseSBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW5oZXJlbnQgdG8gdGhhdCBwcm9jZXNzIHRoYXQgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnMgYWJvdXQgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGdhcmJhZ2UgY29sbGVjdGlvbiwgdGhlIGFsZ29yaXRobXMgZW1wbG95ZWQsIGFuZCBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gVGhpcyByZXF1aXJlcyBhIGRlZXBlciBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKm5mX2Zsb3dfdGFibGVfZ2NfcnVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA2MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyB0aGUgYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYCBTeW1ib2wqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O3ZlIHNlZW4gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYCBiZWZvcmUuIEJ1dCwgd2FpdC4uLiBpc24mIzM5O3QgaXQgaW50ZXJuYWw/IERvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdCYjMzk7cyBiZWVuIGV4cG9ydGVkIGFzIGEgc3ltYm9sLiBUaGF0JiMzOTtzIGEgYml0IHVuZXhwZWN0ZWQuIEkgbmVlZCB0byBjb25maXJtLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIHNvdXJjZSBjb2RlLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIGBuZl9mbG93X3RhYmxlX2NvcmUuY2AuIEkmIzM5O2xsIHF1aWNrbHkgbmF2aWdhdGUgdGhlcmUgYW5kIHZlcmlmeSB3aGV0aGVyIGBuZl9mbG93X3RhYmxlX2djX3J1bmAgaXMgYWN0dWFsbHkgbWVhbnQgdG8gYmUgYWNjZXNzZWQgZnJvbSBvdXRzaWRlIHRoYXQgbW9kdWxlLCBvciBpZiBpdCYjMzk7cyBpbmRlZWQgYW4gaW50ZXJuYWwgZnVuY3Rpb24uIFRoZW4gSSBjYW4gcHJvY2VlZCBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX2djX3J1biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NTg0PXN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02MjAtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjYyMTp2b2lkIG5mX2Zsb3dfdGFibGVfZ2NfcnVuKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYyMi17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz02MjY9c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjMwLVx0Zmxvd190YWJsZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmZfZmxvd3RhYmxlLCBnY193b3JrLndvcmspO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2MzE6XHRuZl9mbG93X3RhYmxlX2djX3J1bihmbG93X3RhYmxlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjMyLVx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsIFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlZ2Nfd29yaywgSFopO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NzgyPXZvaWQgbmZfZmxvd190YWJsZV9mcmVlKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTEtXHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd190YWJsZSwgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwLCBOVUxMKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzkyOlx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc5My1cdG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaF9jbGVhbnVwKGZsb3dfdGFibGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MTE2NT12b2lkIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZF9mbHVzaF9jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNjgtXHRcdGZsdXNoX3dvcmtxdWV1ZShuZl9mbG93X29mZmxvYWRfZGVsX3dxKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTE2OTpcdFx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd3RhYmxlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3MC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5MzAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSBlbmNvdW50ZXJpbmcgdGhlc2UgY29uY2VwdHM6CgoqKkludGVybmFsIE1vZHVsZSBWYXJpYWJsZSBBbmFseXNpcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwaWVjZSBvZiBjb2RlLCBhbmQgaW1tZWRpYXRlbHkgbXkgbWluZCBmb2N1c2VzIG9uIHRoaXMgdmFyaWFibGUuIEl0JiMzOTtzICppbnRlcm5hbCogdG8gdGhlIG1vZHVsZSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBpbXBsaWVzIGl0JiMzOTtzIG5vdCBkZXNpZ25lZCBmb3IgZGlyZWN0IGV4dGVybmFsIGFjY2VzcyB3aGljaCBpcyBnZW5lcmFsbHkgYSBzb2xpZCBkZXNpZ24gcHJpbmNpcGxlLiBIb3dldmVyLCBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3RzOiBJdCYjMzk7cyAqdXNlZCogd2l0aGluIHRoZSBtb2R1bGUmIzM5O3Mgc2NvcGUsIHRoYXQmIzM5O3MgY2xlYXIuIEJ1dCBqdXN0IGJlY2F1c2UgaXQmIzM5O3MgbG9jYWwgZG9lc24mIzM5O3QgbWVhbiBpdCYjMzk7cyBjb21wbGV0ZWx5IGlzb2xhdGVkLiBNeSBuZXh0IHF1ZXN0aW9uIGlzOiB3aGF0JiMzOTtzIHRoZSBsaWZlY3ljbGU/IEhvdyBpcyBpdCBhZmZlY3RlZD8KClNvLCBmaXJzdCBJIG5lZWQgdG8gY2hlY2sgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoaXMgdmFyaWFibGUgaXNuJiMzOTt0LCBpbiBzb21lIGluZGlyZWN0IHdheSwgYmVpbmcgdXNlZCBieSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMuIElmIG9uZSBvZiB0aG9zZSBleHBvcnRlZCBmdW5jdGlvbnMgY2FuIHRyaWdnZXIgYW4gaW50ZXJuYWwgYWN0aW9uLCBJIG5lZWQgdG8ga25vdy4gSXQmIzM5O3MgY3JpdGljYWwgdG8gZGV0ZXJtaW5lIGlmIGFueSBvZiB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhhdCBpbnRlcm5hbCB2YXJpYWJsZS4gQW55IHBvaW50IG9mIGludGVyYWN0aW9uIHJlcXVpcmVzIHNjcnV0aW55LgoKTXkgbWluZCBpbW1lZGlhdGVseSB0dXJucyB0byBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMuIE9rYXksIHNvIGlzIHRoZXJlIHNvbWUgb3RoZXIgZnVuY3Rpb24gaW4gdGhpcyBtb2R1bGUuLi5saWtlIGBuZl9mbG93X3RhYmxlX2ZyZWVgPyBJdCYjMzk7cyBleHBvcnRlZCwgaXMgaXQgbm90PyBJIG5lZWQgdG8ga25vdy4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSB0aGUga2V5IGhlcmUsIGl0JiMzOTtzIG9uZSBsaWtlbHkgcG9pbnQgb2YgY29udGFjdCwgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaGFzIGFueSBlZmZlY3Qgb24gdGhlIHZhcmlhYmxlJiMzOTtzIHN0YXRlIG9yIGJlaGF2aW9yLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiB0byBldmFsdWF0ZSBmb3IgZGlyZWN0IG9yIGluZGlyZWN0IGluZmx1ZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbmZfZmxvd190YWJsZV9mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03ODI9dm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc5NS19XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc5NjpFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2ZyZWUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDU5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIEZsb3cgVGFibGUgR2FyYmFnZSBDb2xsZWN0aW9uIGZvciBLZXJuZWwgRnV6emluZyoqCgpPa2F5LCB5ZXMsIHRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgYXBwcm9hY2guIEkgdGhpbmsgZm9jdXNpbmcgb24gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYmVjYXVzZSBpdCYjMzk7cyBub3QgYSBzdGF0aWMgc3ltYm9sLiBUaGF0JiMzOTtzIGtleSwgYmVjYXVzZSBpZiBpdCYjMzk7cyBub3Qgc3RhdGljLCBpdCBoYXMgYSBkZWZpbml0ZSwgdHJhY2VhYmxlIHN5bWJvbCBhZGRyZXNzLiBTeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gaG9vayBpbnRvIHRoYXQuIFNvLCBJJiMzOTtsbCBkZWZpbml0ZWx5IGluY2x1ZGUgYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYCBpbiBteSBhbmFseXNpcywgYW5kIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AgdG9vLCBmb3IgZ29vZCBtZWFzdXJlLgoKTGV0JiMzOTtzIGFsc28gY2hlY2sgaG93IGBuZl9mbG93X3RhYmxlX2l0ZXJhdGVgIGZpdHMgaW50byB0aGlzLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGNhbGxlZCBieSBgbmZfZmxvd190YWJsZV9nY19ydW5gLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZmxvdyBvZiBjb250cm9sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX2l0ZXJhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTQyNj1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjQyNzpuZl9mbG93X3RhYmxlX2l0ZXJhdGUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDI4LVx0XHQgICAgICB2b2lkICgqaXRlcikoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NjIxPXZvaWQgbmZfZmxvd190YWJsZV9nY19ydW4oc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjIyLXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NjIzOlx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwLCBOVUxMKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjI0LX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc2Mz12b2lkIG5mX2Zsb3dfdGFibGVfZ2NfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NjUte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3NjY6XHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd3RhYmxlLCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAsIGRldik7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc2Ny1cdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZmbG93dGFibGUtXHUwMDNlZ2Nfd29yayk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03ODI9dm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc5MC1cdC8qIC4uLiBubyBtb3JlIHBlbmRpbmcgd29yayBhZnRlciB0aGlzIHN0YWdlIC4uLiAqL1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3OTE6XHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd190YWJsZSwgbmZfZmxvd190YWJsZV9kb19jbGVhbnVwLCBOVUxMKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzkyLVx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzIyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKioKCk9rYXksIGBuZl9mbG93X3RhYmxlX2djX3J1bmAgaXMgbG9va2luZyBnb29kLCBubyBpbW1lZGlhdGUgY29uY2VybnMgdGhlcmUuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGFuZCBtYWtlIHN1cmUgd2UmIzM5O3ZlIGdvdCBldmVyeXRoaW5nIGxpbmVkIHVwIHByb3Blcmx5LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aG9zZSBLY29uZmlnIG9wdGlvbnM6IGBORl9GTE9XX1RBQkxFYCwgYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYC4KCkhtbSwgbm93IHRoYXQgSSYjMzk7bSBsb29raW5nIGF0IGl0LCBgTkZfRkxPV19UQUJMRWAgaGFzIGRlcGVuZGVuY2llcy4gSXQgcmVsaWVzIG9uIGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBlbmFibGVkIHRvby4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbmVkIGNoZWNraW5nICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGZvciBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzLCBhbmQgdGhvc2UgZGVmaW5pdGVseSBzZWVtIHRvIHF1YWxpZnkuCgpTbywgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHdlIGNhbiBjb21waWxlIHRoaXMgc3RhdGljYWxseSwgSSBuZWVkIHRvIGluY2x1ZGUgYE5GX0ZMT1dfVEFCTEVgLCBhbmQgaXRzIHBhcmVudHM6IGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgaXMgYE5GX0ZMT1dfVEFCTEVgIHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBvciBkbyB3ZSBuZWVkIHRvIGNvbnNpZGVyIGBORl9GTE9XX1RBQkxFX0lORVRgIG9yIGV2ZW4gYE5GX0ZMT1dfVEFCTEVfSVBWNGA/IExldCYjMzk7cyB2ZXJpZnkgdGhhdCBxdWlja2x5LCBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgbGFzdCBvbmUgbWlnaHQgbm90IGV2ZW4gZXhpc3QgYW55bW9yZS4gSSYjMzk7bGwgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZfRkxPV19UQUJMRV9JUFY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkyNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5GX0ZMT1dfVEFCTEUgUmVmaW5lbWVudCoqCgpBbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaGFzIGNsZWFybHkgc2hpZnRlZC4gV2UmIzM5O3JlIG5vdyBqdXN0IGRlYWxpbmcgd2l0aCBgTkZfRkxPV19UQUJMRWAgaW4gdGhpcyBjb250ZXh0LiBFdmVyeXRoaW5nIGVsc2UgaXMgc2Vjb25kYXJ5LCBvciBhdCBsZWFzdCBiZWluZyBjb25zaWRlcmVkIHNlcGFyYXRlbHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjcnlzdGFsIGNsZWFyIG9uIHRoaXMgbmV3IHNjb3BlLgoKTXkgbmV4dCBpbW1lZGlhdGUgdGFzayB0aGVuLCBpcyB0byBkZWx2ZSBpbnRvIGBORl9GTE9XX1RBQkxFX0lORVRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIElORVQtc3BlY2lmaWMgYXNwZWN0cyBwbGF5IGludG8gdGhpcyBtb3JlIGdlbmVyYWxpemVkIGZsb3cgdGFibGUuIElzIGl0IGEgc3BlY2lhbGl6ZWQgaW1wbGVtZW50YXRpb24/IEFuIGV4dGVuc2lvbj8gRG9lcyB0aGlzIGNoYW5nZSB0aGUgaW1wbGljYXRpb25zIGRvd25zdHJlYW0/IFVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBpcyBjcml0aWNhbCBmb3IgYW55IHN1YnNlcXVlbnQgYW5hbHlzaXMgb3IgbW9kaWZpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZfRkxPV19UQUJMRV9JTkVUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE1MT1lbmRpZlxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNTItXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1MzpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRV9JTkVUKSAmIzQzOz0gbmZfZmxvd190YWJsZV9pbmV0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTU0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMwOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBGbG93IFRhYmxlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5mX2Zsb3dfdGFibGVfY29yZS5jYCBhbmQgYG5mX2Zsb3dfdGFibGVfaXAuY2AsIGFuZCB0aG9zZSBhcmUgZGVmaW5pdGVseSBjb21waWxlZCB1bmRlciBgQ09ORklHX05GX0ZMT1dfVEFCTEVgLiBObyBxdWVzdGlvbiBhYm91dCB0aGF0LCBzbyBgTkZfRkxPV19UQUJMRWAgaXMgdGhlIGtleSBjb25maWcgaGVyZS4gV2UmIzM5O3JlIGdvb2QgdG8gZ28uCgpOb3csIGxldCYjMzk7cyBkaWcgaW50byB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGUgY2hhbmdlcy4gVGhlIGNvcmUgaWRlYSBzZWVtcyB0byBiZSBzaGlmdGluZyBmcm9tIGRpcmVjdCBjb3VudGVyIHVwZGF0ZXMgaW4gdGhlIGZhc3QgcGF0aCAoYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCkg4oCTIHVzaW5nIGF0b21pY3MsIEkgYXNzdW1lIOKAkyB0byBkZWZlcnJpbmcgc3luY2hyb25pemF0aW9uIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGdhcmJhZ2UgY29sbGVjdGlvbiAoYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYCkuIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gaG93IHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBoYW5kbGVzIHN0YXRpc3RpY3MuIEl0JiMzOTtzIG1vdmluZyB0aGUgY3JpdGljYWwgcG9pbnQgb2YgY291bnRlciB1cGRhdGUsIGFuZCB0aGUgc3luY2hyb25pemF0aW9uIHJlbGF0ZWQgdG8gaXQsIGludG8gdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBwcm9jZXNzLCBhbmQgdGhhdCBjb3VsZCBkZWZpbml0ZWx5IGludHJvZHVjZSBzb21lIGludGVyZXN0aW5nIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBldmVuIHNvbWUgc3VidGxlIGJ1Z3MgaW4gaG93IHRoZSBHQyBvcGVyYXRlcy4gV2UgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGhhdC4KCkkmIzM5O20ga2V5aW5nIGluIG9uIGBuZl9mbG93X3RhYmxlX2djX3J1bmAgYW5kIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AuIFRob3NlIHNlZW0gbGlrZSBpbXBvcnRhbnQgZm9jYWwgcG9pbnRzLiBUaGUgb3RoZXIgY29uZmlncyBJJiMzOTtsbCBrZWVwIGluIG1pbmQgYXJlIGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuCgpKdXN0IHF1aWNrbHkgdmVyaWZ5aW5nLCBgTkZfRkxPV19UQUJMRWAgKmlzKiB0cmlzdGF0ZSwgd2hpY2ggaXMgZ29vZC4gV2UganVzdCBsaXN0IGl0IG91dCBpbiB0aGUgc3ltYm9scy4KCk9rYXksIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgIGlzIHRoZSAqb25seSogaG9vayBiZWluZyB1c2VkLiBUaGVyZSYjMzk7cyBhbHNvIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYCwgYnV0IHRoYXQgd2FzbiYjMzk7dCB0b3VjaGVkIGluIHRoZSBkaWZmLCBzbyBpdCBtdXN0IGJlIG9rYXkuIFdhaXQsIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAgaXMgY2FsbGVkIGJ5IGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AuIElzIHRoZXJlIGFueSBvdGhlciBjYWxsZXI/IEkgbmVlZCB0byBjaGVjayB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X29mZmxvYWRfZm9yd2FyZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTQ1Nz1uZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDY3LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NDY4OnN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ2OS1cdFx0XHRcdCAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9ODY2PW5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODg1LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6ODg2Olx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04ODctXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM4NAoJCQkJCQkJb3V0cHV0OiAxODIKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyB5b3VyIHN1bW1hcnk6CgoqKlRoZSBPZmZsb2FkIEhvb2sgYW5kIFNldHRpbmcgUmVzdWx0cyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGNhcmVmdWxseSByZXZpZXdpbmcgdGhlIHJlY2VudCBjaGFuZ2VzLCBhbmQgdGhlIGtleSBmdW5jdGlvbiBvZiBpbnRlcmVzdCBoZXJlIGlzIGRlZmluaXRpdmVseSBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgLiBGb3JnZXQgYWJvdXQgYW55IG90aGVyIHBvdGVudGlhbCBjYW5kaWRhdGVzOyB0aGF0JiMzOTtzIHRoZSBvbmUuIE15IGZvY3VzIGlzIG9uIHRoZSBjb3JyZWN0IGludGVyYWN0aW9uIHdpdGggdGhhdCBob29rLgoKTm93LCB3aXRoIHRoYXQgY29uZmlybWVkLCBJIG5lZWQgdG8gcHJvY2VlZCB3aXRoIHNldHRpbmcgdGhlIHJlc3VsdHMuIExldCYjMzk7cyBtYWtlIHRoYXQgY2FsbCB0byBgc2V0LXJlc3VsdHNgIGltbWVkaWF0ZWx5IHRvIGVuc3VyZSB0aGUgbmV4dCBzdGFnZSBnZXRzIHRoZSByZXF1aXJlZCBkYXRhLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHdpbGwgY29udGludWUgZnJvbS4gVGltZSB0byBtYWtlIGl0IGhhcHBlbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfZ2NfcnVuJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjb3JlIGxvZ2ljIHRvIHVzZSBhdG9taWMgb3BlcmF0aW9ucyBmb3IgcGFja2V0IGFuZCBieXRlIGNvdW50ZXJzIGluIHRoZSBmYXN0IHBhdGggKG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKSwgYW5kIGRlZmVycyB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZXNlIGNvdW50ZXJzIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHN5c3RlbSB0byB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHN0ZXAgKG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBmbG93IHRhYmxlIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgc3RhdGlzdGljcyBhcmUgdHJhY2tlZCBhbmQgc3luY2hyb25pemVkLCB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgY29uY3VycmVuY3kgaXNzdWVzIG9yIGJ1Z3MgaW4gdGhlIEdDIHByb2Nlc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfZ2NfcnVuJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjb3JlIGxvZ2ljIHRvIHVzZSBhdG9taWMgb3BlcmF0aW9ucyBmb3IgcGFja2V0IGFuZCBieXRlIGNvdW50ZXJzIGluIHRoZSBmYXN0IHBhdGggKG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKSwgYW5kIGRlZmVycyB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZXNlIGNvdW50ZXJzIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHN5c3RlbSB0byB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHN0ZXAgKG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBmbG93IHRhYmxlIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgc3RhdGlzdGljcyBhcmUgdHJhY2tlZCBhbmQgc3luY2hyb25pemVkLCB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgY29uY3VycmVuY3kgaXNzdWVzIG9yIGJ1Z3MgaW4gdGhlIEdDIHByb2Nlc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzIHRvIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCB0byBiYXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRpc3RpY3MgdXBkYXRlcy4gVGhlc2UgZmllbGRzIGFyZSB1cGRhdGVkIHZpYSBgYXRvbWljNjRfYWRkYCBpbiB0aGUgZm9yd2FyZGluZyBwYXRoIGFuZCBwZXJpb2RpY2FsbHkgZmx1c2hlZCB0byB0aGUgY29ubnRyYWNrIGVudHJ5IHZpYSBgYXRvbWljNjRfeGNoZ2AgaW4gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiBcblxuVGhlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkYCBjb250YWluaW5nIHRoZXNlIHR1cGxlcyBpcyBhbHdheXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AgKGluIGBmbG93X29mZmxvYWRfYWxsb2NgKSwgZW5zdXJpbmcgdGhlIG5ldyBhdG9taWMgY291bnRlcnMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBjb3VudGVycyBhcmUgbm90IGRpcmVjdGx5IGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCB0aGVpciB2YWx1ZXMgb25seSByZXByZXNlbnQgcGFja2V0IGFuZCBieXRlIGNvdW50cywgcHJlY2x1ZGluZyBhbnkgaW5mb3JtYXRpb24gbGVhay4gXG5cbldoaWxlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCBpcyBzb21ldGltZXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgdXNlZCBhcyBhIGxvb2t1cCBrZXkgKGUuZy4sIGluIGBuZl9mbG93X29mZmxvYWRfbG9va3VwYCksIHRoZSBoYXNoIGFuZCBjb21wYXJpc29uIGZ1bmN0aW9ucyBvbmx5IG9wZXJhdGUgb24gdGhlIGZpZWxkcyB1cCB0byB0aGUgYF9faGFzaGAgbWFya2VyLCB3aGljaCBwcmVjZWRlcyB0aGUgbmV3bHkgYWRkZWQgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcy4gVGh1cywgdGhlIHVuaW5pdGlhbGl6ZWQgc3RhdGUgb2YgdGhlc2UgZmllbGRzIGluIHN0YWNrLWFsbG9jYXRlZCBrZXlzIGlzIG5ldmVyIHJlYWQuXG5cbkFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBidWdzIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBzdGFuZGFyZCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI2NjdjZDNkYTY3ZTY4NDJmMzcxMjFkNzU4OTdjNjgyN2Q3Mzc3ZDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAwMDoxMzoxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCmluZGV4IGYyZTI3NzFmMTg4ZjQuLjYwNjAyMDIxMzNjNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaApAQCAtMTcxLDYgJiM0MzsxNzEsOSBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHsKIAkJCXUzMgkJaWlmaWR4OwogCQl9IHRjOwogCX07CiYjNDM7CiYjNDM7CWF0b21pYzY0X3QJCQlwYWNrZXRzOwomIzQzOwlhdG9taWM2NF90CQkJYnl0ZXM7CiB9OwogCiBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoIHsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jCmluZGV4IDAzMjQxZDRiZmQ1ZTguLmExZjM3Y2E5NTZiOGYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYwpAQCAtMTMsNiAmIzQzOzEzLDcgQEAKICNpbmNsdWRlICZsdDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuaCZndDsKIAogc3RhdGljIERFRklORV9NVVRFWChmbG93dGFibGVfbG9jayk7CiBzdGF0aWMgTElTVF9IRUFEKGZsb3d0YWJsZXMpOwpAQCAtNTY1LDExICYjNDM7NTY2LDI5IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZXh0ZW5kX2N0X3RpbWVvdXQoc3RydWN0IG5mX2Nvbm4gKmN0KQogCW5mX2N0X3B1dChjdCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBfX25mX2Zsb3dfc3luY19jdF9zdGF0cyhzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBpbnQgZGlyKQomIzQzO3sKJiM0MzsJdTY0IHBrdHMsIGJ5dGVzOwomIzQzOwomIzQzOwlwa3RzID0gYXRvbWljNjRfeGNoZygmYW1wO2Zsb3ctJmd0O3R1cGxlaGFzaFtkaXJdLnR1cGxlLnBhY2tldHMsIDApOwomIzQzOwlieXRlcyA9IGF0b21pYzY0X3hjaGcoJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbZGlyXS50dXBsZS5ieXRlcywgMCk7CiYjNDM7CW5mX2N0X2FjY3RfYWRkKGZsb3ctJmd0O2N0LCBkaXIsIHBrdHMsIGJ5dGVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmZfZmxvd19zeW5jX2N0X3N0YXRzKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpCiYjNDM7ewomIzQzOwlfX25mX2Zsb3dfc3luY19jdF9zdGF0cyhmbG93LCBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTsKJiM0MzsJX19uZl9mbG93X3N5bmNfY3Rfc3RhdHMoZmxvdywgRkxPV19PRkZMT0FEX0RJUl9SRVBMWSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwKIAkJCQkgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgdm9pZCAqZGF0YSkKIHsKLQlib29sIHRlYXJkb3duID0gdGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgJmFtcDtmbG93LSZndDtmbGFncyk7CiYjNDM7CWJvb2wgdGVhcmRvd247CiYjNDM7CiYjNDM7CW5mX2Zsb3dfc3luY19jdF9zdGF0cyhmbG93KTsKIAomIzQzOwl0ZWFyZG93biA9IHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpOwogCWlmIChuZl9mbG93X2hhc19leHBpcmVkKGZsb3cpIHx8CiAJICAgIG5mX2N0X2lzX2R5aW5nKGZsb3ctJmd0O2N0KSB8fAogCSAgICAhbmZfZmxvd19kc3RfY2hlY2soJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0udHVwbGUpIHx8CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jCmluZGV4IGM4YzI5YTlhMTY4NDQuLjY2YmU4MTVhYzJmZWIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jCkBAIC01MDksOCAmIzQzOzUwOSwxMCBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJaXBfZGVjcmVhc2VfdHRsKGlwaCk7CiAJc2tiX2NsZWFyX3RzdGFtcChza2IpOwogCi0JaWYgKGZsb3dfdGFibGUtJmd0O2ZsYWdzICZhbXA7IE5GX0ZMT1dUQUJMRV9DT1VOVEVSKQotCQluZl9jdF9hY2N0X3VwZGF0ZShmbG93LSZndDtjdCwgdHVwbGVoYXNoLSZndDt0dXBsZS5kaXIsIHNrYi0mZ3Q7bGVuKTsKJiM0MzsJaWYgKGZsb3dfdGFibGUtJmd0O2ZsYWdzICZhbXA7IE5GX0ZMT1dUQUJMRV9DT1VOVEVSKSB7CiYjNDM7CQlhdG9taWM2NF9hZGQoMSwgJmFtcDt0dXBsZWhhc2gtJmd0O3R1cGxlLnBhY2tldHMpOwomIzQzOwkJYXRvbWljNjRfYWRkKHNrYi0mZ3Q7bGVuLCAmYW1wO3R1cGxlaGFzaC0mZ3Q7dHVwbGUuYnl0ZXMpOwomIzQzOwl9CiAKIAlyZXR1cm4gMTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MTkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGbG93IE9mZmxvYWQgVHVwbGUgVXBkYXRlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcyB0byB0aGUgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgLiBUaGUgaW50ZW50IHNlZW1zIGNsZWFyOiB3ZSYjMzk7cmUgb2ZmbG9hZGluZyBhY2NvdW50aW5nIGluZm9ybWF0aW9uIHRvIHRoZSBmbG93IHRhYmxlLCByYXRoZXIgdGhhbiBkb2luZyB0aGUgYWNjb3VudGluZyBkaXJlY3RseSBpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBjb2RlLiBTbWFydC4gV2XigJlyZSBpbmNyZW1lbnRpbmcgdGhlc2UgYGF0b21pYzY0X3RgIGZpZWxkcyBpbiBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgLCByYXRoZXIgdGhhbiBjYWxsaW5nIGBuZl9jdF9hY2N0X3VwZGF0ZWAgZGlyZWN0bHkuIFRoaXMgc2hvdWxkIGltcHJvdmUgcGVyZm9ybWFuY2UuIFRoZW4sIHRoZXJlJiMzOTtzIGBuZl9mbG93X3N5bmNfY3Rfc3RhdHNgLCB3aGljaCBzb3VuZHMgbGlrZSBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgcmVhZGluZyBhbmQgKnJlc2V0dGluZyogdGhlc2UgYWNjdW11bGF0ZWQgc3RhdHMgYW5kIHB1c2hpbmcgdGhlbSBpbnRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHN5c3RlbSB1c2luZyBgbmZfY3RfYWNjdF9hZGRgLiBBbmQgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aGluIGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAuIEkgc2VlLi4uIGl0IGxvb2tzIGxpa2UgYSBwZXJpb2RpYyBzeW5jLgoKTm93LCBhIHF1ZXN0aW9uIGlzIGJ1Z2dpbmcgbWUuIEFyZSB0aG9zZSBuZXcgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcyBpbml0aWFsaXplZCB0byB6ZXJvIHdoZW4gYSBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgaXMgYWN0dWFsbHkgY3JlYXRlZD8gSSBjYW7igJl0IGFzc3VtZSBhbnl0aGluZy4gV2UgbmVlZCB0byBiZSBzdXJlIHRoZXNlIGNvdW50ZXJzIHN0YXJ0IGZyb20gYSBrbm93biBiYXNlbGluZS4gSWYgbm90LCB0aGUgYWNjb3VudGluZyBjb3VsZCBiZSBjb21wbGV0ZWx5IG9mZi4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgd2hlcmUgdGhlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzLiBJJiMzOTtsbCByZWFjaCBmb3IgYGdyZXBwZXJgIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbG93X29mZmxvYWRfdHVwbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmM9MzM9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTM0LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jOjM1OnN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy0zNi1icGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmM6Mzc6XHRcdFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSwgX19iZTE2IHByb3RvKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTM4LXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYzozOTpcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy00MC1cdHN0cnVjdCBuZl9mbG93dGFibGUgKm5mX2Zsb3dfdGFibGU7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTU3LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jOjU4Ol9fYnBmX2tmdW5jIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTU5LWJwZl94ZHBfZmxvd19sb29rdXAoc3RydWN0IHhkcF9tZCAqY3R4LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl90dXBsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtNjItXHRzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCA9IChzdHJ1Y3QgeGRwX2J1ZmYgKiljdHg7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmM6NjM6XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTY0LVx0XHQuaWlmaWR4ID0gZmliX3R1cGxlLVx1MDAzZWlmaW5kZXgsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTY5LVx0fTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYzo3MDpcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy03MS1cdF9fYmUxNiBwcm90bztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTIzPWZsb3dfb2ZmbG9hZF9maWxsX2RpcihzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyNDpcdFx0ICAgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjUte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyNjpcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKmZ0ID0gXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjctXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpjdHQgPSBcdTAwMjZmbG93LVx1MDAzZWN0LVx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9Nzg9RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2FsbG9jKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzktXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjgwOnN0YXRpYyB1MzIgZmxvd19vZmZsb2FkX2RzdF9jb29raWUoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqZmxvd190dXBsZSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtODEte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9ODg9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKm5mdF9yb3V0ZV9kc3RfZmV0Y2goc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo4OTpcdFx0XHRcdFx0ICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy05MC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz05OD1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9maWxsX3JvdXRlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTk5LVx0XHRcdFx0ICAgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoxMDA6XHRcdFx0XHQgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xMDEte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoxMDI6XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpmbG93X3R1cGxlID0gXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMTAzLVx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gbmZ0X3JvdXRlX2RzdF9mZXRjaChyb3V0ZSwgZGlyKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTE1OT1zdGF0aWMgdm9pZCBuZnRfZmxvd19kc3RfcmVsZWFzZShzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoxNjA6XHRcdFx0XHQgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMTYxLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTI3Nj1zdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9oYXNoKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yNzcte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyNzg6XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSA9IGRhdGE7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTI3OS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MjgwOlx0cmV0dXJuIGpoYXNoKHR1cGxlLCBvZmZzZXRvZihzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlLCBfX2hhc2gpLCBzZWVkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjgxLX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTI4Mz1zdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9oYXNoX29iaihjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjg0LXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Mjg1Olx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoID0gZGF0YTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjg2LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyODc6XHRyZXR1cm4gamhhc2goXHUwMDI2dHVwbGVoYXNoLVx1MDAzZXR1cGxlLCBvZmZzZXRvZihzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlLCBfX2hhc2gpLCBzZWVkKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjg4LX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTI5MD1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9oYXNoX2NtcChzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqYXJnLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjkyLXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MjkzOlx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUgPSBhcmctXHUwMDNla2V5O1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyOTQ6XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp4ID0gcHRyO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yOTUtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjI5NjpcdGlmIChtZW1jbXAoXHUwMDI2eC1cdTAwM2V0dXBsZSwgdHVwbGUsIG9mZnNldG9mKHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUsIF9faGFzaCkpKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yOTctXHRcdHJldHVybiAxO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MzAyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgbmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MzAzOlx0LmhlYWRfb2Zmc2V0XHRcdD0gb2Zmc2V0b2Yoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCwgbm9kZSksXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTMwNC1cdC5oYXNoZm5cdFx0XHQ9IGZsb3dfb2ZmbG9hZF9oYXNoLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9Mzk5PUVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF90ZWFyZG93bik7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQwMC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDAxOnN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MDItZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo0MDM6XHRcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDA0LXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDA1Olx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MDYtXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NDI3PW5mX2Zsb3dfdGFibGVfaXRlcmF0ZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDMxLXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDMyOlx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MzMtXHRzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyIGh0aTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTY3MT12b2lkIG5mX2Zsb3dfc25hdF9wb3J0KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTY3Mi1cdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NjczOlx0XHQgICAgICAgdTggcHJvdG9jb2wsIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTY3NC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz02OTc9dm9pZCBuZl9mbG93X2RuYXRfcG9ydChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02OTgtXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgdGhvZmYsIHU4IHByb3RvY29sLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2OTk6XHRcdCAgICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03MDAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9NDU9c3RhdGljIGludCBuZl9mbG93X3J1bGVfcm91dGVfaW5ldChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTQ2LVx0XHRcdFx0ICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6NDc6XHRcdFx0XHQgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy00OC1cdFx0XHRcdCAgIHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtNDkte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo1MDpcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKmZsb3dfdHVwbGUgPSBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy01MS1cdGludCBlcnI7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9ODM9c3RhdGljIHZvaWQgbmZfZmxvd19zbmF0X2lwKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04NC1cdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwaGRyICppcGgsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4NTpcdFx0XHQgICAgdW5zaWduZWQgaW50IHRob2ZmLCBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODYte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTEwNj1zdGF0aWMgdm9pZCBuZl9mbG93X2RuYXRfaXAoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwNy1cdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwaGRyICppcGgsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMDg6XHRcdFx0ICAgIHVuc2lnbmVkIGludCB0aG9mZiwgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwOS17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTI5PXN0YXRpYyB2b2lkIG5mX2Zsb3dfbmF0X2lwKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMzA6XHRcdFx0ICB1bnNpZ25lZCBpbnQgdGhvZmYsIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMzEtXHRcdFx0ICBzdHJ1Y3QgaXBoZHIgKmlwaClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xNjE9c3RhdGljIHZvaWQgbmZfZmxvd190dXBsZV9lbmNhcChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTYyLVx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjE2MzpcdFx0XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTY0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0yMTQ9c3RhdGljIGludCBuZl9mbG93X3R1cGxlX2lwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoyMTU6XHRcdFx0ICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMjE2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00MjQ9c3RhdGljIHZvaWQgbmZfZmxvd19lbmNhcF9wb3Aoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQyNS1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NDI2Olx0XHRcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQyNy17XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDU1LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NDU2OnN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ1Ny1uZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDU5LXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ2MDpcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ2MS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00Njg9c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDY5LVx0XHRcdFx0ICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ3MDpcdFx0XHRcdCAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ3MS1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NzIte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NDczOlx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ3NC1cdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9NTg1PXN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXBpcF9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjU4NjpcdFx0XHRcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTU4Ny1cdFx0XHRcdCAgICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIF9fYmUzMiAqaXBfZGFkZHIpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9NjMxPXN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfdjRfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo2MzI6XHRcdFx0XHQgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNjMzLVx0XHRcdFx0ICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsICBfX2JlMzIgKmlwX2RhZGRyKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTY0MT1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwNmlwNl9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjY0MjpcdFx0XHRcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNjQzLVx0XHRcdFx0ICAgICAgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTY5Mj1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX3Y2X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NjkzOlx0XHRcdFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTY5NC1cdFx0XHRcdCAgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTcwMz1zdGF0aWMgaW50IG5mX2Zsb3dfZW5jYXBfcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NzA0Olx0XHRcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNzA1LVx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpvdXRkZXYpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9NzMwPXN0cnVjdCBuZl9mbG93X3htaXQge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTczMy1cdHN0cnVjdCBuZXRfZGV2aWNlXHQqb3V0ZGV2O1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NzM0Olx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGU7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy03MzUtXHRib29sXHRcdFx0bmVlZHNfZ3NvX3NlZ21lbnQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9ODAwPXN0YXRpYyBpbnQgbmZfZmxvd19xdWV1ZV94bWl0NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6ODAxOlx0XHRcdCAgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04MDItXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTgwMy17XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4MDQ6XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjgwNTpcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04MDYtXHRzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04NjY9bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04Njgte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6ODY5Olx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODcwLVx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9OTM3PXN0YXRpYyB2b2lkIG5mX2Zsb3dfc25hdF9pcHY2KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtOTM5LVx0XHRcdCAgICAgIHVuc2lnbmVkIGludCB0aG9mZixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjk0MDpcdFx0XHQgICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtOTQxLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz05NjA9c3RhdGljIHZvaWQgbmZfZmxvd19kbmF0X2lwdjYoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05NjItXHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHRob2ZmLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6OTYzOlx0XHRcdCAgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05NjQte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTk4Mz1zdGF0aWMgdm9pZCBuZl9mbG93X25hdF9pcHY2KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05ODQtXHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6OTg1Olx0XHRcdCAgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTk4Ni1cdFx0XHQgICAgIHN0cnVjdCBpcHY2aGRyICppcDZoKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTEwMDA9c3RhdGljIGludCBuZl9mbG93X3R1cGxlX2lwdjYoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEwMDE6XHRcdFx0ICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDAyLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMDY2PXN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTA2Ny1cdFx0XHRcdFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEwNjg6XHRcdFx0XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwNjktXHRcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDcwLXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEwNzE6XHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTA3Mi1cdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTExNC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjExMTU6c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTExNi1uZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTE5LXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjExMjA6XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge307XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTIxLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTExMjg9c3RhdGljIGludCBuZl9mbG93X3F1ZXVlX3htaXQ2KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMTI5Olx0XHRcdCAgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTMwLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTMxLXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjExMzI6XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjExMzM6XHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTEzNC1cdHN0cnVjdCBuZl9mbG93X3htaXQgeG1pdCA9IHt9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTExOTU9bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExOTcte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTE5ODpcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExOTktXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlID0gcHJpdjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTk0PXN0YXRpYyBpbnQgbmZfZmxvd19ydWxlX21hdGNoKHN0cnVjdCBuZl9mbG93X21hdGNoICptYXRjaCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTU6XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk2LVx0XHRcdCAgICAgIHN0cnVjdCBkc3RfZW50cnkgKm90aGVyX2RzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTIzMj1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9ldGhfc3JjKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjMzLVx0XHRcdFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MjM0Olx0XHRcdFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjM1LVx0XHRcdFx0c3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjM4LVx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeTEgPSBmbG93X2FjdGlvbl9lbnRyeV9uZXh0KGZsb3dfcnVsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjIzOTpcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlLCAqdGhpc190dXBsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjQwLVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0yODI9c3RhdGljIGludCBmbG93X29mZmxvYWRfZXRoX2RzdChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTI4My1cdFx0XHRcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjI4NDpcdFx0XHRcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTI4NS1cdFx0XHRcdHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTI4OC1cdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnkxID0gZmxvd19hY3Rpb25fZW50cnlfbmV4dChmbG93X3J1bGUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoyODk6XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZSwgKnRoaXNfdHVwbGU7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTI5MC1cdGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTM0Mj1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY0X3NuYXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0zNDMtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjM0NDpcdFx0XHRcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMzQ1LVx0XHRcdFx0ICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0zNzM9c3RhdGljIGludCBmbG93X29mZmxvYWRfaXB2NF9kbmF0KHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMzc0LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzozNzU6XHRcdFx0XHQgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTM3Ni1cdFx0XHRcdCAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NDIzPXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2lwdjZfc25hdChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQyNC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NDI1Olx0XHRcdFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy00MjYtXHRcdFx0XHQgIHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTQ0OD1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9pcHY2X2RuYXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy00NDktXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjQ1MDpcdFx0XHRcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNDUxLVx0XHRcdFx0ICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz00OTI9c3RhdGljIGludCBmbG93X29mZmxvYWRfcG9ydF9zbmF0KHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNDkzLVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo0OTQ6XHRcdFx0XHQgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQ5NS1cdFx0XHRcdCAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NTI2PXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX3BvcnRfZG5hdChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTUyNy1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NTI4Olx0XHRcdFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy01MjktXHRcdFx0XHQgIHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTU4NT1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9yZWRpcmVjdChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTU4Ni1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo1ODc6XHRcdFx0XHQgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNTg4LVx0XHRcdFx0IHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNTg5LXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NTkwOlx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdGhpc190dXBsZSwgKm90aGVyX3R1cGxlO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy01OTEtXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NjI1PXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2VuY2FwX3R1bm5lbChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2MjY6XHRcdFx0XHQgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTYyNy1cdFx0XHRcdCAgICAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02Mjgte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2Mjk6XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0aGlzX3R1cGxlO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02MzAtXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NjU0PXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2RlY2FwX3R1bm5lbChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2NTU6XHRcdFx0XHQgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTY1Ni1cdFx0XHRcdCAgICAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02NTcte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2NTg6XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNjU5LVx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTY4Mz1uZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6Njg0Olx0XHRcdCAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNjg1LVx0XHRcdCAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02ODYte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2ODc6XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6Njg4Olx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGU7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTY4OS1cdGludCBpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9NzQzPWludCBuZl9mbG93X3J1bGVfcm91dGVfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjc0NDpcdFx0XHQgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzQ1LVx0XHRcdCAgICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz03NzI9aW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NzczOlx0XHRcdCAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy03NzQtXHRcdFx0ICAgIHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTc5OD1uZl9mbG93X29mZmxvYWRfcnVsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc5OS1cdFx0XHQgICBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjgwMDpcdFx0XHQgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04MDEte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04MDItXHRjb25zdCBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUgPSBvZmZsb2FkLVx1MDAzZWZsb3d0YWJsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6ODAzOlx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsICpvdGhlcl90dXBsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODA0LVx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyA9IG9mZmxvYWQtXHUwMDNlZmxvdztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTg4OD1zdGF0aWMgdm9pZCBuZl9mbG93X29mZmxvYWRfaW5pdChzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzX2Zsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04OTAtXHRcdFx0XHQgZW51bSBmbG93X2Nsc19jb21tYW5kIGNtZCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6ODkxOlx0XHRcdFx0IGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04OTItXHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTAwLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5MDE6c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfdHVwbGUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05MDItXHRcdFx0XHQgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTAzLVx0XHRcdFx0IHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTA0Olx0XHRcdFx0IGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTkwNS1cdFx0XHRcdCBpbnQgcHJpb3JpdHksIGludCBjbWQsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05MzYtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjkzNzpzdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF90dXBsZV9hZGQoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05MzgtXHRcdFx0XHQgIHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTM5Olx0XHRcdFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05NDAte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5NDE6XHRyZXR1cm4gbmZfZmxvd19vZmZsb2FkX3R1cGxlKG9mZmxvYWQtXHUwMDNlZmxvd3RhYmxlLCBvZmZsb2FkLVx1MDAzZWZsb3csXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk0Mi1cdFx0XHRcdCAgICAgZmxvd19ydWxlLCBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05NDctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk0ODpzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfdHVwbGVfZGVsKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTQ5Olx0XHRcdFx0ICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTUwLXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTUxOlx0bmZfZmxvd19vZmZsb2FkX3R1cGxlKG9mZmxvYWQtXHUwMDNlZmxvd3RhYmxlLCBvZmZsb2FkLVx1MDAzZWZsb3csIE5VTEwsIGRpcixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTUyLVx0XHRcdCAgICAgIG9mZmxvYWQtXHUwMDNlZmxvd3RhYmxlLVx1MDAzZXByaW9yaXR5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9OTU3PXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX3J1bGVfYWRkKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk2MS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTYyOlx0b2tfY291bnQgJiM0Mzs9IGZsb3dfb2ZmbG9hZF90dXBsZV9hZGQob2ZmbG9hZCwgZmxvd19ydWxlWzBdLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05NjMtXHRcdFx0XHRcdCAgIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05NjQtXHRpZiAodGVzdF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlZmxhZ3MpKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5NjU6XHRcdG9rX2NvdW50ICYjNDM7PSBmbG93X29mZmxvYWRfdHVwbGVfYWRkKG9mZmxvYWQsIGZsb3dfcnVsZVsxXSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTY2LVx0XHRcdFx0XHRcdCAgIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9OTkyPXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2RlbChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05OTQtXHRjbGVhcl9iaXQoSVBTX0hXX09GRkxPQURfQklULCBcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlY3QtXHUwMDNlc3RhdHVzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTk1Olx0Zmxvd19vZmZsb2FkX3R1cGxlX2RlbChvZmZsb2FkLCBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTk2LVx0aWYgKHRlc3RfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXHUwMDI2b2ZmbG9hZC1cdTAwM2VmbG93LVx1MDAzZWZsYWdzKSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTk3Olx0XHRmbG93X29mZmxvYWRfdHVwbGVfZGVsKG9mZmxvYWQsIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05OTgtXHRzZXRfYml0KE5GX0ZMT1dfSFdfREVBRCwgXHUwMDI2b2ZmbG9hZC1cdTAwM2VmbG93LVx1MDAzZWZsYWdzKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwMDAtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwMDE6c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3R1cGxlX3N0YXRzKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTAwMjpcdFx0XHRcdCAgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTAwMy1cdFx0XHRcdCAgICAgc3RydWN0IGZsb3dfc3RhdHMgKnN0YXRzKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDA0LXtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTAwNTpcdG5mX2Zsb3dfb2ZmbG9hZF90dXBsZShvZmZsb2FkLVx1MDAzZWZsb3d0YWJsZSwgb2ZmbG9hZC1cdTAwM2VmbG93LCBOVUxMLCBkaXIsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwMDYtXHRcdFx0ICAgICAgb2ZmbG9hZC1cdTAwM2VmbG93dGFibGUtXHUwMDNlcHJpb3JpdHksXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0xMDExPXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX3N0YXRzKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwMTUtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwMTY6XHRmbG93X29mZmxvYWRfdHVwbGVfc3RhdHMob2ZmbG9hZCwgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCwgXHUwMDI2c3RhdHNbMF0pO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDE3LVx0aWYgKHRlc3RfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXHUwMDI2b2ZmbG9hZC1cdTAwM2VmbG93LVx1MDAzZWZsYWdzKSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTAxODpcdFx0Zmxvd19vZmZsb2FkX3R1cGxlX3N0YXRzKG9mZmxvYWQsIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFksXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwMTktXHRcdFx0XHRcdCBcdTAwMjZzdGF0c1sxXSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Mjc5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIEZsb3cgT2ZmbG9hZCBTdHJ1Y3R1cmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpbW1lZGlhdGVseSBzZWVzIHRoZSBoaWVyYXJjaHkgaGVyZSDigJMgdGhlIGBmbG93X29mZmxvYWRfdHVwbGVgIGlzICpuZXN0ZWQqIHdpdGhpbiBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaGAsIHdoaWNoIGl0c2VsZiBpcyBhIGNvbXBvbmVudCBvZiB0aGUgb3ZlcmFyY2hpbmcgYHN0cnVjdCBmbG93X29mZmxvYWRgLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBsYXllcmVkIGRlc2lnbiwgbGlrZWx5IGFpbWVkIGF0IGVpdGhlciBtZW1vcnkgZWZmaWNpZW5jeSwgaW1wcm92ZWQgb3JnYW5pemF0aW9uLCBvciBwZXJoYXBzIG1vZHVsYXJpdHkgd2l0aGluIHRoZSBvZmZsb2FkIHByb2Nlc3MuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGhvdyBpcyB0aGUgbWFzdGVyIHN0cnVjdCwgYGZsb3dfb2ZmbG9hZGAgYWxsb2NhdGVkPyBJcyBpdCBvbiB0aGUgc3RhY2ssIHRoZSBoZWFwLCBvciBzb21lIG90aGVyIG1lbW9yeSByZWdpb24/IEtub3dpbmcgdGhhdCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgbGlmZXRpbWUgYW5kIHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24gcmVxdWlyZW1lbnRzIGZvciB0aGVzZSBzdHJ1Y3R1cmVzLiBJdCBpbXBhY3RzIGNhY2hlIGVmZmljaWVuY3kgYW5kIGhvdyB3ZSBzaG91bGQgYXBwcm9hY2ggZGVidWdnaW5nIGlmIHdlIGVuY291bnRlciBhbnkgaXNzdWVzIHdpdGggaXQgbGF0ZXIuIFRoZSBhbGxvY2F0aW9uIG1ldGhvZCB3aWxsIGRldGVybWluZSB0aGUgbGltaXRzIG9mIGl0cyBhdmFpbGFiaWxpdHksIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgaGFyZHdhcmUgb2ZmbG9hZGluZy4gS25vd2luZyB0aGlzIGdpdmVzIHVzIGEgZmFyIGJldHRlciBwaWN0dXJlIG9mIGhvdyB3ZSBjYW4gaW50ZXJhY3Qgd2l0aCBpdCBzYWZlbHkgaW4gYW4gb2ZmbG9hZCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbG93X29mZmxvYWRfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTIzPWZsb3dfb2ZmbG9hZF9maWxsX2RpcihzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjU0OnN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dfb2ZmbG9hZF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqY3QpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTU1LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc3LX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzg6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2FsbG9jKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzktXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz04NjA9c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2Rlc3Ryb3koc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlW10pXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04NjctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjg2ODpzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9hbGxvYyhjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTg2OS1cdFx0XHRcdCBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGVbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTk3Mz1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19hZGQoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTc3LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5Nzg6XHRlcnIgPSBuZl9mbG93X29mZmxvYWRfYWxsb2Mob2ZmbG9hZCwgZmxvd19ydWxlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTc5LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz01MD1zdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTExMS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjExMjpcdGZsb3cgPSBmbG93X29mZmxvYWRfYWxsb2MoY3QpO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTEzLVx0aWYgKCFmbG93KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE4OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBmbG93X29mZmxvYWRfYWxsb2NgIGZ1bmN0aW9uLCBmb2N1c2luZyBvbiB3aGF0IEkgc2VlIGFzIHRoZSBrZXkgYXNwZWN0czoKCioqRGl2aW5nIGludG8gRmxvdyBUYWJsZSBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBmbG93X29mZmxvYWRfYWxsb2NgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhlIGNvcmUgcmVzcG9uc2liaWxpdGllcyBvZiB0aGlzIGFsbG9jYXRpb24gZnVuY3Rpb24/IE9idmlvdXNseSwgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgcmVzb3VyY2VzIGZvciBhIG5ldyBmbG93IGVudHJ5IHRoYXQmIzM5O3MgZ29pbmcgdG8gYmUgb2ZmbG9hZGVkLiBCdXQgSSYjMzk7bSBsb29raW5nIGJleW9uZCB0aGF0IOKAkyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKnN0cmF0ZWd5KiBvZiB0aGUgYWxsb2NhdGlvbi4KCkZpcnN0LCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGhhbmRsZSB0aGUgZnVuZGFtZW50YWwgbWVtb3J5IGFsbG9jYXRpb24gaXRzZWxmLiBUaGlzIG1lYW5zIG1hbmFnaW5nIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgZmxvdyBlbnRyeSwgbGlrZWx5IGluY2x1ZGluZyB0aGUgdmFyaW91cyBmaWVsZHMgdGhhdCBkZWZpbmUgdGhlIGZsb3cgKHNvdXJjZS9kZXN0aW5hdGlvbiBJUHMsIHBvcnRzLCBwcm90b2NvbCwgZXRjLiksIGFuZCBhbnkgYXNzb2NpYXRlZCBtZXRhZGF0YSBuZWVkZWQgYnkgdGhlIG9mZmxvYWQgbWVjaGFuaXNtLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNpemluZyBzdHJhdGVneSwgd2hhdCBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFuZCBpZiBpdCYjMzk7cyBkeW5hbWljIG9yIHVzZXMgcHJlLWFsbG9jYXRlZCBwb29scy4gTWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcyBpbXBhY3QgZWZmaWNpZW5jeS4KCkkgYWxzbyBpbWFnaW5lIHRoYXQgaXQgbmVlZHMgdG8gaGFuZGxlIGluaXRpYWxpemF0aW9uIG9mIHRoaXMgbmV3IGZsb3cgZW50cnkuIFNldHRpbmcgZGVmYXVsdCB2YWx1ZXMgZm9yIGtleSBmaWVsZHMgaXMgY3JpdGljYWwuIFdoYXQgYXJlIHRoZSBlc3NlbnRpYWwgcGFyYW1ldGVycyB0aGF0IGFyZSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQgaGVyZT8gQXJlIGFueSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB1c2VkIHRvIGRlcml2ZSB0aGVzZSBpbml0aWFsIHZhbHVlcz8KCkFub3RoZXIgcG9pbnQgSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaXMgaG93IHRoaXMgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIGZsb3cgdGFibGUgbWFuYWdlbWVudC4gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgZmxvdyB0YWJsZSYjMzk7cyBsb2NraW5nIG1lY2hhbmlzbXM/IElzIGl0IGF3YXJlIG9mIGFueSBsaW1pdGF0aW9ucyBvbiB0aGUgbnVtYmVyIG9mIGZsb3dzIHRoYXQgY2FuIGJlIG9mZmxvYWRlZD8gRXJyb3IgY2hlY2tpbmcgaGVyZSBpcyBwYXJhbW91bnQgdG8gcHJldmVudCByZXNvdXJjZSBleGhhdXN0aW9uIGFuZCBlbnN1cmUgdGhlIHRhYmxlIGRvZXNuJiMzOTt0IGdldCBjb3JydXB0ZWQuCgpGaW5hbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgZm9yIGZ1dHVyZSBvcHRpbWl6YXRpb25zLiBEb2VzIHRoaXMgYWxsb2NhdGlvbiBmdW5jdGlvbiBwcm92aWRlIGFueSBob29rcyBvciBwbGFjZWhvbGRlcnMgZm9yIGFkdmFuY2VkIGZlYXR1cmVzLCBzdWNoIGFzIHByZS1hbGxvY2F0aW9uIG9mIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyBvciBpbnRlZ3JhdGlvbiB3aXRoIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBtZWNoYW5pc21zPyBIb3cgaXQmIzM5O3MgZGVzaWduZWQgd2lsbCBlaXRoZXIgY29uc3RyYWluIG9yIGVuYWJsZSBmdXR1cmUgZW5oYW5jZW1lbnRzLiBJJiMzOTttIGtlZW4gdG8gY29uc2lkZXIgd2hldGhlciB0aGlzIHJvdXRpbmUgaXMgd2VsbC1mYWN0b3JlZCBhbmQgZXh0ZW5zaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1NDpcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dfb2ZmbG9hZF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqY3QpXG4gIDU1Olx0e1xuICA1NjpcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcbiAgNTc6XHRcbiAgNTg6XHRcdGlmICh1bmxpa2VseShuZl9jdF9pc19keWluZyhjdCkpKVxuICA1OTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgNjA6XHRcbiAgNjE6XHRcdGZsb3cgPSBrbWVtX2NhY2hlX3phbGxvYyhmbG93X29mZmxvYWRfY2FjaGVwLCBHRlBfQVRPTUlDKTtcbiAgNjI6XHRcdGlmICghZmxvdylcbiAgNjM6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDY0Olx0XG4gIDY1Olx0XHRyZWZjb3VudF9pbmMoXHUwMDI2Y3QtXHUwMDNlY3RfZ2VuZXJhbC51c2UpO1xuICA2NjpcdFx0Zmxvdy1cdTAwM2VjdCA9IGN0O1xuICA2NzpcdFxuICA2ODpcdFx0Zmxvd19vZmZsb2FkX2ZpbGxfZGlyKGZsb3csIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xuICA2OTpcdFx0Zmxvd19vZmZsb2FkX2ZpbGxfZGlyKGZsb3csIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xuICA3MDpcdFxuICA3MTpcdFx0aWYgKGN0LVx1MDAzZXN0YXR1cyBcdTAwMjYgSVBTX1NSQ19OQVQpXG4gIDcyOlx0XHRcdF9fc2V0X2JpdChORl9GTE9XX1NOQVQsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuICA3MzpcdFx0aWYgKGN0LVx1MDAzZXN0YXR1cyBcdTAwMjYgSVBTX0RTVF9OQVQpXG4gIDc0Olx0XHRcdF9fc2V0X2JpdChORl9GTE9XX0ROQVQsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuICA3NTpcdFxuICA3NjpcdFx0cmV0dXJuIGZsb3c7XG4gIDc3Olx0fVxuICA3ODpcdEVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hbGxvYyk7XG4gIDc5Olx0XG4gIDgwOlx0c3RhdGljIHUzMiBmbG93X29mZmxvYWRfZHN0X2Nvb2tpZShzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpmbG93X3R1cGxlKVxuICA4MTpcdHtcbiAgODI6XHRcdGlmIChmbG93X3R1cGxlLVx1MDAzZWwzcHJvdG8gPT0gTkZQUk9UT19JUFY2KVxuICA4MzpcdFx0XHRyZXR1cm4gcnQ2X2dldF9jb29raWUoZHN0X3J0Nl9pbmZvKGZsb3dfdHVwbGUtXHUwMDNlZHN0X2NhY2hlKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTUzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIFplcm8tSW5pdGlhbGl6YXRpb24gYW5kIEF0b21pYyBPcGVyYXRpb25zKioKCk9rYXksIHNvIHRoaXMgY29kZSBzbmlwcGV0IHN0YXJ0cyBieSB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgLCBtZWFuaW5nIHRoZSBgZmxvd19vZmZsb2FkYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZCByaWdodCBvZmYgdGhlIGJhdC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cg4oCTIGl0IHNldHMgYSBiYXNlbGluZS4gVGhlbiwgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSBzZWUgYSBjaGFuZ2UgaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AgdGhhdCBlbXBsb3lzIGBhdG9taWM2NF9hZGRgIGZvciB0aGUgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcyB3aXRoaW4gYHR1cGxlaGFzaC0mZ3Q7dHVwbGVgLiBBbmQgbm93IHRoZXJlIGlzIGEgbmV3IGZ1bmN0aW9uIGBuZl9mbG93X3N5bmNfY3Rfc3RhdHNgIHdoaWNoIHVzZXMgYGF0b21pYzY0X3hjaGdgIG9uIHRoZXNlIHZlcnkgc2FtZSBmaWVsZHMuIFNpbmNlIGBmbG93X29mZmxvYWRgIGlzIHplcm8tYWxsb2NhdGVkLCBpdCBtZWFucyBgcGFja2V0c2AgYW5kIGBieXRlc2AgYXJlLCBpbml0aWFsbHksIGd1YXJhbnRlZWQgdG8gYmUgemVyby4KCk15IGJyYWluIGlzIGltbWVkaWF0ZWx5IGFza2luZywgaXMgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIGV2ZXIgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgdGhlbiBwYXNzZWQgYWxvbmcgc29tZXdoZXJlIHdoZXJlIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBhcmUgcmVhZD8gVGhpcyBpcyBhIHBvdGVudGlhbCBwb2ludCBvZiBjb250ZW50aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGF0b21pY3MgYXJlIHRydWx5IGJlaW5nIHVzZWQgYXMgaW50ZW5kZWQuIExvb2tpbmcgYXQgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuY2AsIEkgc2VlIGEgc3RhY2sgYWxsb2NhdGlvbiwgbGlrZSB0aGlzOgoKYGBgYwoJc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB0dXBsZSA9IHsKCQkuaWlmaWR4ID0gZmliX3R1cGxlLSZndDtpZmluZGV4LAouLi4KCX07CmBgYAoKU28geWVzLCB0aGVyZSYjMzk7cyBhIHN0YWNrIHZhcmlhYmxlLiBOb3csIGRvZXMgdGhpcyBzdGFjay1hbGxvY2F0ZWQgYHR1cGxlYCBnZXQgcGFzc2VkIHRvIGEgZnVuY3Rpb24gb3IgY29kZSBwYXRoIHRoYXQgc3Vic2VxdWVudGx5IHJlYWRzIHRoZSBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIGJ5IGV4YW1pbmluZyBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jYCBtb3JlIGNsb3NlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1ODpcdF9fYnBmX2tmdW5jIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxuICA1OTpcdGJwZl94ZHBfZmxvd19sb29rdXAoc3RydWN0IHhkcF9tZCAqY3R4LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl90dXBsZSxcbiAgNjA6XHRcdFx0ICAgIHN0cnVjdCBicGZfZmxvd3RhYmxlX29wdHMgKm9wdHMsIHUzMiBvcHRzX2xlbilcbiAgNjE6XHR7XG4gIDYyOlx0XHRzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCA9IChzdHJ1Y3QgeGRwX2J1ZmYgKiljdHg7XG4gIDYzOlx0XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge1xuICA2NDpcdFx0XHQuaWlmaWR4ID0gZmliX3R1cGxlLVx1MDAzZWlmaW5kZXgsXG4gIDY1Olx0XHRcdC5sM3Byb3RvID0gZmliX3R1cGxlLVx1MDAzZWZhbWlseSxcbiAgNjY6XHRcdFx0Lmw0cHJvdG8gPSBmaWJfdHVwbGUtXHUwMDNlbDRfcHJvdG9jb2wsXG4gIDY3Olx0XHRcdC5zcmNfcG9ydCA9IGZpYl90dXBsZS1cdTAwM2VzcG9ydCxcbiAgNjg6XHRcdFx0LmRzdF9wb3J0ID0gZmliX3R1cGxlLVx1MDAzZWRwb3J0LFxuICA2OTpcdFx0fTtcbiAgNzA6XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcbiAgNzE6XHRcdF9fYmUxNiBwcm90bztcbiAgNzI6XHRcbiAgNzM6XHRcdGlmIChvcHRzX2xlbiAhPSBORl9CUEZfRkxPV1RBQkxFX09QVFNfU1opIHtcbiAgNzQ6XHRcdFx0b3B0cy1cdTAwM2VlcnJvciA9IC1FSU5WQUw7XG4gIDc1Olx0XHRcdHJldHVybiBOVUxMO1xuICA3NjpcdFx0fVxuICA3NzpcdFxuICA3ODpcdFx0c3dpdGNoIChmaWJfdHVwbGUtXHUwMDNlZmFtaWx5KSB7XG4gIDc5Olx0XHRjYXNlIEFGX0lORVQ6XG4gIDgwOlx0XHRcdHR1cGxlLnNyY192NC5zX2FkZHIgPSBmaWJfdHVwbGUtXHUwMDNlaXB2NF9zcmM7XG4gIDgxOlx0XHRcdHR1cGxlLmRzdF92NC5zX2FkZHIgPSBmaWJfdHVwbGUtXHUwMDNlaXB2NF9kc3Q7XG4gIDgyOlx0XHRcdHByb3RvID0gaHRvbnMoRVRIX1BfSVApO1xuICA4MzpcdFx0XHRicmVhaztcbiAgODQ6XHRcdGNhc2UgQUZfSU5FVDY6XG4gIDg1Olx0XHRcdHR1cGxlLnNyY192NiA9ICooc3RydWN0IGluNl9hZGRyICopXHUwMDI2ZmliX3R1cGxlLVx1MDAzZWlwdjZfc3JjO1xuICA4NjpcdFx0XHR0dXBsZS5kc3RfdjYgPSAqKHN0cnVjdCBpbjZfYWRkciAqKVx1MDAyNmZpYl90dXBsZS1cdTAwM2VpcHY2X2RzdDtcbiAgODc6XHRcdFx0cHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiAgODg6XHRcdFx0YnJlYWs7XG4gIDg5Olx0XHRkZWZhdWx0OlxuICA5MDpcdFx0XHRvcHRzLVx1MDAzZWVycm9yID0gLUVBRk5PU1VQUE9SVDtcbiAgOTE6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDkyOlx0XHR9XG4gIDkzOlx0XG4gIDk0Olx0XHR0dXBsZWhhc2ggPSBicGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwKHhkcC1cdTAwM2VyeHEtXHUwMDNlZGV2LCBcdTAwMjZ0dXBsZSwgcHJvdG8pO1xuICA5NTpcdFx0aWYgKElTX0VSUih0dXBsZWhhc2gpKSB7XG4gIDk2Olx0XHRcdG9wdHMtXHUwMDNlZXJyb3IgPSBQVFJfRVJSKHR1cGxlaGFzaCk7XG4gIDk3Olx0XHRcdHJldHVybiBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ4NQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIEJQRiBYRFAgRmxvdyBUdXBsZSBMb29rdXAqKgoKQWxyaWdodCwgc28gYHR1cGxlYCBpcyBiZWluZyBwYXNzZWQgaW50byBgYnBmX3hkcF9mbG93X3R1cGxlX2xvb2t1cGAuIEludGVyZXN0aW5nLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbiBjYWxsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYHR1cGxlYCB2YXJpYWJsZSAqaXMqIGFuZCBob3cgYGJwZl94ZHBfZmxvd190dXBsZV9sb29rdXBgIHV0aWxpemVzIGl0LiBJcyBpdCBhIGtleSBmb3IgYSBoYXNoIG1hcD8gQSBzdHJ1Y3R1cmUgY29udGFpbmluZyBmbG93IGluZm9ybWF0aW9uIHRoYXQgdGhlIFhEUCBwcm9ncmFtIGlzIGdvaW5nIHRvIHVzZSBmb3IgbG9va3Vwcz8gSSBuZWVkIHRvIHJldmlldyB0aGUgY29kZSBmb3IgdGhhdCBmdW5jdGlvbiBpbW1lZGlhdGVseS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBsb29rdXAgYWxnb3JpdGhtIGl0IGVtcGxveXMgKGlzIGl0IGEgcGVyZmVjdCBoYXNoLCBhIHNpbXBsZSBrZXkgY29tcGFyaXNvbiwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleCBsaWtlIGEgdHJpZSBvciBhIGJsb29tIGZpbHRlcj8pLCBhbmQgd2hhdCB0aGUgZnVuY3Rpb24gKnJldHVybnMqLiBJcyBpdCBhIG1hdGNoIGluZGljYXRvciwgb3IgZG9lcyBpdCByZXR1cm4gYSBwb2ludGVyIHRvIHNvbWUgYXNzb2NpYXRlZCBkYXRhPyBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgaGVyZSBpcyBjcml0aWNhbCBmb3IgZ3Jhc3BpbmcgdGhlIFhEUCBwcm9ncmFtJiMzOTtzIG92ZXJhbGwgbG9naWMgYW5kIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGRlZmluaXRpb24gb2YgYHR1cGxlYCBhbmQgdGhlbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJwZl94ZHBfZmxvd190dXBsZV9sb29rdXBgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIyCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRzdGF0aWMgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqXG4gIDM2Olx0YnBmX3hkcF9mbG93X3R1cGxlX2xvb2t1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuICAzNzpcdFx0XHRcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsIF9fYmUxNiBwcm90bylcbiAgMzg6XHR7XG4gIDM5Olx0XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7XG4gIDQwOlx0XHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpuZl9mbG93X3RhYmxlO1xuICA0MTpcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqbmZfZmxvdztcbiAgNDI6XHRcbiAgNDM6XHRcdG5mX2Zsb3dfdGFibGUgPSBuZl9mbG93dGFibGVfYnlfZGV2KGRldik7XG4gIDQ0Olx0XHRpZiAoIW5mX2Zsb3dfdGFibGUpXG4gIDQ1Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuICA0NjpcdFxuICA0NzpcdFx0dHVwbGVoYXNoID0gZmxvd19vZmZsb2FkX2xvb2t1cChuZl9mbG93X3RhYmxlLCB0dXBsZSk7XG4gIDQ4Olx0XHRpZiAoIXR1cGxlaGFzaClcbiAgNDk6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4gIDUwOlx0XG4gIDUxOlx0XHRuZl9mbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCxcbiAgNTI6XHRcdFx0XHQgICAgICAgdHVwbGVoYXNoW3R1cGxlaGFzaC1cdTAwM2V0dXBsZS5kaXJdKTtcbiAgNTM6XHRcdGZsb3dfb2ZmbG9hZF9yZWZyZXNoKG5mX2Zsb3dfdGFibGUsIG5mX2Zsb3csIGZhbHNlKTtcbiAgNTQ6XHRcbiAgNTU6XHRcdHJldHVybiB0dXBsZWhhc2g7XG4gIDU2Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE2MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIERhdGEgRmxvdyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIGRhdGEgc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgYSBgdHVwbGVgLCBpcyBiZWluZyBoYW5kbGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgYGZsb3dfb2ZmbG9hZF9sb29rdXBgIGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uIGlzIGNsZWFybHkgYSBjcml0aWNhbCBjb21wb25lbnQgaW4gdGhpcyBmbG93LiBQYXNzaW5nIGEgYHR1cGxlYCB0byBpdCwgaW4gaXRzZWxmLCBpc24mIzM5O3QgaW5oZXJlbnRseSBhbGFybWluZywgYnV0IHRoZSAqaW1wbGljYXRpb25zKiBhcmUgd2hhdCBJIG5lZWQgdG8gdW5wYWNrIHF1aWNrbHkuIFdoYXQgZXhhY3RseSBpcyBgZmxvd19vZmZsb2FkX2xvb2t1cGAgZXhwZWN0aW5nIGZyb20gdGhhdCBgdHVwbGVgPyBJcyBpdCBqdXN0IGEga2V5LCBhIHNldCBvZiBwYXJhbWV0ZXJzLCBvciBhIG1vcmUgY29tcGxleCBjb25maWd1cmF0aW9uIGZvciBvZmZsb2FkaW5nPyBUaGUgc3RydWN0dXJlIG9mIHRoZSBgdHVwbGVgJiMzOTtzIGNvbnRlbnRzIGRpY3RhdGVzIHdoYXQga2luZCBvZiBwcm9jZXNzaW5nIGFuZCBvZmZsb2FkaW5nIG9wdGltaXphdGlvbnMgYXJlIHBvc3NpYmxlIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYW4gZWZmaWNpZW50IHJlcHJlc2VudGF0aW9uLCBvciBpZiBpdCBtaWdodCBiZWNvbWUgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGZ1cnRoZXIgZG93biB0aGUgbGluZS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gdHJhY2UgdGhlIHVzZSBvZiB0aGF0IGB0dXBsZWAgd2l0aGluIHRoZSBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBvciB0aGUgbG9naWMgdGhlIHR1cGxlIGlzIGZlZWRpbmcgdGhlIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMTpcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxuIDQwMjpcdGZsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbiA0MDM6XHRcdFx0ICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlKVxuIDQwNDpcdHtcbiA0MDU6XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcbiA0MDY6XHRcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4gNDA3Olx0XHRpbnQgZGlyO1xuIDQwODpcdFxuIDQwOTpcdFx0dHVwbGVoYXNoID0gcmhhc2h0YWJsZV9sb29rdXAoXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VyaGFzaHRhYmxlLCB0dXBsZSxcbiA0MTA6XHRcdFx0XHRcdCAgICAgIG5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXMpO1xuIDQxMTpcdFx0aWYgKCF0dXBsZWhhc2gpXG4gNDEyOlx0XHRcdHJldHVybiBOVUxMO1xuIDQxMzpcdFxuIDQxNDpcdFx0ZGlyID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpcjtcbiA0MTU6XHRcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XG4gNDE2Olx0XHRpZiAodGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncykpXG4gNDE3Olx0XHRcdHJldHVybiBOVUxMO1xuIDQxODpcdFxuIDQxOTpcdFx0aWYgKHVubGlrZWx5KG5mX2N0X2lzX2R5aW5nKGZsb3ctXHUwMDNlY3QpKSlcbiA0MjA6XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4Nzg5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggbmV0d29yayBmbG93IG9mZmxvYWRpbmc6CgoqKkFuYWx5emluZyBhIEZsb3cgT2ZmbG9hZCBMb29rdXAqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgZmxvdyBlbnRyeSBsb29rdXAgdXNpbmcgYHJoYXNodGFibGVfbG9va3VwYC4gVGhhdCYjMzk7cyBzdGFuZGFyZCBmb3IgdGhpcyBzb3J0IG9mIHRoaW5nIOKAkyBlZmZpY2llbnQsIGNvbGxpc2lvbi1yZXNpc3RhbnQgbG9va3VwcyBhcmUgY3JpdGljYWwgZm9yIHBlcmZvcm1hbmNlIGluIHRoZSBkYXRhcGF0aC4gQW5kIHRoZSBrZXkgd2UmIzM5O3JlIHVzaW5nIGlzIGEgYHR1cGxlYC4gVGhhdCYjMzk7cyB3aGF0IEkmIzM5O2QgZXhwZWN0OyBpdCYjMzk7cyB0aGUgY29yZSBzZXQgb2YgaWRlbnRpZnlpbmcgZmllbGRzIOKAkyBzb3VyY2UvZGVzdGluYXRpb24gSVAsIHBvcnRzLCBwcm90b2NvbCwgZXRjLiAtIHRoYXQgZGVmaW5lcyBhIHBhcnRpY3VsYXIgZmxvdy4gTm93LCBsZXQmIzM5O3MgZGlnIGEgYml0IGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhpcyBgcmhhc2h0YWJsZWAgaXMgY29uZmlndXJlZC4gSSBuZWVkIHRvIGV4YW1pbmUgYG5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXNgLiBUaGF0JiMzOTtsbCB0ZWxsIG1lIHRoZSBoYXNoIGZ1bmN0aW9uLCB0aGUgdGFibGUgc2l6ZSwgYW55IHJlc2l6aW5nIHN0cmF0ZWdpZXMg4oCTIGFsbCB0aGUgY3JpdGljYWwgcGFyYW1ldGVycyB0aGF0IGluZmx1ZW5jZSBsb29rdXAgcGVyZm9ybWFuY2UgYW5kIGNvbGxpc2lvbiBoYW5kbGluZy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpcyB0dW5lZCBhcHByb3ByaWF0ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgbmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyA9IHtcbiAzMDM6XHRcdC5oZWFkX29mZnNldFx0XHQ9IG9mZnNldG9mKHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2gsIG5vZGUpLFxuIDMwNDpcdFx0Lmhhc2hmblx0XHRcdD0gZmxvd19vZmZsb2FkX2hhc2gsXG4gMzA1Olx0XHQub2JqX2hhc2hmblx0XHQ9IGZsb3dfb2ZmbG9hZF9oYXNoX29iaixcbiAzMDY6XHRcdC5vYmpfY21wZm5cdFx0PSBmbG93X29mZmxvYWRfaGFzaF9jbXAsXG4gMzA3Olx0XHQuYXV0b21hdGljX3Nocmlua2luZ1x0PSB0cnVlLFxuIDMwODpcdH07XG4gMzA5Olx0XG4gMzEwOlx0dW5zaWduZWQgbG9uZyBmbG93X29mZmxvYWRfZ2V0X3RpbWVvdXQoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdylcbiAzMTE6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5Mjc4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdlbGwtdmVyc2VkIGluIHRoaXMgYXJlYToKCioqRGVjb25zdHJ1Y3RpbmcgRmxvdyBPZmZsb2FkIEhhc2hpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpcyBpbW1lZGlhdGVseSBkcmF3biB0byBgZmxvd19vZmZsb2FkX2hhc2hgIGFuZCBgZmxvd19vZmZsb2FkX2hhc2hfY21wYC4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGVzZSBmdW5jdGlvbnMgcmVsYXRlIHRvIHRoZSBjb3JlIG9mIGFueSBnb29kIGZsb3cgb2ZmbG9hZCBtZWNoYW5pc20uIEkmIzM5O20gaW1hZ2luaW5nIGhvdyB0aGV5JiMzOTtyZSB1c2VkIGluIHRoZSBjb250ZXh0IG9mIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiwgYW5kIGhvdyB3ZSBsZXZlcmFnZSBpdC4gV2hhdCBhcmUgd2UgdHJ5aW5nIHRvIGFjaGlldmUgd2l0aCB0aGVzZT8gSSYjMzk7bSBwaWN0dXJpbmcgaG93IHRoZSBoYXNoIGNvbXB1dGF0aW9uIGhlbHBzIHVzIHJhcGlkbHkgaWRlbnRpZnkgYW5kIGNsYXNzaWZ5IG5ldHdvcmsgZmxvd3MuIElzIGl0IGZvciBsb2FkIGJhbGFuY2luZz8gUGFja2V0IGZpbHRlcmluZz8gU2VjdXJpdHk/IFRoZSBjb250ZXh0IGlzIGNyaXRpY2FsLgoKSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiB0byBmdWxseSBncmFzcCBob3cgdGhlIGBmbG93X29mZmxvYWRfaGFzaF9jbXBgIGZ1bmN0aW9uIHdvcmtzIGFsb25nc2lkZSB0aGUgaGFzaCBmdW5jdGlvbiwgYXMgdGhlIGNvbXBhcmlzb24gaXMganVzdCBhcyBpbXBvcnRhbnQuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGVxdWFsaXR5IGNoZWNrLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4IHdpdGggd2lsZGNhcmRzIG9yIHJhbmdlcz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgaG93IHRoZSBoYXJkd2FyZSYjMzk7cyB0YWJsZXMgYXJlIG9yZ2FuaXplZCBhbmQgYWNjZXNzZWQ/IElzIHRoaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyBhIG1hdGNoLCBvciBhcmUgdGhlcmUgYWRkaXRpb25hbCBjcml0ZXJpYSBpbiBwbGF5PwoKV2hhdCBhYm91dCBjb2xsaXNpb24gcmVzb2x1dGlvbj8gSG93IGlzIHRoYXQgaGFuZGxlZD8gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhpcyBzZXR1cCBpcyBzdXNjZXB0aWJsZSB0byBhbnkgaGFzaCBjb2xsaXNpb25zIGFuZCB3aGF0IGltcGFjdCB0aGVzZSB3aWxsIGhhdmUgb24gdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UuIFRoaW5raW5nIGJhY2sgdG8gbXkgZXhwZXJpZW5jZSBpbiB0aGlzIGZpZWxkLCBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgY29tcGFyaW5nIHRoaXMgYXBwcm9hY2ggdG8gb3RoZXIgaGFzaGluZyBtZXRob2RzIEkmIzM5O3ZlIHVzZWQuIEkgbmVlZCB0byBrbm93IGhvdyBlZmZpY2llbnQgdGhpcyBoYXNoaW5nIHNjaGVtZSBpcyBpbiByZWFsLXdvcmxkIHNjZW5hcmlvcy4gSXMgaXQgb3B0aW1pemVkIGZvciBzcGVjaWZpYyBwYWNrZXQgaGVhZGVyIGNvbWJpbmF0aW9ucz8gQW5kLCBtb3N0IGltcG9ydGFudGx5LCBpcyB0aGlzIGVudGlyZSBzb2x1dGlvbiBib3RoIGZ1bmN0aW9uYWxseSBjb3JyZWN0IGFuZCBwZXJmb3JtYW50IGluIGFsbCB0aGUgZGlmZmVyZW50IGVkZ2UgY2FzZXMgSSBjYW4gdGhpbmsgb2Y/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjc2Olx0c3RhdGljIHUzMiBmbG93X29mZmxvYWRfaGFzaChjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcbiAyNzc6XHR7XG4gMjc4Olx0XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSA9IGRhdGE7XG4gMjc5Olx0XG4gMjgwOlx0XHRyZXR1cm4gamhhc2godHVwbGUsIG9mZnNldG9mKHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUsIF9faGFzaCksIHNlZWQpO1xuIDI4MTpcdH1cbiAyODI6XHRcbiAyODM6XHRzdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9oYXNoX29iaihjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcbiAyODQ6XHR7XG4gMjg1Olx0XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2ggPSBkYXRhO1xuIDI4NjpcdFxuIDI4NzpcdFx0cmV0dXJuIGpoYXNoKFx1MDAyNnR1cGxlaGFzaC1cdTAwM2V0dXBsZSwgb2Zmc2V0b2Yoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSwgX19oYXNoKSwgc2VlZCk7XG4gMjg4Olx0fVxuIDI4OTpcdFxuIDI5MDpcdHN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2hhc2hfY21wKHN0cnVjdCByaGFzaHRhYmxlX2NvbXBhcmVfYXJnICphcmcsXG4gMjkxOlx0XHRcdFx0XHRcdGNvbnN0IHZvaWQgKnB0cilcbiAyOTI6XHR7XG4gMjkzOlx0XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSA9IGFyZy1cdTAwM2VrZXk7XG4gMjk0Olx0XHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp4ID0gcHRyO1xuIDI5NTpcdFxuIDI5NjpcdFx0aWYgKG1lbWNtcChcdTAwMjZ4LVx1MDAzZXR1cGxlLCB0dXBsZSwgb2Zmc2V0b2Yoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSwgX19oYXNoKSkpXG4gMjk3Olx0XHRcdHJldHVybiAxO1xuIDI5ODpcdFxuIDI5OTpcdFx0cmV0dXJuIDA7XG4gMzAwOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDExOAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmxvdyBPZmZsb2FkIFR1cGxlKioKCk9rYXksIHNvIHRoZSBoYXNoIGFuZCBjb21wYXJpc29uIGZ1bmN0aW9ucyBhcmUgb25seSBjb25jZXJuZWQgd2l0aCBhIHNwZWNpZmljIHBvcnRpb24gb2YgdGhlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYC4gVGhlIGtleSBpcyBpZGVudGlmeWluZyBleGFjdGx5IHdoZXJlIHRoYXQgcmVsZXZhbnQgcG9ydGlvbiBlbmRzLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhIHBvaW50ZXIgdG8gd2hlcmUgaXQgZGVjaWRlcyB3aGF0IGl0IGNvbnNpZGVycy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBgX19oYXNoYCBtZW1iZXIgd2l0aGluIHRoYXQgc3RydWN0dXJlLiBUaGF0IGBvZmZzZXRvZmAgY2FsbCBpcyB0ZWxsaW5nIG1lICpob3cgbWFueSBieXRlcyogaW50byB0aGUgc3RydWN0dXJlIEkgbmVlZCB0byBsb29rIHRvLiBVbmRlcnN0YW5kaW5nIHRoYXQgb2Zmc2V0IHdpbGwgbGV0IG1lIGZ1bGx5IGdyYXNwIHRoZSBzY29wZSBvZiB0aG9zZSBoYXNoaW5nIGFuZCBjb21wYXJpc29uIG9wZXJhdGlvbnMuIEl0JiMzOTtzIGFib3V0IGVmZmljaWVudGx5IGlkZW50aWZ5aW5nIHRoZSByZWxldmFudCBkYXRhIGZvciBwYWNrZXQgY2xhc3NpZmljYXRpb24gYW5kIGZpbHRlcmluZywgYW5kIEkgbmVlZCB0byBiZSBwcmVjaXNlIGFib3V0IHdoYXQgdGhlIGNvbXBhcmlzb24gaXMgYmFzZWQgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQwOlx0XHR1OFx0XHRcdFx0bDRwcm90bztcbiAxNDE6XHRcdHN0cnVjdCB7XG4gMTQyOlx0XHRcdHUxNlx0XHRcdGlkO1xuIDE0MzpcdFx0XHRfX2JlMTZcdFx0XHRwcm90bztcbiAxNDQ6XHRcdH0gZW5jYXBbTkZfRkxPV19UQUJMRV9FTkNBUF9NQVhdO1xuIDE0NTpcdFxuIDE0NjpcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWxcdHR1bjtcbiAxNDc6XHRcbiAxNDg6XHRcdC8qIEFsbCBtZW1iZXJzIGFib3ZlIGFyZSBrZXlzIGZvciBsb29rdXBzLCBzZWUgZmxvd19vZmZsb2FkX2hhc2goKS4gKi9cbiAxNDk6XHRcdHN0cnVjdCB7IH1cdFx0XHRfX2hhc2g7XG4gMTUwOlx0XG4gMTUxOlx0XHR1MTZcdFx0XHRcdGRpcjoyLFxuIDE1MjpcdFx0XHRcdFx0XHR4bWl0X3R5cGU6MyxcbiAxNTM6XHRcdFx0XHRcdFx0ZW5jYXBfbnVtOjIsXG4gMTU0Olx0XHRcdFx0XHRcdG5lZWRzX2dzb19zZWdtZW50OjEsXG4gMTU1Olx0XHRcdFx0XHRcdHR1bl9udW06MixcbiAxNTY6XHRcdFx0XHRcdFx0aW5fdmxhbl9pbmdyZXNzOjI7XG4gMTU3Olx0XHR1MTZcdFx0XHRcdG10dTtcbiAxNTg6XHRcdHUzMlx0XHRcdFx0ZHN0X2Nvb2tpZTtcbiAxNTk6XHRcdHN0cnVjdCBkc3RfZW50cnlcdFx0KmRzdF9jYWNoZTtcbiAxNjA6XHRcbiAxNjE6XHRcdHVuaW9uIHtcbiAxNjI6XHRcdFx0c3RydWN0IHtcbiAxNjM6XHRcdFx0XHR1MzJcdFx0aWZpZHg7XG4gMTY0Olx0XHRcdH07XG4gMTY1Olx0XHRcdHN0cnVjdCB7XG4gMTY2Olx0XHRcdFx0dTMyXHRcdGlmaWR4O1xuIDE2NzpcdFx0XHRcdHU4XHRcdGhfc291cmNlW0VUSF9BTEVOXTtcbiAxNjg6XHRcdFx0XHR1OFx0XHRoX2Rlc3RbRVRIX0FMRU5dO1xuIDE2OTpcdFx0XHR9IG91dDtcbiAxNzA6XHRcdFx0c3RydWN0IHtcbiAxNzE6XHRcdFx0XHR1MzJcdFx0aWlmaWR4O1xuIDE3MjpcdFx0XHR9IHRjO1xuIDE3MzpcdFx0fTtcbiAxNzQ6XHRcbiAxNzU6XHRcdGF0b21pYzY0X3RcdFx0XHRwYWNrZXRzO1xuIDE3NjpcdFx0YXRvbWljNjRfdFx0XHRcdGJ5dGVzO1xuIDE3NzpcdH07XG4gMTc4Olx0XG4gMTc5Olx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODc4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGbG93IE9mZmxvYWQgTG9va3VwKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHNvbWV0aGluZyYjMzk7cyBpbW1lZGlhdGVseSBqdW1waW5nIG91dC4gVGhlIGBfX2hhc2hgIGZ1bmN0aW9uIGlzIGNhbGxlZCAqYmVmb3JlKiB0aGUgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcy4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzIGFyZW4mIzM5O3QgYWN0dWFsbHkgcGFydCBvZiB0aGUgaGFzaCBrZXkgaXRzZWxmLiBBbmQgaWYgdGhleSYjMzk7cmUgbm90IHBhcnQgb2YgdGhlIGhhc2gga2V5LCB0aGV5IHdvdWxkbiYjMzk7dCBiZSBkaXJlY3RseSBjb21wYXJlZCB3aXRoaW4gYSBgbWVtY21wYCBvcGVyYXRpb24gZWl0aGVyLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLgoKTm93LCBob2xkIG9uLi4udGhpcyBtYWtlcyBtZSB0aGluay4gV2hhdCBhYm91dCBgbmZfZmxvd19vZmZsb2FkX2xvb2t1cGA/IEkgbmVlZCB0byBnbyBiYWNrIHRvIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY2AgYW5kIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhhdCBzZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDU2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NTY6XHRzdGF0aWMgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqXG4gNDU3Olx0bmZfZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIDQ1ODpcdFx0XHQgICAgICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA0NTk6XHR7XG4gNDYwOlx0XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge307XG4gNDYxOlx0XG4gNDYyOlx0XHRpZiAobmZfZmxvd190dXBsZV9pcChjdHgsIHNrYiwgXHUwMDI2dHVwbGUpIFx1MDAzYyAwKVxuIDQ2MzpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0NjQ6XHRcbiA0NjU6XHRcdHJldHVybiBmbG93X29mZmxvYWRfbG9va3VwKGZsb3dfdGFibGUsIFx1MDAyNnR1cGxlKTtcbiA0NjY6XHR9XG4gNDY3Olx0XG4gNDY4Olx0c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIDQ2OTpcdFx0XHRcdFx0ICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbiA0NzA6XHRcdFx0XHRcdCAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcbiA0NzE6XHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4gNDcyOlx0e1xuIDQ3MzpcdFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcbiA0NzQ6XHRcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4gNDc1Olx0XHR1bnNpZ25lZCBpbnQgdGhvZmYsIG10dTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0OTQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBUaG91Z2h0cyBvbiBgdHVwbGVgIEluaXRpYWxpemF0aW9uIGFuZCBGdW5jdGlvbiBFeGVjdXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGB0dXBsZWAgYmVpbmcgaW5pdGlhbGl6ZWQuIFRoZSBgPSB7fWAgaXMgYSBjbGV2ZXIgYml0IG9mIHplcm8taW5pdGlhbGl6YXRpb24uIEl0JiMzOTtzIGluaXRpYWxpemluZyB0aGUgZW50aXJlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIHRoZSBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzLCBldmVuIGlmIHRoZXkgYXJlbiYjMzk7dCBleHBsaWNpdGx5IHVzZWQgYXQgdGhlIG1vbWVudC4gIFRoaXMgaXMgcHJvYmFibHkgYmVpbmcgZG9uZSBmb3IgYSBjb3VwbGUgb2YgcmVhc29ucy4gIEZpcnN0LCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgZ2FyYmFnZSB2YWx1ZXMgZmxvYXRpbmcgYXJvdW5kLiBTZWNvbmQsIGl0IGdpdmVzIHVzIGEga25vd24gc3RhcnRpbmcgcG9pbnQgaWYgd2UgZGVjaWRlIGxhdGVyIHdlICpkbyogbmVlZCB0byB0cmFjayB0aG9zZSBzdGF0cy4gIENsZWFubGluZXNzIGlzIGFsd2F5cyBnb29kLgoKTm93LCB3ZSYjMzk7cmUgb2ZmIHRvIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXBgLiBJIHdvbmRlciB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGB0dXBsZWAgaW5pdGlhbGl6YXRpb24gaGF2ZSBpbiB0aGUgbG9va3VwIHByb2NlZHVyZS4gVGhpcyB6ZXJvLWluaXRpYWxpemVkIHN0YXRlIGlzIGludGVyZXN0aW5nLiAgTGV0JiMzOTtzIHNlZSB3aGVyZSB0aGlzIGxlYWRzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTE1Olx0c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxuMTExNjpcdG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuMTExNzpcdFx0XHRcdCAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuMTExODpcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTExOTpcdHtcbjExMjA6XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcbjExMjE6XHRcbjExMjI6XHRcdGlmIChuZl9mbG93X3R1cGxlX2lwdjYoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMClcbjExMjM6XHRcdFx0cmV0dXJuIE5VTEw7XG4xMTI0Olx0XG4xMTI1Olx0XHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcdTAwMjZ0dXBsZSk7XG4xMTI2Olx0fVxuMTEyNzpcdFxuMTEyODpcdHN0YXRpYyBpbnQgbmZfZmxvd19xdWV1ZV94bWl0NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTEyOTpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXG4xMTMwOlx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbjExMzE6XHR7XG4xMTMyOlx0XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTtcbjExMzM6XHRcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XG4xMTM0Olx0XHRzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxNDEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgYW5kIFVzZXJzcGFjZSBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgLCB3aGljaCBJIGluaXRpYWxpemVkIGFzIGFuIGVtcHR5IHN0cnVjdHVyZSwganVzdCBsaWtlIEkgd291bGQgaW4gYSBuZXcgcHJvamVjdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyB0aGluZyBpcyBldmVyLCBpbiBhbnkgd2F5LCBzaGFwZSwgb3IgZm9ybSwgY29waWVkIG92ZXIgdG8gdXNlcnNwYWNlLiBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGFuIGludGVybmFsIG5ldGZpbHRlciBzdHJ1Y3R1cmUgc3BlY2lmaWNhbGx5IHVzZWQgZm9yIGZsb3cgb2ZmbG9hZCwgYnV0IEkgbmVlZCB0byBiZSBjZXJ0YWluLgoKTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGltbWVkaWF0ZWx5IGRyYXduIHRvIGBuZl9mbG93X3N5bmNfY3Rfc3RhdHNgLiBUaGF0IGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RhdGlzdGljcy4gQWgsIHllcywgYW5kIEkga25vdyB0aG9zZSBzdGF0cyAqYXJlKiBzZW50IHRvIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgZWl0aGVyIHRocm91Z2ggY29ubnRyYWNrIGV2ZW50cyBvciB0aHJvdWdoIGR1bXBzLiBCdXQgdGhlIGtleSBoZXJlIGlzIHRoZSBgZmxvd19vZmZsb2FkX3R1cGxlYCBpdHNlbGYuIElzIHRoYXQgc3RydWN0dXJlIGRpcmVjdGx5IGludm9sdmVkIGluIHRob3NlIG5ldGxpbmsgbWVzc2FnZXM/IE15IGd1dCBzYXlzIG5vLCBidXQgSSBuZWVkIHRvIHZlcmlmeS4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgaXMgYWN0dWFsbHkgKnVzZWQqIGluIGFueSBuZXRsaW5rIG1lc3NhZ2VzIGF0IGFsbC4gVGhhdCYjMzk7cyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmxhX3B1dC4qZmxvd19vZmZsb2FkX3R1cGxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjU4NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipDaGVja2luZyBgZmxvd19vZmZsb2FkX3R1cGxlYCBVc2FnZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYC4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB1c2Vyc3BhY2UsIHdoaWNoIHdvdWxkIG1ha2UgZGVidWdnaW5nIGhhcmRlciBpZiBzb21ldGhpbmcmIzM5O3Mgb2ZmLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGlzIHN0cnVjdHVyZSBpcyBkaXJlY3RseSBpbnZvbHZlZCBpbiBhbnkgYGNvcHlfdG9fdXNlcmAgb3IgYW5hbG9nb3VzIGNhbGxzLiBJIGFtIGdvaW5nIHRvIHNlZSBpZiBhbnkgY29kZSBwYXRocyBjb3B5IHRoYXQgc3RydWN0IHRvIHVzZXJzcGFjZS4gVGhhdCB3aWxsIGJlIG15IGZpcnN0IGFyZWEgdG8gaW52ZXN0aWdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29weV90b191c2VyLipmbG93X29mZmxvYWRfdHVwbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzgyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmxvdyBPZmZsb2FkIFR1cGxlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGludG8gdGhlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYC4gTWFrZXMgc2Vuc2UsIHdlIG5lZWQgdG8gdHJhY2sgdGhhdC4gQW5kIHRoZXkmIzM5O3JlIHVzaW5nIGBhdG9taWM2NF90YCwgZ29vZCwgdGhyZWFkLXNhZmUgdXBkYXRlcyBhcmUgY3J1Y2lhbCBoZXJlLiBOb3csIHRoZSBtYWluIHVwZGF0ZSBsb2dpYyBzZWVtcyB0byBiZSBoYXBwZW5pbmcgaW4gYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYC4gSSBpbW1lZGlhdGVseSB3b25kZXIgaWYgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGlzIGFsc28gYmVpbmcgdXBkYXRlZCwgZ2l2ZW4gdGhhdCB0aGlzIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSBzaG91bGQgaGFuZGxlIGJvdGggSVB2NCBhbmQgSVB2Ni4gSG1tLCB0aGUgZGlmZiAqb25seSogbWVudGlvbnMgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYC4gVGhhdCYjMzk7cyBhIGJpdCBvZGQuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQgbWUgbG9vayBhdCB0aGUgZGlmZiBhZ2FpbiwganVzdCB0byBiZSBzdXJlLi4uIHllcCwganVzdCBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgIGluIGBuZl9mbG93X3RhYmxlX2lwLmNgLiBPa2F5LCBzbyBpdCBsb29rcyBsaWtlIElQdjYgaXMgYmVpbmcgaGFuZGxlZCBlbHNld2hlcmUsIG9yIHBlcmhhcHMgdXNpbmcgdGhlIHNhbWUgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhhdCBmdXJ0aGVyLiBGb3Igbm93LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBuZl9mbG93X3RhYmxlX2lwLmNgIGFyb3VuZCBsaW5lIDEwNjYgdG8gZ2V0IGEgZ3JpcCBvbiBob3cgdGhpcyBpcyBiZWluZyBoYW5kbGVkLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZSB0byBnZXQgYSBzZW5zZSBvZiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA2NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDY2Olx0c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4xMDY3Olx0XHRcdFx0XHRcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4xMDY4Olx0XHRcdFx0XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcbjEwNjk6XHRcdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcbjEwNzA6XHR7XG4xMDcxOlx0XHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xuMTA3MjpcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcbjEwNzM6XHRcdHVuc2lnbmVkIGludCB0aG9mZiwgbXR1O1xuMTA3NDpcdFx0c3RydWN0IGlwdjZoZHIgKmlwNmg7XG4xMDc1Olx0XG4xMDc2Olx0XHRkaXIgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyO1xuMTA3NzpcdFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbjEwNzg6XHRcbjEwNzk6XHRcdG10dSA9IGZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICYjNDM7IGN0eC1cdTAwM2VvZmZzZXQ7XG4xMDgwOlx0XHRpZiAoZmxvdy1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSlcbjEwODE6XHRcdFx0bXR1IC09IHNpemVvZigqaXA2aCk7XG4xMDgyOlx0XG4xMDgzOlx0XHRpZiAodW5saWtlbHkobmZfZmxvd19leGNlZWRzX210dShza2IsIG10dSkpKVxuMTA4NDpcdFx0XHRyZXR1cm4gMDtcbjEwODU6XHRcbjEwODY6XHRcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgY3R4LVx1MDAzZW9mZnNldCk7XG4xMDg3Olx0XHR0aG9mZiA9IHNpemVvZigqaXA2aCkgJiM0MzsgY3R4LVx1MDAzZW9mZnNldDtcbjEwODg6XHRcdGlmIChuZl9mbG93X3N0YXRlX2NoZWNrKGZsb3csIGlwNmgtXHUwMDNlbmV4dGhkciwgc2tiLCB0aG9mZikpXG4xMDg5Olx0XHRcdHJldHVybiAwO1xuMTA5MDpcdFxuMTA5MTpcdFx0aWYgKCFuZl9mbG93X2RzdF9jaGVjayhcdTAwMjZ0dXBsZWhhc2gtXHUwMDNldHVwbGUpKSB7XG4xMDkyOlx0XHRcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcbjEwOTM6XHRcdFx0cmV0dXJuIDA7XG4xMDk0Olx0XHR9XG4xMDk1Olx0XG4xMDk2Olx0XHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHRob2ZmICYjNDM7IGN0eC1cdTAwM2VoZHJzaXplKSlcbjEwOTc6XHRcdFx0cmV0dXJuIC0xO1xuMTA5ODpcdFxuMTA5OTpcdFx0Zmxvd19vZmZsb2FkX3JlZnJlc2goZmxvd190YWJsZSwgZmxvdywgZmFsc2UpO1xuMTEwMDpcdFxuMTEwMTpcdFx0bmZfZmxvd19lbmNhcF9wb3AoY3R4LCBza2IsIHR1cGxlaGFzaCk7XG4xMTAyOlx0XG4xMTAzOlx0XHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcbjExMDQ6XHRcdG5mX2Zsb3dfbmF0X2lwdjYoZmxvdywgc2tiLCBkaXIsIGlwNmgpO1xuMTEwNTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk0MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBOZXR3b3JrIEZsb3cgT2ZmbG9hZCBEaXNjcmVwYW5jeSoqCgpIbW0sIHNvbWV0aGluZyYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIFRoZSBkaWZmIEkmIzM5O20gcmV2aWV3aW5nIGlzbiYjMzk7dCByZWZsZWN0aW5nIGFueSBtb2RpZmljYXRpb25zIHRvIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYC4gVGhhdCYjMzk7cyB1bmV4cGVjdGVkLCBnaXZlbiB0aGUgY29udGV4dC4gQmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZS4gVGhlIGNoYW5nZSAqc2hvdWxkKiBiZSBpbiB0aGlzIGFyZWEsIHNvIGxldCYjMzk7cyBtZXRpY3Vsb3VzbHkgcmUtZXhhbWluZSB0aGUgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGNvZGUgaXRzZWxmLiBUaGVyZSBjb3VsZCBiZSBzb21ldGhpbmcgc3VidGxlIEkmIzM5O20gbWlzc2luZywgYSBoaWRkZW4gZGVwZW5kZW5jeSwgb3IgbWF5YmUgSSYjMzk7bSBsb29raW5nIGF0IHRoZSB3cm9uZyB2ZXJzaW9uLiBMZXQgbWUgZGlnIGEgYml0IGRlZXBlciBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEwNjpcdFx0aXA2aC1cdTAwM2Vob3BfbGltaXQtLTtcbjExMDc6XHRcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcbjExMDg6XHRcbjExMDk6XHRcdGlmIChmbG93X3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcbjExMTA6XHRcdFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cdTAwM2VjdCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpciwgc2tiLVx1MDAzZWxlbik7XG4xMTExOlx0XG4xMTEyOlx0XHRyZXR1cm4gMTtcbjExMTM6XHR9XG4xMTE0Olx0XG4xMTE1Olx0c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM1MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZsb3cgT2ZmbG9hZCBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgdXNlciBwcm92aWRlZCBhIGRpZmYsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGp1bXAgb24gdGhlIHBvc3NpYmlsaXR5IG9mIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGJlY2F1c2UgdGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBtb3N0IGltbWVkaWF0ZSBjb25jZXJuIHdpdGggY2hhbmdlcyBsaWtlIHRoaXMuIFRoZSBkaWZmIHNob3dzIHRoZSBgbmZfZmxvd190YWJsZV9pcC5jYCBmaWxlIGFuZCBgbmZfZmxvd190YWJsZV9jb3JlLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUgY29kZSBpcyBjaGFuZ2luZyBob3cgY291bnRlcnMgYXJlIGhhbmRsZWQgaW4gdGhlIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAgZnVuY3Rpb24uIE9yaWdpbmFsbHksIGl0IGxvb2tzIGxpa2UgaXQgY2FsbGVkIGBuZl9jdF9hY2N0X3VwZGF0ZWAsIGFuZCBub3cgaXQmIzM5O3MgdXNpbmcgYXRvbWljIG9wZXJhdGlvbnMgdG8gaW5jcmVtZW50IGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMuIFRoZSBvbGQgaW1wbGVtZW50YXRpb24gaXNuJiMzOTt0IGdvbmUgZnJvbSBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAsIHNvIHRoYXQgbWlnaHQgYmUgYSBidWcuCgpIb3dldmVyLCB0aGUgbWFpbiBxdWVzdGlvbiBpcywgJiMzNDtJcyB0aGVyZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkPyYjMzQ7IEdpdmVuIHRoZSBjb250ZXh0LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGFja2V0c2AgYW5kIGBieXRlc2AgdG8gYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgLiBCZWNhdXNlIGBrbWVtX2NhY2hlX3phbGxvY2AgaXMgdXNlZCB0byBhbGxvY2F0ZSBgc3RydWN0IGZsb3dfb2ZmbG9hZGAsIHRob3NlIGZpZWxkcyBhcmUgaW1wbGljaXRseSBpbml0aWFsaXplZCB0byB6ZXJvLCB3aGljaCBtZWFucyB0aGVyZSBzaG91bGQgYmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBpbiB0aGUgY29yZSBvZiB3aGF0JiMzOTtzIHNob3duLiBBbHNvLCBpbiBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgIHRoZXNlIGZpZWxkcyBhcmUgaW5jcmVtZW50ZWQgdXNpbmcgYGF0b21pYzY0X2FkZGAsIGFuZCBpbiBgbmZfZmxvd19zeW5jX2N0X3N0YXRzYCBgYXRvbWljNjRfeGNoZ2AgaXMgdXNlZCwgdGhlbiB0aGUgc3RhdHMgYXJlIGFkZGVkIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNrZXIuIFNvIGZhciwgc28gZ29vZC4KCk5vdywgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBlZGdlIGNhc2VzLiBMZXQgbWUgdGhpbmssIHdoYXQgaWYgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIHBhc3NlZCBhcm91bmQsIGJ5cGFzc2luZyBwcm9wZXIgaW5pdGlhbGl6YXRpb24/IE5vcGUsIGBuZl9mbG93X3N5bmNfY3Rfc3RhdHNgIHRha2VzIGEgYHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dgLCBhbmQgSSBrbm93IHRoYXQgaXMgaGVhcCBhbGxvY2F0ZWQuIENvdWxkIGl0IGJlIGNvcGllZCBzb21ld2hlcmUgZWxzZT8gTGV0IG1lIGNoZWNrIHRoZSBjb2RlIHRvIHNlZSBpZiB0aGUgdHVwbGUgaXMgY29waWVkLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY3B5LipmbG93X29mZmxvYWRfdHVwbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzcxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIERlZXAgaW50byBEYXRhIFN0cnVjdHVyZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIG5vdy4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgbWVtb3J5IGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgc3RydWN0dXJlIGlzIGFzc2lnbmVkIGJ5IHZhbHVlLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXMgY3JpdGljYWwgZm9yIGF2b2lkaW5nIHBvdGVudGlhbCBjb3B5IGlzc3VlcywgZW5zdXJpbmcgY29ycmVjdCBkYXRhIHRyYW5zZmVyLCBhbmQgdWx0aW1hdGVseSwgd3JpdGluZyBlZmZpY2llbnQgYW5kIGJ1Zy1mcmVlIGNvZGUgcmVsYXRlZCB0byB0aGUgZmxvdyBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkuIEEgYnktdmFsdWUgYXNzaWdubWVudCBoYXMgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zIGZvciBob3cgSSYjMzk7bGwgaGFuZGxlIGluc3RhbmNlcyBvZiB0aGlzIHN0cnVjdCBpbiBtZW1vcnkgYW5kIHdoZW4gcGFzc2luZyB0aGVtIGFzIHBhcmFtZXRlcnMgdG8gZnVuY3Rpb25zLiBBIHF1aWNrIGNoZWNrIGhlcmUgc2F2ZXMgYSBoZWFkYWNoZSBsYXRlciBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwqLiogPSBcXCouKnR1cGxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jPTY4Mz1nZXRfdW5pcXVlX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy03MDYtXHRcdFx0aWYgKCFuZl9uYXRfdXNlZF90dXBsZV9uZXcob3JpZ190dXBsZSwgY3QpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM6NzA3Olx0XHRcdFx0KnR1cGxlID0gKm9yaWdfdHVwbGU7XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtNzA4LVx0XHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy03MTgtXHQvKiAyKSBTZWxlY3QgdGhlIGxlYXN0LXVzZWQgSVAvcHJvdG8gY29tYmluYXRpb24gaW4gdGhlIGdpdmVuIHJhbmdlICovXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM6NzE5Olx0KnR1cGxlID0gKm9yaWdfdHVwbGU7XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtNzIwLVx0ZmluZF9iZXN0X2lwc19wcm90byh6b25lLCB0dXBsZSwgcmFuZ2UsIGN0LCBtYW5pcHR5cGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTgwMQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIGBmbG93X29mZmxvYWRfdHVwbGVgIGFuZCBQb3RlbnRpYWwgSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgSSYjMzk7dmUgZ290IGEgc3BlY2lmaWMgY29uY2VybiBhYm91dCB0aGUgYGZsb3dfb2ZmbG9hZF90dXBsZWAuIEkgaW1tZWRpYXRlbHkgbm90ZSB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IGFzc2lnbm1lbnRzICpieSB2YWx1ZSogdG8gdGhpcyBzdHJ1Y3QsIHdoaWNoLCBpbiBteSBleHBlcmllbmNlLCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGZpbmRpbmcgcG90ZW50aWFsIHByb2JsZW1zLgoKV2FpdCBhIG1pbnV0ZSwgd2hhdCBhYm91dCB0aGUgYGJwZl94ZHBfZmxvd19sb29rdXBgIGZ1bmN0aW9uIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmNgPyBBaCwgaGVyZSBpdCBpczoKCmBgYGMKCXN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7CgkJLmlpZmlkeCA9IGZpYl90dXBsZS0mZ3Q7aWZpbmRleCwKCQkubDNwcm90byA9IGZpYl90dXBsZS0mZ3Q7ZmFtaWx5LAoJCS5sNHByb3RvID0gZmliX3R1cGxlLSZndDtsNF9wcm90b2NvbCwKCQkuc3JjX3BvcnQgPSBmaWJfdHVwbGUtJmd0O3Nwb3J0LAoJCS5kc3RfcG9ydCA9IGZpYl90dXBsZS0mZ3Q7ZHBvcnQsCgl9OwpgYGAKClRoaXMgKmlzKiBhIHN0YWNrIHZhcmlhYmxlLCBhbmQgaXQmIzM5O3MgKnBhcnRpYWxseSogaW5pdGlhbGl6ZWQsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZy4gQnV0LCBpdCYjMzk7cyBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgYHsgLi4uIH1gIHN5bnRheC4KCkhvbGQgb24uIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCBoYXMgYSBidW5jaCBvZiBmaWVsZHMsIHJpZ2h0PyBJZiBpdCYjMzk7cyBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgdXNpbmcgdGhhdCBzeW50YXgsIHRoZW4gdGhlIGNvbXBpbGVyICpzaG91bGQqIHplcm8taW5pdGlhbGl6ZSB0aGUgcmVtYWluaW5nIGZpZWxkcy4gSSB0aGluayB0aGF0IGluY2x1ZGVzIHRoaW5ncyBsaWtlIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCwgc28gdGhvc2Ugd291bGQgYmUgemVyb2VkIG91dC4KClNvLCB0aGlzIHN0cnVjdCBgdHVwbGVgIGlzIHRoZW4gcGFzc2VkIHRvIGBicGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwYCwgd2hpY2ggcGFzc2VzIGl0IHRvIGBmbG93X29mZmxvYWRfbG9va3VwYCwgd2hpY2ggZmluYWxseSBwYXNzZXMgaXQgdG8gYHJoYXNodGFibGVfbG9va3VwYC4gYHJoYXNodGFibGVfbG9va3VwYCBoYXNoZXMgdGhlIGtleSB1cCB0byBgX19oYXNoYC4KClNpbmNlIHRoZSBgdHVwbGVgIGlzIGVmZmVjdGl2ZWx5IHplcm8taW5pdGlhbGl6ZWQgKG9yIGF0IGxlYXN0LCB0aGUgZmllbGRzICpzaG91bGQqIGJlKSwgdGhlcmUgc2hvdWxkbiYjMzk7dCBiZSBhbnkgdW5pbml0aWFsaXplZCBieXRlcyBpbiB0aGUgcGFkZGluZyBvciBmaWVsZHMgdXAgdG8gYF9faGFzaGAsIHJpZ2h0PyBXYWl0LCB3aGF0IGFib3V0IHBhZGRpbmcgYnl0ZXM/CgpUaGlzIGlzIHdoZXJlIEkgZ2V0IGEgYml0IGNvbmNlcm5lZC4gSW4gQywgaWYgeW91IHVzZSBgPSB7IC4uLiB9YCwgdGhlIGNvbXBpbGVyICpzaG91bGQqIHplcm8taW5pdGlhbGl6ZSBhbGwgbWVtYmVycyB0aGF0IGFyZW4mIzM5O3QgZXhwbGljaXRseSBhc3NpZ25lZCwgYnV0IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcGFkZGluZyBieXRlcyB0aGF0IG1pZ2h0IGV4aXN0IHdpdGhpbiB0aGUgc3RydWN0LiBQYWRkaW5nIGJ5dGVzIGFyZSAqTk9UKiBndWFyYW50ZWVkIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQhIFdlIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IHBhZGRpbmcgYnl0ZXMgaW4gYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIGJlZm9yZSB0aGUgYF9faGFzaGAgbWVtYmVyLCBhbmQgaWYgc28sIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgbWlnaHQgaGF2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjA6XHRcdHU4XHRpbm5lcl9wcm90bztcbiAxMjE6XHR9O1xuIDEyMjpcdFxuIDEyMzpcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUge1xuIDEyNDpcdFx0dW5pb24ge1xuIDEyNTpcdFx0XHRzdHJ1Y3QgaW5fYWRkclx0XHRzcmNfdjQ7XG4gMTI2Olx0XHRcdHN0cnVjdCBpbjZfYWRkclx0XHRzcmNfdjY7XG4gMTI3Olx0XHR9O1xuIDEyODpcdFx0dW5pb24ge1xuIDEyOTpcdFx0XHRzdHJ1Y3QgaW5fYWRkclx0XHRkc3RfdjQ7XG4gMTMwOlx0XHRcdHN0cnVjdCBpbjZfYWRkclx0XHRkc3RfdjY7XG4gMTMxOlx0XHR9O1xuIDEzMjpcdFx0c3RydWN0IHtcbiAxMzM6XHRcdFx0X19iZTE2XHRcdFx0c3JjX3BvcnQ7XG4gMTM0Olx0XHRcdF9fYmUxNlx0XHRcdGRzdF9wb3J0O1xuIDEzNTpcdFx0fTtcbiAxMzY6XHRcbiAxMzc6XHRcdGludFx0XHRcdFx0aWlmaWR4O1xuIDEzODpcdFxuIDEzOTpcdFx0dThcdFx0XHRcdGwzcHJvdG87XG4gMTQwOlx0XHR1OFx0XHRcdFx0bDRwcm90bztcbiAxNDE6XHRcdHN0cnVjdCB7XG4gMTQyOlx0XHRcdHUxNlx0XHRcdGlkO1xuIDE0MzpcdFx0XHRfX2JlMTZcdFx0XHRwcm90bztcbiAxNDQ6XHRcdH0gZW5jYXBbTkZfRkxPV19UQUJMRV9FTkNBUF9NQVhdO1xuIDE0NTpcdFxuIDE0NjpcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWxcdHR1bjtcbiAxNDc6XHRcbiAxNDg6XHRcdC8qIEFsbCBtZW1iZXJzIGFib3ZlIGFyZSBrZXlzIGZvciBsb29rdXBzLCBzZWUgZmxvd19vZmZsb2FkX2hhc2goKS4gKi9cbiAxNDk6XHRcdHN0cnVjdCB7IH1cdFx0XHRfX2hhc2g7XG4gMTUwOlx0XG4gMTUxOlx0XHR1MTZcdFx0XHRcdGRpcjoyLFxuIDE1MjpcdFx0XHRcdFx0XHR4bWl0X3R5cGU6MyxcbiAxNTM6XHRcdFx0XHRcdFx0ZW5jYXBfbnVtOjIsXG4gMTU0Olx0XHRcdFx0XHRcdG5lZWRzX2dzb19zZWdtZW50OjEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjEwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmxvdyBPZmZsb2FkIFR1cGxlIFN0cnVjdHVyZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBmbG93X29mZmxvYWRfdHVwbGVgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgbGFpZCBvdXQgaW4gbWVtb3J5IGZvciBlZmZpY2llbnQgbG9va3Vwcy4gRmlyc3QsIHRoZSBhZGRyZXNzIHVuaW9ucyDigJMgSVB2NCBhbmQgSVB2NiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcywgZWFjaCB0YWtpbmcgdXAgZWl0aGVyIDQgb3IgMTYgYnl0ZXMuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLiBUaGVuIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvcnRzLCBgc3JjX3BvcnRgIGFuZCBgZHN0X3BvcnRgLCBib3RoIDIgYnl0ZXMgZWFjaCwgYW5kIHRoZSBpbnRlcmZhY2UgaW5kZXggYGlpZmlkeGAsIGEgNC1ieXRlIGludGVnZXIuCgpOb3csIHRoZSBpbnRlcmVzdGluZyBiaXQ6IGBsM3Byb3RvYCBhbmQgYGw0cHJvdG9gLCBlYWNoIGEgc2luZ2xlIGJ5dGUuIFRoZW4sIHRoZSBgZW5jYXBgIGFycmF5LiBUaGVyZSBhcmUgdHdvIGVsZW1lbnRzLCBlYWNoIGEgYHUxNiBpZGAgYW5kIGEgYF9fYmUxNiBwcm90b2AuIFRoYXTigJlzIDImIzQzOzI9NCBieXRlcyBwZXIgZWxlbWVudCwgYW5kIHdlIGhhdmUgdHdvIGVsZW1lbnRzLCBzbyA4IGJ5dGVzIHRvdGFsIGZvciBgZW5jYXBgLiBUaGUgcG90ZW50aWFsIGZvciBwYWRkaW5nIGlzIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LiBMZXQgbWUgdGhpbmsuIGBsM3Byb3RvYCBpcyAxIGJ5dGUsIGBsNHByb3RvYCBpcyAxIGJ5dGUsIHNvIDIgYnl0ZXMgdG9nZXRoZXIuIFRoZW4gdGhlIGBlbmNhcGAgYXJyYXksIHdoaWNoIGlzIGFuIGFsaWdubWVudCBvZiAyIGJ5dGVzLCBzbyBubyBwYWRkaW5nIG5lZWRlZCEKCkZpbmFsbHksIHdlIGhhdmUgdGhlIGBmbG93X29mZmxvYWRfdHVubmVsIHR1bmAgc3RydWN0dXJlLiBUaGlzIGlzIGNyaXRpY2FsIGFzIGl0IHdpbGwgcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiB0dW5uZWxpbmcuIE5vdyB0aGUgcXVlc3Rpb24gaXMgdGhlIG1lbW9yeSBsYXlvdXQgb2YgYHR1bmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE1Olx0XHR1bmlvbiB7XG4gMTE2Olx0XHRcdHN0cnVjdCBpbl9hZGRyXHRkc3RfdjQ7XG4gMTE3Olx0XHRcdHN0cnVjdCBpbjZfYWRkclx0ZHN0X3Y2O1xuIDExODpcdFx0fTtcbiAxMTk6XHRcbiAxMjA6XHRcdHU4XHRpbm5lcl9wcm90bztcbiAxMjE6XHR9O1xuIDEyMjpcdFxuIDEyMzpcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUge1xuIDEyNDpcdFx0dW5pb24ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODExOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWxgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbGAgYWdhaW4uIFJpZ2h0LCBsZXQmIzM5O3MgcmVmcmVzaDogSSBrbm93IGl04oCZcyBrZXkgZm9yIGhhbmRsaW5nIHR1bm5lbCBvZmZsb2FkIHdpdGhpbiB0aGUgZmxvdyBvZmZsb2FkIGZyYW1ld29yay4gSSYjMzk7bSBmb2N1c2luZyBvbiBob3cgaXQgbWFuYWdlcyB0aGUgdHVubmVsLXNwZWNpZmljIGRhdGEuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdHVubmVsIGVuY2Fwc3VsYXRpb24vZGVjYXBzdWxhdGlvbiBkZXRhaWxzIGFyZSBzdG9yZWQgYW5kIHBhc3NlZCBhcm91bmQuIElzIGl0IHRoZSBhY3R1YWwgdHVubmVsIGhlYWRlciBkYXRhIGl0c2VsZj8gUG9pbnRlcnMgdG8gaXQ/IE9mZnNldHM/IEFyZSB0aGVyZSBhbnkgY2xldmVyIHRyaWNrcyB0byBvcHRpbWl6ZSB0aGUgY29weSBvcGVyYXRpb25zIG9yIHRvIGF2b2lkIHJlZHVuZGFudCBjYWxjdWxhdGlvbnM/IEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgZGlmZmVyZW50IHR1bm5lbCB0eXBlcyDigJMgVlhMQU4sIEdSRSwgSVBJUCwgZXRjLiDigJMgYXJlIGhhbmRsZWQuIERvZXMgdGhlIHN0cnVjdCBwcm92aWRlIGEgZ2VuZXJpYyBpbnRlcmZhY2UsIG9yIGRvZXMgaXQgcmVxdWlyZSB0eXBlLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucz8gQXJlIHRoZXJlIGFueSBmbGFncyBvciBiaXRmaWVsZHMgdGhhdCBpbmRpY2F0ZSB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBjZXJ0YWluIHR1bm5lbCBvcHRpb25zLCBsaWtlIGNoZWNrc3VtcyBvciBzZXF1ZW5jZSBudW1iZXJzPyBUaGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBpcyBjcml0aWNhbCBoZXJlLCBhcyB0aGlzIHN0cnVjdHVyZSBsaWtlbHkgbmVlZHMgdG8gYmUgZWZmaWNpZW50bHkgbWFwcGVkIHRvIGhhcmR3YXJlIHJlZ2lzdGVycyBvciBkZXNjcmlwdG9ycy4gV2hhdCBhYm91dCB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgc3RydWN0PyBXaGVyZSBpcyBpdCBhbGxvY2F0ZWQ/IFdoZW4gaXMgaXQgcG9wdWxhdGVkPyBIb3cgaXMgaXQgZGVhbGxvY2F0ZWQ/IE1lbW9yeSBhbGlnbm1lbnQ/IEFueSBwb3RlbnRpYWwgZm9yIGFsaWdubWVudCBpc3N1ZXMgb24gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXM/IEkgbmVlZCB0byBlbnN1cmUgaXQgcGxheXMgbmljZWx5IHdpdGggdGhpbmdzIGxpa2UgRE1BLiBBbmQgb2YgY291cnNlLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBmb3IgZnJhZ21lbnRhdGlvbiBvZiB0aGUgZGF0YS4gRG9lcyB0aGlzIHN0cnVjdHVyZSBuZWVkIHRvIGJlIGJyb2tlbiBkb3duLCBvciBpcyB0aGVyZSBhIHNpbmdsZSAmIzM0O2NodW5rJiMzNDsgdGhhdCBnZXRzIHBhc3NlZCB0byB0aGUgaGFyZHdhcmU/IFRoZSBkZXRhaWxzIGFyZSBjcnVjaWFsIGhlcmUuIFVsdGltYXRlbHksIEkgYW0gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgaW5mbHVlbmNpbmcgb2ZmbG9hZCBwZXJmb3JtYW5jZSBhbmQgdGhlIHN5c3RlbSYjMzk7cyBvdmVyYWxsIGZsZXhpYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MTAwPWVudW0gZmxvd19vZmZsb2FkX3htaXRfdHlwZSB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0xMDktXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjExMDpzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTExMS1cdHVuaW9uIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2NDEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbGAqKgoKT2theSwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbGAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHJpZ2h0PyBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgdHVubmVsLXJlbGF0ZWQgaW5mb3JtYXRpb24gaXMgc3RydWN0dXJlZCBmb3Igb2ZmbG9hZGluZy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBob3cgaXQmIzM5O3MgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggdGhlIGhhcmR3YXJlIGFuZCB0aGUgdmFyaW91cyB0dW5uZWwgcHJvdG9jb2xzIHdlIHN1cHBvcnQuIE15IG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGg6IHdoYXQgZmllbGRzIGFyZSBwcmVzZW50PyBBcmUgdGhleSBhbGlnbmVkIG9wdGltYWxseSBmb3IgaGFyZHdhcmUgYWNjZXNzPyBEb2VzIGl0IHN1cHBvcnQgdGhlIHR5cGljYWwgdHVubmVsIGhlYWRlcnMsIGFuZCBpZiBzbywgaG93IGlzIHRoYXQgcmVwcmVzZW50YXRpb24gaGFuZGxlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmU/IEFueSBwcm90b2NvbC1zcGVjaWZpYyBudWFuY2VzPyBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgd2hlcmUgd2UgbWlnaHQgYmUgYWJsZSB0byBvcHRpbWl6ZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgc29mdHdhcmUgYW5kIHRoZSBmb3J3YXJkaW5nIGVuZ2luZS4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgZ3Jhc3AgdGhlIG1lbW9yeSBsYXlvdXQsIGhvdyB0aGUgZGF0YSBnZXRzIHBhc3NlZCwgYW5kIG1vc3QgaW1wb3J0YW50bHksIGhvdyB0byBpbXByb3ZlIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTA6XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB7XG4gMTExOlx0XHR1bmlvbiB7XG4gMTEyOlx0XHRcdHN0cnVjdCBpbl9hZGRyXHRzcmNfdjQ7XG4gMTEzOlx0XHRcdHN0cnVjdCBpbjZfYWRkclx0c3JjX3Y2O1xuIDExNDpcdFx0fTtcbiAxMTU6XHRcdHVuaW9uIHtcbiAxMTY6XHRcdFx0c3RydWN0IGluX2FkZHJcdGRzdF92NDtcbiAxMTc6XHRcdFx0c3RydWN0IGluNl9hZGRyXHRkc3RfdjY7XG4gMTE4Olx0XHR9O1xuIDExOTpcdFxuIDEyMDpcdFx0dThcdGlubmVyX3Byb3RvO1xuIDEyMTpcdH07XG4gMTIyOlx0XG4gMTIzOlx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB7XG4gMTI0Olx0XHR1bmlvbiB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MDk0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjI5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBhbmQgdGhlIEZsb3cgT2ZmbG9hZCBQYXRjaDogQSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaXNzZWN0aW5nIHRoaXMgZmxvdyBvZmZsb2FkIHBhdGNoIHRvIGFzc2VzcyBpZiBpdCBpbnRyb2R1Y2VzIGFueSBuZXcgS01TQU4gaXNzdWVzLiBJbml0aWFsbHksIEkgaGFkIGNvbmNlcm5zIGFib3V0IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyB3aXRoaW4gYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgLCBwYXJ0aWN1bGFybHkgYmVjYXVzZSBvZiB0aGUgYGpoYXNoYCBmdW5jdGlvbiBhbmQgdGhlIHdheSB0aGVzZSBzdHJ1Y3RzIGFyZSBpbml0aWFsaXplZCwgc29tZXRpbWVzIHdpdGggYD0ge31gLiAgSSBzdGFydGVkIGJ5IGNhbGN1bGF0aW5nIHRoZSBzdHJ1Y3R1cmUgc2l6ZSBhbmQgY29uc2lkZXJpbmcgYWxpZ25tZW50LiBJIHdlbnQgdGhyb3VnaCB0aGUgbGF5b3V0IG9mIHRoZSBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWxgLCBpbmNsdWRpbmcgdGhlIHVuaW9ucyBhbmQgdGhlIGBpbm5lcl9wcm90b2AgZmllbGQsIGFuZCBmaWd1cmVkIG91dCB0aGUgcGFkZGluZyBpbnZvbHZlZC4gSSBjaGVja2VkIHRoZSBsYXlvdXQgdG8gc2VlIGlmIGFkZGluZyB0aGUgbmV3IGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMgY2hhbmdlZCB0aGUgbG9jYXRpb24gb2YgdGhlIHByZS1leGlzdGluZyBwYWRkaW5nLgoKTXkgdGhvdWdodCB3YXMgdGhhdCwgc2luY2UgcGFkZGluZyBieXRlcyBhcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUgemVyb2VkIHdoZW4gdXNpbmcgYD0ge31gLCBhbmQgdGhvc2UgYnl0ZXMgYXJlIHJlYWQgYnkgYGpoYXNoYCwgd2UgY291bGQgaGF2ZSBhIEtNU0FOIHByb2JsZW0uIEJ1dCwgSSByZWNhbGxlZCB0aGF0IHRoZSBoYXNoIGtleSBpbiB0aGlzIHN0cnVjdCBvbmx5IGdvZXMgdXAgdG8gdGhlIGBfX2hhc2hgIG1lbWJlciwgYW5kIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBwYWRkaW5nIHdvdWxkIGhhdmUgYmVlbiBhbiBpc3N1ZSAqYmVmb3JlKiB0aGlzIHBhdGNoLCBzaW5jZSB0aGUgcGF0Y2ggb25seSBhZGRzIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCAqYWZ0ZXIqIHRoZSBzZWN0aW9uIHRoYXQmIzM5O3MgaGFzaGVkLiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IGNoYW5nZSBhbnl0aGluZyBhYm91dCB0aGUgcHJlLWV4aXN0aW5nIGxheW91dC4KCkkgdGhlbiBjaGVja2VkIHdoZXJlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCBpcyBhY3R1YWxseSBjcmVhdGVkIGFuZCB1c2VkLiBJIGxvb2tlZCBhdCBgbmZfZmxvd19vZmZsb2FkX2xvb2t1cGAgYW5kIGBicGZfeGRwX2Zsb3dfbG9va3VwYCwgd2hlcmUgdGhlc2Ugc3RydWN0cyBhcmUgaW5kZWVkIHN0YWNrLWFsbG9jYXRlZCwgYnV0IEkgcmVhbGl6ZWQgdGhleSBhcmUgKm9ubHkqIHVzZWQgYXMgaGFzaCBrZXlzLiBUaGUgY29kZSAqZG9lc24mIzM5O3QqIHJlYWQgZnJvbSB0aGUgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcyBpbiB0aGVzZSBzdGFjayBhbGxvY2F0aW9ucy4KCkkgZm9jdXNlZCBvbiB0aGUgbmV3IGNvZGUgYWRkZWQgYnkgdGhlIHBhdGNoLiBJIHZlcmlmaWVkIHRoYXQgbmV3IGZpZWxkcyAoYHBhY2tldHNgIGFuZCBgYnl0ZXNgKSBhcmUgemVyby1pbml0aWFsaXplZCB0aHJvdWdoIGBrbWVtX2NhY2hlX3phbGxvY2AgYW5kIGFyZSB0aGVuIG9ubHkgYWNjZXNzZWQgdGhyb3VnaCBhdG9taWMgb3BlcmF0aW9ucy4gVGhlIHBhdGNoIGFkZHMgYGF0b21pYzY0X3QgcGFja2V0c2AgYW5kIGBieXRlc2AgdG8gdGhlIHN0cnVjdC4gQW5kIHRoZSBmdW5jdGlvbnMgYWRkZWQgdGhhdCB0b3VjaCB0aGVzZSBmaWVsZHMgdXNlIGBhdG9taWM2NF94Y2hnYCBhbmQgYGF0b21pYzY0X2FkZGAsIHNvIHRoZXkgcmVhZCBhbmQgbW9kaWZ5IHRob3NlIHZhcmlhYmxlcywgd2hpY2ggYXJlIGluaXRpYWxpemVkIHRvIHplcm8uIEkgYWxzbyBlbnN1cmVkIHRoYXQgYG5mX2Zsb3dfc3luY19jdF9zdGF0c2AgY2FuJiMzOTt0IGJlIGNhbGxlZCBvbiBhbiB1bmluaXRpYWxpemVkIGBmbG93YC4gVGhlIHN0cnVjdCBgZmxvd19vZmZsb2FkYCB3aGljaCBjb250YWlucyBgdHVwbGVgIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgLCBtZWFuaW5nIHRoZSBhZGRlZCBmaWVsZHMgYXJlIGluaXRpYWxpemVkIHRvIHplcm8uIEZ1cnRoZXJtb3JlLCB0aGVyZSYjMzk7cyBubyB3YXkgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4KClNvLCBhZnRlciB0aGlzIHJpZ29yb3VzIGV4YW1pbmF0aW9uLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IG5ldyBLTVNBTiB2dWxuZXJhYmlsaXRpZXMuIEFueSBwb3RlbnRpYWwgcGFkZGluZy91bmluaXRpYWxpemVkIHJlYWQgaXNzdWVzIGluIHRoZSBzdHJ1Y3R1cmUgKnByZS1leGlzdGVkKiB0aGlzIGNoYW5nZSwgYW5kIHRoZSBuZXcgZmllbGRzIGFyZSBoYW5kbGVkIGNvcnJlY3RseSwgd2l0aCBwcm9wZXIgaW5pdGlhbGl6YXRpb24gYW5kIGF0b21pYyBhY2Nlc3MuIE5vIG5lZWQgdG8gZmxhZyB0aGlzIGZvciBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZmxvd19vZmZsb2FkIFteO1xcKl0mIzQzOzsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDAwOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDUzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBgc3RydWN0IGZsb3dfb2ZmbG9hZGAgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyBzb21ldGhpbmcgaGVyZS4gVGhlcmUmIzM5O3Mgbm8gZXZpZGVuY2Ugb2YgYSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBmbG93X29mZmxvYWRgLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhbGxvY2F0aW9uIGJlaGF2aW9yIG9mIHRoaXMgc3RydWN0dXJlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IGlmIGBmbG93X29mZmxvYWRfYWxsb2NgIGlzIHRoZSBzb2xlIG1lY2hhbmlzbSB1c2VkIHRvIGFsbG9jYXRlIGluc3RhbmNlcyBvZiBgc3RydWN0IGZsb3dfb2ZmbG9hZGAuIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIHRvIGFuc3dlci4gS25vd2luZyB0aGF0IHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCB0aGUgaW50ZW5kZWQgbGlmZWN5Y2xlIGFuZCBtYW5hZ2VtZW50IG9mIHRoZXNlIGZsb3cgb2ZmbG9hZCBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBjb25maXJtIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB0aGUgb25seSBlbnRyeSBwb2ludCBmb3IgYWxsb2NhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWFsbG9jLipzaXplb2YuKmZsb3dfb2ZmbG9hZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIzMDIKCQkJCQkJCW91dHB1dDogMzE2CgkJCQkJCQl0aG91Z2h0czogMTUxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBOZWVkc0tNU0FOID0gZmFsc2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoZXkmIzM5O3ZlIGFkZGVkIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBhdG9taWMgY291bnRlcnMgdG8gdGhlIGBmbG93X29mZmxvYWRfdHVwbGVgIHN0cnVjdC4gVGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgb3B0aW1pemF0aW9uLiBJbnN0ZWFkIG9mIHVwZGF0aW5nIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIChDVCkgc3RhdHMgZGlyZWN0bHkgb24gZXZlcnkgcGFja2V0LCB0aGV5JiMzOTtyZSBhY2N1bXVsYXRpbmcgdGhlbSBpbiB0aGVzZSBhdG9taWMgY291bnRlcnMuIFRoaXMgYXZvaWRzIGNhY2hlIGxpbmUgYm91bmNpbmcsIHdoaWNoIGlzIGEgY29tbW9uIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgaW4gbXVsdGktQ1BVIGVudmlyb25tZW50cy4KClRoZSBjcnVjaWFsIHBvaW50IGlzIGhvdyB0aGVzZSBjb3VudGVycyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHVzZWQuIFRoZSBgZmxvd19vZmZsb2FkYCBzdHJ1Y3QsIHdoaWNoIGNvbnRhaW5zIHRoaXMgYGZsb3dfb2ZmbG9hZF90dXBsZWAsIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgLiBUaGlzIGlzIGtleTsgaXQgZW5zdXJlcyB0aGF0IHRoZSBlbnRpcmUgc3RydWN0LCBpbmNsdWRpbmcgdGhlIG5ldyBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzLCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaGVyZS4KClRoZXkmIzM5O3JlIHVzaW5nIGBhdG9taWM2NF9hZGRgIHRvIGluY3JlbWVudCB0aGUgY291bnRlcnMgaW4gYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCwgd2hpY2ggaXMgdGhlIGZhc3QgcGF0aC4gVGhlbiwgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIChHQyksIGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAsIHBlcmlvZGljYWxseSBmbHVzaGVzIHRoZXNlIGNvdW50ZXJzIHRvIHRoZSBDVCBlbnRyeSB1c2luZyBgYXRvbWljNjRfeGNoZ2AuIFRoaXMgY29uZmlybXMgdGhhdCB0aGUgY3JpdGljYWwgZGF0YSBwYXRoIGlzIHNhZmUuCgpOb3csIGFib3V0IHBvdGVudGlhbCBsZWFrcy4gVGhlIHZhbHVlcyBhcmVuJiMzOTt0IGRpcmVjdGx5IGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZXkmIzM5O3JlIGFkZGVkIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRzLCB3aGljaCAqYXJlKiBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYnV0IHdlJiMzOTtyZSBvbmx5IGRlYWxpbmcgd2l0aCBwYWNrZXQgYW5kIGJ5dGUgY291bnRzLCBhbmQgdGhleSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEl0JiMzOTtzIGp1c3QgY291bnRlcnMsIHNvIHRoZXJlJiMzOTtzIG5vIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiB0byBsZWFrLCBhbmQgaXQgaXMgaW1wb3NzaWJsZSB0byByZWFkIG9yIGNvcHkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhLgoKVGhlIG9ubHkgcmVtYWluaW5nIHJpc2tzIGFyZSBsb2dpYyBidWdzIOKAkyBwZXJoYXBzIGEgbWlzc2VkIHVwZGF0ZSwgZG91YmxlLWNvdW50aW5nLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMuIEJ1dCB0aGVzZSBhcmUgdGhlIHR5cGVzIG9mIGJ1Z3MgdGhhdCBLQVNBTi9LQ1NBTiBhbmQgc3RhbmRhcmQgdGVzdGluZyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guIFRoZXkgYXJlIG5vdCBtZW1vcnkgY29ycnVwdGlvbiBwcm9ibGVtcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgoKU28sIGluIHN1bW1hcnksIHRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaGVyZS4gVGhlIGNvdW50ZXJzIGFyZSB6ZXJvLWluaXRpYWxpemVkLCB0aGV5JiMzOTtyZSB1cGRhdGVkIGFuZCBmbHVzaGVkIGF0b21pY2FsbHksIGFuZCB0aGV5IG9ubHkgY29udGFpbiBub24tc2Vuc2l0aXZlIHBhY2tldCBhbmQgYnl0ZSBjb3VudHMuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMgdG8gYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIHRvIGJhdGNoIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RhdGlzdGljcyB1cGRhdGVzLiBUaGVzZSBmaWVsZHMgYXJlIHVwZGF0ZWQgdmlhIGBhdG9taWM2NF9hZGRgIGluIHRoZSBmb3J3YXJkaW5nIHBhdGggYW5kIHBlcmlvZGljYWxseSBmbHVzaGVkIHRvIHRoZSBjb25udHJhY2sgZW50cnkgdmlhIGBhdG9taWM2NF94Y2hnYCBpbiB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuIFxuXG5UaGUgYHN0cnVjdCBmbG93X29mZmxvYWRgIGNvbnRhaW5pbmcgdGhlc2UgdHVwbGVzIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jYCAoaW4gYGZsb3dfb2ZmbG9hZF9hbGxvY2ApLCBlbnN1cmluZyB0aGUgbmV3IGF0b21pYyBjb3VudGVycyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZC4gVGhlIGNvdW50ZXJzIGFyZSBub3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIHRoZWlyIHZhbHVlcyBvbmx5IHJlcHJlc2VudCBwYWNrZXQgYW5kIGJ5dGUgY291bnRzLCBwcmVjbHVkaW5nIGFueSBpbmZvcm1hdGlvbiBsZWFrLiBcblxuV2hpbGUgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIGlzIHNvbWV0aW1lcyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCB1c2VkIGFzIGEgbG9va3VwIGtleSAoZS5nLiwgaW4gYG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXBgKSwgdGhlIGhhc2ggYW5kIGNvbXBhcmlzb24gZnVuY3Rpb25zIG9ubHkgb3BlcmF0ZSBvbiB0aGUgZmllbGRzIHVwIHRvIHRoZSBgX19oYXNoYCBtYXJrZXIsIHdoaWNoIHByZWNlZGVzIHRoZSBuZXdseSBhZGRlZCBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzLiBUaHVzLCB0aGUgdW5pbml0aWFsaXplZCBzdGF0ZSBvZiB0aGVzZSBmaWVsZHMgaW4gc3RhY2stYWxsb2NhdGVkIGtleXMgaXMgbmV2ZXIgcmVhZC5cblxuQW55IHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGJ1Z3Mgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIHN0YW5kYXJkIHRlc3RpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcyB0byBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgdG8gYmF0Y2ggY29ubmVjdGlvbiB0cmFja2luZyBzdGF0aXN0aWNzIHVwZGF0ZXMuIFRoZXNlIGZpZWxkcyBhcmUgdXBkYXRlZCB2aWEgYGF0b21pYzY0X2FkZGAgaW4gdGhlIGZvcndhcmRpbmcgcGF0aCBhbmQgcGVyaW9kaWNhbGx5IGZsdXNoZWQgdG8gdGhlIGNvbm50cmFjayBlbnRyeSB2aWEgYGF0b21pYzY0X3hjaGdgIGluIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4gXG5cblRoZSBgc3RydWN0IGZsb3dfb2ZmbG9hZGAgY29udGFpbmluZyB0aGVzZSB0dXBsZXMgaXMgYWx3YXlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgIChpbiBgZmxvd19vZmZsb2FkX2FsbG9jYCksIGVuc3VyaW5nIHRoZSBuZXcgYXRvbWljIGNvdW50ZXJzIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgY291bnRlcnMgYXJlIG5vdCBkaXJlY3RseSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgdGhlaXIgdmFsdWVzIG9ubHkgcmVwcmVzZW50IHBhY2tldCBhbmQgYnl0ZSBjb3VudHMsIHByZWNsdWRpbmcgYW55IGluZm9ybWF0aW9uIGxlYWsuIFxuXG5XaGlsZSBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgaXMgc29tZXRpbWVzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIHVzZWQgYXMgYSBsb29rdXAga2V5IChlLmcuLCBpbiBgbmZfZmxvd19vZmZsb2FkX2xvb2t1cGApLCB0aGUgaGFzaCBhbmQgY29tcGFyaXNvbiBmdW5jdGlvbnMgb25seSBvcGVyYXRlIG9uIHRoZSBmaWVsZHMgdXAgdG8gdGhlIGBfX2hhc2hgIG1hcmtlciwgd2hpY2ggcHJlY2VkZXMgdGhlIG5ld2x5IGFkZGVkIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMuIFRodXMsIHRoZSB1bmluaXRpYWxpemVkIHN0YXRlIG9mIHRoZXNlIGZpZWxkcyBpbiBzdGFjay1hbGxvY2F0ZWQga2V5cyBpcyBuZXZlciByZWFkLlxuXG5BbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgYnVncyBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4sIEtDU0FOLCBhbmQgc3RhbmRhcmQgdGVzdGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxMzoxNi4zODU4NTUxMDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjExMzk1ODU4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkVURklMVEVSX0lOR1JFU1NcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZmxvd190YWJsZV9nY19ydW5cIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMgdG8gYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIHRvIGJhdGNoIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RhdGlzdGljcyB1cGRhdGVzLiBUaGVzZSBmaWVsZHMgYXJlIHVwZGF0ZWQgdmlhIGBhdG9taWM2NF9hZGRgIGluIHRoZSBmb3J3YXJkaW5nIHBhdGggYW5kIHBlcmlvZGljYWxseSBmbHVzaGVkIHRvIHRoZSBjb25udHJhY2sgZW50cnkgdmlhIGBhdG9taWM2NF94Y2hnYCBpbiB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuIFxcblxcblRoZSBgc3RydWN0IGZsb3dfb2ZmbG9hZGAgY29udGFpbmluZyB0aGVzZSB0dXBsZXMgaXMgYWx3YXlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgIChpbiBgZmxvd19vZmZsb2FkX2FsbG9jYCksIGVuc3VyaW5nIHRoZSBuZXcgYXRvbWljIGNvdW50ZXJzIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgY291bnRlcnMgYXJlIG5vdCBkaXJlY3RseSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgdGhlaXIgdmFsdWVzIG9ubHkgcmVwcmVzZW50IHBhY2tldCBhbmQgYnl0ZSBjb3VudHMsIHByZWNsdWRpbmcgYW55IGluZm9ybWF0aW9uIGxlYWsuIFxcblxcbldoaWxlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCBpcyBzb21ldGltZXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgdXNlZCBhcyBhIGxvb2t1cCBrZXkgKGUuZy4sIGluIGBuZl9mbG93X29mZmxvYWRfbG9va3VwYCksIHRoZSBoYXNoIGFuZCBjb21wYXJpc29uIGZ1bmN0aW9ucyBvbmx5IG9wZXJhdGUgb24gdGhlIGZpZWxkcyB1cCB0byB0aGUgYF9faGFzaGAgbWFya2VyLCB3aGljaCBwcmVjZWRlcyB0aGUgbmV3bHkgYWRkZWQgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcy4gVGh1cywgdGhlIHVuaW5pdGlhbGl6ZWQgc3RhdGUgb2YgdGhlc2UgZmllbGRzIGluIHN0YWNrLWFsbG9jYXRlZCBrZXlzIGlzIG5ldmVyIHJlYWQuXFxuXFxuQW55IHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGJ1Z3Mgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIHN0YW5kYXJkIHRlc3RpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgY29yZSBsb2dpYyB0byB1c2UgYXRvbWljIG9wZXJhdGlvbnMgZm9yIHBhY2tldCBhbmQgYnl0ZSBjb3VudGVycyBpbiB0aGUgZmFzdCBwYXRoIChuZl9mbG93X29mZmxvYWRfZm9yd2FyZCksIGFuZCBkZWZlcnMgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGVzZSBjb3VudGVycyB0byB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBzeXN0ZW0gdG8gdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBzdGVwIChuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IHN0YXRpc3RpY3MgYXJlIHRyYWNrZWQgYW5kIHN5bmNocm9uaXplZCwgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBidWdzIGluIHRoZSBHQyBwcm9jZXNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxMzoxNi4zODU4NTk0NjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MTM0OTQ4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI2NjdjZDNkYTY3ZTY4NDJmMzcxMjFkNzU4OTdjNjgyN2Q3Mzc3ZDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMjYgMDA6MTM6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcXG5pbmRleCBmMmUyNzcxZjE4OGY0Li42MDYwMjAyMTMzYzczIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFxuQEAgLTE3MSw2ICsxNzEsOSBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHtcXG4gXFx0XFx0XFx0dTMyXFx0XFx0aWlmaWR4O1xcbiBcXHRcXHR9IHRjO1xcbiBcXHR9O1xcbitcXG4rXFx0YXRvbWljNjRfdFxcdFxcdFxcdHBhY2tldHM7XFxuK1xcdGF0b21pYzY0X3RcXHRcXHRcXHRieXRlcztcXG4gfTtcXG4gXFxuIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2gge1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xcbmluZGV4IDAzMjQxZDRiZmQ1ZTguLmExZjM3Y2E5NTZiOGYgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcXG5AQCAtMTMsNiArMTMsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuaFxcdTAwM2VcXG4gXFxuIHN0YXRpYyBERUZJTkVfTVVURVgoZmxvd3RhYmxlX2xvY2spO1xcbiBzdGF0aWMgTElTVF9IRUFEKGZsb3d0YWJsZXMpO1xcbkBAIC01NjUsMTEgKzU2NiwyOSBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X3RhYmxlX2V4dGVuZF9jdF90aW1lb3V0KHN0cnVjdCBuZl9jb25uICpjdClcXG4gXFx0bmZfY3RfcHV0KGN0KTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgX19uZl9mbG93X3N5bmNfY3Rfc3RhdHMoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgaW50IGRpcilcXG4re1xcbitcXHR1NjQgcGt0cywgYnl0ZXM7XFxuK1xcbitcXHRwa3RzID0gYXRvbWljNjRfeGNoZyhcXHUwMDI2Zmxvdy1cXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUucGFja2V0cywgMCk7XFxuK1xcdGJ5dGVzID0gYXRvbWljNjRfeGNoZyhcXHUwMDI2Zmxvdy1cXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUuYnl0ZXMsIDApO1xcbitcXHRuZl9jdF9hY2N0X2FkZChmbG93LVxcdTAwM2VjdCwgZGlyLCBwa3RzLCBieXRlcyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG5mX2Zsb3dfc3luY19jdF9zdGF0cyhzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KVxcbit7XFxuK1xcdF9fbmZfZmxvd19zeW5jX2N0X3N0YXRzKGZsb3csIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xcbitcXHRfX25mX2Zsb3dfc3luY19jdF9zdGF0cyhmbG93LCBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXFxuIHtcXG4tXFx0Ym9vbCB0ZWFyZG93biA9IHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncyk7XFxuK1xcdGJvb2wgdGVhcmRvd247XFxuK1xcbitcXHRuZl9mbG93X3N5bmNfY3Rfc3RhdHMoZmxvdyk7XFxuIFxcbitcXHR0ZWFyZG93biA9IHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncyk7XFxuIFxcdGlmIChuZl9mbG93X2hhc19leHBpcmVkKGZsb3cpIHx8XFxuIFxcdCAgICBuZl9jdF9pc19keWluZyhmbG93LVxcdTAwM2VjdCkgfHxcXG4gXFx0ICAgICFuZl9mbG93X2RzdF9jaGVjayhcXHUwMDI2Zmxvdy1cXHUwMDNldHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUxdLnR1cGxlKSB8fFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXFxuaW5kZXggYzhjMjlhOWExNjg0NC4uNjZiZTgxNWFjMmZlYiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXFxuQEAgLTUwOSw4ICs1MDksMTAgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbiBcXHRpcF9kZWNyZWFzZV90dGwoaXBoKTtcXG4gXFx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xcbiBcXG4tXFx0aWYgKGZsb3dfdGFibGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZfRkxPV1RBQkxFX0NPVU5URVIpXFxuLVxcdFxcdG5mX2N0X2FjY3RfdXBkYXRlKGZsb3ctXFx1MDAzZWN0LCB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRpciwgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHRpZiAoZmxvd190YWJsZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUikge1xcbitcXHRcXHRhdG9taWM2NF9hZGQoMSwgXFx1MDAyNnR1cGxlaGFzaC1cXHUwMDNldHVwbGUucGFja2V0cyk7XFxuK1xcdFxcdGF0b21pYzY0X2FkZChza2ItXFx1MDAzZWxlbiwgXFx1MDAyNnR1cGxlaGFzaC1cXHUwMDNldHVwbGUuYnl0ZXMpO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxMzoxNi43NTc3NDc0MDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDczMDk4MzI1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkVURklMVEVSX0lOR1JFU1NcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZmxvd190YWJsZV9nY19ydW5cIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGNvcmUgbG9naWMgdG8gdXNlIGF0b21pYyBvcGVyYXRpb25zIGZvciBwYWNrZXQgYW5kIGJ5dGUgY291bnRlcnMgaW4gdGhlIGZhc3QgcGF0aCAobmZfZmxvd19vZmZsb2FkX2ZvcndhcmQpLCBhbmQgZGVmZXJzIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlc2UgY291bnRlcnMgdG8gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3lzdGVtIHRvIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gc3RlcCAobmZfZmxvd19vZmZsb2FkX2djX3N0ZXApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBzdGF0aXN0aWNzIGFyZSB0cmFja2VkIGFuZCBzeW5jaHJvbml6ZWQsIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGludHJvZHVjZSBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgYnVncyBpbiB0aGUgR0MgcHJvY2Vzcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjY2N2NkM2RhNjdlNjg0MmYzNzEyMWQ3NTg5N2M2ODI3ZDczNzdkOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDAwOjEzOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbmluZGV4IGYyZTI3NzFmMTg4ZjQuLjYwNjAyMDIxMzNjNzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5AQCAtMTcxLDYgKzE3MSw5IEBAIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUge1xuIFx0XHRcdHUzMlx0XHRpaWZpZHg7XG4gXHRcdH0gdGM7XG4gXHR9O1xuK1xuK1x0YXRvbWljNjRfdFx0XHRcdHBhY2tldHM7XG4rXHRhdG9taWM2NF90XHRcdFx0Ynl0ZXM7XG4gfTtcbiBcbiBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoIHtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuaW5kZXggMDMyNDFkNGJmZDVlOC4uYTFmMzdjYTk1NmI4ZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbkBAIC0xMyw2ICsxMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuaFx1MDAzZVxuIFxuIHN0YXRpYyBERUZJTkVfTVVURVgoZmxvd3RhYmxlX2xvY2spO1xuIHN0YXRpYyBMSVNUX0hFQUQoZmxvd3RhYmxlcyk7XG5AQCAtNTY1LDExICs1NjYsMjkgQEAgc3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9leHRlbmRfY3RfdGltZW91dChzdHJ1Y3QgbmZfY29ubiAqY3QpXG4gXHRuZl9jdF9wdXQoY3QpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBfX25mX2Zsb3dfc3luY19jdF9zdGF0cyhzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBpbnQgZGlyKVxuK3tcbitcdHU2NCBwa3RzLCBieXRlcztcbitcbitcdHBrdHMgPSBhdG9taWM2NF94Y2hnKFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUucGFja2V0cywgMCk7XG4rXHRieXRlcyA9IGF0b21pYzY0X3hjaGcoXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5ieXRlcywgMCk7XG4rXHRuZl9jdF9hY2N0X2FkZChmbG93LVx1MDAzZWN0LCBkaXIsIHBrdHMsIGJ5dGVzKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbmZfZmxvd19zeW5jX2N0X3N0YXRzKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG4re1xuK1x0X19uZl9mbG93X3N5bmNfY3Rfc3RhdHMoZmxvdywgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCk7XG4rXHRfX25mX2Zsb3dfc3luY19jdF9zdGF0cyhmbG93LCBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKVxuIHtcbi1cdGJvb2wgdGVhcmRvd24gPSB0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbitcdGJvb2wgdGVhcmRvd247XG4rXG4rXHRuZl9mbG93X3N5bmNfY3Rfc3RhdHMoZmxvdyk7XG4gXG4rXHR0ZWFyZG93biA9IHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuIFx0aWYgKG5mX2Zsb3dfaGFzX2V4cGlyZWQoZmxvdykgfHxcbiBcdCAgICBuZl9jdF9pc19keWluZyhmbG93LVx1MDAzZWN0KSB8fFxuIFx0ICAgICFuZl9mbG93X2RzdF9jaGVjayhcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX09SSUdJTkFMXS50dXBsZSkgfHxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG5pbmRleCBjOGMyOWE5YTE2ODQ0Li42NmJlODE1YWMyZmViIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG5AQCAtNTA5LDggKzUwOSwxMCBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRpcF9kZWNyZWFzZV90dGwoaXBoKTtcbiBcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcbiBcbi1cdGlmIChmbG93X3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcbi1cdFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cdTAwM2VjdCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpciwgc2tiLVx1MDAzZWxlbik7XG4rXHRpZiAoZmxvd190YWJsZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZfRkxPV1RBQkxFX0NPVU5URVIpIHtcbitcdFx0YXRvbWljNjRfYWRkKDEsIFx1MDAyNnR1cGxlaGFzaC1cdTAwM2V0dXBsZS5wYWNrZXRzKTtcbitcdFx0YXRvbWljNjRfYWRkKHNrYi1cdTAwM2VsZW4sIFx1MDAyNnR1cGxlaGFzaC1cdTAwM2V0dXBsZS5ieXRlcyk7XG4rXHR9XG4gXG4gXHRyZXR1cm4gMTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxMzoxNi43NTc3NDg2MzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTEwMzUxOTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIEZsb3cgVGFibGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AgYW5kIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBhZGRpbmcgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGNvdW50ZXJzLCBib3RoIGBhdG9taWM2NF90YCB0eXBlcywgdG8gdGhlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYC4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgaG93IHRoZXNlIGNvdW50ZXJzIGFyZSBiZWluZyB1c2VkLlxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHN5bmNocm9uaXphdGlvbiBzdGVwLCBjYWxsaW5nIGBuZl9mbG93X3N5bmNfY3Rfc3RhdHMoZmxvdylgIHdpdGhpbiBgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXBgLiBUaGlzIHVsdGltYXRlbHkgY2FsbHMgYG5mX2N0X2FjY3RfYWRkYCB0byB1cGRhdGUgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgKGNvbm50cmFjaykgc3RhdHMuIEJ1dCBoZXJlJ3MgdGhlIGtpY2tlcjogYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCwgd2hpY2ggaXMgKmluIHRoZSBmYXN0IHBhdGgqIG9mIHBhY2tldCBmb3J3YXJkaW5nLCBub3cgZGlyZWN0bHkgdXNlcyBgYXRvbWljNjRfYWRkYCB0byBpbmNyZW1lbnQgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIG9uIHRoZSB0dXBsZSBpdHNlbGYuIEl0J3Mgc2tpcHBpbmcgdGhlIGBuZl9jdF9hY2N0X3VwZGF0ZWAgY2FsbC5cblxuVGhpcyBpcyBhIGNsZXZlciBvcHRpbWl6YXRpb24uIFdlJ3JlIGF2b2lkaW5nIHBvdGVudGlhbCBsb2NrIGNvbnRlbnRpb24gb3Igc2xvd2Rvd25zIHRoYXQgYG5mX2N0X2FjY3RfdXBkYXRlYCBsaWtlbHkgaW50cm9kdWNlcyBieSB1cGRhdGluZyB0aGUgY29ubnRyYWNrIHN0YXRzIGRpcmVjdGx5IGFuZCBkZWZlcnJpbmcgc3luY2hyb25pemF0aW9uIHVudGlsIGdhcmJhZ2UgY29sbGVjdGlvbi4gRWZmZWN0aXZlbHksIHRoaXMgaXMgbW92aW5nIHRoZSBzdGF0IHVwZGF0ZXMgdG8gYSBtb3JlIGFzeW5jaHJvbm91cyBhcHByb2FjaCBmb3IgcGVyZm9ybWFuY2UuXG5cblRoaXMgaXMgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGhhbmRsZXMgc3RhdGlzdGljcy4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZSwgYW5kIHRoYXQgbWFrZXMgaXQgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLiBJdCdzIGNyaXRpY2FsIHRvIG1ha2Ugc3VyZSB0aGlzIG5ldyBmYXN0LXBhdGggYXBwcm9hY2ggd29ya3MgY29ycmVjdGx5IGluIHRoZSBwcmVzZW5jZSBvZiByYWNlIGNvbmRpdGlvbnMgYW5kIGVkZ2UgY2FzZXMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZyBvcHRpb25zIGVuYWJsZSB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LiBMZXQncyBzZWUuLi4gdGhlIHJlbGV2YW50IGZpbGVzIGFyZSBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AgYW5kIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY2Ag4oCTIHRoYXQncyB3aGVyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxMzoyMy42NjgxMDM3ODVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU0Nzg0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd190YWJsZV9jb3JlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNDI9b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXFx0Kz0gbmZfZmxvd190YWJsZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDM6bmZfZmxvd190YWJsZS1vYmpzXFx0XFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NC1cXHRcXHRcXHRcXHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjEzOjIzLjc1MzU4NjkxOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzU1Njc4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIENvbmZpZ3VyYXRpb24gU3BhY2UqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBzdGFydGluZyB3aXRoIGBDT05GSUdfTkZfRkxPV19UQUJMRWAuIFRoYXQncyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaXRlbSB3ZSBuZWVkIHRvIGZvY3VzIG9uLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyBqdXN0IGEgc2luZ2xlIGZsYWcgd2UncmUgZGVhbGluZyB3aXRoLCBvciBpZiB0aGVyZSdzIGEgZmFtaWx5IG9mIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IGV4cGxvcmUgdGhlIGFkamFjZW50IGNvbmZpZ3VyYXRpb24gc3BhY2UuIEFyZSB0aGVyZSBvdGhlciBmbGFncyB0aGF0IGludGVyYWN0IHdpdGggdGhpcyBvbmUsIHBlcmhhcHMgZGVwZW5kZW5jaWVzLCBvciBtb3JlIGdyYW51bGFyIGNvbnRyb2xzIGZvciB0aGUgZmxvdyB0YWJsZSBmdW5jdGlvbmFsaXR5PyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIGl0J3MgcmFyZWx5IGp1c3Qgb25lIHNvbGl0YXJ5IHN3aXRjaC4gTGV0J3Mgc2VlIHdoYXQgZWxzZSBpcyBsdXJraW5nIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODI4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTM6MjYuOTg5MTU2NzM2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODc2NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEyLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MjE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cXHRib29sIFxcXCJTdXBwbHkgZmxvdyB0YWJsZSBzdGF0aXN0aWNzIGluIHByb2Nmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTM6MjcuMDM5MDQyMjMyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4MjY1Mjg4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgTkZfRkxPV19UQUJMRSBLY29uZmlnKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBgTkZfRkxPV19UQUJMRWAgS2NvbmZpZyBvcHRpb24uIExldCdzIHN0YXJ0IHRoZXJlLiBNeSBicmFpbiBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgcGxhY2VzIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gaXQuIFRoYXQgbWVhbnMgSSdsbCBiZSBnb2luZyBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcyB0byBmaW5kIHRoZSBzcGVjaWZpY3MsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgc2V0dGluZ3MuIEknbSBleHBlY3RpbmcgdG8gc2VlIGRlcGVuZGVuY2llcyBvbiByZWxldmFudCBuZXR3b3JraW5nIGZlYXR1cmVzIOKAkyB0aGluZ3MgbGlrZSBjb25uZWN0aW9uIHRyYWNraW5nLCBOQVQsIG9yIHNwZWNpZmljIGhhcmR3YXJlIG9mZmxvYWQgY2FwYWJpbGl0aWVzLiBUaGlzIGFsc28gbGlrZWx5IGNvbnRyb2xzIHRoZSBpbmNsdXNpb24gb2YgdGhlIGNvcmUgZmxvdyB0YWJsZSBjb2RlIGl0c2VsZiBhbmQgYXNzb2NpYXRlZCBtb2R1bGVzLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGhpZGRlbiBudWFuY2VzIGluIHRoZSBkZXBlbmRlbmNpZXMuIEkgYW0gaG9waW5nIHRvIGdldCBpbnNpZ2h0IGludG8gdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQgd2l0aGluIG15IHNwZWNpZmljIHVzZSBjYXNlLCBhbmQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGVzZSBzZXR0aW5ncyBhcmUgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIzNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjEzOjMwLjIyMTY5NzYwNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzEwOlxcdFxcbiA3MTE6XFx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG4gNzEyOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcXFwiXFxuIDcxMzpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9JTkdSRVNTXFxuIDcxNDpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbiA3MTU6XFx0XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcXG4gNzE2OlxcdFxcdGhlbHBcXG4gNzE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBjb3JlIGluZnJhc3RydWN0dXJlLlxcbiA3MTg6XFx0XFxuIDcxOTpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuIDcyMDpcXHRcXG4gNzIxOlxcdGNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xcbiA3MjI6XFx0XFx0Ym9vbCBcXFwiU3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcXFwiXFxuIDcyMzpcXHRcXHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcXG4gNzI0OlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbiA3MjU6XFx0XFx0aGVscFxcbiA3MjY6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGZvciB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIHN0YXRpc3RpY3NcXG4gNzI3OlxcdFxcdCAgdG8gYmUgc2hvd24gaW4gcHJvY2ZzIHVuZGVyIG5ldC9uZXRmaWx0ZXIvbmZfZmxvd3RhYmxlLlxcbiA3Mjg6XFx0XFxuIDcyOTpcXHRjb25maWcgTkVURklMVEVSX1hUQUJMRVNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTM6MzAuMjIxODA2Mjk0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2MjU3MDMxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBORl9GTE9XX1RBQkxFIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gVGhlIGBORl9GTE9XX1RBQkxFYCBtb2R1bGUgaXMgaW4gcGxheS4gSSBuZWVkIHRvIHF1aWNrbHkgcnVuIHRocm91Z2ggaXRzIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgZXZlcnl0aGluZydzIHByb3Blcmx5IGVuYWJsZWQgYW5kIHVuZGVyc3Rvb2QgZnJvbSBhIGNvbmZpZ3VyYXRpb24gYW5kIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUuIFNwZWNpZmljYWxseSwgSSdtIG5vdGluZyB0aGF0IGl0IHJlbGllcyBvbiBgTkVURklMVEVSX0lOR1JFU1NgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9UQUJMRVNgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGZsb3cgdGFibGVzIGFyZSBmdW5kYW1lbnRhbGx5IGFib3V0IGluZ3Jlc3MgaGFuZGxpbmcsIGNvbm5lY3Rpb24gdHJhY2tpbmcgZm9yIHN0YXRlZnVsIG9wZXJhdGlvbiwgYW5kIG9mIGNvdXJzZSwgbGV2ZXJhZ2luZyB0aGUgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlIHdpdGggaXRzIHRhYmxlLWJhc2VkIHJ1bGVzLiBJdCB3b3VsZCBiZSBhIHByb2JsZW0gaWYgdGhvc2UgYXJlbid0IGF2YWlsYWJsZSwgb3IgYXJlIHNvbWVob3cgbWlzY29uZmlndXJlZC5cblxuTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBiZWNhdXNlIGl0J3MgYWx3YXlzIGdvb2QgcHJhY3RpY2UsIGxldCBtZSBhbHNvIGJyaWVmbHkgbG9vayBhdCBgTkZfRkxPV19UQUJMRV9JTkVUYC4gSXQncyBwb3NzaWJsZSBJJ2xsIG5lZWQgaXRzIGZ1bmN0aW9uYWxpdHksIGRlcGVuZGluZyBvbiB0aGUgZXhhY3QgdHJhZmZpYyBmbG93cyBJJ20gd29ya2luZyB3aXRoLiBUaGlzIGNoZWNrIGVuc3VyZXMgSSBoYXZlbid0IG92ZXJsb29rZWQgYW55IGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zLCBhbmQgZW5zdXJlcyB0aGF0IEkndmUgYWNjb3VudGVkIGZvciBJUHY0IGFuZCBJUHY2IHRyYWZmaWMuIEl04oCZcyBhbHNvIGltcG9ydGFudCB0aGF0IEkgdGFrZSB0aGUgdGltZSB0byBjb25zaWRlciBob3cgZWFjaCBmZWF0dXJlIGlzIGludGVyLXJlbGF0ZWQgYW5kIGRlcGVuZGVudCBvbiBvbmUgYW5vdGhlciBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoZSBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTM6MzMuOTg0Mzc4NjgxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzAwLFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzAwOlxcdFxcbiA3MDE6XFx0ZW5kaWYgIyBORl9UQUJMRVNcXG4gNzAyOlxcdFxcbiA3MDM6XFx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbiA3MDQ6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiXFxuIDcwNTpcXHRcXHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcXG4gNzA2OlxcdFxcdGhlbHBcXG4gNzA3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgc3VwcG9ydC5cXG4gNzA4OlxcdFxcbiA3MDk6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcbiA3MTA6XFx0XFxuIDcxMTpcXHRjb25maWcgTkZfRkxPV19UQUJMRVxcbiA3MTI6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4gNzEzOlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0lOR1JFU1NcXG4gNzE0OlxcdFxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjEzOjMzLjk4NDQ4NTg1MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTQ5MDYwMjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRmxvdyBUYWJsZSBPZmZsb2FkIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBoaXRzIGBuZl9mbG93X3RhYmxlX2NvcmUuY2AgYW5kIGBuZl9mbG93X3RhYmxlX2lwLmNgLiBUaGVzZSBhcmUgY29tcGlsZWQgaW50byBgbmZfZmxvd190YWJsZS5vYCwgd2hpY2ggbWFrZXMgc2Vuc2Ugc2luY2UgYENPTkZJR19ORl9GTE9XX1RBQkxFYCBpcyBlbmFibGVkLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLCBzbyBJIHNob3VsZCBzZWUgaWYgb3RoZXIgZnVuY3Rpb25zIGluIHRoZXNlIGZpbGVzIGFyZSBhbHNvIGltcGFjdGVkLlxuXG5IYW5nIG9uLi4uIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAgaXMgaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AsIG5vdCB0aGUgY29yZSBmaWxlLiBJIHdvbmRlciBpZiB0aGVyZSdzIGEgc2ltaWxhciBmdW5jdGlvbiBpbiBgbmZfZmxvd190YWJsZV9pcHY2LmNgIHRoYXTigJlzIGJlZW4gb3Zlcmxvb2tlZCBoZXJlLiBDaGVja2luZyB0aGUgZGlmZiBhZ2Fpbi4uLiBub3BlLCBqdXN0IGBuZl9mbG93X3RhYmxlX2lwLmNgLiBPaywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYG5mX2Zsb3dfdGFibGVfY29yZS5jYC5cblxuUmlnaHQsIGZvY3VzaW5nIG9uIGBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcGAgYW5kIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAuIEhvbGQgb24gYSBzZWNvbmQsIGlzbid0IGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAgYSBmYXN0LXBhdGggZnVuY3Rpb24/IFRoYXQgbWlnaHQgbWFrZSBpdCBhIG1vcmUgc2Vuc2l0aXZlIGFyZWEsIHNvIGxldOKAmXMgYmUgY2FyZWZ1bCB3aGVuIHJldmlld2luZyB0aGlzIGNoYW5nZS4gSSBzaG91bGQgYmUgYXdhcmUgdGhhdCBpdCBtaWdodCBpbnRyb2R1Y2Ugc29tZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucy5cblxuTGV0IG1lIGFsc28gY2hlY2sgYG5mX2Zsb3dfc3luY19jdF9zdGF0c2AgYW5kIGBfX25mX2Zsb3dfc3luY19jdF9zdGF0c2AuIExvb2tzIGxpa2UgdGhleSdyZSBzdGF0aWMsIGJ1dCB0aGF0IGRvZXNuJ3QgbWVhbiB0aGV5IGFyZW4ndCBpbXBvcnRhbnQ7IHRoZXkgbWF5IGJlIGltcG9ydGFudCBpbnRlcm5hbCBmdW5jdGlvbnMuIEFuZCwgYWx0aG91Z2ggYG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwYCBpcyBzdGF0aWMsIGl0J3MgYmVpbmcgcGFzc2VkIGFzIGEgY2FsbGJhY2sgb3IgY2FsbGVkIGZyb20gYSBub24tc3RhdGljIGZ1bmN0aW9uLCB0aGF04oCZcyBhbm90aGVyIGFyZWEgdG8gZXhhbWluZS4gR290dGEgZGlnIGRlZXBlciBvbiBhbGwgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMyOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjEzOjM5LjkzMzU0ODkxNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM5Njc4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd19vZmZsb2FkX2djX3N0ZXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz01Nzg9c3RhdGljIHZvaWQgbmZfZmxvd19zeW5jX2N0X3N0YXRzKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTU4My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjU4NDpzdGF0aWMgdm9pZCBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNTg1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz02MjE9dm9pZCBuZl9mbG93X3RhYmxlX2djX3J1bihzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjIyLXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjYyMzpcXHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd190YWJsZSwgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAsIE5VTEwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjI0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTM6MzkuOTg3NTIxNDAxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MDUyMTM0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGbG93IFRhYmxlIEdhcmJhZ2UgQ29sbGVjdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHdvcmtzIGZvciB0aGUgbmV0d29yayBmbG93IHRhYmxlLiBUaGUgZW50cnkgcG9pbnQsIHRoZSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgKmV4ZWN1dGVzKiB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHJvdXRpbmUsIGlzIGBuZl9mbG93X3RhYmxlX2djX3J1bmAuIEFscmlnaHQsIHRoYXQncyB3aGF0IEknbSBsb29raW5nIGZvci4gTGV0J3MgZ2V0IHJpZ2h0IGludG8gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYC4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyBpdCdzIGltcGxlbWVudGVkLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcywgdGhlIGNvbmRpdGlvbnMgZm9yIGV2aWN0aW9uLCB0aGUgYWdpbmcgbWVjaGFuaXNtcywgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSwgYWxsIG9mIGl0LiBMZXQncyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM0OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjEzOjQ1LjU5MjczODg0MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI2NzAzNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd190YWJsZV9nY19ydW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz01ODQ9c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjIwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NjIxOnZvaWQgbmZfZmxvd190YWJsZV9nY19ydW4oc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYyMi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTYyNj1zdGF0aWMgdm9pZCBuZl9mbG93X29mZmxvYWRfd29ya19nYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYzMC1cXHRmbG93X3RhYmxlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZl9mbG93dGFibGUsIGdjX3dvcmsud29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2MzE6XFx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02MzItXFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsIFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VnY193b3JrLCBIWik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc4Mj12b2lkIG5mX2Zsb3dfdGFibGVfZnJlZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTEtXFx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCwgTlVMTCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3OTI6XFx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTMtXFx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoZmxvd190YWJsZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNjU9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2hfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNjgtXFx0XFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTE2OTpcXHRcXHRuZl9mbG93X3RhYmxlX2djX3J1bihmbG93dGFibGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3MC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjEzOjQ1LjY1NTQxNjEwNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDAzODc3NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipGb2N1cyBTeW1ib2wgU2VsZWN0aW9uIC0gQW4gSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3Mgc2VlLCBJJ20gdHJ5aW5nIHRvIGlkZW50aWZ5IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGBGb2N1c1N5bWJvbHNgLiBDb25zaWRlcmluZyB0aGUgbmF0dXJlIG9mIG5ldGZpbHRlciBmbG93IHRhYmxlcyBhbmQgb2ZmbG9hZGluZywgd2hlcmUgc2hvdWxkIEkgc3RhcnQ/ICpuZl9mbG93X3RhYmxlX2djX3J1biogbG9va3MgcHJvbWlzaW5nLiBHYXJiYWdlIGNvbGxlY3Rpb24gcm91dGluZXMgYXJlIG9mdGVuIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGFuZCBmcmVxdWVudGx5IHRvdWNoZWQuIFRoYXQncyBhIHN0cm9uZyBjb250ZW5kZXIsIEknbGwga2VlcCB0aGF0IG9uZSBpbiBtaW5kLlxuXG5XYWl0IGEgc2Vjb25kLCBsZXQgbWUgY2hlY2sgc29tZXRoaW5nLiBBaCwgeWVzLCByaWdodC4gSSBuZWVkIHRvIGJlIG1vcmUgcHJlY2lzZSBhYm91dCB0aGUgbG9jYXRpb24gb2YgdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gKm5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKiwgbm93IHRoYXQncyBhIGtleSBmdW5jdGlvbiBpbiBgbmZfZmxvd190YWJsZWAgb2ZmbG9hZGluZy4gTm93IHdoZXJlIGRvZXMgdGhhdCBzaXQ/IEl0IGxvb2tzIGxpa2UgaXQncyB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jYC4gVGhhdCBmaWxlIGxvY2F0aW9uIHdpbGwgY29tZSBpbiBoYW5keSBsYXRlci4gSSBuZWVkIHRvIG5vdGUgd2hlcmUgdGhlIGNvZGUgcmVzaWRlcywgdG8gdW5kZXJzdGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxOTcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxMzo0OS42NTkyOTY4MDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NzMyMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTQ1Nz1uZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NjctXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NDY4OnN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NjktXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTg2Nj1uZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODg1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjg4NjpcXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChcXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODg3LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxMzo0OS43MDkwMzQxMjJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxMDc1MDA2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIEZsb3cgT2ZmbG9hZCBIb29rcyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGZsb3cgb2ZmbG9hZCwgYW5kIHRoZSBwcmltYXJ5IGhvb2sgZnVuY3Rpb24gc2VlbXMgdG8gYmUgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYC4gTmF0dXJhbGx5LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjb25maXJtIHRoYXQgdGhlIElQdjQgaG9vayBpc24ndCB0aGUgc29sZSBwb2ludCBvZiBpbnRlcmVzdC4gQSBnb29kIHByYWN0aWNlIGlzIHRvIGFsd2F5cyBjb25zaWRlciBwb3RlbnRpYWwgcmVsYXRlZCBmdW5jdGlvbnMgdG8gY292ZXIgYWxsIGJhc2VzIGFuZCBlbnN1cmUgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0ncyBiZWhhdmlvci4gVGltZSB0byBjaGVjayBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AgYXMgd2VsbCwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgc2VlIGlmIHRoZXJlJ3MgYW55IGludGVycGxheSBvciBwb3RlbnRpYWwgZm9yIHJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzLiBMZXQncyBtYWtlIHN1cmUgd2UndmUgZ290IHRoZSB3aG9sZSBwaWN0dXJlLCBJUHY0ICphbmQqIElQdjYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3OTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxMzo1My4xMTk3ODc2MTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzE0NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz0xMj1uZl9mbG93X29mZmxvYWRfaW5ldF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTM4LVxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzozOTpcXHRcXHRyZXR1cm4gbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayhwcml2LCBza2IsIHN0YXRlKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTQwLVxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9ODg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NiA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtOTMtXFx0LmZyZWVcXHRcXHQ9IG5mX2Zsb3dfdGFibGVfZnJlZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjk0OlxcdC5ob29rXFx0XFx0PSBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtOTUtXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTExOTQ9dW5zaWduZWQgaW50XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTE5NTpuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTE5Ni1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEyMjItfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEyMjM6RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjEzOjUzLjE2ODEwNjY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjUxMTE5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgT2ZmbG9hZCBIb29rcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIE5ldGZpbHRlciBmbG93IG9mZmxvYWQgaW1wbGVtZW50YXRpb24sIGFuZCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiB3aGVyZSBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AgbGl2ZXMuIEFoLCByaWdodCwgaXQncyBidXJpZWQgaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AuIEdvb2QsIGdvdCBpdC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzIGhvdyB0aGlzIGhvb2sgYWN0dWFsbHkgd29ya3MuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGF0IGZvcndhcmRpbmcgZnVuY3Rpb24gaXQncyB1dGlsaXppbmcuIERvZXMgaXQgZGlyZWN0bHkgY2FsbCBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgLCBvciBpcyB0aGVyZSBhIG1vcmUgc3BlY2lmaWMgSVB2Ni1yZWxhdGVkIGZvcndhcmRlciBsaWtlIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGNhbGwgZmxvdyBoZXJlIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgSVB2NiB0cmFmZmljIGlzIHNwZWNpZmljYWxseSBiZWluZyBoYW5kbGVkIGFuZCBhY2NlbGVyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ4MywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjEzOjU2Ljg5MzIyMTA4OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyNDE4OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMTk0PXVuc2lnbmVkIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjExOTU6bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExOTYtXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMjIyLX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMjIzOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxMzo1Ni45Mzg0NjgyOTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1Mzc4NjE3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBJJ20gYWJvdXQgdG8gYW5hbHl6ZTpcblxuKipBbmFseXppbmcgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgIENhbGxzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYC4gSXQncyBhIG5ldGZpbHRlciBob29rLCBzbyBJIGFscmVhZHkga25vdyBpdCdzIGEgY3JpdGljYWwgcG9pbnQgZm9yIHBhY2tldCBwcm9jZXNzaW5nIGluIHRoZSBJUHY2IHdvcmxkLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBtYXAgb3V0IHRoZSBjYWxsIGdyYXBoIOKAkyBJIG5lZWQgdG8gc2VlICp3aG8qIGlzIGNhbGxpbmcgdGhpcyBob29rLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gd2hlcmUgSVB2NiBmbG93IG9mZmxvYWRpbmcgaXMgYmVpbmcgaW5pdGlhdGVkLCBjb250cm9sbGVkLCBhbmQgcG90ZW50aWFsbHkgbW9kaWZpZWQuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBhbmFseXNpcyBsaWVzOiBmaWd1cmluZyBvdXQgaG93IHRoZSBzeXN0ZW0gbWFrZXMgdXNlIG9mIHRoaXMgcGFydGljdWxhciBob29rIGluIGEgZGVlcGVyIGxldmVsLiBJJ2xsIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgZnVuY3Rpb24gdG8gdGhlIGNhbGxpbmcgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZS4gSSdtIGhvcGluZyBJIGRvbid0IHJ1biBpbnRvIGFueSBzaWduaWZpY2FudCBtYWNyby1oZWF2eSBvYmZ1c2NhdGlvbiEgTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NjAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNDowMC42OTIyNTY5NjJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExOTQsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExOTQ6XFx0dW5zaWduZWQgaW50XFxuMTE5NTpcXHRuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuMTE5NjpcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcXG4xMTk3OlxcdHtcXG4xMTk4OlxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcXG4xMTk5OlxcdFxcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPSBwcml2O1xcbjEyMDA6XFx0XFx0c3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggY3R4ID0ge1xcbjEyMDE6XFx0XFx0XFx0LmluXFx0PSBzdGF0ZS1cXHUwMDNlaW4sXFxuMTIwMjpcXHRcXHR9O1xcbjEyMDM6XFx0XFx0aW50IHJldDtcXG4xMjA0OlxcdFxcbjEyMDU6XFx0XFx0aWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChcXHUwMDI2Y3R4LCBza2IpKVxcbjEyMDY6XFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4xMjA3OlxcdFxcbjEyMDg6XFx0XFx0aWYgKHVubGlrZWx5KGN0eC5ldGhlcl90eXBlICE9IGh0b25zKEVUSF9QX0lQVjYpKSlcXG4xMjA5OlxcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuMTIxMDpcXHRcXG4xMjExOlxcdFxcdHR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cChcXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xcbjEyMTI6XFx0XFx0aWYgKCF0dXBsZWhhc2gpXFxuMTIxMzpcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbjEyMTQ6XFx0XFxuMTIxNTpcXHRcXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcXG4xMjE2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjEyMTc6XFx0XFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuMTIxODpcXHRcXHRlbHNlIGlmIChyZXQgPT0gMClcXG4xMjE5OlxcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuMTIyMDpcXHRcXG4xMjIxOlxcdFxcdHJldHVybiBuZl9mbG93X3F1ZXVlX3htaXQ2KHNrYiwgdHVwbGVoYXNoLCBzdGF0ZSk7XFxuMTIyMjpcXHR9XFxuMTIyMzpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTQ6MDAuNjkyMzY1NjMyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTMzNjcxMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgdGhlIERpZmYgYW5kIENvbnNpZGVyaW5nIFBvdGVudGlhbCBNb2RpZmljYXRpb25zKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGZlZWxzIG9mZi4gSSB3YXMgZXhwZWN0aW5nIHRvIHNlZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGluIHRoYXQgZGlmZiwgYnV0IGl0J3Mgbm90IHNob3dpbmcgdXAuIFRoYXQncyBzdHJhbmdlLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUuIFRoZSBiZWhhdmlvciBvZiB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgY3JpdGljYWwsIGFuZCBhbnkgY2hhbmdlIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgcmFtaWZpY2F0aW9ucyBmb3IuLi4gd2VsbCwgZXZlcnl0aGluZywgZnJhbmtseS4gU28sIGJlZm9yZSBJIGNvbnRpbnVlLCBJICptdXN0KiB2ZXJpZnkgdGhhdCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAgd2Fzbid0LCBpbiBmYWN0LCBtb2RpZmllZC4gUGVyaGFwcyBJIG1pc3NlZCBzb21ldGhpbmcgaW4gbXkgaW5pdGlhbCByZXZpZXcsIG9yIG1heWJlIHRoZXJlJ3MgYW4gaW5kaXJlY3QgaW1wYWN0IEkgbmVlZCB0byB0cmFjZS4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgcnVsZSBvdXQgYW55IHVuZXhwZWN0ZWQgbW9kaWZpY2F0aW9ucy4gTGV0J3MgZGlnIGluIGFuZCBtYWtlIHN1cmUgaXQncyBhcyBpdCBzaG91bGQgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MjcsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE0OjA0LjE4NTczNTcwN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2NTU3NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMDAwPXN0YXRpYyBpbnQgbmZfZmxvd190dXBsZV9pcHY2KHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDY1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEwNjY6c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTA2Ny1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTE5NT1uZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMjE0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEyMTU6XFx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChcXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTIxNi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTQ6MDQuMjM1Mzk0NjMzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDYyMDU3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYCBtb2R1bGUuIEkgc2VlIGl0J3MgZGVhbGluZyB3aXRoIElQdjYgZm9yd2FyZGluZyBhbmQgZmxvdyBvZmZsb2FkLCB3aGljaCBpcyBhIGtleSBhcmVhIGZvciBoaWdoLXBlcmZvcm1hbmNlIG5ldHdvcmtpbmcsIGVzcGVjaWFsbHkgaW4gbW9kZXJuIGRhdGEgY2VudGVycyBhbmQgY2xvdWQgZW52aXJvbm1lbnRzLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbmV0d29yayB0aHJvdWdocHV0IGFuZCBsYXRlbmN5LlxuXG5UaGlzIG1vZHVsZSBpcyBsaWtlbHkgZGVzaWduZWQgdG8gYWNjZWxlcmF0ZSB0aGUgZm9yd2FyZGluZyBvZiBJUHY2IHBhY2tldHMgYnkgb2ZmbG9hZGluZyB0aGUgcHJvY2Vzc2luZyBvZiBzcGVjaWZpYyBmbG93cyB0byB0aGUgbmV0d29yayBpbnRlcmZhY2UgY2FyZCAoTklDKSBvciBhIGRlZGljYXRlZCBoYXJkd2FyZSBhY2NlbGVyYXRvci4gVGhhdCdzIGEgY2xhc3NpYyBvcHRpbWl6YXRpb24gdGVjaG5pcXVlLCBidXQgdGhlIGRldmlsIGlzIGFsd2F5cyBpbiB0aGUgZGV0YWlscywgc28gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGEgZmV3IGNvcmUgY29uY2VwdHMuXG5cbknigJltIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIGNyaXRlcmlhIHRoZSBtb2R1bGUgdXNlcyB0byBpZGVudGlmeSBmbG93cyBzdWl0YWJsZSBmb3Igb2ZmbG9hZGluZy4gSXMgaXQgYmFzZWQgb24gc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMsIHBvcnRzLCBwcm90b2NvbHMsIG9yIGEgY29tYmluYXRpb24/IEFuZCB3aGF0IGFib3V0IGNvbm5lY3Rpb24gc3RhdGUgdHJhY2tpbmc/IERvZXMgaXQgc3VwcG9ydCBUQ1AsIFVEUCwgb3IgYm90aD8gQXJlIHRoZXJlIGFueSBsaW1pdGF0aW9ucyBvbiB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnQgb2ZmbG9hZGVkIGZsb3dzPyBUaGlzIGtpbmQgb2YgaW1wbGVtZW50YXRpb24gZGV0YWlsIGNhbiBoYXZlIGEgbWFzc2l2ZSBpbXBhY3Qgb24gb3ZlcmFsbCBwZXJmb3JtYW5jZS5cblxuVGhlbiB0aGVyZSdzIHRoZSBxdWVzdGlvbiBvZiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGV4aXN0aW5nIElQdjYgZm9yd2FyZGluZyBzdGFjay4gRG9lcyBpdCBpbnRlZ3JhdGUgY2xlYW5seSB3aXRoIHRoZSByb3V0aW5nIHRhYmxlIGxvb2t1cHMgYW5kIHRoZSBuZWlnaGJvciBkaXNjb3ZlcnkgcHJvY2Vzcz8gRG9lcyBpdCBuZWVkIHRvIGhhbmRsZSBmcmFnbWVudGF0aW9uIGFuZCByZWFzc2VtYmx5PyBBbmQgaG93IGRvZXMgaXQgaGFuZGxlIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMsIHBhcnRpY3VsYXJseSB0aG9zZSB0aGF0IGFyZSBub3QgY29tbW9ubHkgb2ZmbG9hZGVkP1xuXG5BbHNvLCBlcnJvciBoYW5kbGluZyBpcyBjcml0aWNhbGx5IGltcG9ydGFudCwgc28gSSdsbCB3YW50IHRvIHJldmlldyB0aGUgbWVjaGFuaXNtIGZvciBoYW5kbGluZyBwYWNrZXQgZHJvcHMsIGNoZWNrc3VtIGZhaWx1cmVzLCBvciBvdGhlciBleGNlcHRpb25hbCBjb25kaXRpb25zLiBBIHJvYnVzdCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBuZWVkIHRvIGdyYWNlZnVsbHkgZmFsbCBiYWNrIHRvIHNvZnR3YXJlIGZvcndhcmRpbmcgd2hlbiBuZWNlc3NhcnksIG9yIGV2ZW4gc2lnbmFsIGFuIGlzc3VlIHVwc3RyZWFtLlxuXG5GaW5hbGx5LCBJ4oCZbGwgbmVlZCB0byBjaGVjayB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBGbG93IG9mZmxvYWQsIGluIGVzc2VuY2UsIGlzIGJ5cGFzc2luZyBzb21lIG9mIHRoZSBzdGFuZGFyZCBjaGVja3MuIEhvdyBkb2VzIGl0IGVuc3VyZSB0aGF0IG9mZmxvYWRlZCBmbG93cyBhcmUgbm90IHVzZWQgZm9yIG1hbGljaW91cyBwdXJwb3NlcywgYW5kIGhvdyBpcyBpdCBpbnRlZ3JhdGVkIHdpdGggYW55IHNlY3VyaXR5IGZlYXR1cmVzIGxpa2UgZmlyZXdhbGxpbmcgYW5kIGludHJ1c2lvbiBkZXRlY3Rpb24/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzAxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTQ6MDguNDgxNjAzMjIzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNjYsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNjY6XFx0c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuMTA2NzpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbjEwNjg6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxcbjEwNjk6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMDcwOlxcdHtcXG4xMDcxOlxcdFxcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XFxuMTA3MjpcXHRcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xcbjEwNzM6XFx0XFx0dW5zaWduZWQgaW50IHRob2ZmLCBtdHU7XFxuMTA3NDpcXHRcXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcXG4xMDc1OlxcdFxcbjEwNzY6XFx0XFx0ZGlyID0gdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5kaXI7XFxuMTA3NzpcXHRcXHRmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pO1xcbjEwNzg6XFx0XFxuMTA3OTpcXHRcXHRtdHUgPSBmbG93LVxcdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgKyBjdHgtXFx1MDAzZW9mZnNldDtcXG4xMDgwOlxcdFxcdGlmIChmbG93LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSlcXG4xMDgxOlxcdFxcdFxcdG10dSAtPSBzaXplb2YoKmlwNmgpO1xcbjEwODI6XFx0XFxuMTA4MzpcXHRcXHRpZiAodW5saWtlbHkobmZfZmxvd19leGNlZWRzX210dShza2IsIG10dSkpKVxcbjEwODQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTA4NTpcXHRcXG4xMDg2OlxcdFxcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBjdHgtXFx1MDAzZW9mZnNldCk7XFxuMTA4NzpcXHRcXHR0aG9mZiA9IHNpemVvZigqaXA2aCkgKyBjdHgtXFx1MDAzZW9mZnNldDtcXG4xMDg4OlxcdFxcdGlmIChuZl9mbG93X3N0YXRlX2NoZWNrKGZsb3csIGlwNmgtXFx1MDAzZW5leHRoZHIsIHNrYiwgdGhvZmYpKVxcbjEwODk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTA5MDpcXHRcXG4xMDkxOlxcdFxcdGlmICghbmZfZmxvd19kc3RfY2hlY2soXFx1MDAyNnR1cGxlaGFzaC1cXHUwMDNldHVwbGUpKSB7XFxuMTA5MjpcXHRcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuMTA5MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMDk0OlxcdFxcdH1cXG4xMDk1OlxcdFxcbjEwOTY6XFx0XFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB0aG9mZiArIGN0eC1cXHUwMDNlaGRyc2l6ZSkpXFxuMTA5NzpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMTA5ODpcXHRcXG4xMDk5OlxcdFxcdGZsb3dfb2ZmbG9hZF9yZWZyZXNoKGZsb3dfdGFibGUsIGZsb3csIGZhbHNlKTtcXG4xMTAwOlxcdFxcbjExMDE6XFx0XFx0bmZfZmxvd19lbmNhcF9wb3AoY3R4LCBza2IsIHR1cGxlaGFzaCk7XFxuMTEwMjpcXHRcXG4xMTAzOlxcdFxcdGlwNmggPSBpcHY2X2hkcihza2IpO1xcbjExMDQ6XFx0XFx0bmZfZmxvd19uYXRfaXB2NihmbG93LCBza2IsIGRpciwgaXA2aCk7XFxuMTEwNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTQ6MDguNDgxNjkyMTczWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjU5NjkyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeS4gSGVyZSdzIGEgc3VtbWFyeSBmb3JtYXR0ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaXZpbmcgSW4gRGVlcGVyKipcblxuQWxyaWdodCwgSSd2ZSBnb3QgdGhlIGluaXRpYWwgaW5mb3JtYXRpb24sIGJ1dCBpdCdzIG5vdCBlbm91Z2ggdG8gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGlzIGZ1cnRoZXIuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmUtcmVhZCB0aGUgdGV4dC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgdGhhdCBjb3VsZCBiZSBjcnVjaWFsIHRvIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEknbSBsb29raW5nIGZvciBudWFuY2UsIGZvciBpbXBsaWNpdCBtZWFuaW5ncywgYW5kIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGNoYWxsZW5nZSBteSBjdXJyZW50IHdvcmtpbmcgaHlwb3RoZXNpcy4gTGV0J3Mgc2VlIHdoYXQgZWxzZSB0aGlzIGluZm9ybWF0aW9uIGhhcyB0byBvZmZlci4gSSBuZWVkIHRvIGdldCB0aGlzIHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQyNiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNDoxMi4xMDc2NjMxNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTA2LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTA2OlxcdFxcdGlwNmgtXFx1MDAzZWhvcF9saW1pdC0tO1xcbjExMDc6XFx0XFx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xcbjExMDg6XFx0XFxuMTEwOTpcXHRcXHRpZiAoZmxvd190YWJsZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcXG4xMTEwOlxcdFxcdFxcdG5mX2N0X2FjY3RfdXBkYXRlKGZsb3ctXFx1MDAzZWN0LCB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRpciwgc2tiLVxcdTAwM2VsZW4pO1xcbjExMTE6XFx0XFxuMTExMjpcXHRcXHRyZXR1cm4gMTtcXG4xMTEzOlxcdH1cXG4xMTE0OlxcdFxcbjExMTU6XFx0c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxcbjExMTY6XFx0bmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuMTExNzpcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4xMTE4OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjExMTk6XFx0e1xcbjExMjA6XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB0dXBsZSA9IHt9O1xcbjExMjE6XFx0XFxuMTEyMjpcXHRcXHRpZiAobmZfZmxvd190dXBsZV9pcHY2KGN0eCwgc2tiLCBcXHUwMDI2dHVwbGUpIFxcdTAwM2MgMClcXG4xMTIzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjExMjQ6XFx0XFxuMTEyNTpcXHRcXHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcXHUwMDI2dHVwbGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNDoxMi4xMDc3NTExOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzgyNTAzMDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJldmlld2luZyB0aGUgRmxvdyBPZmZsb2FkIFBhdGNoKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCB0aGlzIGRpZmYgb25seSB0b3VjaGVzIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAuIFRoYXQncyBhIGJpdCBvZGQuIFdoeSB3YXNuJ3QgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGFsc28gbW9kaWZpZWQ/IElzIGl0IG5vdCBpbmNsdWRlZCBpbiB0aGUgZGlmZj8gTG9va2luZyBhdCB0aGUgY29kZSBjaGFuZ2UgaXRzZWxmLCBpdCBzZWVtcyBsaWtlIHRoZSBhdXRob3IgcmVwbGFjZWQgYG5mX2N0X2FjY3RfdXBkYXRlYCB3aXRoIGF0b21pYyBhZGRpdGlvbnMgdG8gYHR1cGxlLnBhY2tldHNgIGFuZCBgdHVwbGUuYnl0ZXNgIGZvciB0aGUgY291bnRlciB1cGRhdGUuXG5cbklmIElQdjYgd2Fzbid0IHRvdWNoZWQsIGl0J3Mgc3RpbGwgdXNpbmcgdGhlIG9sZCBgbmZfY3RfYWNjdF91cGRhdGVgLiBUaGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gIElmIHRoYXQncyB0aGUgY2FzZSwgdGhlbiBgbmZfZmxvd19zeW5jX2N0X3N0YXRzYCB3aWxsIGxpa2VseSB6ZXJvIG91dCBzdGF0cyBmb3IgSVB2NiBiZWNhdXNlIHRoZSBhdG9taWMgY291bnRlcnMgYXJlIG9ubHkgbW9kaWZpZWQgZm9yIElQdjQuICBCdXQgd2FpdCwgYG5mX2Zsb3dfc3luY19jdF9zdGF0c2AgYWN0dWFsbHkgKmFkZHMqIHRoZSBhdG9taWMgdmFsdWVzIHRvIGNvbm50cmFjayBzdGF0cyBhbmQgdGhlbiB6ZXJvZXMgdGhlbSBvdXQuIFRoZSBvbGQgSVB2NiBwYXRoIHVwZGF0ZXMgdGhlIGNvbm50cmFjayBzdGF0cyBkaXJlY3RseS4gQW5kLCBgbmZfZmxvd19zeW5jX2N0X3N0YXRzYCB3aWxsIGFkZCAwIHRvIHRoZSBjb25udHJhY2sgc3RhdHMsIHdoaWNoIGlzIGZpbmUuXG5cblNvLCBpcyB0aGlzIGEgYnVnPyBNYXliZSwgYnV0IGl0IG1pZ2h0IHN0aWxsIGJlIG9rYXkuIFJlZ2FyZGxlc3MsIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIGZ1enppbmcuIEl0J3MgYSBwcmltZSB0YXJnZXQuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzLiBgTkZfRkxPV19UQUJMRWAgaXMgdGhlIHByaW1hcnkgb25lLCBvZiBjb3Vyc2UuIGBORl9GTE9XX1RBQkxFX0lORVRgIG1pZ2h0IGJlIGltcGxpY2F0ZWQgaWYgSVB2NiB3YXMgdG91Y2hlZCBidXQgdGhlIHBhdGNoIG9ubHkgdG91Y2hlcyBJUHY0LCBhbmQgdGhlIGNvcmUgZ2FyYmFnZSBjb2xsZWN0b3IuIEl0IGxvb2tzIGxpa2UgYE5GX0ZMT1dfVEFCTEVgIGFsb25lIGlzIGVub3VnaC4gVGhhdCBvbmUgcmVsaWVzIG9uIGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuIEFueXRoaW5nIGVsc2U/IEkgZG9uJ3QgKnRoaW5rKiBgTkZfRkxPV19UQUJMRV9QUk9DRlNgIGlzIHN0cmljdGx5IHJlcXVpcmVkLlxuXG5Pa2F5LCB0aW1lIHRvIHBpY2sgc29tZSBnb29kIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuIGBuZl9mbG93X3RhYmxlX2djX3J1bmAgbG9va3MgcHJvbWlzaW5nLiBBbmQgb2J2aW91c2x5LCBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgIChhbHRob3VnaCwgaXNuJ3QgdGhhdCBzdGF0aWM/KSBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNDoyMS44OTAyNTY1OTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MjcwNzYzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X29mZmxvYWRfZm9yd2FyZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00NTc9bmZfZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDY3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ2ODpzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDY5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04NjY9bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg4NS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4ODY6XFx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoXFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg4Ny1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTQ6MjIuMjUyOTY4NjM0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODg3NjE1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb2RlIFN0cnVjdHVyZSoqXG5cbk9rYXksIHRoaXMgbG9va3Mgc3RhdGljLCB3aGljaCBzdWdnZXN0cyBpdCdzIGxpa2VseSBpbmxpbmVkIHdpdGhpbiBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgLiBLbm93aW5nIHRoYXQsIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AgYmVjb21lcyB0aGUga2V5IHN5bWJvbCB0byBmb2N1cyBvbiBmb3IgZGVlcGVyIGFuYWx5c2lzLiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGNvbmZpcm0gdGhhdCBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGlzIGlzIGEgY3JpdGljYWwgc3RlcCB0byBlbnN1cmUgSSBjYW4gZXhhbWluZSBpdHMgdXNhZ2UgYW5kIGhvdyB0aGlzIGlubGluaW5nLCBpZiBpdCBleGlzdHMsIGlzIGZ1bmN0aW9uaW5nIHdpdGhpbiB0aGUgYnJvYWRlciBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDc2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTQ6MjYuNTQxNzMzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODE0MjQ5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipuZl9mbG93X29mZmxvYWRfaXBfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04NjY9bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg5My19XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6ODk0OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04OTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE0OjI2LjYyOTg4MTYzM1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTg5NzI4Mzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBDb251bmRydW1zKipcblxuQWxyaWdodCwgdGhhdCBzZXR0bGVzIGl0IOKAkyBjb25maXJtZWQuIEJ1dCBub3csIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBjb21wbGV4aXR5IGJlZ2lucywgYW5kIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbnVhbmNlcyBvZiB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBOZXRmaWx0ZXIgZmxvdyB0YWJsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIga2VybmVsIGFyY2hpdGVjdHVyZSBhbmQgaG93IGl0cyBiZWhhdmlvciBjYW4gaW1wYWN0IHBlcmZvcm1hbmNlLiBUaGVyZSBhcmUgbGlrZWx5IGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcyBpbmhlcmVudCB0byB0aGF0IHByb2Nlc3MgdGhhdCB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgcXVlc3Rpb25zIGFib3V0IHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBnYXJiYWdlIGNvbGxlY3Rpb24sIHRoZSBhbGdvcml0aG1zIGVtcGxveWVkLCBhbmQgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFRoaXMgcmVxdWlyZXMgYSBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNDoyOS42MTk2MTMwOThaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjgzODQ2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipuZl9mbG93X3RhYmxlX2djX3J1blwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTQ6MjkuNjcxMzA2MDE0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0Njg5NzIxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYCBTeW1ib2wqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIEknbSBwcmV0dHkgc3VyZSBJJ3ZlIHNlZW4gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYCBiZWZvcmUuIEJ1dCwgd2FpdC4uLiBpc24ndCBpdCBpbnRlcm5hbD8gRG9lc24ndCBsb29rIGxpa2UgaXQncyBiZWVuIGV4cG9ydGVkIGFzIGEgc3ltYm9sLiBUaGF0J3MgYSBiaXQgdW5leHBlY3RlZC4gSSBuZWVkIHRvIGNvbmZpcm0uIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgc291cmNlIGNvZGUuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgYG5mX2Zsb3dfdGFibGVfY29yZS5jYC4gSSdsbCBxdWlja2x5IG5hdmlnYXRlIHRoZXJlIGFuZCB2ZXJpZnkgd2hldGhlciBgbmZfZmxvd190YWJsZV9nY19ydW5gIGlzIGFjdHVhbGx5IG1lYW50IHRvIGJlIGFjY2Vzc2VkIGZyb20gb3V0c2lkZSB0aGF0IG1vZHVsZSwgb3IgaWYgaXQncyBpbmRlZWQgYW4gaW50ZXJuYWwgZnVuY3Rpb24uIFRoZW4gSSBjYW4gcHJvY2VlZCBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA2MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE0OjM0LjE0MDI4MjY5OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc4MDMyODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd190YWJsZV9nY19ydW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz01ODQ9c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjIwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NjIxOnZvaWQgbmZfZmxvd190YWJsZV9nY19ydW4oc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYyMi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTYyNj1zdGF0aWMgdm9pZCBuZl9mbG93X29mZmxvYWRfd29ya19nYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTYzMC1cXHRmbG93X3RhYmxlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZl9mbG93dGFibGUsIGdjX3dvcmsud29yayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo2MzE6XFx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02MzItXFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsIFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VnY193b3JrLCBIWik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc4Mj12b2lkIG5mX2Zsb3dfdGFibGVfZnJlZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTEtXFx0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCwgTlVMTCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo3OTI6XFx0bmZfZmxvd190YWJsZV9nY19ydW4oZmxvd190YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OTMtXFx0bmZfZmxvd190YWJsZV9vZmZsb2FkX2ZsdXNoX2NsZWFudXAoZmxvd190YWJsZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTExNjU9dm9pZCBuZl9mbG93X3RhYmxlX29mZmxvYWRfZmx1c2hfY2xlYW51cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTExNjgtXFx0XFx0Zmx1c2hfd29ya3F1ZXVlKG5mX2Zsb3dfb2ZmbG9hZF9kZWxfd3EpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTE2OTpcXHRcXHRuZl9mbG93X3RhYmxlX2djX3J1bihmbG93dGFibGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTE3MC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE0OjM0LjE5ODA5MTkwNFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzMwNjg0ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgZW5jb3VudGVyaW5nIHRoZXNlIGNvbmNlcHRzOlxuXG4qKkludGVybmFsIE1vZHVsZSBWYXJpYWJsZSBBbmFseXNpcyoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGllY2Ugb2YgY29kZSwgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQgZm9jdXNlcyBvbiB0aGlzIHZhcmlhYmxlLiBJdCdzICppbnRlcm5hbCogdG8gdGhlIG1vZHVsZSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBpbXBsaWVzIGl0J3Mgbm90IGRlc2lnbmVkIGZvciBkaXJlY3QgZXh0ZXJuYWwgYWNjZXNzIHdoaWNoIGlzIGdlbmVyYWxseSBhIHNvbGlkIGRlc2lnbiBwcmluY2lwbGUuIEhvd2V2ZXIsIEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0czogSXQncyAqdXNlZCogd2l0aGluIHRoZSBtb2R1bGUncyBzY29wZSwgdGhhdCdzIGNsZWFyLiBCdXQganVzdCBiZWNhdXNlIGl0J3MgbG9jYWwgZG9lc24ndCBtZWFuIGl0J3MgY29tcGxldGVseSBpc29sYXRlZC4gTXkgbmV4dCBxdWVzdGlvbiBpczogd2hhdCdzIHRoZSBsaWZlY3ljbGU/IEhvdyBpcyBpdCBhZmZlY3RlZD9cblxuU28sIGZpcnN0IEkgbmVlZCB0byBjaGVjayBhbmQgbWFrZSBzdXJlIHRoYXQgdGhpcyB2YXJpYWJsZSBpc24ndCwgaW4gc29tZSBpbmRpcmVjdCB3YXksIGJlaW5nIHVzZWQgYnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zLiBJZiBvbmUgb2YgdGhvc2UgZXhwb3J0ZWQgZnVuY3Rpb25zIGNhbiB0cmlnZ2VyIGFuIGludGVybmFsIGFjdGlvbiwgSSBuZWVkIHRvIGtub3cuIEl0J3MgY3JpdGljYWwgdG8gZGV0ZXJtaW5lIGlmIGFueSBvZiB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhhdCBpbnRlcm5hbCB2YXJpYWJsZS4gQW55IHBvaW50IG9mIGludGVyYWN0aW9uIHJlcXVpcmVzIHNjcnV0aW55LlxuXG5NeSBtaW5kIGltbWVkaWF0ZWx5IHR1cm5zIHRvIG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucy4gT2theSwgc28gaXMgdGhlcmUgc29tZSBvdGhlciBmdW5jdGlvbiBpbiB0aGlzIG1vZHVsZS4uLmxpa2UgYG5mX2Zsb3dfdGFibGVfZnJlZWA/IEl0J3MgZXhwb3J0ZWQsIGlzIGl0IG5vdD8gSSBuZWVkIHRvIGtub3cuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgdGhlIGtleSBoZXJlLCBpdCdzIG9uZSBsaWtlbHkgcG9pbnQgb2YgY29udGFjdCwgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaGFzIGFueSBlZmZlY3Qgb24gdGhlIHZhcmlhYmxlJ3Mgc3RhdGUgb3IgYmVoYXZpb3IuIEl0J3MgYSBrZXkgZnVuY3Rpb24gdG8gZXZhbHVhdGUgZm9yIGRpcmVjdCBvciBpbmRpcmVjdCBpbmZsdWVuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTMwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTQ6MzguNTI4NzgwNzg3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzQ5MjYxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipuZl9mbG93X3RhYmxlX2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03ODI9dm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzk1LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc5NjpFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2ZyZWUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzk3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNDozOC41ODYyNzkwODJaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4NDg4NzQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBGbG93IFRhYmxlIEdhcmJhZ2UgQ29sbGVjdGlvbiBmb3IgS2VybmVsIEZ1enppbmcqKlxuXG5Pa2F5LCB5ZXMsIHRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgYXBwcm9hY2guIEkgdGhpbmsgZm9jdXNpbmcgb24gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYmVjYXVzZSBpdCdzIG5vdCBhIHN0YXRpYyBzeW1ib2wuIFRoYXQncyBrZXksIGJlY2F1c2UgaWYgaXQncyBub3Qgc3RhdGljLCBpdCBoYXMgYSBkZWZpbml0ZSwgdHJhY2VhYmxlIHN5bWJvbCBhZGRyZXNzLiBTeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gaG9vayBpbnRvIHRoYXQuIFNvLCBJJ2xsIGRlZmluaXRlbHkgaW5jbHVkZSBgbmZfZmxvd190YWJsZV9nY19ydW5gIGluIG15IGFuYWx5c2lzLCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCB0b28sIGZvciBnb29kIG1lYXN1cmUuXG5cbkxldCdzIGFsc28gY2hlY2sgaG93IGBuZl9mbG93X3RhYmxlX2l0ZXJhdGVgIGZpdHMgaW50byB0aGlzLiBJdCdzIGRlZmluaXRlbHkgY2FsbGVkIGJ5IGBuZl9mbG93X3RhYmxlX2djX3J1bmAsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBmbG93IG9mIGNvbnRyb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDU5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE0OjQyLjg3MTE2OTAwOVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5MTgyODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd190YWJsZV9pdGVyYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NDI2PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjQyNzpuZl9mbG93X3RhYmxlX2l0ZXJhdGUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQyOC1cXHRcXHQgICAgICB2b2lkICgqaXRlcikoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz02MjE9dm9pZCBuZl9mbG93X3RhYmxlX2djX3J1bihzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjIyLXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjYyMzpcXHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd190YWJsZSwgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAsIE5VTEwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjI0LX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9NzYzPXZvaWQgbmZfZmxvd190YWJsZV9nY19jbGVhbnVwKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzY1LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjc2NjpcXHRuZl9mbG93X3RhYmxlX2l0ZXJhdGUoZmxvd3RhYmxlLCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAsIGRldik7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03NjctXFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWdjX3dvcmspO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz03ODI9dm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzkwLVxcdC8qIC4uLiBubyBtb3JlIHBlbmRpbmcgd29yayBhZnRlciB0aGlzIHN0YWdlIC4uLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NzkxOlxcdG5mX2Zsb3dfdGFibGVfaXRlcmF0ZShmbG93X3RhYmxlLCBuZl9mbG93X3RhYmxlX2RvX2NsZWFudXAsIE5VTEwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzkyLVxcdG5mX2Zsb3dfdGFibGVfZ2NfcnVuKGZsb3dfdGFibGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNDo0Mi45MjIwOTExMDVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA0NjY3ODIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIENvbnVuZHJ1bSoqXG5cbk9rYXksIGBuZl9mbG93X3RhYmxlX2djX3J1bmAgaXMgbG9va2luZyBnb29kLCBubyBpbW1lZGlhdGUgY29uY2VybnMgdGhlcmUuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGFuZCBtYWtlIHN1cmUgd2UndmUgZ290IGV2ZXJ5dGhpbmcgbGluZWQgdXAgcHJvcGVybHkuIExldCdzIHN0YXJ0IHdpdGggdGhvc2UgS2NvbmZpZyBvcHRpb25zOiBgTkZfRkxPV19UQUJMRWAsIGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuXG5cbkhtbSwgbm93IHRoYXQgSSdtIGxvb2tpbmcgYXQgaXQsIGBORl9GTE9XX1RBQkxFYCBoYXMgZGVwZW5kZW5jaWVzLiBJdCByZWxpZXMgb24gYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYC4gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIGVuYWJsZWQgdG9vLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9uZWQgY2hlY2tpbmcgXCJkZXBlbmRzIG9uXCIgbGluZXMgZm9yIG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MsIGFuZCB0aG9zZSBkZWZpbml0ZWx5IHNlZW0gdG8gcXVhbGlmeS5cblxuU28sIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB3ZSBjYW4gY29tcGlsZSB0aGlzIHN0YXRpY2FsbHksIEkgbmVlZCB0byBpbmNsdWRlIGBORl9GTE9XX1RBQkxFYCwgYW5kIGl0cyBwYXJlbnRzOiBgTkVURklMVEVSX0lOR1JFU1NgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9UQUJMRVNgLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgaXMgYE5GX0ZMT1dfVEFCTEVgIHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBvciBkbyB3ZSBuZWVkIHRvIGNvbnNpZGVyIGBORl9GTE9XX1RBQkxFX0lORVRgIG9yIGV2ZW4gYE5GX0ZMT1dfVEFCTEVfSVBWNGA/IExldCdzIHZlcmlmeSB0aGF0IHF1aWNrbHksIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBsYXN0IG9uZSBtaWdodCBub3QgZXZlbiBleGlzdCBhbnltb3JlLiBJJ2xsIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMyMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNDo0OC45Njg3NzIyNTlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMjAyODI2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORl9GTE9XX1RBQkxFX0lQVjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE0OjQ5LjAxOTk4MjQ1NVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjI1ODc5OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipORl9GTE9XX1RBQkxFIFJlZmluZW1lbnQqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaGFzIGNsZWFybHkgc2hpZnRlZC4gV2UncmUgbm93IGp1c3QgZGVhbGluZyB3aXRoIGBORl9GTE9XX1RBQkxFYCBpbiB0aGlzIGNvbnRleHQuIEV2ZXJ5dGhpbmcgZWxzZSBpcyBzZWNvbmRhcnksIG9yIGF0IGxlYXN0IGJlaW5nIGNvbnNpZGVyZWQgc2VwYXJhdGVseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY3J5c3RhbCBjbGVhciBvbiB0aGlzIG5ldyBzY29wZS5cblxuTXkgbmV4dCBpbW1lZGlhdGUgdGFzayB0aGVuLCBpcyB0byBkZWx2ZSBpbnRvIGBORl9GTE9XX1RBQkxFX0lORVRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIElORVQtc3BlY2lmaWMgYXNwZWN0cyBwbGF5IGludG8gdGhpcyBtb3JlIGdlbmVyYWxpemVkIGZsb3cgdGFibGUuIElzIGl0IGEgc3BlY2lhbGl6ZWQgaW1wbGVtZW50YXRpb24/IEFuIGV4dGVuc2lvbj8gRG9lcyB0aGlzIGNoYW5nZSB0aGUgaW1wbGljYXRpb25zIGRvd25zdHJlYW0/IFVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBpcyBjcml0aWNhbCBmb3IgYW55IHN1YnNlcXVlbnQgYW5hbHlzaXMgb3IgbW9kaWZpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MjYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNDo1Mi4yNDU4NjUzMjJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTg5MDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GX0ZMT1dfVEFCTEVfSU5FVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAxPWVuZGlmICMgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAzOmNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzA0LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNTE9ZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1Mi1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1MzpvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRV9JTkVUKSArPSBuZl9mbG93X3RhYmxlX2luZXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTU0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNDo1Mi4yOTYwNjM3NzhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ1Mzk3MTIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBGbG93IFRhYmxlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmZfZmxvd190YWJsZV9jb3JlLmNgIGFuZCBgbmZfZmxvd190YWJsZV9pcC5jYCwgYW5kIHRob3NlIGFyZSBkZWZpbml0ZWx5IGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfTkZfRkxPV19UQUJMRWAuIE5vIHF1ZXN0aW9uIGFib3V0IHRoYXQsIHNvIGBORl9GTE9XX1RBQkxFYCBpcyB0aGUga2V5IGNvbmZpZyBoZXJlLiBXZSdyZSBnb29kIHRvIGdvLlxuXG5Ob3csIGxldCdzIGRpZyBpbnRvIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBjaGFuZ2VzLiBUaGUgY29yZSBpZGVhIHNlZW1zIHRvIGJlIHNoaWZ0aW5nIGZyb20gZGlyZWN0IGNvdW50ZXIgdXBkYXRlcyBpbiB0aGUgZmFzdCBwYXRoIChgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgKSDigJMgdXNpbmcgYXRvbWljcywgSSBhc3N1bWUg4oCTIHRvIGRlZmVycmluZyBzeW5jaHJvbml6YXRpb24gdG8gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uIChgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXBgKS4gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGNoYW5nZSBpbiBob3cgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGhhbmRsZXMgc3RhdGlzdGljcy4gSXQncyBtb3ZpbmcgdGhlIGNyaXRpY2FsIHBvaW50IG9mIGNvdW50ZXIgdXBkYXRlLCBhbmQgdGhlIHN5bmNocm9uaXphdGlvbiByZWxhdGVkIHRvIGl0LCBpbnRvIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gcHJvY2VzcywgYW5kIHRoYXQgY291bGQgZGVmaW5pdGVseSBpbnRyb2R1Y2Ugc29tZSBpbnRlcmVzdGluZyBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgZXZlbiBzb21lIHN1YnRsZSBidWdzIGluIGhvdyB0aGUgR0Mgb3BlcmF0ZXMuIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoYXQuXG5cbkknbSBrZXlpbmcgaW4gb24gYG5mX2Zsb3dfdGFibGVfZ2NfcnVuYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYC4gVGhvc2Ugc2VlbSBsaWtlIGltcG9ydGFudCBmb2NhbCBwb2ludHMuIFRoZSBvdGhlciBjb25maWdzIEknbGwga2VlcCBpbiBtaW5kIGFyZSBgTkVURklMVEVSX0lOR1JFU1NgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9UQUJMRVNgLlxuXG5KdXN0IHF1aWNrbHkgdmVyaWZ5aW5nLCBgTkZfRkxPV19UQUJMRWAgKmlzKiB0cmlzdGF0ZSwgd2hpY2ggaXMgZ29vZC4gV2UganVzdCBsaXN0IGl0IG91dCBpbiB0aGUgc3ltYm9scy5cblxuT2theSwgbGV0J3MgbWFrZSBzdXJlIHRoYXQgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCBpcyB0aGUgKm9ubHkqIGhvb2sgYmVpbmcgdXNlZC4gVGhlcmUncyBhbHNvIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYCwgYnV0IHRoYXQgd2Fzbid0IHRvdWNoZWQgaW4gdGhlIGRpZmYsIHNvIGl0IG11c3QgYmUgb2theS4gV2FpdCwgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBpcyBjYWxsZWQgYnkgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYC4gSXMgdGhlcmUgYW55IG90aGVyIGNhbGxlcj8gSSBuZWVkIHRvIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzA5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE0OjU5Ljc1MDAzODYzMloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0ODY4MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd19vZmZsb2FkX2ZvcndhcmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9NDU3PW5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ2Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo0Njg6c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ2OS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9ODY2PW5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04ODUtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6ODg2OlxcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04ODctXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE0OjU5LjgwMjUzMDk4OFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg1NDA4OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgeW91ciBzdW1tYXJ5OlxuXG4qKlRoZSBPZmZsb2FkIEhvb2sgYW5kIFNldHRpbmcgUmVzdWx0cyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoZSByZWNlbnQgY2hhbmdlcywgYW5kIHRoZSBrZXkgZnVuY3Rpb24gb2YgaW50ZXJlc3QgaGVyZSBpcyBkZWZpbml0aXZlbHkgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYC4gRm9yZ2V0IGFib3V0IGFueSBvdGhlciBwb3RlbnRpYWwgY2FuZGlkYXRlczsgdGhhdCdzIHRoZSBvbmUuIE15IGZvY3VzIGlzIG9uIHRoZSBjb3JyZWN0IGludGVyYWN0aW9uIHdpdGggdGhhdCBob29rLlxuXG5Ob3csIHdpdGggdGhhdCBjb25maXJtZWQsIEkgbmVlZCB0byBwcm9jZWVkIHdpdGggc2V0dGluZyB0aGUgcmVzdWx0cy4gTGV0J3MgbWFrZSB0aGF0IGNhbGwgdG8gYHNldC1yZXN1bHRzYCBpbW1lZGlhdGVseSB0byBlbnN1cmUgdGhlIG5leHQgc3RhZ2UgZ2V0cyB0aGUgcmVxdWlyZWQgZGF0YS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyB3aWxsIGNvbnRpbnVlIGZyb20uIFRpbWUgdG8gbWFrZSBpdCBoYXBwZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Mzg0LCJPdXRwdXRUb2tlbnMiOjE4MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE1OjAzLjk4Nzk0MjYxMVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NjM0Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORVRGSUxURVJfSU5HUkVTU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9mbG93X3RhYmxlX2djX3J1blwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwX2hvb2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgY29yZSBsb2dpYyB0byB1c2UgYXRvbWljIG9wZXJhdGlvbnMgZm9yIHBhY2tldCBhbmQgYnl0ZSBjb3VudGVycyBpbiB0aGUgZmFzdCBwYXRoIChuZl9mbG93X29mZmxvYWRfZm9yd2FyZCksIGFuZCBkZWZlcnMgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGVzZSBjb3VudGVycyB0byB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBzeXN0ZW0gdG8gdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBzdGVwIChuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IHN0YXRpc3RpY3MgYXJlIHRyYWNrZWQgYW5kIHN5bmNocm9uaXplZCwgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBidWdzIGluIHRoZSBHQyBwcm9jZXNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5FVEZJTFRFUl9JTkdSRVNTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2Zsb3dfdGFibGVfZ2NfcnVuXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXBfaG9va1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjb3JlIGxvZ2ljIHRvIHVzZSBhdG9taWMgb3BlcmF0aW9ucyBmb3IgcGFja2V0IGFuZCBieXRlIGNvdW50ZXJzIGluIHRoZSBmYXN0IHBhdGggKG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKSwgYW5kIGRlZmVycyB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZXNlIGNvdW50ZXJzIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHN5c3RlbSB0byB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHN0ZXAgKG5mX2Zsb3dfb2ZmbG9hZF9nY19zdGVwKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBmbG93IHRhYmxlIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgc3RhdGlzdGljcyBhcmUgdHJhY2tlZCBhbmQgc3luY2hyb25pemVkLCB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgY29uY3VycmVuY3kgaXNzdWVzIG9yIGJ1Z3MgaW4gdGhlIEdDIHByb2Nlc3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE1OjA0LjA2NzU4Mjk1NVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNDU3ODQ5NjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTU6MDQuMDY3OTk4MDg1WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1MzQ1NzQzMTIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzIHRvIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCB0byBiYXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRpc3RpY3MgdXBkYXRlcy4gVGhlc2UgZmllbGRzIGFyZSB1cGRhdGVkIHZpYSBgYXRvbWljNjRfYWRkYCBpbiB0aGUgZm9yd2FyZGluZyBwYXRoIGFuZCBwZXJpb2RpY2FsbHkgZmx1c2hlZCB0byB0aGUgY29ubnRyYWNrIGVudHJ5IHZpYSBgYXRvbWljNjRfeGNoZ2AgaW4gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiBcXG5cXG5UaGUgYHN0cnVjdCBmbG93X29mZmxvYWRgIGNvbnRhaW5pbmcgdGhlc2UgdHVwbGVzIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jYCAoaW4gYGZsb3dfb2ZmbG9hZF9hbGxvY2ApLCBlbnN1cmluZyB0aGUgbmV3IGF0b21pYyBjb3VudGVycyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZC4gVGhlIGNvdW50ZXJzIGFyZSBub3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIHRoZWlyIHZhbHVlcyBvbmx5IHJlcHJlc2VudCBwYWNrZXQgYW5kIGJ5dGUgY291bnRzLCBwcmVjbHVkaW5nIGFueSBpbmZvcm1hdGlvbiBsZWFrLiBcXG5cXG5XaGlsZSBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgaXMgc29tZXRpbWVzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIHVzZWQgYXMgYSBsb29rdXAga2V5IChlLmcuLCBpbiBgbmZfZmxvd19vZmZsb2FkX2xvb2t1cGApLCB0aGUgaGFzaCBhbmQgY29tcGFyaXNvbiBmdW5jdGlvbnMgb25seSBvcGVyYXRlIG9uIHRoZSBmaWVsZHMgdXAgdG8gdGhlIGBfX2hhc2hgIG1hcmtlciwgd2hpY2ggcHJlY2VkZXMgdGhlIG5ld2x5IGFkZGVkIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMuIFRodXMsIHRoZSB1bmluaXRpYWxpemVkIHN0YXRlIG9mIHRoZXNlIGZpZWxkcyBpbiBzdGFjay1hbGxvY2F0ZWQga2V5cyBpcyBuZXZlciByZWFkLlxcblxcbkFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBidWdzIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBzdGFuZGFyZCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjY2N2NkM2RhNjdlNjg0MmYzNzEyMWQ3NTg5N2M2ODI3ZDczNzdkOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDAwOjEzOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbmluZGV4IGYyZTI3NzFmMTg4ZjQuLjYwNjAyMDIxMzNjNzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5AQCAtMTcxLDYgKzE3MSw5IEBAIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUge1xuIFx0XHRcdHUzMlx0XHRpaWZpZHg7XG4gXHRcdH0gdGM7XG4gXHR9O1xuK1xuK1x0YXRvbWljNjRfdFx0XHRcdHBhY2tldHM7XG4rXHRhdG9taWM2NF90XHRcdFx0Ynl0ZXM7XG4gfTtcbiBcbiBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoIHtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuaW5kZXggMDMyNDFkNGJmZDVlOC4uYTFmMzdjYTk1NmI4ZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbkBAIC0xMyw2ICsxMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuaFx1MDAzZVxuIFxuIHN0YXRpYyBERUZJTkVfTVVURVgoZmxvd3RhYmxlX2xvY2spO1xuIHN0YXRpYyBMSVNUX0hFQUQoZmxvd3RhYmxlcyk7XG5AQCAtNTY1LDExICs1NjYsMjkgQEAgc3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9leHRlbmRfY3RfdGltZW91dChzdHJ1Y3QgbmZfY29ubiAqY3QpXG4gXHRuZl9jdF9wdXQoY3QpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBfX25mX2Zsb3dfc3luY19jdF9zdGF0cyhzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBpbnQgZGlyKVxuK3tcbitcdHU2NCBwa3RzLCBieXRlcztcbitcbitcdHBrdHMgPSBhdG9taWM2NF94Y2hnKFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUucGFja2V0cywgMCk7XG4rXHRieXRlcyA9IGF0b21pYzY0X3hjaGcoXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5ieXRlcywgMCk7XG4rXHRuZl9jdF9hY2N0X2FkZChmbG93LVx1MDAzZWN0LCBkaXIsIHBrdHMsIGJ5dGVzKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbmZfZmxvd19zeW5jX2N0X3N0YXRzKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXG4re1xuK1x0X19uZl9mbG93X3N5bmNfY3Rfc3RhdHMoZmxvdywgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCk7XG4rXHRfX25mX2Zsb3dfc3luY19jdF9zdGF0cyhmbG93LCBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKVxuIHtcbi1cdGJvb2wgdGVhcmRvd24gPSB0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbitcdGJvb2wgdGVhcmRvd247XG4rXG4rXHRuZl9mbG93X3N5bmNfY3Rfc3RhdHMoZmxvdyk7XG4gXG4rXHR0ZWFyZG93biA9IHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuIFx0aWYgKG5mX2Zsb3dfaGFzX2V4cGlyZWQoZmxvdykgfHxcbiBcdCAgICBuZl9jdF9pc19keWluZyhmbG93LVx1MDAzZWN0KSB8fFxuIFx0ICAgICFuZl9mbG93X2RzdF9jaGVjayhcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX09SSUdJTkFMXS50dXBsZSkgfHxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG5pbmRleCBjOGMyOWE5YTE2ODQ0Li42NmJlODE1YWMyZmViIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG5AQCAtNTA5LDggKzUwOSwxMCBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRpcF9kZWNyZWFzZV90dGwoaXBoKTtcbiBcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcbiBcbi1cdGlmIChmbG93X3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfQ09VTlRFUilcbi1cdFx0bmZfY3RfYWNjdF91cGRhdGUoZmxvdy1cdTAwM2VjdCwgdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpciwgc2tiLVx1MDAzZWxlbik7XG4rXHRpZiAoZmxvd190YWJsZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZfRkxPV1RBQkxFX0NPVU5URVIpIHtcbitcdFx0YXRvbWljNjRfYWRkKDEsIFx1MDAyNnR1cGxlaGFzaC1cdTAwM2V0dXBsZS5wYWNrZXRzKTtcbitcdFx0YXRvbWljNjRfYWRkKHNrYi1cdTAwM2VsZW4sIFx1MDAyNnR1cGxlaGFzaC1cdTAwM2V0dXBsZS5ieXRlcyk7XG4rXHR9XG4gXG4gXHRyZXR1cm4gMTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNTowNC4wNjc5OTkwMzVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ1MjQ1ODkzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZsb3cgT2ZmbG9hZCBUdXBsZSBVcGRhdGUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMgdG8gdGhlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYC4gVGhlIGludGVudCBzZWVtcyBjbGVhcjogd2UncmUgb2ZmbG9hZGluZyBhY2NvdW50aW5nIGluZm9ybWF0aW9uIHRvIHRoZSBmbG93IHRhYmxlLCByYXRoZXIgdGhhbiBkb2luZyB0aGUgYWNjb3VudGluZyBkaXJlY3RseSBpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBjb2RlLiBTbWFydC4gV2XigJlyZSBpbmNyZW1lbnRpbmcgdGhlc2UgYGF0b21pYzY0X3RgIGZpZWxkcyBpbiBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgLCByYXRoZXIgdGhhbiBjYWxsaW5nIGBuZl9jdF9hY2N0X3VwZGF0ZWAgZGlyZWN0bHkuIFRoaXMgc2hvdWxkIGltcHJvdmUgcGVyZm9ybWFuY2UuIFRoZW4sIHRoZXJlJ3MgYG5mX2Zsb3dfc3luY19jdF9zdGF0c2AsIHdoaWNoIHNvdW5kcyBsaWtlIGl0J3MgcmVzcG9uc2libGUgZm9yIHJlYWRpbmcgYW5kICpyZXNldHRpbmcqIHRoZXNlIGFjY3VtdWxhdGVkIHN0YXRzIGFuZCBwdXNoaW5nIHRoZW0gaW50byB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBzeXN0ZW0gdXNpbmcgYG5mX2N0X2FjY3RfYWRkYC4gQW5kIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGhpbiBgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXBgLiBJIHNlZS4uLiBpdCBsb29rcyBsaWtlIGEgcGVyaW9kaWMgc3luYy5cblxuTm93LCBhIHF1ZXN0aW9uIGlzIGJ1Z2dpbmcgbWUuIEFyZSB0aG9zZSBuZXcgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcyBpbml0aWFsaXplZCB0byB6ZXJvIHdoZW4gYSBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgaXMgYWN0dWFsbHkgY3JlYXRlZD8gSSBjYW7igJl0IGFzc3VtZSBhbnl0aGluZy4gV2UgbmVlZCB0byBiZSBzdXJlIHRoZXNlIGNvdW50ZXJzIHN0YXJ0IGZyb20gYSBrbm93biBiYXNlbGluZS4gSWYgbm90LCB0aGUgYWNjb3VudGluZyBjb3VsZCBiZSBjb21wbGV0ZWx5IG9mZi4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgd2hlcmUgdGhlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzLiBJJ2xsIHJlYWNoIGZvciBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNTowOS41MjA0NjAzODFaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTI4NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZsb3dfb2ZmbG9hZF90dXBsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmM9MzM9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy0zNC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmM6MzU6c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy0zNi1icGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jOjM3OlxcdFxcdFxcdCAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsIF9fYmUxNiBwcm90bylcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtMzgte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYzozOTpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTQwLVxcdHN0cnVjdCBuZl9mbG93dGFibGUgKm5mX2Zsb3dfdGFibGU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtNTctXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jOjU4Ol9fYnBmX2tmdW5jIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy01OS1icGZfeGRwX2Zsb3dfbG9va3VwKHN0cnVjdCB4ZHBfbWQgKmN0eCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpmaWJfdHVwbGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtNjItXFx0c3RydWN0IHhkcF9idWZmICp4ZHAgPSAoc3RydWN0IHhkcF9idWZmICopY3R4O1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYzo2MzpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy02NC1cXHRcXHQuaWlmaWR4ID0gZmliX3R1cGxlLVxcdTAwM2VpZmluZGV4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTY5LVxcdH07XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jOjcwOlxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtNzEtXFx0X19iZTE2IHByb3RvO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0yMz1mbG93X29mZmxvYWRfZmlsbF9kaXIoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjI0OlxcdFxcdCAgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yNS17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyNjpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpmdCA9IFxcdTAwMjZmbG93LVxcdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTI3LVxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmN0dCA9IFxcdTAwMjZmbG93LVxcdTAwM2VjdC1cXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTc4PUVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF9hbGxvYyk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy03OS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjgwOnN0YXRpYyB1MzIgZmxvd19vZmZsb2FkX2RzdF9jb29raWUoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqZmxvd190dXBsZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTgxLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9ODg9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKm5mdF9yb3V0ZV9kc3RfZmV0Y2goc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6ODk6XFx0XFx0XFx0XFx0XFx0ICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtOTAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz05OD1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9maWxsX3JvdXRlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy05OS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoxMDA6XFx0XFx0XFx0XFx0ICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTEwMS17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoxMDI6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqZmxvd190dXBsZSA9IFxcdTAwMjZmbG93LVxcdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTEwMy1cXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBuZnRfcm91dGVfZHN0X2ZldGNoKHJvdXRlLCBkaXIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz0xNTk9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfZHN0X3JlbGVhc2Uoc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjE2MDpcXHRcXHRcXHRcXHQgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTE2MS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTI3Nj1zdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9oYXNoKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjc3LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjI3ODpcXHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSA9IGRhdGE7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yNzktXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyODA6XFx0cmV0dXJuIGpoYXNoKHR1cGxlLCBvZmZzZXRvZihzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlLCBfX2hhc2gpLCBzZWVkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTI4MS19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTI4Mz1zdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9oYXNoX29iaihjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTI4NC17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyODU6XFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoID0gZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTI4Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjI4NzpcXHRyZXR1cm4gamhhc2goXFx1MDAyNnR1cGxlaGFzaC1cXHUwMDNldHVwbGUsIG9mZnNldG9mKHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUsIF9faGFzaCksIHNlZWQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjg4LX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MjkwPXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2hhc2hfY21wKHN0cnVjdCByaGFzaHRhYmxlX2NvbXBhcmVfYXJnICphcmcsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTI5Mi17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzoyOTM6XFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUgPSBhcmctXFx1MDAzZWtleTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjI5NDpcXHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp4ID0gcHRyO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMjk1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Mjk2OlxcdGlmIChtZW1jbXAoXFx1MDAyNngtXFx1MDAzZXR1cGxlLCB0dXBsZSwgb2Zmc2V0b2Yoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSwgX19oYXNoKSkpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0yOTctXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTMwMj1zdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIG5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXMgPSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzozMDM6XFx0LmhlYWRfb2Zmc2V0XFx0XFx0PSBvZmZzZXRvZihzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoLCBub2RlKSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTMwNC1cXHQuaGFzaGZuXFx0XFx0XFx0PSBmbG93X29mZmxvYWRfaGFzaCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9Mzk5PUVYUE9SVF9TWU1CT0xfR1BMKGZsb3dfb2ZmbG9hZF90ZWFyZG93bik7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MDAtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo0MDE6c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MDItZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NDAzOlxcdFxcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTQwNC17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo0MDU6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDA2LVxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTQyNz1uZl9mbG93X3RhYmxlX2l0ZXJhdGUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNDMxLXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjQzMjpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy00MzMtXFx0c3RydWN0IHJoYXNodGFibGVfaXRlciBodGk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTY3MT12b2lkIG5mX2Zsb3dfc25hdF9wb3J0KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02NzItXFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjY3MzpcXHRcXHQgICAgICAgdTggcHJvdG9jb2wsIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy02NzQte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz02OTc9dm9pZCBuZl9mbG93X2RuYXRfcG9ydChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNjk4LVxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgdGhvZmYsIHU4IHByb3RvY29sLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Njk5OlxcdFxcdCAgICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzAwLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9NDU9c3RhdGljIGludCBuZl9mbG93X3J1bGVfcm91dGVfaW5ldChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy00Ni1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6NDc6XFx0XFx0XFx0XFx0ICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTQ4LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTQ5LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjUwOlxcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKmZsb3dfdHVwbGUgPSBcXHUwMDI2Zmxvdy1cXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGU7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy01MS1cXHRpbnQgZXJyO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9ODM9c3RhdGljIHZvaWQgbmZfZmxvd19zbmF0X2lwKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODQtXFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcGhkciAqaXBoLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjg1OlxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgdGhvZmYsIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODYte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTA2PXN0YXRpYyB2b2lkIG5mX2Zsb3dfZG5hdF9pcChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwNy1cXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwaGRyICppcGgsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTA4OlxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgdGhvZmYsIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTA5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTEyOT1zdGF0aWMgdm9pZCBuZl9mbG93X25hdF9pcChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEzMDpcXHRcXHRcXHQgIHVuc2lnbmVkIGludCB0aG9mZiwgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMzEtXFx0XFx0XFx0ICBzdHJ1Y3QgaXBoZHIgKmlwaClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTE2MT1zdGF0aWMgdm9pZCBuZl9mbG93X3R1cGxlX2VuY2FwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTYyLVxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTYzOlxcdFxcdFxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTE2NC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0yMTQ9c3RhdGljIGludCBuZl9mbG93X3R1cGxlX2lwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MjE1OlxcdFxcdFxcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0yMTYte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9NDI0PXN0YXRpYyB2b2lkIG5mX2Zsb3dfZW5jYXBfcG9wKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDI1LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NDI2OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00Mjcte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDU1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ1NjpzdGF0aWMgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDU3LW5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ1OS17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NDYwOlxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NjEtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00Njg9c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ2OS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ3MDpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDcxLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDcyLXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo0NzM6XFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NzQtXFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTU4NT1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX2lwaXBfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NTg2OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy01ODctXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgX19iZTMyICppcF9kYWRkcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTYzMT1zdGF0aWMgaW50IG5mX2Zsb3dfdHVubmVsX3Y0X3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjYzMjpcXHRcXHRcXHRcXHQgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTYzMy1cXHRcXHRcXHRcXHQgIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgIF9fYmUzMiAqaXBfZGFkZHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz02NDE9c3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcDZpcDZfcHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NjQyOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTY0My1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz02OTI9c3RhdGljIGludCBuZl9mbG93X3R1bm5lbF92Nl9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo2OTM6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy02OTQtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz03MDM9c3RhdGljIGludCBuZl9mbG93X2VuY2FwX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo3MDQ6XFx0XFx0XFx0ICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNzA1LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpvdXRkZXYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz03MzA9c3RydWN0IG5mX2Zsb3dfeG1pdCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy03MzMtXFx0c3RydWN0IG5ldF9kZXZpY2VcXHQqb3V0ZGV2O1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjczNDpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy03MzUtXFx0Ym9vbFxcdFxcdFxcdG5lZWRzX2dzb19zZWdtZW50O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9ODAwPXN0YXRpYyBpbnQgbmZfZmxvd19xdWV1ZV94bWl0NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjgwMTpcXHRcXHRcXHQgICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTgwMi1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTgwMy17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6ODA0OlxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjgwNTpcXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTgwNi1cXHRzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTg2Nj1uZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODY4LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4Njk6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg3MC1cXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlID0gcHJpdjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTkzNz1zdGF0aWMgdm9pZCBuZl9mbG93X3NuYXRfaXB2Nihjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtOTM5LVxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCB0aG9mZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo5NDA6XFx0XFx0XFx0ICAgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05NDEte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9OTYwPXN0YXRpYyB2b2lkIG5mX2Zsb3dfZG5hdF9pcHY2KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05NjItXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHRob2ZmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjk2MzpcXHRcXHRcXHQgICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTk2NC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz05ODM9c3RhdGljIHZvaWQgbmZfZmxvd19uYXRfaXB2Nihjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTk4NC1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6OTg1OlxcdFxcdFxcdCAgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05ODYtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaXB2NmhkciAqaXA2aClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTEwMDA9c3RhdGljIGludCBuZl9mbG93X3R1cGxlX2lwdjYoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMDAxOlxcdFxcdFxcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwMDIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTA2Nj1zdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDY3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTA2ODpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTA2OS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwNzAte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjEwNzE6XFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDcyLVxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTE0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjExMTU6c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExMTYtbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTE5LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMTIwOlxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTIxLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTEyOD1zdGF0aWMgaW50IG5mX2Zsb3dfcXVldWVfeG1pdDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMTI5OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTEzMC1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExMzEte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjExMzI6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqb3RoZXJfdHVwbGU7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTEzMzpcXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExMzQtXFx0c3RydWN0IG5mX2Zsb3dfeG1pdCB4bWl0ID0ge307XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMTk1PW5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExOTcte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjExOTg6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExOTktXFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTk0PXN0YXRpYyBpbnQgbmZfZmxvd19ydWxlX21hdGNoKHN0cnVjdCBuZl9mbG93X21hdGNoICptYXRjaCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk1OlxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTYtXFx0XFx0XFx0ICAgICAgc3RydWN0IGRzdF9lbnRyeSAqb3RoZXJfZHN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0yMzI9c3RhdGljIGludCBmbG93X29mZmxvYWRfZXRoX3NyYyhzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0yMzMtXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjIzNDpcXHRcXHRcXHRcXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjM1LVxcdFxcdFxcdFxcdHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjM4LVxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnkxID0gZmxvd19hY3Rpb25fZW50cnlfbmV4dChmbG93X3J1bGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MjM5OlxcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlLCAqdGhpc190dXBsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTI0MC1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9MjgyPXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2V0aF9kc3Qoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMjgzLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzoyODQ6XFx0XFx0XFx0XFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTI4NS1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTI4OC1cXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5MSA9IGZsb3dfYWN0aW9uX2VudHJ5X25leHQoZmxvd19ydWxlKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjI4OTpcXHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZSwgKnRoaXNfdHVwbGU7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0yOTAtXFx0Y29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0zNDI9c3RhdGljIGludCBmbG93X29mZmxvYWRfaXB2NF9zbmF0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTM0My1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzozNDQ6XFx0XFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMzQ1LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz0zNzM9c3RhdGljIGludCBmbG93X29mZmxvYWRfaXB2NF9kbmF0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTM3NC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzozNzU6XFx0XFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMzc2LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz00MjM9c3RhdGljIGludCBmbG93X29mZmxvYWRfaXB2Nl9zbmF0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQyNC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo0MjU6XFx0XFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNDI2LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz00NDg9c3RhdGljIGludCBmbG93X29mZmxvYWRfaXB2Nl9kbmF0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQ0OS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo0NTA6XFx0XFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNDUxLVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz00OTI9c3RhdGljIGludCBmbG93X29mZmxvYWRfcG9ydF9zbmF0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTQ5My1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo0OTQ6XFx0XFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNDk1LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz01MjY9c3RhdGljIGludCBmbG93X29mZmxvYWRfcG9ydF9kbmF0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTUyNy1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo1Mjg6XFx0XFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNTI5LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz01ODU9c3RhdGljIGludCBmbG93X29mZmxvYWRfcmVkaXJlY3Qoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNTg2LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NTg3OlxcdFxcdFxcdFxcdCBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNTg4LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy01ODkte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NTkwOlxcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnRoaXNfdHVwbGUsICpvdGhlcl90dXBsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTU5MS1cXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz02MjU9c3RhdGljIGludCBmbG93X29mZmxvYWRfZW5jYXBfdHVubmVsKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo2MjY6XFx0XFx0XFx0XFx0ICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNjI3LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNjI4LXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjYyOTpcXHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0aGlzX3R1cGxlO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNjMwLVxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTY1ND1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9kZWNhcF90dW5uZWwoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjY1NTpcXHRcXHRcXHRcXHQgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02NTYtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02NTcte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6NjU4OlxcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNjU5LVxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTY4Mz1uZl9mbG93X3J1bGVfcm91dGVfY29tbW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjY4NDpcXHRcXHRcXHQgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02ODUtXFx0XFx0XFx0ICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy02ODYte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6Njg3OlxcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6Njg4OlxcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNjg5LVxcdGludCBpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz03NDM9aW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjc0NDpcXHRcXHRcXHQgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc0NS1cXHRcXHRcXHQgICAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz03NzI9aW50IG5mX2Zsb3dfcnVsZV9yb3V0ZV9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjc3MzpcXHRcXHRcXHQgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTc3NC1cXHRcXHRcXHQgICAgc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz03OTg9bmZfZmxvd19vZmZsb2FkX3J1bGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtNzk5LVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjgwMDpcXHRcXHRcXHQgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODAxLXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTgwMi1cXHRjb25zdCBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUgPSBvZmZsb2FkLVxcdTAwM2VmbG93dGFibGU7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo4MDM6XFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsICpvdGhlcl90dXBsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTgwNC1cXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93ID0gb2ZmbG9hZC1cXHUwMDNlZmxvdztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9ODg4PXN0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9pbml0KHN0cnVjdCBmbG93X2Nsc19vZmZsb2FkICpjbHNfZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtODkwLVxcdFxcdFxcdFxcdCBlbnVtIGZsb3dfY2xzX2NvbW1hbmQgY21kLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6ODkxOlxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTg5Mi1cXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05MDAtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5MDE6c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfdHVwbGUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTAyLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTAzLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5MDQ6XFx0XFx0XFx0XFx0IGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05MDUtXFx0XFx0XFx0XFx0IGludCBwcmlvcml0eSwgaW50IGNtZCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTM2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTM3OnN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX3R1cGxlX2FkZChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05MzgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZfZmxvd19ydWxlICpmbG93X3J1bGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5Mzk6XFx0XFx0XFx0XFx0ICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTQwLXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk0MTpcXHRyZXR1cm4gbmZfZmxvd19vZmZsb2FkX3R1cGxlKG9mZmxvYWQtXFx1MDAzZWZsb3d0YWJsZSwgb2ZmbG9hZC1cXHUwMDNlZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk0Mi1cXHRcXHRcXHRcXHQgICAgIGZsb3dfcnVsZSwgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05NDctXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5NDg6c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3R1cGxlX2RlbChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5NDk6XFx0XFx0XFx0XFx0ICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk1MC17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5NTE6XFx0bmZfZmxvd19vZmZsb2FkX3R1cGxlKG9mZmxvYWQtXFx1MDAzZWZsb3d0YWJsZSwgb2ZmbG9hZC1cXHUwMDNlZmxvdywgTlVMTCwgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTUyLVxcdFxcdFxcdCAgICAgIG9mZmxvYWQtXFx1MDAzZWZsb3d0YWJsZS1cXHUwMDNlcHJpb3JpdHksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTk1Nz1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9ydWxlX2FkZChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk2MS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk2MjpcXHRva19jb3VudCArPSBmbG93X29mZmxvYWRfdHVwbGVfYWRkKG9mZmxvYWQsIGZsb3dfcnVsZVswXSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk2My1cXHRcXHRcXHRcXHRcXHQgICBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk2NC1cXHRpZiAodGVzdF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcXHUwMDI2b2ZmbG9hZC1cXHUwMDNlZmxvdy1cXHUwMDNlZmxhZ3MpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTY1OlxcdFxcdG9rX2NvdW50ICs9IGZsb3dfb2ZmbG9hZF90dXBsZV9hZGQob2ZmbG9hZCwgZmxvd19ydWxlWzFdLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTY2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz05OTI9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfZGVsKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTk0LVxcdGNsZWFyX2JpdChJUFNfSFdfT0ZGTE9BRF9CSVQsIFxcdTAwMjZvZmZsb2FkLVxcdTAwM2VmbG93LVxcdTAwM2VjdC1cXHUwMDNlc3RhdHVzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk5NTpcXHRmbG93X29mZmxvYWRfdHVwbGVfZGVsKG9mZmxvYWQsIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTk2LVxcdGlmICh0ZXN0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFxcdTAwMjZvZmZsb2FkLVxcdTAwM2VmbG93LVxcdTAwM2VmbGFncykpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYzo5OTc6XFx0XFx0Zmxvd19vZmZsb2FkX3R1cGxlX2RlbChvZmZsb2FkLCBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk5OC1cXHRzZXRfYml0KE5GX0ZMT1dfSFdfREVBRCwgXFx1MDAyNm9mZmxvYWQtXFx1MDAzZWZsb3ctXFx1MDAzZWZsYWdzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTAwMC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwMDE6c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3R1cGxlX3N0YXRzKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwMDI6XFx0XFx0XFx0XFx0ICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtMTAwMy1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBmbG93X3N0YXRzICpzdGF0cylcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwMDQte1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTAwNTpcXHRuZl9mbG93X29mZmxvYWRfdHVwbGUob2ZmbG9hZC1cXHUwMDNlZmxvd3RhYmxlLCBvZmZsb2FkLVxcdTAwM2VmbG93LCBOVUxMLCBkaXIsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDA2LVxcdFxcdFxcdCAgICAgIG9mZmxvYWQtXFx1MDAzZWZsb3d0YWJsZS1cXHUwMDNlcHJpb3JpdHksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTEwMTE9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfc3RhdHMoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDE1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6MTAxNjpcXHRmbG93X29mZmxvYWRfdHVwbGVfc3RhdHMob2ZmbG9hZCwgRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTCwgXFx1MDAyNnN0YXRzWzBdKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTEwMTctXFx0aWYgKHRlc3RfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXFx1MDAyNm9mZmxvYWQtXFx1MDAzZWZsb3ctXFx1MDAzZWZsYWdzKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjEwMTg6XFx0XFx0Zmxvd19vZmZsb2FkX3R1cGxlX3N0YXRzKG9mZmxvYWQsIEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFksXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy0xMDE5LVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2c3RhdHNbMV0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNTowOS41NzI5OTI5NTdaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNzEzODU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IG93biBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIEZsb3cgT2ZmbG9hZCBTdHJ1Y3R1cmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IG1pbmQgaW1tZWRpYXRlbHkgc2VlcyB0aGUgaGllcmFyY2h5IGhlcmUg4oCTIHRoZSBgZmxvd19vZmZsb2FkX3R1cGxlYCBpcyAqbmVzdGVkKiB3aXRoaW4gYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2hgLCB3aGljaCBpdHNlbGYgaXMgYSBjb21wb25lbnQgb2YgdGhlIG92ZXJhcmNoaW5nIGBzdHJ1Y3QgZmxvd19vZmZsb2FkYC4gVGhhdCdzIGEgY2xhc3NpYyBsYXllcmVkIGRlc2lnbiwgbGlrZWx5IGFpbWVkIGF0IGVpdGhlciBtZW1vcnkgZWZmaWNpZW5jeSwgaW1wcm92ZWQgb3JnYW5pemF0aW9uLCBvciBwZXJoYXBzIG1vZHVsYXJpdHkgd2l0aGluIHRoZSBvZmZsb2FkIHByb2Nlc3MuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGhvdyBpcyB0aGUgbWFzdGVyIHN0cnVjdCwgYGZsb3dfb2ZmbG9hZGAgYWxsb2NhdGVkPyBJcyBpdCBvbiB0aGUgc3RhY2ssIHRoZSBoZWFwLCBvciBzb21lIG90aGVyIG1lbW9yeSByZWdpb24/IEtub3dpbmcgdGhhdCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgbGlmZXRpbWUgYW5kIHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24gcmVxdWlyZW1lbnRzIGZvciB0aGVzZSBzdHJ1Y3R1cmVzLiBJdCBpbXBhY3RzIGNhY2hlIGVmZmljaWVuY3kgYW5kIGhvdyB3ZSBzaG91bGQgYXBwcm9hY2ggZGVidWdnaW5nIGlmIHdlIGVuY291bnRlciBhbnkgaXNzdWVzIHdpdGggaXQgbGF0ZXIuIFRoZSBhbGxvY2F0aW9uIG1ldGhvZCB3aWxsIGRldGVybWluZSB0aGUgbGltaXRzIG9mIGl0cyBhdmFpbGFiaWxpdHksIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgaGFyZHdhcmUgb2ZmbG9hZGluZy4gS25vd2luZyB0aGlzIGdpdmVzIHVzIGEgZmFyIGJldHRlciBwaWN0dXJlIG9mIGhvdyB3ZSBjYW4gaW50ZXJhY3Qgd2l0aCBpdCBzYWZlbHkgaW4gYW4gb2ZmbG9hZCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI3OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE1OjEzLjYwMDEzNDMyOVoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0MTkzNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmxvd19vZmZsb2FkX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9MjM9Zmxvd19vZmZsb2FkX2ZpbGxfZGlyKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTUzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6NTQ6c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvd19vZmZsb2FkX2FsbG9jKHN0cnVjdCBuZl9jb25uICpjdClcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTU1LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtNzctfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6Nzg6RVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2FsbG9jKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTc5LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz04NjA9c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2Rlc3Ryb3koc3RydWN0IG5mX2Zsb3dfcnVsZSAqZmxvd19ydWxlW10pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTg2Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjg2ODpzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9hbGxvYyhjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy04NjktXFx0XFx0XFx0XFx0IHN0cnVjdCBuZl9mbG93X3J1bGUgKmZsb3dfcnVsZVtdKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz05NzM9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfYWRkKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTc3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTc4OlxcdGVyciA9IG5mX2Zsb3dfb2ZmbG9hZF9hbGxvYyhvZmZsb2FkLCBmbG93X3J1bGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTc5LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NTA9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTExMS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxMTI6XFx0ZmxvdyA9IGZsb3dfb2ZmbG9hZF9hbGxvYyhjdCk7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTEzLVxcdGlmICghZmxvdylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTU6MTMuNjQ3NTU2OTk2WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjU0MzUwMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgZmxvd19vZmZsb2FkX2FsbG9jYCBmdW5jdGlvbiwgZm9jdXNpbmcgb24gd2hhdCBJIHNlZSBhcyB0aGUga2V5IGFzcGVjdHM6XG5cbioqRGl2aW5nIGludG8gRmxvdyBUYWJsZSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgZmxvd19vZmZsb2FkX2FsbG9jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgYXJlIHRoZSBjb3JlIHJlc3BvbnNpYmlsaXRpZXMgb2YgdGhpcyBhbGxvY2F0aW9uIGZ1bmN0aW9uPyBPYnZpb3VzbHksIGl0J3MgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgcmVzb3VyY2VzIGZvciBhIG5ldyBmbG93IGVudHJ5IHRoYXQncyBnb2luZyB0byBiZSBvZmZsb2FkZWQuIEJ1dCBJJ20gbG9va2luZyBiZXlvbmQgdGhhdCDigJMgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICpzdHJhdGVneSogb2YgdGhlIGFsbG9jYXRpb24uXG5cbkZpcnN0LCBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gaGFuZGxlIHRoZSBmdW5kYW1lbnRhbCBtZW1vcnkgYWxsb2NhdGlvbiBpdHNlbGYuIFRoaXMgbWVhbnMgbWFuYWdpbmcgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG93IGVudHJ5LCBsaWtlbHkgaW5jbHVkaW5nIHRoZSB2YXJpb3VzIGZpZWxkcyB0aGF0IGRlZmluZSB0aGUgZmxvdyAoc291cmNlL2Rlc3RpbmF0aW9uIElQcywgcG9ydHMsIHByb3RvY29sLCBldGMuKSwgYW5kIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhIG5lZWRlZCBieSB0aGUgb2ZmbG9hZCBtZWNoYW5pc20uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzaXppbmcgc3RyYXRlZ3ksIHdoYXQgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBhbmQgaWYgaXQncyBkeW5hbWljIG9yIHVzZXMgcHJlLWFsbG9jYXRlZCBwb29scy4gTWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcyBpbXBhY3QgZWZmaWNpZW5jeS5cblxuSSBhbHNvIGltYWdpbmUgdGhhdCBpdCBuZWVkcyB0byBoYW5kbGUgaW5pdGlhbGl6YXRpb24gb2YgdGhpcyBuZXcgZmxvdyBlbnRyeS4gU2V0dGluZyBkZWZhdWx0IHZhbHVlcyBmb3Iga2V5IGZpZWxkcyBpcyBjcml0aWNhbC4gV2hhdCBhcmUgdGhlIGVzc2VudGlhbCBwYXJhbWV0ZXJzIHRoYXQgYXJlIHplcm9lZCBvciBpbml0aWFsaXplZCBoZXJlPyBBcmUgYW55IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHVzZWQgdG8gZGVyaXZlIHRoZXNlIGluaXRpYWwgdmFsdWVzP1xuXG5Bbm90aGVyIHBvaW50IEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaXMgaG93IHRoaXMgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIGZsb3cgdGFibGUgbWFuYWdlbWVudC4gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgZmxvdyB0YWJsZSdzIGxvY2tpbmcgbWVjaGFuaXNtcz8gSXMgaXQgYXdhcmUgb2YgYW55IGxpbWl0YXRpb25zIG9uIHRoZSBudW1iZXIgb2YgZmxvd3MgdGhhdCBjYW4gYmUgb2ZmbG9hZGVkPyBFcnJvciBjaGVja2luZyBoZXJlIGlzIHBhcmFtb3VudCB0byBwcmV2ZW50IHJlc291cmNlIGV4aGF1c3Rpb24gYW5kIGVuc3VyZSB0aGUgdGFibGUgZG9lc24ndCBnZXQgY29ycnVwdGVkLlxuXG5GaW5hbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBmb3IgZnV0dXJlIG9wdGltaXphdGlvbnMuIERvZXMgdGhpcyBhbGxvY2F0aW9uIGZ1bmN0aW9uIHByb3ZpZGUgYW55IGhvb2tzIG9yIHBsYWNlaG9sZGVycyBmb3IgYWR2YW5jZWQgZmVhdHVyZXMsIHN1Y2ggYXMgcHJlLWFsbG9jYXRpb24gb2Ygc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIG9yIGludGVncmF0aW9uIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0aW9uIG1lY2hhbmlzbXM/IEhvdyBpdCdzIGRlc2lnbmVkIHdpbGwgZWl0aGVyIGNvbnN0cmFpbiBvciBlbmFibGUgZnV0dXJlIGVuaGFuY2VtZW50cy4gSSdtIGtlZW4gdG8gY29uc2lkZXIgd2hldGhlciB0aGlzIHJvdXRpbmUgaXMgd2VsbC1mYWN0b3JlZCBhbmQgZXh0ZW5zaWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxODksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNToxOC4xNzI5OTU1NTRaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1NDpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93X29mZmxvYWRfYWxsb2Moc3RydWN0IG5mX2Nvbm4gKmN0KVxcbiAgNTU6XFx0e1xcbiAgNTY6XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcXG4gIDU3OlxcdFxcbiAgNTg6XFx0XFx0aWYgKHVubGlrZWx5KG5mX2N0X2lzX2R5aW5nKGN0KSkpXFxuICA1OTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0ZmxvdyA9IGttZW1fY2FjaGVfemFsbG9jKGZsb3dfb2ZmbG9hZF9jYWNoZXAsIEdGUF9BVE9NSUMpO1xcbiAgNjI6XFx0XFx0aWYgKCFmbG93KVxcbiAgNjM6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA2NDpcXHRcXG4gIDY1OlxcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2Y3QtXFx1MDAzZWN0X2dlbmVyYWwudXNlKTtcXG4gIDY2OlxcdFxcdGZsb3ctXFx1MDAzZWN0ID0gY3Q7XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdGZsb3dfb2ZmbG9hZF9maWxsX2RpcihmbG93LCBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTtcXG4gIDY5OlxcdFxcdGZsb3dfb2ZmbG9hZF9maWxsX2RpcihmbG93LCBGTE9XX09GRkxPQURfRElSX1JFUExZKTtcXG4gIDcwOlxcdFxcbiAgNzE6XFx0XFx0aWYgKGN0LVxcdTAwM2VzdGF0dXMgXFx1MDAyNiBJUFNfU1JDX05BVClcXG4gIDcyOlxcdFxcdFxcdF9fc2V0X2JpdChORl9GTE9XX1NOQVQsIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncyk7XFxuICA3MzpcXHRcXHRpZiAoY3QtXFx1MDAzZXN0YXR1cyBcXHUwMDI2IElQU19EU1RfTkFUKVxcbiAgNzQ6XFx0XFx0XFx0X19zZXRfYml0KE5GX0ZMT1dfRE5BVCwgXFx1MDAyNmZsb3ctXFx1MDAzZWZsYWdzKTtcXG4gIDc1OlxcdFxcbiAgNzY6XFx0XFx0cmV0dXJuIGZsb3c7XFxuICA3NzpcXHR9XFxuICA3ODpcXHRFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfYWxsb2MpO1xcbiAgNzk6XFx0XFxuICA4MDpcXHRzdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9kc3RfY29va2llKHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKmZsb3dfdHVwbGUpXFxuICA4MTpcXHR7XFxuICA4MjpcXHRcXHRpZiAoZmxvd190dXBsZS1cXHUwMDNlbDNwcm90byA9PSBORlBST1RPX0lQVjYpXFxuICA4MzpcXHRcXHRcXHRyZXR1cm4gcnQ2X2dldF9jb29raWUoZHN0X3J0Nl9pbmZvKGZsb3dfdHVwbGUtXFx1MDAzZWRzdF9jYWNoZSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNToxOC4xNzMwODc1NTRaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM2NzQwMTY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBaZXJvLUluaXRpYWxpemF0aW9uIGFuZCBBdG9taWMgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIHRoaXMgY29kZSBzbmlwcGV0IHN0YXJ0cyBieSB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgLCBtZWFuaW5nIHRoZSBgZmxvd19vZmZsb2FkYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZCByaWdodCBvZmYgdGhlIGJhdC4gVGhhdCdzIGdvb2QgdG8ga25vdyDigJMgaXQgc2V0cyBhIGJhc2VsaW5lLiBUaGVuLCB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJIHNlZSBhIGNoYW5nZSBpbiBgbmZfZmxvd190YWJsZV9pcC5jYCB0aGF0IGVtcGxveXMgYGF0b21pYzY0X2FkZGAgZm9yIHRoZSBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzIHdpdGhpbiBgdHVwbGVoYXNoLVx1MDAzZXR1cGxlYC4gQW5kIG5vdyB0aGVyZSBpcyBhIG5ldyBmdW5jdGlvbiBgbmZfZmxvd19zeW5jX2N0X3N0YXRzYCB3aGljaCB1c2VzIGBhdG9taWM2NF94Y2hnYCBvbiB0aGVzZSB2ZXJ5IHNhbWUgZmllbGRzLiBTaW5jZSBgZmxvd19vZmZsb2FkYCBpcyB6ZXJvLWFsbG9jYXRlZCwgaXQgbWVhbnMgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGFyZSwgaW5pdGlhbGx5LCBndWFyYW50ZWVkIHRvIGJlIHplcm8uXG5cbk15IGJyYWluIGlzIGltbWVkaWF0ZWx5IGFza2luZywgaXMgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIGV2ZXIgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgdGhlbiBwYXNzZWQgYWxvbmcgc29tZXdoZXJlIHdoZXJlIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBhcmUgcmVhZD8gVGhpcyBpcyBhIHBvdGVudGlhbCBwb2ludCBvZiBjb250ZW50aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGF0b21pY3MgYXJlIHRydWx5IGJlaW5nIHVzZWQgYXMgaW50ZW5kZWQuIExvb2tpbmcgYXQgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuY2AsIEkgc2VlIGEgc3RhY2sgYWxsb2NhdGlvbiwgbGlrZSB0aGlzOlxuXG5gYGBjXG5cdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7XG5cdFx0LmlpZmlkeCA9IGZpYl90dXBsZS1cdTAwM2VpZmluZGV4LFxuLi4uXG5cdH07XG5gYGBcblxuU28geWVzLCB0aGVyZSdzIGEgc3RhY2sgdmFyaWFibGUuIE5vdywgZG9lcyB0aGlzIHN0YWNrLWFsbG9jYXRlZCBgdHVwbGVgIGdldCBwYXNzZWQgdG8gYSBmdW5jdGlvbiBvciBjb2RlIHBhdGggdGhhdCBzdWJzZXF1ZW50bHkgcmVhZHMgdGhlIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHM/IFRoYXQncyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gSSBuZWVkIHRvIGFuc3dlciBieSBleGFtaW5pbmcgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuY2AgbW9yZSBjbG9zZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE1MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE1OjI0LjU0MDQ5MjNaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDU4OlxcdF9fYnBmX2tmdW5jIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxcbiAgNTk6XFx0YnBmX3hkcF9mbG93X2xvb2t1cChzdHJ1Y3QgeGRwX21kICpjdHgsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqZmliX3R1cGxlLFxcbiAgNjA6XFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfZmxvd3RhYmxlX29wdHMgKm9wdHMsIHUzMiBvcHRzX2xlbilcXG4gIDYxOlxcdHtcXG4gIDYyOlxcdFxcdHN0cnVjdCB4ZHBfYnVmZiAqeGRwID0gKHN0cnVjdCB4ZHBfYnVmZiAqKWN0eDtcXG4gIDYzOlxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7XFxuICA2NDpcXHRcXHRcXHQuaWlmaWR4ID0gZmliX3R1cGxlLVxcdTAwM2VpZmluZGV4LFxcbiAgNjU6XFx0XFx0XFx0LmwzcHJvdG8gPSBmaWJfdHVwbGUtXFx1MDAzZWZhbWlseSxcXG4gIDY2OlxcdFxcdFxcdC5sNHByb3RvID0gZmliX3R1cGxlLVxcdTAwM2VsNF9wcm90b2NvbCxcXG4gIDY3OlxcdFxcdFxcdC5zcmNfcG9ydCA9IGZpYl90dXBsZS1cXHUwMDNlc3BvcnQsXFxuICA2ODpcXHRcXHRcXHQuZHN0X3BvcnQgPSBmaWJfdHVwbGUtXFx1MDAzZWRwb3J0LFxcbiAgNjk6XFx0XFx0fTtcXG4gIDcwOlxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcXG4gIDcxOlxcdFxcdF9fYmUxNiBwcm90bztcXG4gIDcyOlxcdFxcbiAgNzM6XFx0XFx0aWYgKG9wdHNfbGVuICE9IE5GX0JQRl9GTE9XVEFCTEVfT1BUU19TWikge1xcbiAgNzQ6XFx0XFx0XFx0b3B0cy1cXHUwMDNlZXJyb3IgPSAtRUlOVkFMO1xcbiAgNzU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA3NjpcXHRcXHR9XFxuICA3NzpcXHRcXG4gIDc4OlxcdFxcdHN3aXRjaCAoZmliX3R1cGxlLVxcdTAwM2VmYW1pbHkpIHtcXG4gIDc5OlxcdFxcdGNhc2UgQUZfSU5FVDpcXG4gIDgwOlxcdFxcdFxcdHR1cGxlLnNyY192NC5zX2FkZHIgPSBmaWJfdHVwbGUtXFx1MDAzZWlwdjRfc3JjO1xcbiAgODE6XFx0XFx0XFx0dHVwbGUuZHN0X3Y0LnNfYWRkciA9IGZpYl90dXBsZS1cXHUwMDNlaXB2NF9kc3Q7XFxuICA4MjpcXHRcXHRcXHRwcm90byA9IGh0b25zKEVUSF9QX0lQKTtcXG4gIDgzOlxcdFxcdFxcdGJyZWFrO1xcbiAgODQ6XFx0XFx0Y2FzZSBBRl9JTkVUNjpcXG4gIDg1OlxcdFxcdFxcdHR1cGxlLnNyY192NiA9ICooc3RydWN0IGluNl9hZGRyICopXFx1MDAyNmZpYl90dXBsZS1cXHUwMDNlaXB2Nl9zcmM7XFxuICA4NjpcXHRcXHRcXHR0dXBsZS5kc3RfdjYgPSAqKHN0cnVjdCBpbjZfYWRkciAqKVxcdTAwMjZmaWJfdHVwbGUtXFx1MDAzZWlwdjZfZHN0O1xcbiAgODc6XFx0XFx0XFx0cHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcXG4gIDg4OlxcdFxcdFxcdGJyZWFrO1xcbiAgODk6XFx0XFx0ZGVmYXVsdDpcXG4gIDkwOlxcdFxcdFxcdG9wdHMtXFx1MDAzZWVycm9yID0gLUVBRk5PU1VQUE9SVDtcXG4gIDkxOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgOTI6XFx0XFx0fVxcbiAgOTM6XFx0XFxuICA5NDpcXHRcXHR0dXBsZWhhc2ggPSBicGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwKHhkcC1cXHUwMDNlcnhxLVxcdTAwM2VkZXYsIFxcdTAwMjZ0dXBsZSwgcHJvdG8pO1xcbiAgOTU6XFx0XFx0aWYgKElTX0VSUih0dXBsZWhhc2gpKSB7XFxuICA5NjpcXHRcXHRcXHRvcHRzLVxcdTAwM2VlcnJvciA9IFBUUl9FUlIodHVwbGVoYXNoKTtcXG4gIDk3OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNToyNC41NDA1NjMzNloiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTkxNDU2MzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIEJQRiBYRFAgRmxvdyBUdXBsZSBMb29rdXAqKlxuXG5BbHJpZ2h0LCBzbyBgdHVwbGVgIGlzIGJlaW5nIHBhc3NlZCBpbnRvIGBicGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwYC4gSW50ZXJlc3RpbmcuIExldCdzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGB0dXBsZWAgdmFyaWFibGUgKmlzKiBhbmQgaG93IGBicGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwYCB1dGlsaXplcyBpdC4gSXMgaXQgYSBrZXkgZm9yIGEgaGFzaCBtYXA/IEEgc3RydWN0dXJlIGNvbnRhaW5pbmcgZmxvdyBpbmZvcm1hdGlvbiB0aGF0IHRoZSBYRFAgcHJvZ3JhbSBpcyBnb2luZyB0byB1c2UgZm9yIGxvb2t1cHM/IEkgbmVlZCB0byByZXZpZXcgdGhlIGNvZGUgZm9yIHRoYXQgZnVuY3Rpb24gaW1tZWRpYXRlbHkuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBsb29rdXAgYWxnb3JpdGhtIGl0IGVtcGxveXMgKGlzIGl0IGEgcGVyZmVjdCBoYXNoLCBhIHNpbXBsZSBrZXkgY29tcGFyaXNvbiwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleCBsaWtlIGEgdHJpZSBvciBhIGJsb29tIGZpbHRlcj8pLCBhbmQgd2hhdCB0aGUgZnVuY3Rpb24gKnJldHVybnMqLiBJcyBpdCBhIG1hdGNoIGluZGljYXRvciwgb3IgZG9lcyBpdCByZXR1cm4gYSBwb2ludGVyIHRvIHNvbWUgYXNzb2NpYXRlZCBkYXRhPyBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgaGVyZSBpcyBjcml0aWNhbCBmb3IgZ3Jhc3BpbmcgdGhlIFhEUCBwcm9ncmFtJ3Mgb3ZlcmFsbCBsb2dpYyBhbmQgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLiBMZXQncyBzZWUuLi4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGRlZmluaXRpb24gb2YgYHR1cGxlYCBhbmQgdGhlbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJwZl94ZHBfZmxvd190dXBsZV9sb29rdXBgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ4NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTU6MjguNTMyMDIyMzU3WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNSxcbiAgXCJMaW5lQ291bnRcIjogMjJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzNTpcXHRzdGF0aWMgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqXFxuICAzNjpcXHRicGZfeGRwX2Zsb3dfdHVwbGVfbG9va3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuICAzNzpcXHRcXHRcXHRcXHQgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLCBfX2JlMTYgcHJvdG8pXFxuICAzODpcXHR7XFxuICAzOTpcXHRcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7XFxuICA0MDpcXHRcXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpuZl9mbG93X3RhYmxlO1xcbiAgNDE6XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqbmZfZmxvdztcXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0bmZfZmxvd190YWJsZSA9IG5mX2Zsb3d0YWJsZV9ieV9kZXYoZGV2KTtcXG4gIDQ0OlxcdFxcdGlmICghbmZfZmxvd190YWJsZSlcXG4gIDQ1OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xcbiAgNDY6XFx0XFxuICA0NzpcXHRcXHR0dXBsZWhhc2ggPSBmbG93X29mZmxvYWRfbG9va3VwKG5mX2Zsb3dfdGFibGUsIHR1cGxlKTtcXG4gIDQ4OlxcdFxcdGlmICghdHVwbGVoYXNoKVxcbiAgNDk6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdG5mX2Zsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLFxcbiAgNTI6XFx0XFx0XFx0XFx0ICAgICAgIHR1cGxlaGFzaFt0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRpcl0pO1xcbiAgNTM6XFx0XFx0Zmxvd19vZmZsb2FkX3JlZnJlc2gobmZfZmxvd190YWJsZSwgbmZfZmxvdywgZmFsc2UpO1xcbiAgNTQ6XFx0XFxuICA1NTpcXHRcXHRyZXR1cm4gdHVwbGVoYXNoO1xcbiAgNTY6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNToyOC41MzIwODkyNzdaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwMzAzMTcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgRGF0YSBGbG93KipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGlzIGRhdGEgc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgYSBgdHVwbGVgLCBpcyBiZWluZyBoYW5kbGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgYGZsb3dfb2ZmbG9hZF9sb29rdXBgIGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uIGlzIGNsZWFybHkgYSBjcml0aWNhbCBjb21wb25lbnQgaW4gdGhpcyBmbG93LiBQYXNzaW5nIGEgYHR1cGxlYCB0byBpdCwgaW4gaXRzZWxmLCBpc24ndCBpbmhlcmVudGx5IGFsYXJtaW5nLCBidXQgdGhlICppbXBsaWNhdGlvbnMqIGFyZSB3aGF0IEkgbmVlZCB0byB1bnBhY2sgcXVpY2tseS4gV2hhdCBleGFjdGx5IGlzIGBmbG93X29mZmxvYWRfbG9va3VwYCBleHBlY3RpbmcgZnJvbSB0aGF0IGB0dXBsZWA/IElzIGl0IGp1c3QgYSBrZXksIGEgc2V0IG9mIHBhcmFtZXRlcnMsIG9yIGEgbW9yZSBjb21wbGV4IGNvbmZpZ3VyYXRpb24gZm9yIG9mZmxvYWRpbmc/IFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGB0dXBsZWAncyBjb250ZW50cyBkaWN0YXRlcyB3aGF0IGtpbmQgb2YgcHJvY2Vzc2luZyBhbmQgb2ZmbG9hZGluZyBvcHRpbWl6YXRpb25zIGFyZSBwb3NzaWJsZSBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGlzIGFuIGVmZmljaWVudCByZXByZXNlbnRhdGlvbiwgb3IgaWYgaXQgbWlnaHQgYmVjb21lIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBmdXJ0aGVyIGRvd24gdGhlIGxpbmUuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gdHJhY2UgdGhlIHVzZSBvZiB0aGF0IGB0dXBsZWAgd2l0aGluIHRoZSBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBvciB0aGUgbG9naWMgdGhlIHR1cGxlIGlzIGZlZWRpbmcgdGhlIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE2MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTU6MzIuODM1MTIzMDM0WiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMTpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcXG4gNDAyOlxcdGZsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4gNDAzOlxcdFxcdFxcdCAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSlcXG4gNDA0OlxcdHtcXG4gNDA1OlxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcXG4gNDA2OlxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XFxuIDQwNzpcXHRcXHRpbnQgZGlyO1xcbiA0MDg6XFx0XFxuIDQwOTpcXHRcXHR0dXBsZWhhc2ggPSByaGFzaHRhYmxlX2xvb2t1cChcXHUwMDI2Zmxvd190YWJsZS1cXHUwMDNlcmhhc2h0YWJsZSwgdHVwbGUsXFxuIDQxMDpcXHRcXHRcXHRcXHRcXHQgICAgICBuZl9mbG93X29mZmxvYWRfcmhhc2hfcGFyYW1zKTtcXG4gNDExOlxcdFxcdGlmICghdHVwbGVoYXNoKVxcbiA0MTI6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQxMzpcXHRcXG4gNDE0OlxcdFxcdGRpciA9IHR1cGxlaGFzaC1cXHUwMDNldHVwbGUuZGlyO1xcbiA0MTU6XFx0XFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcXG4gNDE2OlxcdFxcdGlmICh0ZXN0X2JpdChORl9GTE9XX1RFQVJET1dOLCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpKVxcbiA0MTc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQxODpcXHRcXG4gNDE5OlxcdFxcdGlmICh1bmxpa2VseShuZl9jdF9pc19keWluZyhmbG93LVxcdTAwM2VjdCkpKVxcbiA0MjA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE1OjMyLjgzNTIzMjc2NFoiLCJTZXEiOjYzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk3NjA4MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggbmV0d29yayBmbG93IG9mZmxvYWRpbmc6XG5cbioqQW5hbHl6aW5nIGEgRmxvdyBPZmZsb2FkIExvb2t1cCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgZmxvdyBlbnRyeSBsb29rdXAgdXNpbmcgYHJoYXNodGFibGVfbG9va3VwYC4gVGhhdCdzIHN0YW5kYXJkIGZvciB0aGlzIHNvcnQgb2YgdGhpbmcg4oCTIGVmZmljaWVudCwgY29sbGlzaW9uLXJlc2lzdGFudCBsb29rdXBzIGFyZSBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgaW4gdGhlIGRhdGFwYXRoLiBBbmQgdGhlIGtleSB3ZSdyZSB1c2luZyBpcyBhIGB0dXBsZWAuIFRoYXQncyB3aGF0IEknZCBleHBlY3Q7IGl0J3MgdGhlIGNvcmUgc2V0IG9mIGlkZW50aWZ5aW5nIGZpZWxkcyDigJMgc291cmNlL2Rlc3RpbmF0aW9uIElQLCBwb3J0cywgcHJvdG9jb2wsIGV0Yy4gLSB0aGF0IGRlZmluZXMgYSBwYXJ0aWN1bGFyIGZsb3cuIE5vdywgbGV0J3MgZGlnIGEgYml0IGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhpcyBgcmhhc2h0YWJsZWAgaXMgY29uZmlndXJlZC4gSSBuZWVkIHRvIGV4YW1pbmUgYG5mX2Zsb3dfb2ZmbG9hZF9yaGFzaF9wYXJhbXNgLiBUaGF0J2xsIHRlbGwgbWUgdGhlIGhhc2ggZnVuY3Rpb24sIHRoZSB0YWJsZSBzaXplLCBhbnkgcmVzaXppbmcgc3RyYXRlZ2llcyDigJMgYWxsIHRoZSBjcml0aWNhbCBwYXJhbWV0ZXJzIHRoYXQgaW5mbHVlbmNlIGxvb2t1cCBwZXJmb3JtYW5jZSBhbmQgY29sbGlzaW9uIGhhbmRsaW5nLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIGlzIHR1bmVkIGFwcHJvcHJpYXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Nzg5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNTozNi44MzI4NDMxWiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAyLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzAyOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgbmZfZmxvd19vZmZsb2FkX3JoYXNoX3BhcmFtcyA9IHtcXG4gMzAzOlxcdFxcdC5oZWFkX29mZnNldFxcdFxcdD0gb2Zmc2V0b2Yoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCwgbm9kZSksXFxuIDMwNDpcXHRcXHQuaGFzaGZuXFx0XFx0XFx0PSBmbG93X29mZmxvYWRfaGFzaCxcXG4gMzA1OlxcdFxcdC5vYmpfaGFzaGZuXFx0XFx0PSBmbG93X29mZmxvYWRfaGFzaF9vYmosXFxuIDMwNjpcXHRcXHQub2JqX2NtcGZuXFx0XFx0PSBmbG93X29mZmxvYWRfaGFzaF9jbXAsXFxuIDMwNzpcXHRcXHQuYXV0b21hdGljX3Nocmlua2luZ1xcdD0gdHJ1ZSxcXG4gMzA4OlxcdH07XFxuIDMwOTpcXHRcXG4gMzEwOlxcdHVuc2lnbmVkIGxvbmcgZmxvd19vZmZsb2FkX2dldF90aW1lb3V0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpXFxuIDMxMTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE1OjM2LjgzMjkzNDIyWiIsIlNlcSI6NjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NzczODA5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOlxuXG4qKkRlY29uc3RydWN0aW5nIEZsb3cgT2ZmbG9hZCBIYXNoaW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtaW5kIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIGBmbG93X29mZmxvYWRfaGFzaGAgYW5kIGBmbG93X29mZmxvYWRfaGFzaF9jbXBgLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoZXNlIGZ1bmN0aW9ucyByZWxhdGUgdG8gdGhlIGNvcmUgb2YgYW55IGdvb2QgZmxvdyBvZmZsb2FkIG1lY2hhbmlzbS4gSSdtIGltYWdpbmluZyBob3cgdGhleSdyZSB1c2VkIGluIHRoZSBjb250ZXh0IG9mIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiwgYW5kIGhvdyB3ZSBsZXZlcmFnZSBpdC4gV2hhdCBhcmUgd2UgdHJ5aW5nIHRvIGFjaGlldmUgd2l0aCB0aGVzZT8gSSdtIHBpY3R1cmluZyBob3cgdGhlIGhhc2ggY29tcHV0YXRpb24gaGVscHMgdXMgcmFwaWRseSBpZGVudGlmeSBhbmQgY2xhc3NpZnkgbmV0d29yayBmbG93cy4gSXMgaXQgZm9yIGxvYWQgYmFsYW5jaW5nPyBQYWNrZXQgZmlsdGVyaW5nPyBTZWN1cml0eT8gVGhlIGNvbnRleHQgaXMgY3JpdGljYWwuXG5cbkknbSBwcm9iYWJseSBnb2luZyB0byBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiB0byBmdWxseSBncmFzcCBob3cgdGhlIGBmbG93X29mZmxvYWRfaGFzaF9jbXBgIGZ1bmN0aW9uIHdvcmtzIGFsb25nc2lkZSB0aGUgaGFzaCBmdW5jdGlvbiwgYXMgdGhlIGNvbXBhcmlzb24gaXMganVzdCBhcyBpbXBvcnRhbnQuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGVxdWFsaXR5IGNoZWNrLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4IHdpdGggd2lsZGNhcmRzIG9yIHJhbmdlcz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgaG93IHRoZSBoYXJkd2FyZSdzIHRhYmxlcyBhcmUgb3JnYW5pemVkIGFuZCBhY2Nlc3NlZD8gSXMgdGhpcyB0aGUgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIGEgbWF0Y2gsIG9yIGFyZSB0aGVyZSBhZGRpdGlvbmFsIGNyaXRlcmlhIGluIHBsYXk/XG5cbldoYXQgYWJvdXQgY29sbGlzaW9uIHJlc29sdXRpb24/IEhvdyBpcyB0aGF0IGhhbmRsZWQ/IEknbSB3b25kZXJpbmcgaWYgdGhpcyBzZXR1cCBpcyBzdXNjZXB0aWJsZSB0byBhbnkgaGFzaCBjb2xsaXNpb25zIGFuZCB3aGF0IGltcGFjdCB0aGVzZSB3aWxsIGhhdmUgb24gdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UuIFRoaW5raW5nIGJhY2sgdG8gbXkgZXhwZXJpZW5jZSBpbiB0aGlzIGZpZWxkLCBJJ20gYWxyZWFkeSBtZW50YWxseSBjb21wYXJpbmcgdGhpcyBhcHByb2FjaCB0byBvdGhlciBoYXNoaW5nIG1ldGhvZHMgSSd2ZSB1c2VkLiBJIG5lZWQgdG8ga25vdyBob3cgZWZmaWNpZW50IHRoaXMgaGFzaGluZyBzY2hlbWUgaXMgaW4gcmVhbC13b3JsZCBzY2VuYXJpb3MuIElzIGl0IG9wdGltaXplZCBmb3Igc3BlY2lmaWMgcGFja2V0IGhlYWRlciBjb21iaW5hdGlvbnM/IEFuZCwgbW9zdCBpbXBvcnRhbnRseSwgaXMgdGhpcyBlbnRpcmUgc29sdXRpb24gYm90aCBmdW5jdGlvbmFsbHkgY29ycmVjdCBhbmQgcGVyZm9ybWFudCBpbiBhbGwgdGhlIGRpZmZlcmVudCBlZGdlIGNhc2VzIEkgY2FuIHRoaW5rIG9mP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI3OCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTU6NDEuNjEwMzE3Njk2WiIsIlNlcSI6NjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NixcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3NjpcXHRzdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9oYXNoKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKVxcbiAyNzc6XFx0e1xcbiAyNzg6XFx0XFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUgPSBkYXRhO1xcbiAyNzk6XFx0XFxuIDI4MDpcXHRcXHRyZXR1cm4gamhhc2godHVwbGUsIG9mZnNldG9mKHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUsIF9faGFzaCksIHNlZWQpO1xcbiAyODE6XFx0fVxcbiAyODI6XFx0XFxuIDI4MzpcXHRzdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9oYXNoX29iaihjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcXG4gMjg0OlxcdHtcXG4gMjg1OlxcdFxcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCA9IGRhdGE7XFxuIDI4NjpcXHRcXG4gMjg3OlxcdFxcdHJldHVybiBqaGFzaChcXHUwMDI2dHVwbGVoYXNoLVxcdTAwM2V0dXBsZSwgb2Zmc2V0b2Yoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSwgX19oYXNoKSwgc2VlZCk7XFxuIDI4ODpcXHR9XFxuIDI4OTpcXHRcXG4gMjkwOlxcdHN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2hhc2hfY21wKHN0cnVjdCByaGFzaHRhYmxlX2NvbXBhcmVfYXJnICphcmcsXFxuIDI5MTpcXHRcXHRcXHRcXHRcXHRcXHRjb25zdCB2b2lkICpwdHIpXFxuIDI5MjpcXHR7XFxuIDI5MzpcXHRcXHRjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSA9IGFyZy1cXHUwMDNla2V5O1xcbiAyOTQ6XFx0XFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqeCA9IHB0cjtcXG4gMjk1OlxcdFxcbiAyOTY6XFx0XFx0aWYgKG1lbWNtcChcXHUwMDI2eC1cXHUwMDNldHVwbGUsIHR1cGxlLCBvZmZzZXRvZihzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlLCBfX2hhc2gpKSlcXG4gMjk3OlxcdFxcdFxcdHJldHVybiAxO1xcbiAyOTg6XFx0XFxuIDI5OTpcXHRcXHRyZXR1cm4gMDtcXG4gMzAwOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTU6NDEuNjEwNDQ2NDk2WiIsIlNlcSI6NjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzc1NTI1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGbG93IE9mZmxvYWQgVHVwbGUqKlxuXG5Pa2F5LCBzbyB0aGUgaGFzaCBhbmQgY29tcGFyaXNvbiBmdW5jdGlvbnMgYXJlIG9ubHkgY29uY2VybmVkIHdpdGggYSBzcGVjaWZpYyBwb3J0aW9uIG9mIHRoZSBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAuIFRoZSBrZXkgaXMgaWRlbnRpZnlpbmcgZXhhY3RseSB3aGVyZSB0aGF0IHJlbGV2YW50IHBvcnRpb24gZW5kcy4gSXQncyBlc3NlbnRpYWxseSBhIHBvaW50ZXIgdG8gd2hlcmUgaXQgZGVjaWRlcyB3aGF0IGl0IGNvbnNpZGVycy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBgX19oYXNoYCBtZW1iZXIgd2l0aGluIHRoYXQgc3RydWN0dXJlLiBUaGF0IGBvZmZzZXRvZmAgY2FsbCBpcyB0ZWxsaW5nIG1lICpob3cgbWFueSBieXRlcyogaW50byB0aGUgc3RydWN0dXJlIEkgbmVlZCB0byBsb29rIHRvLiBVbmRlcnN0YW5kaW5nIHRoYXQgb2Zmc2V0IHdpbGwgbGV0IG1lIGZ1bGx5IGdyYXNwIHRoZSBzY29wZSBvZiB0aG9zZSBoYXNoaW5nIGFuZCBjb21wYXJpc29uIG9wZXJhdGlvbnMuIEl0J3MgYWJvdXQgZWZmaWNpZW50bHkgaWRlbnRpZnlpbmcgdGhlIHJlbGV2YW50IGRhdGEgZm9yIHBhY2tldCBjbGFzc2lmaWNhdGlvbiBhbmQgZmlsdGVyaW5nLCBhbmQgSSBuZWVkIHRvIGJlIHByZWNpc2UgYWJvdXQgd2hhdCB0aGUgY29tcGFyaXNvbiBpcyBiYXNlZCBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxMTgsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE1OjQ0Ljk4ODAwMjA3OFoiLCJTZXEiOjY4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0XFx0dThcXHRcXHRcXHRcXHRsNHByb3RvO1xcbiAxNDE6XFx0XFx0c3RydWN0IHtcXG4gMTQyOlxcdFxcdFxcdHUxNlxcdFxcdFxcdGlkO1xcbiAxNDM6XFx0XFx0XFx0X19iZTE2XFx0XFx0XFx0cHJvdG87XFxuIDE0NDpcXHRcXHR9IGVuY2FwW05GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYXTtcXG4gMTQ1OlxcdFxcbiAxNDY6XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWxcXHR0dW47XFxuIDE0NzpcXHRcXG4gMTQ4OlxcdFxcdC8qIEFsbCBtZW1iZXJzIGFib3ZlIGFyZSBrZXlzIGZvciBsb29rdXBzLCBzZWUgZmxvd19vZmZsb2FkX2hhc2goKS4gKi9cXG4gMTQ5OlxcdFxcdHN0cnVjdCB7IH1cXHRcXHRcXHRfX2hhc2g7XFxuIDE1MDpcXHRcXG4gMTUxOlxcdFxcdHUxNlxcdFxcdFxcdFxcdGRpcjoyLFxcbiAxNTI6XFx0XFx0XFx0XFx0XFx0XFx0eG1pdF90eXBlOjMsXFxuIDE1MzpcXHRcXHRcXHRcXHRcXHRcXHRlbmNhcF9udW06MixcXG4gMTU0OlxcdFxcdFxcdFxcdFxcdFxcdG5lZWRzX2dzb19zZWdtZW50OjEsXFxuIDE1NTpcXHRcXHRcXHRcXHRcXHRcXHR0dW5fbnVtOjIsXFxuIDE1NjpcXHRcXHRcXHRcXHRcXHRcXHRpbl92bGFuX2luZ3Jlc3M6MjtcXG4gMTU3OlxcdFxcdHUxNlxcdFxcdFxcdFxcdG10dTtcXG4gMTU4OlxcdFxcdHUzMlxcdFxcdFxcdFxcdGRzdF9jb29raWU7XFxuIDE1OTpcXHRcXHRzdHJ1Y3QgZHN0X2VudHJ5XFx0XFx0KmRzdF9jYWNoZTtcXG4gMTYwOlxcdFxcbiAxNjE6XFx0XFx0dW5pb24ge1xcbiAxNjI6XFx0XFx0XFx0c3RydWN0IHtcXG4gMTYzOlxcdFxcdFxcdFxcdHUzMlxcdFxcdGlmaWR4O1xcbiAxNjQ6XFx0XFx0XFx0fTtcXG4gMTY1OlxcdFxcdFxcdHN0cnVjdCB7XFxuIDE2NjpcXHRcXHRcXHRcXHR1MzJcXHRcXHRpZmlkeDtcXG4gMTY3OlxcdFxcdFxcdFxcdHU4XFx0XFx0aF9zb3VyY2VbRVRIX0FMRU5dO1xcbiAxNjg6XFx0XFx0XFx0XFx0dThcXHRcXHRoX2Rlc3RbRVRIX0FMRU5dO1xcbiAxNjk6XFx0XFx0XFx0fSBvdXQ7XFxuIDE3MDpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAxNzE6XFx0XFx0XFx0XFx0dTMyXFx0XFx0aWlmaWR4O1xcbiAxNzI6XFx0XFx0XFx0fSB0YztcXG4gMTczOlxcdFxcdH07XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdGF0b21pYzY0X3RcXHRcXHRcXHRwYWNrZXRzO1xcbiAxNzY6XFx0XFx0YXRvbWljNjRfdFxcdFxcdFxcdGJ5dGVzO1xcbiAxNzc6XFx0fTtcXG4gMTc4OlxcdFxcbiAxNzk6XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE1OjQ0Ljk4ODE3NjA1OFoiLCJTZXEiOjY5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc2NTMxNTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRmxvdyBPZmZsb2FkIExvb2t1cCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgc29tZXRoaW5nJ3MgaW1tZWRpYXRlbHkganVtcGluZyBvdXQuIFRoZSBgX19oYXNoYCBmdW5jdGlvbiBpcyBjYWxsZWQgKmJlZm9yZSogdGhlIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcyBhcmVuJ3QgYWN0dWFsbHkgcGFydCBvZiB0aGUgaGFzaCBrZXkgaXRzZWxmLiBBbmQgaWYgdGhleSdyZSBub3QgcGFydCBvZiB0aGUgaGFzaCBrZXksIHRoZXkgd291bGRuJ3QgYmUgZGlyZWN0bHkgY29tcGFyZWQgd2l0aGluIGEgYG1lbWNtcGAgb3BlcmF0aW9uIGVpdGhlci4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLlxuXG5Ob3csIGhvbGQgb24uLi50aGlzIG1ha2VzIG1lIHRoaW5rLiBXaGF0IGFib3V0IGBuZl9mbG93X29mZmxvYWRfbG9va3VwYD8gSSBuZWVkIHRvIGdvIGJhY2sgdG8gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jYCBhbmQgbWFrZSBzdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCB0aGF0IHNlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODc4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNTo0OC44NjQ3MTA0MzRaIiwiU2VxIjo3MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDU2LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDU2OlxcdHN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcXG4gNDU3OlxcdG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gNDU4OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA0NTk6XFx0e1xcbiA0NjA6XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB0dXBsZSA9IHt9O1xcbiA0NjE6XFx0XFxuIDQ2MjpcXHRcXHRpZiAobmZfZmxvd190dXBsZV9pcChjdHgsIHNrYiwgXFx1MDAyNnR1cGxlKSBcXHUwMDNjIDApXFxuIDQ2MzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNDY0OlxcdFxcbiA0NjU6XFx0XFx0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXFx1MDAyNnR1cGxlKTtcXG4gNDY2OlxcdH1cXG4gNDY3OlxcdFxcbiA0Njg6XFx0c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbiA0Njk6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4gNDcwOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcXG4gNDcxOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpXFxuIDQ3MjpcXHR7XFxuIDQ3MzpcXHRcXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xcbiA0NzQ6XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcXG4gNDc1OlxcdFxcdHVuc2lnbmVkIGludCB0aG9mZiwgbXR1O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNTo0OC44NjQ4MDE2NTRaIiwiU2VxIjo3MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4NTMzODUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgVGhvdWdodHMgb24gYHR1cGxlYCBJbml0aWFsaXphdGlvbiBhbmQgRnVuY3Rpb24gRXhlY3V0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIHN0YXJ0aW5nIHdpdGggYHR1cGxlYCBiZWluZyBpbml0aWFsaXplZC4gVGhlIGA9IHt9YCBpcyBhIGNsZXZlciBiaXQgb2YgemVyby1pbml0aWFsaXphdGlvbi4gSXQncyBpbml0aWFsaXppbmcgdGhlIGVudGlyZSBzdHJ1Y3R1cmUsIGluY2x1ZGluZyB0aGUgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGZpZWxkcywgZXZlbiBpZiB0aGV5IGFyZW4ndCBleHBsaWNpdGx5IHVzZWQgYXQgdGhlIG1vbWVudC4gIFRoaXMgaXMgcHJvYmFibHkgYmVpbmcgZG9uZSBmb3IgYSBjb3VwbGUgb2YgcmVhc29ucy4gIEZpcnN0LCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBnYXJiYWdlIHZhbHVlcyBmbG9hdGluZyBhcm91bmQuIFNlY29uZCwgaXQgZ2l2ZXMgdXMgYSBrbm93biBzdGFydGluZyBwb2ludCBpZiB3ZSBkZWNpZGUgbGF0ZXIgd2UgKmRvKiBuZWVkIHRvIHRyYWNrIHRob3NlIHN0YXRzLiAgQ2xlYW5saW5lc3MgaXMgYWx3YXlzIGdvb2QuXG5cbk5vdywgd2UncmUgb2ZmIHRvIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXBgLiBJIHdvbmRlciB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGB0dXBsZWAgaW5pdGlhbGl6YXRpb24gaGF2ZSBpbiB0aGUgbG9va3VwIHByb2NlZHVyZS4gVGhpcyB6ZXJvLWluaXRpYWxpemVkIHN0YXRlIGlzIGludGVyZXN0aW5nLiAgTGV0J3Mgc2VlIHdoZXJlIHRoaXMgbGVhZHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDk0LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNTo1My40NTAxNDI3MjVaIiwiU2VxIjo3MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMTU6XFx0c3RhdGljIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKlxcbjExMTY6XFx0bmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuMTExNzpcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4xMTE4OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjExMTk6XFx0e1xcbjExMjA6XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB0dXBsZSA9IHt9O1xcbjExMjE6XFx0XFxuMTEyMjpcXHRcXHRpZiAobmZfZmxvd190dXBsZV9pcHY2KGN0eCwgc2tiLCBcXHUwMDI2dHVwbGUpIFxcdTAwM2MgMClcXG4xMTIzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjExMjQ6XFx0XFxuMTEyNTpcXHRcXHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcXHUwMDI2dHVwbGUpO1xcbjExMjY6XFx0fVxcbjExMjc6XFx0XFxuMTEyODpcXHRzdGF0aWMgaW50IG5mX2Zsb3dfcXVldWVfeG1pdDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xMTI5OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXFxuMTEzMDpcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbjExMzE6XFx0e1xcbjExMzI6XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqb3RoZXJfdHVwbGU7XFxuMTEzMzpcXHRcXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xcbjExMzQ6XFx0XFx0c3RydWN0IG5mX2Zsb3dfeG1pdCB4bWl0ID0ge307XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE1OjUzLjQ1MDI1NjMxNVoiLCJTZXEiOjczLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTI1NDk3NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIGFuZCBVc2Vyc3BhY2UgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAsIHdoaWNoIEkgaW5pdGlhbGl6ZWQgYXMgYW4gZW1wdHkgc3RydWN0dXJlLCBqdXN0IGxpa2UgSSB3b3VsZCBpbiBhIG5ldyBwcm9qZWN0LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHRoaW5nIGlzIGV2ZXIsIGluIGFueSB3YXksIHNoYXBlLCBvciBmb3JtLCBjb3BpZWQgb3ZlciB0byB1c2Vyc3BhY2UuIEknbSBwcmV0dHkgc3VyZSBpdCdzIGFuIGludGVybmFsIG5ldGZpbHRlciBzdHJ1Y3R1cmUgc3BlY2lmaWNhbGx5IHVzZWQgZm9yIGZsb3cgb2ZmbG9hZCwgYnV0IEkgbmVlZCB0byBiZSBjZXJ0YWluLlxuXG5MZXQncyBzZWUuLi4gSSdtIGltbWVkaWF0ZWx5IGRyYXduIHRvIGBuZl9mbG93X3N5bmNfY3Rfc3RhdHNgLiBUaGF0IGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RhdGlzdGljcy4gQWgsIHllcywgYW5kIEkga25vdyB0aG9zZSBzdGF0cyAqYXJlKiBzZW50IHRvIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgZWl0aGVyIHRocm91Z2ggY29ubnRyYWNrIGV2ZW50cyBvciB0aHJvdWdoIGR1bXBzLiBCdXQgdGhlIGtleSBoZXJlIGlzIHRoZSBgZmxvd19vZmZsb2FkX3R1cGxlYCBpdHNlbGYuIElzIHRoYXQgc3RydWN0dXJlIGRpcmVjdGx5IGludm9sdmVkIGluIHRob3NlIG5ldGxpbmsgbWVzc2FnZXM/IE15IGd1dCBzYXlzIG5vLCBidXQgSSBuZWVkIHRvIHZlcmlmeS4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgaXMgYWN0dWFsbHkgKnVzZWQqIGluIGFueSBuZXRsaW5rIG1lc3NhZ2VzIGF0IGFsbC4gVGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxNDEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNTo1OC4zNzU3NTU4NjhaIiwiU2VxIjo3NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNDg4NjExNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmxhX3B1dC4qZmxvd19vZmZsb2FkX3R1cGxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNTo1OC42OTA2NDc4NzVaIiwiU2VxIjo3NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyNzkzODUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKkNoZWNraW5nIGBmbG93X29mZmxvYWRfdHVwbGVgIFVzYWdlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBzb21lIGludGVyYWN0aW9uIHdpdGggdXNlcnNwYWNlLCB3aGljaCB3b3VsZCBtYWtlIGRlYnVnZ2luZyBoYXJkZXIgaWYgc29tZXRoaW5nJ3Mgb2ZmLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGlzIHN0cnVjdHVyZSBpcyBkaXJlY3RseSBpbnZvbHZlZCBpbiBhbnkgYGNvcHlfdG9fdXNlcmAgb3IgYW5hbG9nb3VzIGNhbGxzLiBJIGFtIGdvaW5nIHRvIHNlZSBpZiBhbnkgY29kZSBwYXRocyBjb3B5IHRoYXQgc3RydWN0IHRvIHVzZXJzcGFjZS4gVGhhdCB3aWxsIGJlIG15IGZpcnN0IGFyZWEgdG8gaW52ZXN0aWdhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTg0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTY6MDEuOTE4NTg5NjQyWiIsIlNlcSI6NzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQ4MjU4NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29weV90b191c2VyLipmbG93X29mZmxvYWRfdHVwbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE2OjAxLjk2NzA4MTIyOFoiLCJTZXEiOjc3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDYwNTM0NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRmxvdyBPZmZsb2FkIFR1cGxlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgcGFja2V0c2AgYW5kIGBieXRlc2AgaW50byB0aGUgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgLiBNYWtlcyBzZW5zZSwgd2UgbmVlZCB0byB0cmFjayB0aGF0LiBBbmQgdGhleSdyZSB1c2luZyBgYXRvbWljNjRfdGAsIGdvb2QsIHRocmVhZC1zYWZlIHVwZGF0ZXMgYXJlIGNydWNpYWwgaGVyZS4gTm93LCB0aGUgbWFpbiB1cGRhdGUgbG9naWMgc2VlbXMgdG8gYmUgaGFwcGVuaW5nIGluIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAuIEkgaW1tZWRpYXRlbHkgd29uZGVyIGlmIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYCBpcyBhbHNvIGJlaW5nIHVwZGF0ZWQsIGdpdmVuIHRoYXQgdGhpcyBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGhhbmRsZSBib3RoIElQdjQgYW5kIElQdjYuIEhtbSwgdGhlIGRpZmYgKm9ubHkqIG1lbnRpb25zIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAuIFRoYXQncyBhIGJpdCBvZGQuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQgbWUgbG9vayBhdCB0aGUgZGlmZiBhZ2FpbiwganVzdCB0byBiZSBzdXJlLi4uIHllcCwganVzdCBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgIGluIGBuZl9mbG93X3RhYmxlX2lwLmNgLiBPa2F5LCBzbyBpdCBsb29rcyBsaWtlIElQdjYgaXMgYmVpbmcgaGFuZGxlZCBlbHNld2hlcmUsIG9yIHBlcmhhcHMgdXNpbmcgdGhlIHNhbWUgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGF0IGZ1cnRoZXIuIEZvciBub3csIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbmZfZmxvd190YWJsZV9pcC5jYCBhcm91bmQgbGluZSAxMDY2IHRvIGdldCBhIGdyaXAgb24gaG93IHRoaXMgaXMgYmVpbmcgaGFuZGxlZC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZSB0byBnZXQgYSBzZW5zZSBvZiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc4MiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNjoxMC4wMjc2MTg1MzRaIiwiU2VxIjo3OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNjYsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNjY6XFx0c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuMTA2NzpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbjEwNjg6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxcbjEwNjk6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMDcwOlxcdHtcXG4xMDcxOlxcdFxcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XFxuMTA3MjpcXHRcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xcbjEwNzM6XFx0XFx0dW5zaWduZWQgaW50IHRob2ZmLCBtdHU7XFxuMTA3NDpcXHRcXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcXG4xMDc1OlxcdFxcbjEwNzY6XFx0XFx0ZGlyID0gdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5kaXI7XFxuMTA3NzpcXHRcXHRmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pO1xcbjEwNzg6XFx0XFxuMTA3OTpcXHRcXHRtdHUgPSBmbG93LVxcdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgKyBjdHgtXFx1MDAzZW9mZnNldDtcXG4xMDgwOlxcdFxcdGlmIChmbG93LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSlcXG4xMDgxOlxcdFxcdFxcdG10dSAtPSBzaXplb2YoKmlwNmgpO1xcbjEwODI6XFx0XFxuMTA4MzpcXHRcXHRpZiAodW5saWtlbHkobmZfZmxvd19leGNlZWRzX210dShza2IsIG10dSkpKVxcbjEwODQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTA4NTpcXHRcXG4xMDg2OlxcdFxcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBjdHgtXFx1MDAzZW9mZnNldCk7XFxuMTA4NzpcXHRcXHR0aG9mZiA9IHNpemVvZigqaXA2aCkgKyBjdHgtXFx1MDAzZW9mZnNldDtcXG4xMDg4OlxcdFxcdGlmIChuZl9mbG93X3N0YXRlX2NoZWNrKGZsb3csIGlwNmgtXFx1MDAzZW5leHRoZHIsIHNrYiwgdGhvZmYpKVxcbjEwODk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTA5MDpcXHRcXG4xMDkxOlxcdFxcdGlmICghbmZfZmxvd19kc3RfY2hlY2soXFx1MDAyNnR1cGxlaGFzaC1cXHUwMDNldHVwbGUpKSB7XFxuMTA5MjpcXHRcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuMTA5MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMDk0OlxcdFxcdH1cXG4xMDk1OlxcdFxcbjEwOTY6XFx0XFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB0aG9mZiArIGN0eC1cXHUwMDNlaGRyc2l6ZSkpXFxuMTA5NzpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMTA5ODpcXHRcXG4xMDk5OlxcdFxcdGZsb3dfb2ZmbG9hZF9yZWZyZXNoKGZsb3dfdGFibGUsIGZsb3csIGZhbHNlKTtcXG4xMTAwOlxcdFxcbjExMDE6XFx0XFx0bmZfZmxvd19lbmNhcF9wb3AoY3R4LCBza2IsIHR1cGxlaGFzaCk7XFxuMTEwMjpcXHRcXG4xMTAzOlxcdFxcdGlwNmggPSBpcHY2X2hkcihza2IpO1xcbjExMDQ6XFx0XFx0bmZfZmxvd19uYXRfaXB2NihmbG93LCBza2IsIGRpciwgaXA2aCk7XFxuMTEwNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTY6MTAuMDI3Nzk1NDQzWiIsIlNlcSI6NzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzI2Njk1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBOZXR3b3JrIEZsb3cgT2ZmbG9hZCBEaXNjcmVwYW5jeSoqXG5cbkhtbSwgc29tZXRoaW5nJ3Mgbm90IHF1aXRlIHJpZ2h0LiBUaGUgZGlmZiBJJ20gcmV2aWV3aW5nIGlzbid0IHJlZmxlY3RpbmcgYW55IG1vZGlmaWNhdGlvbnMgdG8gYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgLiBUaGF0J3MgdW5leHBlY3RlZCwgZ2l2ZW4gdGhlIGNvbnRleHQuIEJlZm9yZSBJIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUuIFRoZSBjaGFuZ2UgKnNob3VsZCogYmUgaW4gdGhpcyBhcmVhLCBzbyBsZXQncyBtZXRpY3Vsb3VzbHkgcmUtZXhhbWluZSB0aGUgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGNvZGUgaXRzZWxmLiBUaGVyZSBjb3VsZCBiZSBzb21ldGhpbmcgc3VidGxlIEknbSBtaXNzaW5nLCBhIGhpZGRlbiBkZXBlbmRlbmN5LCBvciBtYXliZSBJJ20gbG9va2luZyBhdCB0aGUgd3JvbmcgdmVyc2lvbi4gTGV0IG1lIGRpZyBhIGJpdCBkZWVwZXIgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzOTQxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNjoxMy41NjA0Njc3MzVaIiwiU2VxIjo4MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwNixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEwNjpcXHRcXHRpcDZoLVxcdTAwM2Vob3BfbGltaXQtLTtcXG4xMTA3OlxcdFxcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcXG4xMTA4OlxcdFxcbjExMDk6XFx0XFx0aWYgKGZsb3dfdGFibGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZfRkxPV1RBQkxFX0NPVU5URVIpXFxuMTExMDpcXHRcXHRcXHRuZl9jdF9hY2N0X3VwZGF0ZShmbG93LVxcdTAwM2VjdCwgdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5kaXIsIHNrYi1cXHUwMDNlbGVuKTtcXG4xMTExOlxcdFxcbjExMTI6XFx0XFx0cmV0dXJuIDE7XFxuMTExMzpcXHR9XFxuMTExNDpcXHRcXG4xMTE1OlxcdHN0YXRpYyBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTY6MTMuNTYwNTU3ODg1WiIsIlNlcSI6ODEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1MzE3MjgwODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGbG93IE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciBwcm92aWRlZCBhIGRpZmYsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGp1bXAgb24gdGhlIHBvc3NpYmlsaXR5IG9mIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGJlY2F1c2UgdGhhdCdzIHVzdWFsbHkgdGhlIG1vc3QgaW1tZWRpYXRlIGNvbmNlcm4gd2l0aCBjaGFuZ2VzIGxpa2UgdGhpcy4gVGhlIGRpZmYgc2hvd3MgdGhlIGBuZl9mbG93X3RhYmxlX2lwLmNgIGZpbGUgYW5kIGBuZl9mbG93X3RhYmxlX2NvcmUuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBjb2RlIGlzIGNoYW5naW5nIGhvdyBjb3VudGVycyBhcmUgaGFuZGxlZCBpbiB0aGUgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBmdW5jdGlvbi4gT3JpZ2luYWxseSwgaXQgbG9va3MgbGlrZSBpdCBjYWxsZWQgYG5mX2N0X2FjY3RfdXBkYXRlYCwgYW5kIG5vdyBpdCdzIHVzaW5nIGF0b21pYyBvcGVyYXRpb25zIHRvIGluY3JlbWVudCBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzLiBUaGUgb2xkIGltcGxlbWVudGF0aW9uIGlzbid0IGdvbmUgZnJvbSBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAsIHNvIHRoYXQgbWlnaHQgYmUgYSBidWcuXG5cbkhvd2V2ZXIsIHRoZSBtYWluIHF1ZXN0aW9uIGlzLCBcIklzIHRoZXJlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQ/XCIgR2l2ZW4gdGhlIGNvbnRleHQsIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCB0byBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAuIEJlY2F1c2UgYGttZW1fY2FjaGVfemFsbG9jYCBpcyB1c2VkIHRvIGFsbG9jYXRlIGBzdHJ1Y3QgZmxvd19vZmZsb2FkYCwgdGhvc2UgZmllbGRzIGFyZSBpbXBsaWNpdGx5IGluaXRpYWxpemVkIHRvIHplcm8sIHdoaWNoIG1lYW5zIHRoZXJlIHNob3VsZCBiZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGluIHRoZSBjb3JlIG9mIHdoYXQncyBzaG93bi4gQWxzbywgaW4gYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCB0aGVzZSBmaWVsZHMgYXJlIGluY3JlbWVudGVkIHVzaW5nIGBhdG9taWM2NF9hZGRgLCBhbmQgaW4gYG5mX2Zsb3dfc3luY19jdF9zdGF0c2AgYGF0b21pYzY0X3hjaGdgIGlzIHVzZWQsIHRoZW4gdGhlIHN0YXRzIGFyZSBhZGRlZCB0byB0aGUgY29ubmVjdGlvbiB0cmFja2VyLiBTbyBmYXIsIHNvIGdvb2QuXG5cbk5vdywgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBlZGdlIGNhc2VzLiBMZXQgbWUgdGhpbmssIHdoYXQgaWYgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIHBhc3NlZCBhcm91bmQsIGJ5cGFzc2luZyBwcm9wZXIgaW5pdGlhbGl6YXRpb24/IE5vcGUsIGBuZl9mbG93X3N5bmNfY3Rfc3RhdHNgIHRha2VzIGEgYHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3dgLCBhbmQgSSBrbm93IHRoYXQgaXMgaGVhcCBhbGxvY2F0ZWQuIENvdWxkIGl0IGJlIGNvcGllZCBzb21ld2hlcmUgZWxzZT8gTGV0IG1lIGNoZWNrIHRoZSBjb2RlIHRvIHNlZSBpZiB0aGUgdHVwbGUgaXMgY29waWVkLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzUxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTY6MjIuMDkyMjg3ODE3WiIsIlNlcSI6ODIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjg0MDIxNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY3B5LipmbG93X29mZmxvYWRfdHVwbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE2OjIyLjE0NTEzODkwM1oiLCJTZXEiOjgzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYwODY2ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgRGVlcCBpbnRvIERhdGEgU3RydWN0dXJlcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIG5vdy4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgbWVtb3J5IGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBzdHJ1Y3R1cmUgaXMgYXNzaWduZWQgYnkgdmFsdWUuIFVuZGVyc3RhbmRpbmcgdGhpcyBpcyBjcml0aWNhbCBmb3IgYXZvaWRpbmcgcG90ZW50aWFsIGNvcHkgaXNzdWVzLCBlbnN1cmluZyBjb3JyZWN0IGRhdGEgdHJhbnNmZXIsIGFuZCB1bHRpbWF0ZWx5LCB3cml0aW5nIGVmZmljaWVudCBhbmQgYnVnLWZyZWUgY29kZSByZWxhdGVkIHRvIHRoZSBmbG93IG9mZmxvYWQgZnVuY3Rpb25hbGl0eS4gQSBieS12YWx1ZSBhc3NpZ25tZW50IGhhcyBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIGhvdyBJJ2xsIGhhbmRsZSBpbnN0YW5jZXMgb2YgdGhpcyBzdHJ1Y3QgaW4gbWVtb3J5IGFuZCB3aGVuIHBhc3NpbmcgdGhlbSBhcyBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9ucy4gQSBxdWljayBjaGVjayBoZXJlIHNhdmVzIGEgaGVhZGFjaGUgbGF0ZXIgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzcxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTY6MjUuNjA2MDA4ODg5WiIsIlNlcSI6ODQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMzMDQyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcKi4qID0gXFxcXCouKnR1cGxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYz02ODM9Z2V0X3VuaXF1ZV90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy03MDYtXFx0XFx0XFx0aWYgKCFuZl9uYXRfdXNlZF90dXBsZV9uZXcob3JpZ190dXBsZSwgY3QpKSB7XFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jOjcwNzpcXHRcXHRcXHRcXHQqdHVwbGUgPSAqb3JpZ190dXBsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtNzA4LVxcdFxcdFxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy03MTgtXFx0LyogMikgU2VsZWN0IHRoZSBsZWFzdC11c2VkIElQL3Byb3RvIGNvbWJpbmF0aW9uIGluIHRoZSBnaXZlbiByYW5nZSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYzo3MTk6XFx0KnR1cGxlID0gKm9yaWdfdHVwbGU7XFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTcyMC1cXHRmaW5kX2Jlc3RfaXBzX3Byb3RvKHpvbmUsIHR1cGxlLCByYW5nZSwgY3QsIG1hbmlwdHlwZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE2OjI1LjY1NjM0MzE3NVoiLCJTZXEiOjg1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTQ3MjkwMDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gYGZsb3dfb2ZmbG9hZF90dXBsZWAgYW5kIFBvdGVudGlhbCBJc3N1ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgSSd2ZSBnb3QgYSBzcGVjaWZpYyBjb25jZXJuIGFib3V0IHRoZSBgZmxvd19vZmZsb2FkX3R1cGxlYC4gSSBpbW1lZGlhdGVseSBub3RlIHRoYXQgdGhlcmUgYXJlbid0IGFueSBhc3NpZ25tZW50cyAqYnkgdmFsdWUqIHRvIHRoaXMgc3RydWN0LCB3aGljaCwgaW4gbXkgZXhwZXJpZW5jZSwgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmaW5kaW5nIHBvdGVudGlhbCBwcm9ibGVtcy5cblxuV2FpdCBhIG1pbnV0ZSwgd2hhdCBhYm91dCB0aGUgYGJwZl94ZHBfZmxvd19sb29rdXBgIGZ1bmN0aW9uIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmNgPyBBaCwgaGVyZSBpdCBpczpcblxuYGBgY1xuXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge1xuXHRcdC5paWZpZHggPSBmaWJfdHVwbGUtXHUwMDNlaWZpbmRleCxcblx0XHQubDNwcm90byA9IGZpYl90dXBsZS1cdTAwM2VmYW1pbHksXG5cdFx0Lmw0cHJvdG8gPSBmaWJfdHVwbGUtXHUwMDNlbDRfcHJvdG9jb2wsXG5cdFx0LnNyY19wb3J0ID0gZmliX3R1cGxlLVx1MDAzZXNwb3J0LFxuXHRcdC5kc3RfcG9ydCA9IGZpYl90dXBsZS1cdTAwM2VkcG9ydCxcblx0fTtcbmBgYFxuXG5UaGlzICppcyogYSBzdGFjayB2YXJpYWJsZSwgYW5kIGl0J3MgKnBhcnRpYWxseSogaW5pdGlhbGl6ZWQsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZy4gQnV0LCBpdCdzIHBhcnRpYWxseSBpbml0aWFsaXplZCB3aXRoIHRoZSBgeyAuLi4gfWAgc3ludGF4LlxuXG5Ib2xkIG9uLiBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgaGFzIGEgYnVuY2ggb2YgZmllbGRzLCByaWdodD8gSWYgaXQncyBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgdXNpbmcgdGhhdCBzeW50YXgsIHRoZW4gdGhlIGNvbXBpbGVyICpzaG91bGQqIHplcm8taW5pdGlhbGl6ZSB0aGUgcmVtYWluaW5nIGZpZWxkcy4gSSB0aGluayB0aGF0IGluY2x1ZGVzIHRoaW5ncyBsaWtlIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCwgc28gdGhvc2Ugd291bGQgYmUgemVyb2VkIG91dC5cblxuU28sIHRoaXMgc3RydWN0IGB0dXBsZWAgaXMgdGhlbiBwYXNzZWQgdG8gYGJwZl94ZHBfZmxvd190dXBsZV9sb29rdXBgLCB3aGljaCBwYXNzZXMgaXQgdG8gYGZsb3dfb2ZmbG9hZF9sb29rdXBgLCB3aGljaCBmaW5hbGx5IHBhc3NlcyBpdCB0byBgcmhhc2h0YWJsZV9sb29rdXBgLiBgcmhhc2h0YWJsZV9sb29rdXBgIGhhc2hlcyB0aGUga2V5IHVwIHRvIGBfX2hhc2hgLlxuXG5TaW5jZSB0aGUgYHR1cGxlYCBpcyBlZmZlY3RpdmVseSB6ZXJvLWluaXRpYWxpemVkIChvciBhdCBsZWFzdCwgdGhlIGZpZWxkcyAqc2hvdWxkKiBiZSksIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgdW5pbml0aWFsaXplZCBieXRlcyBpbiB0aGUgcGFkZGluZyBvciBmaWVsZHMgdXAgdG8gYF9faGFzaGAsIHJpZ2h0PyBXYWl0LCB3aGF0IGFib3V0IHBhZGRpbmcgYnl0ZXM/XG5cblRoaXMgaXMgd2hlcmUgSSBnZXQgYSBiaXQgY29uY2VybmVkLiBJbiBDLCBpZiB5b3UgdXNlIGA9IHsgLi4uIH1gLCB0aGUgY29tcGlsZXIgKnNob3VsZCogemVyby1pbml0aWFsaXplIGFsbCBtZW1iZXJzIHRoYXQgYXJlbid0IGV4cGxpY2l0bHkgYXNzaWduZWQsIGJ1dCBJJ20gdGhpbmtpbmcgYWJvdXQgcGFkZGluZyBieXRlcyB0aGF0IG1pZ2h0IGV4aXN0IHdpdGhpbiB0aGUgc3RydWN0LiBQYWRkaW5nIGJ5dGVzIGFyZSAqTk9UKiBndWFyYW50ZWVkIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQhIFdlIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IHBhZGRpbmcgYnl0ZXMgaW4gYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIGJlZm9yZSB0aGUgYF9faGFzaGAgbWVtYmVyLCBhbmQgaWYgc28sIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgbWlnaHQgaGF2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4MDEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTY6MzQuODAzNjM3MTFaIiwiU2VxIjo4NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdFxcdHU4XFx0aW5uZXJfcHJvdG87XFxuIDEyMTpcXHR9O1xcbiAxMjI6XFx0XFxuIDEyMzpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHtcXG4gMTI0OlxcdFxcdHVuaW9uIHtcXG4gMTI1OlxcdFxcdFxcdHN0cnVjdCBpbl9hZGRyXFx0XFx0c3JjX3Y0O1xcbiAxMjY6XFx0XFx0XFx0c3RydWN0IGluNl9hZGRyXFx0XFx0c3JjX3Y2O1xcbiAxMjc6XFx0XFx0fTtcXG4gMTI4OlxcdFxcdHVuaW9uIHtcXG4gMTI5OlxcdFxcdFxcdHN0cnVjdCBpbl9hZGRyXFx0XFx0ZHN0X3Y0O1xcbiAxMzA6XFx0XFx0XFx0c3RydWN0IGluNl9hZGRyXFx0XFx0ZHN0X3Y2O1xcbiAxMzE6XFx0XFx0fTtcXG4gMTMyOlxcdFxcdHN0cnVjdCB7XFxuIDEzMzpcXHRcXHRcXHRfX2JlMTZcXHRcXHRcXHRzcmNfcG9ydDtcXG4gMTM0OlxcdFxcdFxcdF9fYmUxNlxcdFxcdFxcdGRzdF9wb3J0O1xcbiAxMzU6XFx0XFx0fTtcXG4gMTM2OlxcdFxcbiAxMzc6XFx0XFx0aW50XFx0XFx0XFx0XFx0aWlmaWR4O1xcbiAxMzg6XFx0XFxuIDEzOTpcXHRcXHR1OFxcdFxcdFxcdFxcdGwzcHJvdG87XFxuIDE0MDpcXHRcXHR1OFxcdFxcdFxcdFxcdGw0cHJvdG87XFxuIDE0MTpcXHRcXHRzdHJ1Y3Qge1xcbiAxNDI6XFx0XFx0XFx0dTE2XFx0XFx0XFx0aWQ7XFxuIDE0MzpcXHRcXHRcXHRfX2JlMTZcXHRcXHRcXHRwcm90bztcXG4gMTQ0OlxcdFxcdH0gZW5jYXBbTkZfRkxPV19UQUJMRV9FTkNBUF9NQVhdO1xcbiAxNDU6XFx0XFxuIDE0NjpcXHRcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbFxcdHR1bjtcXG4gMTQ3OlxcdFxcbiAxNDg6XFx0XFx0LyogQWxsIG1lbWJlcnMgYWJvdmUgYXJlIGtleXMgZm9yIGxvb2t1cHMsIHNlZSBmbG93X29mZmxvYWRfaGFzaCgpLiAqL1xcbiAxNDk6XFx0XFx0c3RydWN0IHsgfVxcdFxcdFxcdF9faGFzaDtcXG4gMTUwOlxcdFxcbiAxNTE6XFx0XFx0dTE2XFx0XFx0XFx0XFx0ZGlyOjIsXFxuIDE1MjpcXHRcXHRcXHRcXHRcXHRcXHR4bWl0X3R5cGU6MyxcXG4gMTUzOlxcdFxcdFxcdFxcdFxcdFxcdGVuY2FwX251bToyLFxcbiAxNTQ6XFx0XFx0XFx0XFx0XFx0XFx0bmVlZHNfZ3NvX3NlZ21lbnQ6MSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTY6MzQuODAzNzQ4MTdaIiwiU2VxIjo4NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc0NzcyOTY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZsb3cgT2ZmbG9hZCBUdXBsZSBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgYGZsb3dfb2ZmbG9hZF90dXBsZWAgc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBsYWlkIG91dCBpbiBtZW1vcnkgZm9yIGVmZmljaWVudCBsb29rdXBzLiBGaXJzdCwgdGhlIGFkZHJlc3MgdW5pb25zIOKAkyBJUHY0IGFuZCBJUHY2IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzLCBlYWNoIHRha2luZyB1cCBlaXRoZXIgNCBvciAxNiBieXRlcy4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlbiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBwb3J0cywgYHNyY19wb3J0YCBhbmQgYGRzdF9wb3J0YCwgYm90aCAyIGJ5dGVzIGVhY2gsIGFuZCB0aGUgaW50ZXJmYWNlIGluZGV4IGBpaWZpZHhgLCBhIDQtYnl0ZSBpbnRlZ2VyLlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyBiaXQ6IGBsM3Byb3RvYCBhbmQgYGw0cHJvdG9gLCBlYWNoIGEgc2luZ2xlIGJ5dGUuIFRoZW4sIHRoZSBgZW5jYXBgIGFycmF5LiBUaGVyZSBhcmUgdHdvIGVsZW1lbnRzLCBlYWNoIGEgYHUxNiBpZGAgYW5kIGEgYF9fYmUxNiBwcm90b2AuIFRoYXTigJlzIDIrMj00IGJ5dGVzIHBlciBlbGVtZW50LCBhbmQgd2UgaGF2ZSB0d28gZWxlbWVudHMsIHNvIDggYnl0ZXMgdG90YWwgZm9yIGBlbmNhcGAuIFRoZSBwb3RlbnRpYWwgZm9yIHBhZGRpbmcgaXMgd2hhdCBJJ20gbG9va2luZyBhdC4gTGV0IG1lIHRoaW5rLiBgbDNwcm90b2AgaXMgMSBieXRlLCBgbDRwcm90b2AgaXMgMSBieXRlLCBzbyAyIGJ5dGVzIHRvZ2V0aGVyLiBUaGVuIHRoZSBgZW5jYXBgIGFycmF5LCB3aGljaCBpcyBhbiBhbGlnbm1lbnQgb2YgMiBieXRlcywgc28gbm8gcGFkZGluZyBuZWVkZWQhXG5cbkZpbmFsbHksIHdlIGhhdmUgdGhlIGBmbG93X29mZmxvYWRfdHVubmVsIHR1bmAgc3RydWN0dXJlLiBUaGlzIGlzIGNyaXRpY2FsIGFzIGl0IHdpbGwgcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiB0dW5uZWxpbmcuIE5vdyB0aGUgcXVlc3Rpb24gaXMgdGhlIG1lbW9yeSBsYXlvdXQgb2YgYHR1bmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MjEwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTY6NDEuNTUxNDgxNDk4WiIsIlNlcSI6ODgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTE1OlxcdFxcdHVuaW9uIHtcXG4gMTE2OlxcdFxcdFxcdHN0cnVjdCBpbl9hZGRyXFx0ZHN0X3Y0O1xcbiAxMTc6XFx0XFx0XFx0c3RydWN0IGluNl9hZGRyXFx0ZHN0X3Y2O1xcbiAxMTg6XFx0XFx0fTtcXG4gMTE5OlxcdFxcbiAxMjA6XFx0XFx0dThcXHRpbm5lcl9wcm90bztcXG4gMTIxOlxcdH07XFxuIDEyMjpcXHRcXG4gMTIzOlxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUge1xcbiAxMjQ6XFx0XFx0dW5pb24ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNjo0MS41NTE1NzQzMzhaIiwiU2VxIjo4OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg2ODAxNTU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbGAqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbGAgYWdhaW4uIFJpZ2h0LCBsZXQncyByZWZyZXNoOiBJIGtub3cgaXTigJlzIGtleSBmb3IgaGFuZGxpbmcgdHVubmVsIG9mZmxvYWQgd2l0aGluIHRoZSBmbG93IG9mZmxvYWQgZnJhbWV3b3JrLiBJJ20gZm9jdXNpbmcgb24gaG93IGl0IG1hbmFnZXMgdGhlIHR1bm5lbC1zcGVjaWZpYyBkYXRhLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHR1bm5lbCBlbmNhcHN1bGF0aW9uL2RlY2Fwc3VsYXRpb24gZGV0YWlscyBhcmUgc3RvcmVkIGFuZCBwYXNzZWQgYXJvdW5kLiBJcyBpdCB0aGUgYWN0dWFsIHR1bm5lbCBoZWFkZXIgZGF0YSBpdHNlbGY/IFBvaW50ZXJzIHRvIGl0PyBPZmZzZXRzPyBBcmUgdGhlcmUgYW55IGNsZXZlciB0cmlja3MgdG8gb3B0aW1pemUgdGhlIGNvcHkgb3BlcmF0aW9ucyBvciB0byBhdm9pZCByZWR1bmRhbnQgY2FsY3VsYXRpb25zPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IGRpZmZlcmVudCB0dW5uZWwgdHlwZXMg4oCTIFZYTEFOLCBHUkUsIElQSVAsIGV0Yy4g4oCTIGFyZSBoYW5kbGVkLiBEb2VzIHRoZSBzdHJ1Y3QgcHJvdmlkZSBhIGdlbmVyaWMgaW50ZXJmYWNlLCBvciBkb2VzIGl0IHJlcXVpcmUgdHlwZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnM/IEFyZSB0aGVyZSBhbnkgZmxhZ3Mgb3IgYml0ZmllbGRzIHRoYXQgaW5kaWNhdGUgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgY2VydGFpbiB0dW5uZWwgb3B0aW9ucywgbGlrZSBjaGVja3N1bXMgb3Igc2VxdWVuY2UgbnVtYmVycz8gVGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgaXMgY3JpdGljYWwgaGVyZSwgYXMgdGhpcyBzdHJ1Y3R1cmUgbGlrZWx5IG5lZWRzIHRvIGJlIGVmZmljaWVudGx5IG1hcHBlZCB0byBoYXJkd2FyZSByZWdpc3RlcnMgb3IgZGVzY3JpcHRvcnMuIFdoYXQgYWJvdXQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHN0cnVjdD8gV2hlcmUgaXMgaXQgYWxsb2NhdGVkPyBXaGVuIGlzIGl0IHBvcHVsYXRlZD8gSG93IGlzIGl0IGRlYWxsb2NhdGVkPyBNZW1vcnkgYWxpZ25tZW50PyBBbnkgcG90ZW50aWFsIGZvciBhbGlnbm1lbnQgaXNzdWVzIG9uIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzPyBJIG5lZWQgdG8gZW5zdXJlIGl0IHBsYXlzIG5pY2VseSB3aXRoIHRoaW5ncyBsaWtlIERNQS4gQW5kIG9mIGNvdXJzZSwgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgZm9yIGZyYWdtZW50YXRpb24gb2YgdGhlIGRhdGEuIERvZXMgdGhpcyBzdHJ1Y3R1cmUgbmVlZCB0byBiZSBicm9rZW4gZG93biwgb3IgaXMgdGhlcmUgYSBzaW5nbGUgXCJjaHVua1wiIHRoYXQgZ2V0cyBwYXNzZWQgdG8gdGhlIGhhcmR3YXJlPyBUaGUgZGV0YWlscyBhcmUgY3J1Y2lhbCBoZXJlLiBVbHRpbWF0ZWx5LCBJIGFtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIGluZmx1ZW5jaW5nIG9mZmxvYWQgcGVyZm9ybWFuY2UgYW5kIHRoZSBzeXN0ZW0ncyBvdmVyYWxsIGZsZXhpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODExOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTY6NDYuNDE5NTkzNDU2WiIsIlNlcSI6OTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA0MTA4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MTAwPWVudW0gZmxvd19vZmZsb2FkX3htaXRfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTEwOS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjExMDpzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0xMTEtXFx0dW5pb24ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNjo0Ni40NjY2NDA1MDNaIiwiU2VxIjo5MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNDc5NzU5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWxgKipcblxuT2theSwgbGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVubmVsYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgcmlnaHQ/IEkgd2FudCB0byBzZWUgaG93IHRoZSB0dW5uZWwtcmVsYXRlZCBpbmZvcm1hdGlvbiBpcyBzdHJ1Y3R1cmVkIGZvciBvZmZsb2FkaW5nLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IGl0J3MgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggdGhlIGhhcmR3YXJlIGFuZCB0aGUgdmFyaW91cyB0dW5uZWwgcHJvdG9jb2xzIHdlIHN1cHBvcnQuIE15IG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGg6IHdoYXQgZmllbGRzIGFyZSBwcmVzZW50PyBBcmUgdGhleSBhbGlnbmVkIG9wdGltYWxseSBmb3IgaGFyZHdhcmUgYWNjZXNzPyBEb2VzIGl0IHN1cHBvcnQgdGhlIHR5cGljYWwgdHVubmVsIGhlYWRlcnMsIGFuZCBpZiBzbywgaG93IGlzIHRoYXQgcmVwcmVzZW50YXRpb24gaGFuZGxlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmU/IEFueSBwcm90b2NvbC1zcGVjaWZpYyBudWFuY2VzPyBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB3aGVyZSB3ZSBtaWdodCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBzb2Z0d2FyZSBhbmQgdGhlIGZvcndhcmRpbmcgZW5naW5lLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCB0aGUgbWVtb3J5IGxheW91dCwgaG93IHRoZSBkYXRhIGdldHMgcGFzc2VkLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgaG93IHRvIGltcHJvdmUgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5IVxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY0MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE2OjQ5LjY4MTQzOTg0NloiLCJTZXEiOjkyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExMDpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB7XFxuIDExMTpcXHRcXHR1bmlvbiB7XFxuIDExMjpcXHRcXHRcXHRzdHJ1Y3QgaW5fYWRkclxcdHNyY192NDtcXG4gMTEzOlxcdFxcdFxcdHN0cnVjdCBpbjZfYWRkclxcdHNyY192NjtcXG4gMTE0OlxcdFxcdH07XFxuIDExNTpcXHRcXHR1bmlvbiB7XFxuIDExNjpcXHRcXHRcXHRzdHJ1Y3QgaW5fYWRkclxcdGRzdF92NDtcXG4gMTE3OlxcdFxcdFxcdHN0cnVjdCBpbjZfYWRkclxcdGRzdF92NjtcXG4gMTE4OlxcdFxcdH07XFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdHU4XFx0aW5uZXJfcHJvdG87XFxuIDEyMTpcXHR9O1xcbiAxMjI6XFx0XFxuIDEyMzpcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHtcXG4gMTI0OlxcdFxcdHVuaW9uIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTY6NDkuNjgxNTE1MzU2WiIsIlNlcSI6OTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0Njk4MTc0NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIGFuZCB0aGUgRmxvdyBPZmZsb2FkIFBhdGNoOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaXNzZWN0aW5nIHRoaXMgZmxvdyBvZmZsb2FkIHBhdGNoIHRvIGFzc2VzcyBpZiBpdCBpbnRyb2R1Y2VzIGFueSBuZXcgS01TQU4gaXNzdWVzLiBJbml0aWFsbHksIEkgaGFkIGNvbmNlcm5zIGFib3V0IHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyB3aXRoaW4gYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgLCBwYXJ0aWN1bGFybHkgYmVjYXVzZSBvZiB0aGUgYGpoYXNoYCBmdW5jdGlvbiBhbmQgdGhlIHdheSB0aGVzZSBzdHJ1Y3RzIGFyZSBpbml0aWFsaXplZCwgc29tZXRpbWVzIHdpdGggYD0ge31gLiAgSSBzdGFydGVkIGJ5IGNhbGN1bGF0aW5nIHRoZSBzdHJ1Y3R1cmUgc2l6ZSBhbmQgY29uc2lkZXJpbmcgYWxpZ25tZW50LiBJIHdlbnQgdGhyb3VnaCB0aGUgbGF5b3V0IG9mIHRoZSBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWxgLCBpbmNsdWRpbmcgdGhlIHVuaW9ucyBhbmQgdGhlIGBpbm5lcl9wcm90b2AgZmllbGQsIGFuZCBmaWd1cmVkIG91dCB0aGUgcGFkZGluZyBpbnZvbHZlZC4gSSBjaGVja2VkIHRoZSBsYXlvdXQgdG8gc2VlIGlmIGFkZGluZyB0aGUgbmV3IGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMgY2hhbmdlZCB0aGUgbG9jYXRpb24gb2YgdGhlIHByZS1leGlzdGluZyBwYWRkaW5nLlxuXG5NeSB0aG91Z2h0IHdhcyB0aGF0LCBzaW5jZSBwYWRkaW5nIGJ5dGVzIGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSB6ZXJvZWQgd2hlbiB1c2luZyBgPSB7fWAsIGFuZCB0aG9zZSBieXRlcyBhcmUgcmVhZCBieSBgamhhc2hgLCB3ZSBjb3VsZCBoYXZlIGEgS01TQU4gcHJvYmxlbS4gQnV0LCBJIHJlY2FsbGVkIHRoYXQgdGhlIGhhc2gga2V5IGluIHRoaXMgc3RydWN0IG9ubHkgZ29lcyB1cCB0byB0aGUgYF9faGFzaGAgbWVtYmVyLCBhbmQgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHBhZGRpbmcgd291bGQgaGF2ZSBiZWVuIGFuIGlzc3VlICpiZWZvcmUqIHRoaXMgcGF0Y2gsIHNpbmNlIHRoZSBwYXRjaCBvbmx5IGFkZHMgYHBhY2tldHNgIGFuZCBgYnl0ZXNgICphZnRlciogdGhlIHNlY3Rpb24gdGhhdCdzIGhhc2hlZC4gVGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSBhbnl0aGluZyBhYm91dCB0aGUgcHJlLWV4aXN0aW5nIGxheW91dC5cblxuSSB0aGVuIGNoZWNrZWQgd2hlcmUgYHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVgIGlzIGFjdHVhbGx5IGNyZWF0ZWQgYW5kIHVzZWQuIEkgbG9va2VkIGF0IGBuZl9mbG93X29mZmxvYWRfbG9va3VwYCBhbmQgYGJwZl94ZHBfZmxvd19sb29rdXBgLCB3aGVyZSB0aGVzZSBzdHJ1Y3RzIGFyZSBpbmRlZWQgc3RhY2stYWxsb2NhdGVkLCBidXQgSSByZWFsaXplZCB0aGV5IGFyZSAqb25seSogdXNlZCBhcyBoYXNoIGtleXMuIFRoZSBjb2RlICpkb2Vzbid0KiByZWFkIGZyb20gdGhlIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMgaW4gdGhlc2Ugc3RhY2sgYWxsb2NhdGlvbnMuXG5cbkkgZm9jdXNlZCBvbiB0aGUgbmV3IGNvZGUgYWRkZWQgYnkgdGhlIHBhdGNoLiBJIHZlcmlmaWVkIHRoYXQgbmV3IGZpZWxkcyAoYHBhY2tldHNgIGFuZCBgYnl0ZXNgKSBhcmUgemVyby1pbml0aWFsaXplZCB0aHJvdWdoIGBrbWVtX2NhY2hlX3phbGxvY2AgYW5kIGFyZSB0aGVuIG9ubHkgYWNjZXNzZWQgdGhyb3VnaCBhdG9taWMgb3BlcmF0aW9ucy4gVGhlIHBhdGNoIGFkZHMgYGF0b21pYzY0X3QgcGFja2V0c2AgYW5kIGBieXRlc2AgdG8gdGhlIHN0cnVjdC4gQW5kIHRoZSBmdW5jdGlvbnMgYWRkZWQgdGhhdCB0b3VjaCB0aGVzZSBmaWVsZHMgdXNlIGBhdG9taWM2NF94Y2hnYCBhbmQgYGF0b21pYzY0X2FkZGAsIHNvIHRoZXkgcmVhZCBhbmQgbW9kaWZ5IHRob3NlIHZhcmlhYmxlcywgd2hpY2ggYXJlIGluaXRpYWxpemVkIHRvIHplcm8uIEkgYWxzbyBlbnN1cmVkIHRoYXQgYG5mX2Zsb3dfc3luY19jdF9zdGF0c2AgY2FuJ3QgYmUgY2FsbGVkIG9uIGFuIHVuaW5pdGlhbGl6ZWQgYGZsb3dgLiBUaGUgc3RydWN0IGBmbG93X29mZmxvYWRgIHdoaWNoIGNvbnRhaW5zIGB0dXBsZWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AsIG1lYW5pbmcgdGhlIGFkZGVkIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gRnVydGhlcm1vcmUsIHRoZXJlJ3Mgbm8gd2F5IHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblNvLCBhZnRlciB0aGlzIHJpZ29yb3VzIGV4YW1pbmF0aW9uLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBhbnkgbmV3IEtNU0FOIHZ1bG5lcmFiaWxpdGllcy4gQW55IHBvdGVudGlhbCBwYWRkaW5nL3VuaW5pdGlhbGl6ZWQgcmVhZCBpc3N1ZXMgaW4gdGhlIHN0cnVjdHVyZSAqcHJlLWV4aXN0ZWQqIHRoaXMgY2hhbmdlLCBhbmQgdGhlIG5ldyBmaWVsZHMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LCB3aXRoIHByb3BlciBpbml0aWFsaXphdGlvbiBhbmQgYXRvbWljIGFjY2Vzcy4gTm8gbmVlZCB0byBmbGFnIHRoaXMgZm9yIEtNU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA5NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNzoxNC4zNzk2OTI1OTFaIiwiU2VxIjo5NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NTU3MzMyNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGZsb3dfb2ZmbG9hZCBbXjtcXFxcKl0rO1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTc6MTQuNzI1MjczODU1WiIsIlNlcSI6OTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODQzODA0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYHN0cnVjdCBmbG93X29mZmxvYWRgIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHNvbWV0aGluZyBoZXJlLiBUaGVyZSdzIG5vIGV2aWRlbmNlIG9mIGEgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgZmxvd19vZmZsb2FkYC4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhbGxvY2F0aW9uIGJlaGF2aW9yIG9mIHRoaXMgc3RydWN0dXJlLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgaWYgYGZsb3dfb2ZmbG9hZF9hbGxvY2AgaXMgdGhlIHNvbGUgbWVjaGFuaXNtIHVzZWQgdG8gYWxsb2NhdGUgaW5zdGFuY2VzIG9mIGBzdHJ1Y3QgZmxvd19vZmZsb2FkYC4gVGhhdCdzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiB0byBhbnN3ZXIuIEtub3dpbmcgdGhhdCB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIGludGVuZGVkIGxpZmVjeWNsZSBhbmQgbWFuYWdlbWVudCBvZiB0aGVzZSBmbG93IG9mZmxvYWQgc3RydWN0dXJlcyB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIGlmIHdlIGNhbiBjb25maXJtIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB0aGUgb25seSBlbnRyeSBwb2ludCBmb3IgYWxsb2NhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwNTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwMDoxNzoxOC45MDk2NTcwNDJaIiwiU2VxIjo5NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjIyNDQ2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbWFsbG9jLipzaXplb2YuKmZsb3dfb2ZmbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDA6MTc6MTguOTU4ODg3ODg4WiIsIlNlcSI6OTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4NTY2NTIxNzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5lZWRzS01TQU4gPSBmYWxzZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoZXkndmUgYWRkZWQgYHBhY2tldHNgIGFuZCBgYnl0ZXNgIGF0b21pYyBjb3VudGVycyB0byB0aGUgYGZsb3dfb2ZmbG9hZF90dXBsZWAgc3RydWN0LiBUaGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCBvcHRpbWl6YXRpb24uIEluc3RlYWQgb2YgdXBkYXRpbmcgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgKENUKSBzdGF0cyBkaXJlY3RseSBvbiBldmVyeSBwYWNrZXQsIHRoZXkncmUgYWNjdW11bGF0aW5nIHRoZW0gaW4gdGhlc2UgYXRvbWljIGNvdW50ZXJzLiBUaGlzIGF2b2lkcyBjYWNoZSBsaW5lIGJvdW5jaW5nLCB3aGljaCBpcyBhIGNvbW1vbiBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGluIG11bHRpLUNQVSBlbnZpcm9ubWVudHMuXG5cblRoZSBjcnVjaWFsIHBvaW50IGlzIGhvdyB0aGVzZSBjb3VudGVycyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHVzZWQuIFRoZSBgZmxvd19vZmZsb2FkYCBzdHJ1Y3QsIHdoaWNoIGNvbnRhaW5zIHRoaXMgYGZsb3dfb2ZmbG9hZF90dXBsZWAsIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgLiBUaGlzIGlzIGtleTsgaXQgZW5zdXJlcyB0aGF0IHRoZSBlbnRpcmUgc3RydWN0LCBpbmNsdWRpbmcgdGhlIG5ldyBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzLCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaGVyZS5cblxuVGhleSdyZSB1c2luZyBgYXRvbWljNjRfYWRkYCB0byBpbmNyZW1lbnQgdGhlIGNvdW50ZXJzIGluIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAsIHdoaWNoIGlzIHRoZSBmYXN0IHBhdGguIFRoZW4sIHRoZSBnYXJiYWdlIGNvbGxlY3RvciAoR0MpLCBgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXBgLCBwZXJpb2RpY2FsbHkgZmx1c2hlcyB0aGVzZSBjb3VudGVycyB0byB0aGUgQ1QgZW50cnkgdXNpbmcgYGF0b21pYzY0X3hjaGdgLiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhlIGNyaXRpY2FsIGRhdGEgcGF0aCBpcyBzYWZlLlxuXG5Ob3csIGFib3V0IHBvdGVudGlhbCBsZWFrcy4gVGhlIHZhbHVlcyBhcmVuJ3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhleSdyZSBhZGRlZCB0byB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBzdGF0cywgd2hpY2ggKmFyZSogZXhwb3NlZCB0byB1c2Vyc3BhY2UsIGJ1dCB3ZSdyZSBvbmx5IGRlYWxpbmcgd2l0aCBwYWNrZXQgYW5kIGJ5dGUgY291bnRzLCBhbmQgdGhleSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIEl0J3MganVzdCBjb3VudGVycywgc28gdGhlcmUncyBubyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdG8gbGVhaywgYW5kIGl0IGlzIGltcG9zc2libGUgdG8gcmVhZCBvciBjb3B5IHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuVGhlIG9ubHkgcmVtYWluaW5nIHJpc2tzIGFyZSBsb2dpYyBidWdzIOKAkyBwZXJoYXBzIGEgbWlzc2VkIHVwZGF0ZSwgZG91YmxlLWNvdW50aW5nLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMuIEJ1dCB0aGVzZSBhcmUgdGhlIHR5cGVzIG9mIGJ1Z3MgdGhhdCBLQVNBTi9LQ1NBTiBhbmQgc3RhbmRhcmQgdGVzdGluZyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guIFRoZXkgYXJlIG5vdCBtZW1vcnkgY29ycnVwdGlvbiBwcm9ibGVtcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuXG5TbywgaW4gc3VtbWFyeSwgdGhlcmUncyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUuIFRoZSBjb3VudGVycyBhcmUgemVyby1pbml0aWFsaXplZCwgdGhleSdyZSB1cGRhdGVkIGFuZCBmbHVzaGVkIGF0b21pY2FsbHksIGFuZCB0aGV5IG9ubHkgY29udGFpbiBub24tc2Vuc2l0aXZlIHBhY2tldCBhbmQgYnl0ZSBjb3VudHMuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjMwMiwiT3V0cHV0VG9rZW5zIjozMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDAwOjE3OjM3LjUyNTQxMjgxN1oiLCJTZXEiOjk4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzIHRvIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCB0byBiYXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRpc3RpY3MgdXBkYXRlcy4gVGhlc2UgZmllbGRzIGFyZSB1cGRhdGVkIHZpYSBgYXRvbWljNjRfYWRkYCBpbiB0aGUgZm9yd2FyZGluZyBwYXRoIGFuZCBwZXJpb2RpY2FsbHkgZmx1c2hlZCB0byB0aGUgY29ubnRyYWNrIGVudHJ5IHZpYSBgYXRvbWljNjRfeGNoZ2AgaW4gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiBcXG5cXG5UaGUgYHN0cnVjdCBmbG93X29mZmxvYWRgIGNvbnRhaW5pbmcgdGhlc2UgdHVwbGVzIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jYCAoaW4gYGZsb3dfb2ZmbG9hZF9hbGxvY2ApLCBlbnN1cmluZyB0aGUgbmV3IGF0b21pYyBjb3VudGVycyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZC4gVGhlIGNvdW50ZXJzIGFyZSBub3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIHRoZWlyIHZhbHVlcyBvbmx5IHJlcHJlc2VudCBwYWNrZXQgYW5kIGJ5dGUgY291bnRzLCBwcmVjbHVkaW5nIGFueSBpbmZvcm1hdGlvbiBsZWFrLiBcXG5cXG5XaGlsZSBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgaXMgc29tZXRpbWVzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIHVzZWQgYXMgYSBsb29rdXAga2V5IChlLmcuLCBpbiBgbmZfZmxvd19vZmZsb2FkX2xvb2t1cGApLCB0aGUgaGFzaCBhbmQgY29tcGFyaXNvbiBmdW5jdGlvbnMgb25seSBvcGVyYXRlIG9uIHRoZSBmaWVsZHMgdXAgdG8gdGhlIGBfX2hhc2hgIG1hcmtlciwgd2hpY2ggcHJlY2VkZXMgdGhlIG5ld2x5IGFkZGVkIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMuIFRodXMsIHRoZSB1bmluaXRpYWxpemVkIHN0YXRlIG9mIHRoZXNlIGZpZWxkcyBpbiBzdGFjay1hbGxvY2F0ZWQga2V5cyBpcyBuZXZlciByZWFkLlxcblxcbkFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBidWdzIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBzdGFuZGFyZCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGFja2V0c2AgYW5kIGBieXRlc2AgZmllbGRzIHRvIGBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlYCB0byBiYXRjaCBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRpc3RpY3MgdXBkYXRlcy4gVGhlc2UgZmllbGRzIGFyZSB1cGRhdGVkIHZpYSBgYXRvbWljNjRfYWRkYCBpbiB0aGUgZm9yd2FyZGluZyBwYXRoIGFuZCBwZXJpb2RpY2FsbHkgZmx1c2hlZCB0byB0aGUgY29ubnRyYWNrIGVudHJ5IHZpYSBgYXRvbWljNjRfeGNoZ2AgaW4gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiBcXG5cXG5UaGUgYHN0cnVjdCBmbG93X29mZmxvYWRgIGNvbnRhaW5pbmcgdGhlc2UgdHVwbGVzIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jYCAoaW4gYGZsb3dfb2ZmbG9hZF9hbGxvY2ApLCBlbnN1cmluZyB0aGUgbmV3IGF0b21pYyBjb3VudGVycyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZC4gVGhlIGNvdW50ZXJzIGFyZSBub3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIHRoZWlyIHZhbHVlcyBvbmx5IHJlcHJlc2VudCBwYWNrZXQgYW5kIGJ5dGUgY291bnRzLCBwcmVjbHVkaW5nIGFueSBpbmZvcm1hdGlvbiBsZWFrLiBcXG5cXG5XaGlsZSBgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZWAgaXMgc29tZXRpbWVzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIHVzZWQgYXMgYSBsb29rdXAga2V5IChlLmcuLCBpbiBgbmZfZmxvd19vZmZsb2FkX2xvb2t1cGApLCB0aGUgaGFzaCBhbmQgY29tcGFyaXNvbiBmdW5jdGlvbnMgb25seSBvcGVyYXRlIG9uIHRoZSBmaWVsZHMgdXAgdG8gdGhlIGBfX2hhc2hgIG1hcmtlciwgd2hpY2ggcHJlY2VkZXMgdGhlIG5ld2x5IGFkZGVkIGBwYWNrZXRzYCBhbmQgYGJ5dGVzYCBmaWVsZHMuIFRodXMsIHRoZSB1bmluaXRpYWxpemVkIHN0YXRlIG9mIHRoZXNlIGZpZWxkcyBpbiBzdGFjay1hbGxvY2F0ZWQga2V5cyBpcyBuZXZlciByZWFkLlxcblxcbkFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBidWdzIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBzdGFuZGFyZCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxdk4m[1] Phase: Succeeded StartedAt: 2026-08-26 00:17:49 +0000 UTC FinishedAt: 2026-08-26 00:17:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxdk4m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 00:17:49 +0000 UTC FinishedAt: 2026-08-26 00:17:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxdk4m[2] Phase: Running StartedAt: 2026-08-26 00:17:49 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxdk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_gc_run","nf_flow_offload_ip_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"6bea75eb-00bf-49e8-98fb-49e8c990bfea","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-08-26 00:17:49 +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":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_gc_run","nf_flow_offload_ip_hook"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"6bea75eb-00bf-49e8-98fb-49e8c990bfea","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxdk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_gc_run","nf_flow_offload_ip_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"6bea75eb-00bf-49e8-98fb-49e8c990bfea","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 00:17:49 +0000 UTC FinishedAt: 2026-08-26 00:17:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxdk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_gc_run","nf_flow_offload_ip_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"6bea75eb-00bf-49e8-98fb-49e8c990bfea","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 00:17:49 +0000 UTC FinishedAt: 2026-08-26 00:17:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowxdk4m/series-workflowxdk4m-convert-artifact-71442080/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxdk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_gc_run","nf_flow_offload_ip_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"6bea75eb-00bf-49e8-98fb-49e8c990bfea","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 00:17:59 +0000 UTC FinishedAt: 2026-08-26 00:34:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxdk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_gc_run","nf_flow_offload_ip_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"6bea75eb-00bf-49e8-98fb-49e8c990bfea","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 00:17:59 +0000 UTC FinishedAt: 2026-08-26 00:34:25 +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:*2023e9da-82cf-46c8-836c-8d24ca323ae9,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-workflowxdk4m/series-workflowxdk4m-convert-artifact-71442080/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": "f0ed7cda-4b63-482f-9d1f-2776b1f56b37", "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-workflowxdk4m/series-workflowxdk4m-build-action-464715110/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxdk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_gc_run","nf_flow_offload_ip_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"6bea75eb-00bf-49e8-98fb-49e8c990bfea","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 00:17:59 +0000 UTC FinishedAt: 2026-08-26 00:34:15 +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:*2023e9da-82cf-46c8-836c-8d24ca323ae9,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-workflowxdk4m/series-workflowxdk4m-convert-artifact-71442080/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": "f0ed7cda-4b63-482f-9d1f-2776b1f56b37", "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-workflowxdk4m/series-workflowxdk4m-build-action-464715110/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxdk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_gc_run","nf_flow_offload_ip_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"6bea75eb-00bf-49e8-98fb-49e8c990bfea","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 00:34:25 +0000 UTC FinishedAt: 2026-08-26 00:34:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxdk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_gc_run","nf_flow_offload_ip_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"6bea75eb-00bf-49e8-98fb-49e8c990bfea","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 00:34:25 +0000 UTC FinishedAt: 2026-08-26 00:34:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxdk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_gc_run","nf_flow_offload_ip_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"6bea75eb-00bf-49e8-98fb-49e8c990bfea","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 00:34:25 +0000 UTC FinishedAt: 2026-08-26 00:34:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxdk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_gc_run","nf_flow_offload_ip_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"6bea75eb-00bf-49e8-98fb-49e8c990bfea","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 00:34:25 +0000 UTC FinishedAt: 2026-08-26 00:34:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"6bea75eb-00bf-49e8-98fb-49e8c990bfea","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowxdk4m/series-workflowxdk4m-convert-artifact-2337345479/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxdk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_gc_run","nf_flow_offload_ip_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"6bea75eb-00bf-49e8-98fb-49e8c990bfea","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 00:34:35 +0000 UTC FinishedAt: 2026-08-26 00:36:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxdk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_gc_run","nf_flow_offload_ip_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"6bea75eb-00bf-49e8-98fb-49e8c990bfea","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 00:34:35 +0000 UTC FinishedAt: 2026-08-26 00:36:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f0ed7cda-4b63-482f-9d1f-2776b1f56b37,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-workflowxdk4m/series-workflowxdk4m-build-action-464715110/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-workflowxdk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_gc_run","nf_flow_offload_ip_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"6bea75eb-00bf-49e8-98fb-49e8c990bfea","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 00:36:29 +0000 UTC FinishedAt: 2026-08-26 00:36:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxdk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_gc_run","nf_flow_offload_ip_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"6bea75eb-00bf-49e8-98fb-49e8c990bfea","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 00:36:29 +0000 UTC FinishedAt: 2026-08-26 00:36:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxdk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_gc_run","nf_flow_offload_ip_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"6bea75eb-00bf-49e8-98fb-49e8c990bfea","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Running StartedAt: 2026-08-26 00:36:29 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxdk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_gc_run","nf_flow_offload_ip_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"6bea75eb-00bf-49e8-98fb-49e8c990bfea","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Running StartedAt: 2026-08-26 00:36:29 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*2023e9da-82cf-46c8-836c-8d24ca323ae9,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-workflowxdk4m/series-workflowxdk4m-convert-artifact-2337345479/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxdk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_gc_run","nf_flow_offload_ip_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"6bea75eb-00bf-49e8-98fb-49e8c990bfea","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Running StartedAt: 2026-08-26 00:36:29 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*2023e9da-82cf-46c8-836c-8d24ca323ae9,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-workflowxdk4m/series-workflowxdk4m-convert-artifact-2337345479/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}