Name: series-workflowqdcnb Phase: Succeeded StartedAt: 2026-09-10 04:01:06 +0000 UTC FinishedAt: 2026-09-10 08:02:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[0] Phase: Succeeded StartedAt: 2026-09-10 04:01:06 +0000 UTC FinishedAt: 2026-09-10 04:19:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 04:01:06 +0000 UTC FinishedAt: 2026-09-10 04:19:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "c74cc17fcf422576c5327ac11c74073d5deff4a9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "MEMCG_V1" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "c74cc17fcf422576c5327ac11c74073d5deff4a9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "MEMCG_V1" ], "series_id": "bc46f6e9-d378-459a-a08b-e9690e113576" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__swap_cache_del_folio", "swap_cache_del_folio", "__memcg1_swapout", "__remove_mapping" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDssCiAgICAmIzM0O3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDssCiAgICAmIzM0O19fbWVtY2cxX3N3YXBvdXQmIzM0OywKICAgICYjMzQ7X19yZW1vdmVfbWFwcGluZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGludGVybmFsIHN3YXAgY2FjaGUgYW5kIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBsb2dpYyAoX19zd2FwX2NhY2hlX2RlbF9mb2xpbywgc3dhcF9jYWNoZV9kZWxfZm9saW8sIGFuZCBfX3JlbW92ZV9tYXBwaW5nIGluIHZtc2Nhbi5jKSBieSBtb3ZpbmcgdGhlIGNhbGwgdG8gX19tZW1jZzFfc3dhcG91dCgpIGluc2lkZSBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgd2l0aCBhbiBleHBsaWNpdCBib29sZWFuIHBhcmFtZXRlciAmIzM5O3N3YXBvdXQmIzM5OywgYW5kIGFkanVzdGluZyB0aGUgb3JkZXJpbmcgcmVsYXRpdmUgdG8gX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbygpLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYW4gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgcmVmYWN0b3JpbmcgLyBvcmRlcmluZyBhZGp1c3RtZW50IGZvciBmb2xpbyBzdGF0aXN0aWNzIGFuZCBtZW1jZyBzd2Fwb3V0IGFjY291bnRpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyB0byB1c2Vyc3BhY2Ugb3Igb3RoZXIga2VybmVsIHN1YnN5c3RlbXMsIGFuZCBkb2VzIG5vdCBjcmVhdGUgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQW55IHBvdGVudGlhbCBidWdzIChlLmcuIGxvY2tpbmcsIHBhZ2UgcmVmY291bnRpbmcsIHJhY2UgY29uZGl0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3IgVk0gZGVidWcgY2hlY2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gKG1tL3N3YXBfc3RhdGUuYywgbW0vdm1zY2FuLmMsIG1tL3N3YXAuaCksIG1vdmluZyB0aGUgX19tZW1jZzFfc3dhcG91dCgpIGNhbGwgaW50byBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgYW5kIHVwZGF0aW5nIGNhbGxlcnMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgc3dhcCBvcGVyYXRpb25zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ0MzRiNzdiMTBlMmQwYWYxZGZkNjEwNzZiODc2Yjg0NjA4NDk1ZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwNDoxNzo1MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDBiNWQ1MDc3MzliY2IuLmIzYjU0YzI4OTI5YTEgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaFxuQEAgLTMxOSw3ICYjNDM7MzE5LDggQEAgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4gdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi1cdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyk7XG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuJiM0MztcdFx0XHQgICAgYm9vbCBzd2Fwb3V0KTtcbiB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0XHRzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpO1xuIFxuQEAgLTQ1Miw3ICYjNDM7NDUzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpXG4mIzQzO1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuJiM0MztcdFx0Ym9vbCBzd2Fwb3V0KVxuIHtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCAzMDU4NzdlMWY0ZDdiLi42MjVjMTg1YTFjYTRkIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0zMDYsMjEgJiM0MzszMDYsMjggQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuICAqIEBmb2xpbzogVGhlIGZvbGlvLlxuICAqIEBlbnRyeTogVGhlIGZpcnN0IHN3YXAgZW50cnkgdGhhdCB0aGUgZm9saW8gY29ycmVzcG9uZHMgdG8uXG4gICogQHNoYWRvdzogc2hhZG93IHZhbHVlIHRvIGJlIGZpbGxlZCBpbiB0aGUgc3dhcCBjYWNoZS5cbiYjNDM7ICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBmb2xpbyBpcyBiZWluZyByZWNsYWltZWQgYWZ0ZXIgc3dhcG91dC5cbiAgKlxuICAqIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBmaWxscyBhIHNoYWRvdyBpbiBwbGFjZS5cbiAgKiBUaGlzIHdvbiYjMzk7dCBwdXQgdGhlIGZvbGlvJiMzOTtzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LlxuICAqXG4gICogQ29udGV4dDogQ2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQgYW5kIGluIHRoZSBzd2FwIGNhY2hlXG4gICogdXNpbmcgdGhlIGluZGV4IG9mIEBlbnRyeSwgYW5kIGxvY2sgdGhlIGNsdXN0ZXIgdGhhdCBob2xkcyB0aGUgZW50cmllcy5cbiYjNDM7ICogSWYgQHN3YXBvdXQgaXMgc2V0LCB0aGUgZm9saW8gc2hvdWxkIGJlIGluIHJlY2xhaW0gcGF0aCBhbmQgSVJRc1xuJiM0MzsgKiBzaG91bGQgYmUgZGlzYWJsZWQuXG4gICovXG4gdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpXG4mIzQzO1x0XHRcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcbi1cdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcbiBcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIC1ucl9wYWdlcyk7XG4gXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgLW5yX3BhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN3YXBvdXQpXG4mIzQzO1x0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4mIzQzO1xuJiM0MztcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcbiB9XG4gXG4gLyoqXG5AQCAtMzM5LDcgJiM0MzszNDYsNyBAQCB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gXG4gXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xuLVx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMKTtcbiYjNDM7XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTtcbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFxuIFx0Zm9saW9fcmVmX3N1Yihmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAyNDVmNjhjNzViMjg5Li4yOWJjZWQ0M2IwY2U2IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNzU1LDggJiM0Mzs3NTUsNyBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gXHRcdGlmIChyZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpXG4gXHRcdFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcbi1cdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuLVx0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTtcbiYjNDM7XHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpO1xuIFx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XG4gXHR9IGVsc2Uge1xuIFx0XHR2b2lkICgqZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICopO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDssCiAgICAmIzM0O3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDssCiAgICAmIzM0O19fbWVtY2cxX3N3YXBvdXQmIzM0OywKICAgICYjMzQ7X19yZW1vdmVfbWFwcGluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gKG1tL3N3YXBfc3RhdGUuYywgbW0vdm1zY2FuLmMsIG1tL3N3YXAuaCksIG1vdmluZyB0aGUgX19tZW1jZzFfc3dhcG91dCgpIGNhbGwgaW50byBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgYW5kIHVwZGF0aW5nIGNhbGxlcnMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgc3dhcCBvcGVyYXRpb25zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ0MzRiNzdiMTBlMmQwYWYxZGZkNjEwNzZiODc2Yjg0NjA4NDk1ZTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAwNDoxNzo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaAppbmRleCAwYjVkNTA3NzM5YmNiLi5iM2I1NGMyODkyOWExIDEwMDY0NAotLS0gYS9tbS9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcC5oCkBAIC0zMTksNyAmIzQzOzMxOSw4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLAogdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpOwogdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCi0JCQkgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyk7CiYjNDM7CQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csCiYjNDM7CQkJICAgIGJvb2wgc3dhcG91dCk7CiB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJCQkJc3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KTsKIApAQCAtNDUyLDcgJiM0Mzs0NTMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKLQkJc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdykKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csCiYjNDM7CQlib29sIHN3YXBvdXQpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCAzMDU4NzdlMWY0ZDdiLi42MjVjMTg1YTFjYTRkIDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC0zMDYsMjEgJiM0MzszMDYsMjggQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogICogQGZvbGlvOiBUaGUgZm9saW8uCiAgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLgogICogQHNoYWRvdzogc2hhZG93IHZhbHVlIHRvIGJlIGZpbGxlZCBpbiB0aGUgc3dhcCBjYWNoZS4KJiM0MzsgKiBAc3dhcG91dDogd2hldGhlciB0aGlzIGZvbGlvIGlzIGJlaW5nIHJlY2xhaW1lZCBhZnRlciBzd2Fwb3V0LgogICoKICAqIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBmaWxscyBhIHNoYWRvdyBpbiBwbGFjZS4KICAqIFRoaXMgd29uJiMzOTt0IHB1dCB0aGUgZm9saW8mIzM5O3MgcmVmY291bnQuIFRoZSBjYWxsZXIgaGFzIHRvIGRvIHRoYXQuCiAgKgogICogQ29udGV4dDogQ2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQgYW5kIGluIHRoZSBzd2FwIGNhY2hlCiAgKiB1c2luZyB0aGUgaW5kZXggb2YgQGVudHJ5LCBhbmQgbG9jayB0aGUgY2x1c3RlciB0aGF0IGhvbGRzIHRoZSBlbnRyaWVzLgomIzQzOyAqIElmIEBzd2Fwb3V0IGlzIHNldCwgdGhlIGZvbGlvIHNob3VsZCBiZSBpbiByZWNsYWltIHBhdGggYW5kIElSUXMKJiM0MzsgKiBzaG91bGQgYmUgZGlzYWJsZWQuCiAgKi8KIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAotCQkJICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpCiYjNDM7CQkJICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dCkKIHsKIAl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwogCi0JX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpOwogCW5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIC1ucl9wYWdlcyk7CiAJbHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7CiYjNDM7CiYjNDM7CWlmIChzd2Fwb3V0KQomIzQzOwkJX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpOwomIzQzOwomIzQzOwlfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7CiB9CiAKIC8qKgpAQCAtMzM5LDcgJiM0MzszNDYsNyBAQCB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJc3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby0mZ3Q7c3dhcDsKIAogCWNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7Ci0JX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMKTsKJiM0MzsJX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7CiAJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiAKIAlmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCAyNDVmNjhjNzViMjg5Li4yOWJjZWQ0M2IwY2U2IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNzU1LDggJiM0Mzs3NTUsNyBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAKIAkJaWYgKHJlY2xhaW1lZCAmYW1wOyZhbXA7ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpCiAJCQlzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpOwotCQlfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7Ci0JCV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpOwomIzQzOwkJX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7CiAJCXN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTsKIAl9IGVsc2UgewogCQl2b2lkICgqZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICopOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTExCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IHRoaXMgZGlmZi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgYmVlbiBhbHRlcmVkLiBJdCBsb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgbW9kaWZpY2F0aW9ucyBhY3Jvc3MgdGhlIHN3YXAgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgYG1tL3N3YXAuaGAsIGBtbS9zd2FwX3N0YXRlLmNgLCBhbmQgYG1tL3Ztc2Nhbi5jYC4gVGhpcyBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBzd2FwIG1hbmFnZW1lbnQsIHBvc3NpYmx5IHdpdGggY2hhbmdlcyBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBzdGF0ZSB0cmFja2luZywgb3IgdGhlIG1lbW9yeSBzY2FubmluZyBwcm9jZXNzLgoKTm93LCBpbnN0ZWFkIG9mIGp1c3Qgc3RhcmluZyBhdCB0aGUgZGlmZiBvdXRwdXQsIEkmIzM5O2xsIG5lZWQgdG8gZ2FpbiBzb21lIGNvbnRleHQgYXJvdW5kIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGBncmVwcGVyYCBvciBwb3NzaWJseSBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlIGJsb2Nrcy4gSSYjMzk7bGwgbG9vayBhdCB0aGUgY29kZSBpbW1lZGlhdGVseSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBjaGFuZ2UgaW4gZWFjaCBvZiB0aGVzZSBmaWxlcy4gVGhhdCB3YXkgSSBjYW4gZnVsbHkgdW5kZXJzdGFuZCAqd2h5KiB0aGUgY2hhbmdlcyB3ZXJlIGltcGxlbWVudGVkLiBXaXRoIHRoZXNlIHRvb2xzLCBJIGV4cGVjdCB0byBpZGVudGlmeSB0aGUga2V5IGFzcGVjdHMgb2YgdGhpcyB1cGRhdGUgYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5NTpcdFx0XHRjaV9vZmYgPSBjaV9zdGFydDtcbiAyOTY6XHRcdFx0ZG8ge1xuIDI5NzpcdFx0XHRcdGlmICghX19zd3BfdGJfZ2V0X2NvdW50KF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZikpKVxuIDI5ODpcdFx0XHRcdFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfb2ZmLCAxKTtcbiAyOTk6XHRcdFx0fSB3aGlsZSAoJiM0MzsmIzQzO2NpX29mZiBcdTAwM2MgY2lfZW5kKTtcbiAzMDA6XHRcdH1cbiAzMDE6XHR9XG4gMzAyOlx0XG4gMzAzOlx0LyoqXG4gMzA0Olx0ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxuIDMwNTpcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4gMzA2Olx0ICogQGZvbGlvOiBUaGUgZm9saW8uXG4gMzA3Olx0ICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cbiAzMDg6XHQgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxuIDMwOTpcdCAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgZm9saW8gaXMgYmVpbmcgcmVjbGFpbWVkIGFmdGVyIHN3YXBvdXQuXG4gMzEwOlx0ICpcbiAzMTE6XHQgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXG4gMzEyOlx0ICogVGhpcyB3b24mIzM5O3QgcHV0IHRoZSBmb2xpbyYjMzk7cyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cbiAzMTM6XHQgKlxuIDMxNDpcdCAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxuIDMxNTpcdCAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXG4gMzE2Olx0ICogSWYgQHN3YXBvdXQgaXMgc2V0LCB0aGUgZm9saW8gc2hvdWxkIGJlIGluIHJlY2xhaW0gcGF0aCBhbmQgSVJRc1xuIDMxNzpcdCAqIHNob3VsZCBiZSBkaXNhYmxlZC5cbiAzMTg6XHQgKi9cbiAzMTk6XHR2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiAzMjA6XHRcdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuIDMyMTpcdHtcbiAzMjI6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gMzIzOlx0XG4gMzI0Olx0XHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpO1xuIDMyNTpcdFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XG4gMzI2Olx0XG4gMzI3Olx0XHRpZiAoc3dhcG91dClcbiAzMjg6XHRcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuIDMyOTpcdFxuIDMzMDpcdFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIDMzMTpcdH1cbiAzMzI6XHRcbiAzMzM6XHQvKipcbiAzMzQ6XHQgKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxuIDMzNTpcdCAqIEBmb2xpbzogVGhlIGZvbGlvLlxuIDMzNjpcdCAqXG4gMzM3Olx0ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXG4gMzM4Olx0ICogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBlaXRoZXIgY2xlYW4gb3IgaGFzIGEgc3dhcCBjb3VudFxuIDMzOTpcdCAqIGVxdWFsIHRvIHplcm8sIG9yIGl0IG1heSBjYXVzZSBkYXRhIGxvc3MuXG4gMzQwOlx0ICpcbiAzNDE6XHQgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGUuXG4gMzQyOlx0ICovXG4gMzQzOlx0dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIDM0NDpcdHtcbiAzNDU6XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG4gMzQ2Olx0XHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gMzQ3Olx0XG4gMzQ4Olx0XHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xuIDM0OTpcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XG4gMzUwOlx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiAzNTE6XHRcbiAzNTI6XHRcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gMzUzOlx0fVxuIDM1NDpcdFxuIDM1NTpcdC8qKlxuIDM1NjpcdCAqIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvIC0gUmVwbGFjZSBhIGZvbGlvIGluIHRoZSBzd2FwIGNhY2hlLlxuIDM1NzpcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4gMzU4Olx0ICogQG9sZDogVGhlIG9sZCBmb2xpbyB0byBiZSByZXBsYWNlZC5cbiAzNTk6XHQgKiBAbmV3OiBUaGUgbmV3IGZvbGlvLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFZpcnR1YWwgTWVtb3J5IFNjYW5uZXIqKgoKT2theSwgdGltZSB0byBkaWcgaW4uIFRoZSBwcm9ibGVtJiMzOTtzIGhpbnRpbmcgYXQgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aGluIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmVyLCBzbyBsZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIE15IGd1dCB0ZWxscyBtZSB0byBleGFtaW5lIGBtbS92bXNjYW4uY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIHRvIGFyb3VuZCBsaW5lIDc1NS4gVGhpcyByZWdpb24gbGlrZWx5IGludm9sdmVzIHNvbWV0aGluZyBjcnVjaWFsIOKAkyBwZXJoYXBzIG1lbW9yeSByZWNsYW1hdGlvbiBsb2dpYywgcGFnZSBzZWxlY3Rpb24sIG9yIGEgcmVsYXRlZCBvcHRpbWl6YXRpb24uIFRoZSByZWFsIGtleSwgYXMgYWx3YXlzLCB3aWxsIGJlIHVuZGVyc3RhbmRpbmcgdGhlICpjYWxsZXIgY29udGV4dCouIEtub3dpbmcgKndobyogaXMgY2FsbGluZyB0aGF0IGZ1bmN0aW9uIGFyb3VuZCBsaW5lIDc1NSBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsLiBUaGF0IHdpbGwgY2x1ZSBtZSBpbnRvIHRoZSBzcGVjaWZpYyBzY2VuYXJpbyB0cmlnZ2VyaW5nIHRoZSBwb3RlbnRpYWwgaXNzdWUgYW5kIHByb3ZpZGUgdGhlIGluZm9ybWF0aW9uIHRvIGlkZW50aWZ5IHRoZSByb290IGNhdXNlIHF1aWNrbHkuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDczNTpcdFx0ICogW29vcHMsIG91ciB3cml0ZV90byBkYXRhIGlzIGxvc3RdXG4gNzM2Olx0XHQgKlxuIDczNzpcdFx0ICogUmV2ZXJzaW5nIHRoZSBvcmRlciBvZiB0aGUgdGVzdHMgZW5zdXJlcyBzdWNoIGEgc2l0dWF0aW9uIGNhbm5vdFxuIDczODpcdFx0ICogZXNjYXBlIHVubm90aWNlZC4gVGhlIHNtcF9ybWIgaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGUgZm9saW8tXHUwMDNlZmxhZ3NcbiA3Mzk6XHRcdCAqIGxvYWQgaXMgbm90IHNhdGlzZmllZCBiZWZvcmUgdGhhdCBvZiBmb2xpby1cdTAwM2VfcmVmY291bnQuXG4gNzQwOlx0XHQgKlxuIDc0MTpcdFx0ICogTm90ZSB0aGF0IGlmIHRoZSBkaXJ0eSBmbGFnIGlzIGFsd2F5cyBzZXQgdmlhIGZvbGlvX21hcmtfZGlydHksXG4gNzQyOlx0XHQgKiBhbmQgdGh1cyB1bmRlciB0aGUgaV9wYWdlcyBsb2NrLCB0aGVuIHRoaXMgb3JkZXJpbmcgaXMgbm90IHJlcXVpcmVkLlxuIDc0MzpcdFx0ICovXG4gNzQ0Olx0XHRyZWZjb3VudCA9IDEgJiM0MzsgZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIDc0NTpcdFx0aWYgKCFmb2xpb19yZWZfZnJlZXplKGZvbGlvLCByZWZjb3VudCkpXG4gNzQ2Olx0XHRcdGdvdG8gY2Fubm90X2ZyZWU7XG4gNzQ3Olx0XHQvKiBub3RlOiBhdG9taWNfY21weGNoZyBpbiBmb2xpb19yZWZfZnJlZXplIHByb3ZpZGVzIHRoZSBzbXBfcm1iICovXG4gNzQ4Olx0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpKSB7XG4gNzQ5Olx0XHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgcmVmY291bnQpO1xuIDc1MDpcdFx0XHRnb3RvIGNhbm5vdF9mcmVlO1xuIDc1MTpcdFx0fVxuIDc1MjpcdFxuIDc1MzpcdFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuIDc1NDpcdFx0XHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXHUwMDNlc3dhcDtcbiA3NTU6XHRcbiA3NTY6XHRcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbiA3NTc6XHRcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuIDc1ODpcdFx0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcbiA3NTk6XHRcdFx0c3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpO1xuIDc2MDpcdFx0fSBlbHNlIHtcbiA3NjE6XHRcdFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcbiA3NjI6XHRcbiA3NjM6XHRcdFx0ZnJlZV9mb2xpbyA9IG1hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZnJlZV9mb2xpbztcbiA3NjQ6XHRcdFx0LypcbiA3NjU6XHRcdFx0ICogUmVtZW1iZXIgYSBzaGFkb3cgZW50cnkgZm9yIHJlY2xhaW1lZCBmaWxlIGNhY2hlIGluXG4gNzY2Olx0XHRcdCAqIG9yZGVyIHRvIGRldGVjdCByZWZhdWx0cywgdGh1cyB0aHJhc2hpbmcsIGxhdGVyIG9uLlxuIDc2NzpcdFx0XHQgKlxuIDc2ODpcdFx0XHQgKiBCdXQgZG9uJiMzOTt0IHN0b3JlIHNoYWRvd3MgaW4gYW4gYWRkcmVzcyBzcGFjZSB0aGF0IGlzXG4gNzY5Olx0XHRcdCAqIGFscmVhZHkgZXhpdGluZy4gIFRoaXMgaXMgbm90IGp1c3QgYW4gb3B0aW1pemF0aW9uLFxuIDc3MDpcdFx0XHQgKiBpbm9kZSByZWNsYWltIG5lZWRzIHRvIGVtcHR5IG91dCB0aGUgcmFkaXggdHJlZSBvclxuIDc3MTpcdFx0XHQgKiB0aGUgbm9kZXMgYXJlIGxvc3QuICBEb24mIzM5O3QgcGxhbnQgc2hhZG93cyBiZWhpbmQgaXRzXG4gNzcyOlx0XHRcdCAqIGJhY2suXG4gNzczOlx0XHRcdCAqXG4gNzc0Olx0XHRcdCAqIFdlIGFsc28gZG9uJiMzOTt0IHN0b3JlIHNoYWRvd3MgZm9yIERBWCBtYXBwaW5ncyBiZWNhdXNlIHRoZVxuIDc3NTpcdFx0XHQgKiBvbmx5IHBhZ2UgY2FjaGUgZm9saW9zIGZvdW5kIGluIHRoZXNlIGFyZSB6ZXJvIHBhZ2VzXG4gNzc2Olx0XHRcdCAqIGNvdmVyaW5nIGhvbGVzLCBhbmQgYmVjYXVzZSB3ZSBkb24mIzM5O3Qgd2FudCB0byBtaXggREFYXG4gNzc3Olx0XHRcdCAqIGV4Y2VwdGlvbmFsIGVudHJpZXMgYW5kIHNoYWRvdyBleGNlcHRpb25hbCBlbnRyaWVzIGluIHRoZVxuIDc3ODpcdFx0XHQgKiBzYW1lIGFkZHJlc3Nfc3BhY2UuXG4gNzc5Olx0XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMTEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZSBpbnZvbHZpbmcgYF9fbWVtY2cxX3N3YXBvdXRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgd2h5IHRoZSBtb2RpZmljYXRpb24gd2FzIGRlZW1lZCBuZWNlc3NhcnkuIAoKVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCwgb2YgY291cnNlLCBpcyBhIHF1aWNrIGdyZXAuIExldCYjMzk7cyBzZWUgaG93IGFuZCB3aGVyZSBgX19tZW1jZzFfc3dhcG91dGAgaXMgdXNlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGUgc3Vycm91bmRpbmcgY29udGV4dCB3aWxsIHRlbGwgdGhlIHN0b3J5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjYWxscywgZGVmaW5pdGlvbnMsIGFuZCBhbnkgcmVsYXRlZCBjb21tZW50cyB0aGF0IHNoZWQgbGlnaHQgb24gaXRzIGZ1bmN0aW9uIGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgY2hhbmdlLiBUaGlzIHNob3VsZCBxdWlja2x5IG9yaWVudCBtZSBhbmQgZ3VpZGUgbWUgdG93YXJkIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21lbWNnMV9zd2Fwb3V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5NTM9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2MC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjE6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2Mi12b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2NS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjY6c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjctXHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NTMzPXZvaWQgZGVmZXJyZWRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBwYXJ0aWFsbHlfbWFwcGVkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU1MS1cdCAqIEV4Y2x1ZGUgc3dhcGNhY2hlOiBvcmlnaW5hbGx5IHRvIGF2b2lkIGEgY29ycnVwdCBkZWZlcnJlZCBzcGxpdFxubW0vaHVnZV9tZW1vcnkuYzo0NTUyOlx0ICogcXVldWUuIE5vd2FkYXlzIHRoYXQgaXMgZnVsbHkgcHJldmVudGVkIGJ5IF9fbWVtY2cxX3N3YXBvdXQoKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDU1My1cdCAqIGJ1dCBpZiBwYWdlIHJlY2xhaW0gaXMgYWxyZWFkeSBoYW5kbGluZyB0aGUgc2FtZSBmb2xpbywgaXQgaXNcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjQ3PXZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yNTgtLyoqXG5tbS9tZW1jb250cm9sLXYxLmM6MjU5OiAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXG5tbS9tZW1jb250cm9sLXYxLmMtMjYwLSAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtc3cgY2hhcmdlIHRvIHRyYW5zZmVyXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTI2OC0gKi9cbm1tL21lbWNvbnRyb2wtdjEuYzoyNjk6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG5tbS9tZW1jb250cm9sLXYxLmMtMjcwLXtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MzE5PXZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMjctXHRpZiAoc3dhcG91dClcbm1tL3N3YXBfc3RhdGUuYzozMjg6XHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbm1tL3N3YXBfc3RhdGUuYy0zMjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEyMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYF9fbWVtY2cxX3N3YXBvdXRgKioKCk9rYXksIGxldCYjMzk7cyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBtZW1vcnkgY29udHJvbCB2MSBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHN3YXAtb3V0IGlzIGhhbmRsZWQgYXQgdGhlIG1lbWNnIGxldmVsLCBzbyBJJiMzOTttIGhlYWRpbmcgZGlyZWN0bHkgdG8gdGhlIGBfX21lbWNnMV9zd2Fwb3V0YCBmdW5jdGlvbiB3aXRoaW4gYG1tL21lbWNvbnRyb2wtdjEuY2AuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgdGhhdCBvcmNoZXN0cmF0ZXMgcGFnZSBzZWxlY3Rpb24gYW5kIGV2aWN0aW9uIHNwZWNpZmljIHRvIGEgbWVtY2cgY29udGV4dC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBpcyBpbiB1bmRlcnN0YW5kaW5nIHRoZSBjcml0ZXJpYSB1c2VkIGZvciBjaG9vc2luZyBwYWdlcywgYW55IGFjY291bnRpbmcgbnVhbmNlcyB3aXRoaW4gdGhlIG1lbWNnIGhpZXJhcmNoeSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzd2FwcGluZyBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcywgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gdGhlIGJhbGFuY2Ugb2YgZGlyZWN0IGFuZCBpbmRpcmVjdCByZWNsYWltLCBhbmQgaG93IHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTU6XHR9XG4gMjU2Olx0XG4gMjU3Olx0I2lmZGVmIENPTkZJR19TV0FQXG4gMjU4Olx0LyoqXG4gMjU5Olx0ICogX19tZW1jZzFfc3dhcG91dCAtIHRyYW5zZmVyIGEgbWVtc3cgY2hhcmdlIHRvIHN3YXBcbiAyNjA6XHQgKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbXN3IGNoYXJnZSB0byB0cmFuc2ZlclxuIDI2MTpcdCAqIEBjaTogdGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIgaG9sZGluZyB0aGUgc3dhcCBlbnRyaWVzXG4gMjYyOlx0ICpcbiAyNjM6XHQgKiBUcmFuc2ZlciB0aGUgbWVtc3cgY2hhcmdlIG9mIEBmb2xpbyB0byB0aGUgc3dhcCBlbnRyeSBzdG9yZWQgaW5cbiAyNjQ6XHQgKiBmb2xpby1cdTAwM2Vzd2FwLlxuIDI2NTpcdCAqXG4gMjY2Olx0ICogQ29udGV4dDogZm9saW8gbXVzdCBiZSBpc29sYXRlZCwgdW5tYXBwZWQsIGxvY2tlZCBhbmQgaXMganVzdCBhYm91dCB0b1xuIDI2NzpcdCAqIGJlIGZyZWVkLCBhbmQgY2FsbGVyIG11c3QgZGlzYWJsZSBJUlFzIGFuZCBob2xkIHRoZSBzd2FwIGNsdXN0ZXIgbG9jay5cbiAyNjg6XHQgKi9cbiAyNjk6XHR2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiAyNzA6XHR7XG4gMjcxOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpzd2FwX21lbWNnO1xuIDI3MjpcdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIDI3MzpcdFx0dW5zaWduZWQgaW50IG5yX2VudHJpZXM7XG4gMjc0Olx0XG4gMjc1Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuIDI3NjpcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcbiAyNzc6XHRcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcbiAyNzg6XHRcdFZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XG4gMjc5Olx0XG4gMjgwOlx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIDI4MTpcdFx0XHRyZXR1cm47XG4gMjgyOlx0XG4gMjgzOlx0XHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSlcbiAyODQ6XHRcdFx0cmV0dXJuO1xuIDI4NTpcdFxuIDI4NjpcdFx0b2JqY2cgPSBmb2xpb19vYmpjZyhmb2xpbyk7XG4gMjg3Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIW9iamNnLCBmb2xpbyk7XG4gMjg4Olx0XHRpZiAoIW9iamNnKVxuIDI4OTpcdFx0XHRyZXR1cm47XG4gMjkwOlx0XG4gMjkxOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMjkyOlx0XHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xuIDI5MzpcdFx0LypcbiAyOTQ6XHRcdCAqIEluIGNhc2UgdGhlIG1lbWNnIG93bmluZyB0aGVzZSBwYWdlcyBoYXMgYmVlbiBvZmZsaW5lZCBhbmQgZG9lc24mIzM5O3RcbiAyOTU6XHRcdCAqIGhhdmUgYW4gSUQgYWxsb2NhdGVkIHRvIGl0IGFueW1vcmUsIGNoYXJnZSB0aGUgY2xvc2VzdCBvbmxpbmVcbiAyOTY6XHRcdCAqIGFuY2VzdG9yIGZvciB0aGUgc3dhcCBpbnN0ZWFkIGFuZCB0cmFuc2ZlciB0aGUgbWVtb3J5JiM0Mztzd2FwIGNoYXJnZS5cbiAyOTc6XHRcdCAqL1xuIDI5ODpcdFx0bnJfZW50cmllcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiAyOTk6XHRcdHN3YXBfbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfZW50cmllcyk7XG4gMzAwOlx0XHRtb2RfbWVtY2dfc3RhdGUoc3dhcF9tZW1jZywgTUVNQ0dfU1dBUCwgbnJfZW50cmllcyk7XG4gMzAxOlx0XG4gMzAyOlx0XHRfX3N3YXBfY2dyb3VwX3NldChjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGZvbGlvLVx1MDAzZXN3YXApLCBucl9lbnRyaWVzLFxuIDMwMzpcdFx0XHRcdCAgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN3YXBfbWVtY2cpKTtcbiAzMDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIwNwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDYxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgS2VybmVsIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIGNoYW5nZSBjb25jZXJuaW5nIGBfX21lbWNnMV9zd2Fwb3V0YCBhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBzd2FwIGNhY2hlIGRlbGV0aW9uLiBUaGUga2V5IG9ic2VydmF0aW9uIGlzIHRoYXQgdGhlIGNhbGwgdG8gYF9fbWVtY2cxX3N3YXBvdXRgIGhhcyBiZWVuIG1vdmVkIHdpdGhpbiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIHNwZWNpZmljYWxseSByaWdodCBiZWZvcmUgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLiBUaGlzIG1lYW5zIHRoZSBtZW1jZyBzd2Fwb3V0IG9wZXJhdGlvbiBub3cgaGFwcGVucyAqYmVmb3JlKiB0aGUgc3dhcGNhY2hlIHN0YXR1cyBpcyBjbGVhcmVkLCB3aGljaCBpcyBhbiBpbXBvcnRhbnQgY2hhbmdlIGZvciBtZW1vcnkgbWFuYWdlbWVudCBjb25zaXN0ZW5jeS4KCkkgc2VlIHRoYXQgdGhpcyBpbnZvbHZlcyBjb2RlIHdpdGhpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWFzOiBzcGVjaWZpY2FsbHkgYG1tL3N3YXBfc3RhdGUuY2AsIGBtbS92bXNjYW4uY2AsIGFuZCBwb3RlbnRpYWxseSB0b3VjaGVkIHRocm91Z2ggYG1tL3N3YXAuaGAuIFRoZXNlIGFyZSBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBpbiBhbnkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQg4oCTIHRoZXNlIGFyZSBmdW5kYW1lbnRhbCBzd2FwIGFuZCByZWNsYWltIG9wZXJhdGlvbnMuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBjcml0ZXJpYSBmb3IgYFdvcnRoRnV6emluZ2AsIHRoaXMgaXMgYSBjbGVhciAmIzM0O3llcy4mIzM0OyBUaGlzIHBhdGNoIHRvdWNoZXMgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBpbmNsdWRlcyBsb2dpYyBtb2RpZmljYXRpb25zLiBNb3Jlb3ZlciwgdGhlIGludHJvZHVjdGlvbiBvZiB0aGUgYFZNX1dBUk5fT05fT05DRV9GT0xJT2AgY2hlY2sgaXMgYSBkaXJlY3QgYWx0ZXJhdGlvbiBvZiBydW50aW1lIGFzc2VydGlvbnMuIFRoZXJlZm9yZSwgaXQgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSB0aGUgJiMzNDtGb2N1c1N5bWJvbHMmIzM0Oy4gV2UgbmVlZCB0byB0YXJnZXQgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgaW1wbGVtZW50IG9yIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBjb2RlIGFuZCBhcmUgbm90IHViaXF1aXRvdXMuIFRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBJJiMzOTttIGludGVyZXN0ZWQgaW4gYXJlOgoKKiAgIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCAobW0vc3dhcF9zdGF0ZS5jKSAtICpUaGlzIGlzIGEgY29yZSBjaGFuZ2UgcG9pbnQqLgoqICAgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCAobW0vc3dhcF9zdGF0ZS5jKSAtICpUaGlzIGFsc28gY2hhbmdlcy4qCiogICBgX19yZW1vdmVfbWFwcGluZ2AgKG1tL3Ztc2Nhbi5jKSAtICpUaGlzIGNhbGxzIHRoZSBtb2RpZmllZCBmdW5jdGlvbi4qCiogICBgX19tZW1jZzFfc3dhcG91dGAgKG1tL21lbWNvbnRyb2wtdjEuYykgLSAqVGhpcyBpcyBjb25kaXRpb25hbGx5IGNhbGxlZCBmcm9tIHRoZSBjb3JlIGNoYW5nZS4qCgpXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSB1bmRlcnN0YW5kIGFsbCBjYWxsIHBhdGhzIHRvIHRoZXNlIGNvcmUgZnVuY3Rpb25zLCB0byBzZWUgdGhlIGVudGlyZSBzdXJmYWNlLiBXZSBuZWVkIHRvIGJlIGF3YXJlIG9mIG90aGVyIGNhbGxlcnMgb2YgdGhlIHN3YXAgY2FjaGUgZGVsZXRlIGZ1bmN0aW9ucyEgVGltZSB0byBncmVwLgoKRnJvbSBoZXJlLCBJJiMzOTtsbCBkZXRlcm1pbmUgYEVuYWJsZUNvbmZpZ3NgIGJhc2VkIG9uIHdoaWNoIGNvbmZpZ3VyYXRpb25zIG1heGltaXplIHRoZSBjaGFuY2Ugb2YgZXhlcmNpc2luZyB0aGUgY29kZSBwYXRocyBvZiBpbnRlcmVzdC4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBtZW1jZyBjb25maWd1cmF0aW9ucywgc3dhcCBlbmFibGVkLCBldGMuIFRoZSBwcmVjaXNlIGNvbmZpZ3Mgd2lsbCBkZXBlbmQgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgY2hhbmdlIGFuZCB0aGUgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zd2FwX2NhY2hlX2RlbF9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwLmg9MzE5PXZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxubW0vc3dhcC5oLTMyMC1cdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xubW0vc3dhcC5oOjMyMTp2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC0zMjItXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXG4tLVxubW0vc3dhcC5oPTQ1MT1zdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwLmgtNDU0LVxubW0vc3dhcC5oOjQ1NTpzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxubW0vc3dhcC5oLTQ1Ni1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MjU3PXN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzAzLS8qKlxubW0vc3dhcF9zdGF0ZS5jOjMwNDogKiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXG5tbS9zd2FwX3N0YXRlLmMtMzA1LSAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMxOC0gKi9cbm1tL3N3YXBfc3RhdGUuYzozMTk6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9zd2FwX3N0YXRlLmMtMzIwLVx0XHRcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMzNi0gKlxubW0vc3dhcF9zdGF0ZS5jOjMzNzogKiBTYW1lIGFzIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8sIGJ1dCBoYW5kbGVzIGxvY2sgYW5kIHJlZmNvdW50LiBUaGVcbm1tL3N3YXBfc3RhdGUuYy0zMzgtICogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBlaXRoZXIgY2xlYW4gb3IgaGFzIGEgc3dhcCBjb3VudFxuLS1cbm1tL3N3YXBfc3RhdGUuYz0zNDM9dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zNDgtXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xubW0vc3dhcF9zdGF0ZS5jOjM0OTpcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xubW0vc3dhcF9zdGF0ZS5jLTM1MC1cdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuLS1cbm1tL3N3YXBmaWxlLmM9MTU4OD1zdGF0aWMgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtMTYxOC1cdFx0ICogc2xvdHMgd2lsbCBiZSBmcmVlZCB3aGVuIGZvbGlvIGlzIHJlbW92ZWQgZnJvbSBzd2FwIGNhY2hlXG5tbS9zd2FwZmlsZS5jOjE2MTk6XHRcdCAqIChfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKS5cbm1tL3N3YXBmaWxlLmMtMTYyMC1cdFx0ICovXG4tLVxubW0vdm1zY2FuLmM9NzAyPXN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS92bXNjYW4uYy03NTctXHRcdFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcbm1tL3Ztc2Nhbi5jOjc1ODpcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XG5tbS92bXNjYW4uYy03NTktXHRcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMDcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIENhbGxlcnMgb2YgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBzb21ldGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSYjMzk7dmUgYWxyZWFkeSBleGFtaW5lZCBzb21lIGFyZWFzLCBidXQgbm93IEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgZGVmaW5pdGVseSBleHBhbmQgbXkgc2NvcGUgYW5kIGludmVzdGlnYXRlIHRoZSBjYWxsZXJzIG9mIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIHRoZSBzd2FwIGNhY2hlLCBhbmQgdW5kZXJzdGFuZGluZyAqd2hvKiBpcyBjYWxsaW5nIGl0IGlzIGNyaXRpY2FsIHRvIGdldHRpbmcgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIHNlZSB0aGUgZGlmZmVyZW50IHBhdGhzIHRoYXQgbGVhZCB0byBpdHMgZXhlY3V0aW9uLiBUaGlzIGlzIGdvaW5nIHRvIGdpdmUgbWUgYSBtb3JlIHJvdW5kZWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2hvbGUgc3lzdGVtJiMzOTtzIGludGVyYWN0aW9ucyB3aXRoIHN3YXBwaW5nLiBJJiMzOTttIGhvcGluZyB0byBjYXRjaCBhIGdsaW1wc2Ugb2YgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGN1cnJlbnQgaXNzdWUuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmM9MTEyNT1zdGF0aWMgaW50IG1lX3N3YXBjYWNoZV9jbGVhbihzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTEyOS1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTEzMDpcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTEzMS1cbi0tXG5tbS9tZW1vcnkuYz00ODQ0PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTUwNzYtXHRcdGlmICghV0FSTl9PTl9PTkNFKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSlcbm1tL21lbW9yeS5jOjUwNzc6XHRcdFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xubW0vbWVtb3J5LmMtNTA3OC1cdFx0Z290byBvdXRfbm9tYXA7XG4tLVxubW0vc2htZW0uYz0xODA4PWludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9zaG1lbS5jLTE5NDEtXHRcdC8qXG5tbS9zaG1lbS5jOjE5NDI6XHRcdCAqIFRoZSBzd2FwX2NhY2hlX2RlbF9mb2xpbygpIGJlbG93IGNvdWxkIGJlIGxlZnQgZm9yXG5tbS9zaG1lbS5jLTE5NDMtXHRcdCAqIHNocmlua19mb2xpb19saXN0KCkmIzM5O3MgZm9saW9fZnJlZV9zd2FwKCkgdG8gZGlzcG9zZSBvZjtcbi0tXG5tbS9zaG1lbS5jLTE5NDctXHRcdCAqL1xubW0vc2htZW0uYzoxOTQ4Olx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG5tbS9zaG1lbS5jLTE5NDktXHRcdGdvdG8gcmVkaXJ0eTtcbi0tXG5tbS9zaG1lbS5jPTIzNTE9c3RhdGljIHZvaWQgc2htZW1fc2V0X2ZvbGlvX3N3YXBpbl9lcnJvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtMjM2OC1cdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBOVUxMKTtcbm1tL3NobWVtLmM6MjM2OTpcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbm1tL3NobWVtLmMtMjM3MC1cdC8qXG4tLVxubW0vc2htZW0uYz0yNDU2PXN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYy0yNTk4LVx0Zm9saW9fcHV0X3N3YXAoZm9saW8sIE5VTEwpO1xubW0vc2htZW0uYzoyNTk5Olx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xubW0vc2htZW0uYy0yNjAwLVx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4tLVxubW0vc3dhcC5oPTMxMz12b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpO1xubW0vc3dhcC5oOjMxNDp2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vc3dhcC5oLTMxNS1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9zd2FwLmg9MzE5PXZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxubW0vc3dhcC5oLTMyMC1cdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xubW0vc3dhcC5oOjMyMTp2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC0zMjItXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXG4tLVxubW0vc3dhcC5oPTQ0Nj1zdGF0aWMgaW5saW5lIHZvaWQgKnN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5tbS9zd2FwLmgtNDUwLVxubW0vc3dhcC5oOjQ1MTpzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3N3YXAuaC00NTIte1xuLS1cbm1tL3N3YXAuaC00NTQtXG5tbS9zd2FwLmg6NDU1OnN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwLmgtNDU2LVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuLS1cbm1tL3N3YXBfc3RhdGUuYz0yNTc9c3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMDMtLyoqXG5tbS9zd2FwX3N0YXRlLmM6MzA0OiAqIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gLSBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZS5cbm1tL3N3YXBfc3RhdGUuYy0zMDUtICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzE4LSAqL1xubW0vc3dhcF9zdGF0ZS5jOjMxOTp2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3N3YXBfc3RhdGUuYy0zMjAtXHRcdFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzMzLS8qKlxubW0vc3dhcF9zdGF0ZS5jOjMzNDogKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxubW0vc3dhcF9zdGF0ZS5jLTMzNS0gKiBAZm9saW86IFRoZSBmb2xpby5cbm1tL3N3YXBfc3RhdGUuYy0zMzYtICpcbm1tL3N3YXBfc3RhdGUuYzozMzc6ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXG5tbS9zd2FwX3N0YXRlLmMtMzM4LSAqIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgZWl0aGVyIGNsZWFuIG9yIGhhcyBhIHN3YXAgY291bnRcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzQyLSAqL1xubW0vc3dhcF9zdGF0ZS5jOjM0Mzp2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9zd2FwX3N0YXRlLmMtMzQ0LXtcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzQ4LVx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcbm1tL3N3YXBfc3RhdGUuYzozNDk6XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTtcbm1tL3N3YXBfc3RhdGUuYy0zNTAtXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTE5OD1zdGF0aWMgaW50IF9fdHJ5X3RvX3JlY2xhaW1fc3dhcChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0yNTEtXG5tbS9zd2FwZmlsZS5jOjI1MjpcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbm1tL3N3YXBmaWxlLmMtMjUzLVx0Zm9saW9fc2V0X2RpcnR5KGZvbGlvKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTE1ODg9c3RhdGljIHZvaWQgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE2MTgtXHRcdCAqIHNsb3RzIHdpbGwgYmUgZnJlZWQgd2hlbiBmb2xpbyBpcyByZW1vdmVkIGZyb20gc3dhcCBjYWNoZVxubW0vc3dhcGZpbGUuYzoxNjE5Olx0XHQgKiAoX19zd2FwX2NhY2hlX2RlbF9mb2xpbykuXG5tbS9zd2FwZmlsZS5jLTE2MjAtXHRcdCAqL1xuLS1cbm1tL3N3YXBmaWxlLmM9MTc0Mj1pbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3N3YXBmaWxlLmMtMTc4MC1cdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKSB7XG5tbS9zd2FwZmlsZS5jOjE3ODE6XHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbm1tL3N3YXBmaWxlLmMtMTc4Mi1cdFx0Z290byBmYWlsZWQ7XG4tLVxubW0vc3dhcGZpbGUuYz0yMTE0PWJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcGZpbGUuYy0yMTIwLVxubW0vc3dhcGZpbGUuYzoyMTIxOlx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xubW0vc3dhcGZpbGUuYy0yMTIyLVx0Zm9saW9fc2V0X2RpcnR5KGZvbGlvKTtcbi0tXG5tbS92bXNjYW4uYz03MDI9c3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3Ztc2Nhbi5jLTc1Ny1cdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xubW0vdm1zY2FuLmM6NzU4Olx0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcbm1tL3Ztc2Nhbi5jLTc1OS1cdFx0c3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpO1xuLS1cbm1tL3pzd2FwLmM9OTc0PXN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4tLVxubW0venN3YXAuYy0xMDQ0LVx0aWYgKHJldCkge1xubW0venN3YXAuYzoxMDQ1Olx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG5tbS96c3dhcC5jLTEwNDYtXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDc4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2NvbmZpZyBhbmQgTWFrZWZpbGUgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYG1tL3N3YXBfc3RhdGUuY2AgaXMgYmVpbmcgY29tcGlsZWQuIFRoaXMgaXNuJiMzOTt0IGltbWVkaWF0ZWx5IG9idmlvdXMsIHNvIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgaXRzIGluY2x1c2lvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIHRoZXNlIGZ1bmN0aW9uYWxpdGllcy4gU28sIHRoZSBxdWVzdGlvbiBpczogd2hlcmUgYXJlIHRoZXNlIGZ1bmN0aW9uYWxpdGllcyBkZWZpbmVkLCBhbmQgaG93IGFyZSB0aGV5IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQ/IFRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBJZiBLY29uZmlnIGlzIG5vdCB0aGUgc291cmNlLCB0aGVuIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcHJlcHJvY2Vzc29yIGZsYWdzIGluIHRoZSByZWxldmFudCBzb3VyY2UgY29kZS4KCkZhaWxpbmcgdGhhdCwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCBmaWxlIGlzIHRoZSBjZW50cmFsIGNvbnRyb2wgcG9pbnQgZm9yIGJ1aWxkaW5nIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBtb2R1bGVzLCBhbmQgaXQgc2hvdWxkIGNvbnRhaW4gdGhlIHJ1bGVzIGZvciBjb21waWxpbmcgYG1tL3N3YXBfc3RhdGUuY2AuIEl0IHdpbGwgcmV2ZWFsIHRoZSBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMsIGluY2x1ZGUgcGF0aHMsIGFuZCBhbnkgY29tcGlsZXIgZmxhZ3MgYmVpbmcgdXNlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBkZXRlcm1pbmVzIGl0cyBjb21waWxhdGlvbiBpbnRvIHRoZSBmaW5hbCBrZXJuZWwgaW1hZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfc3RhdGVcXC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTc3PWVuZGlmXG5tbS9NYWtlZmlsZS03OC1cbm1tL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19TV0FQKVx0JiM0Mzs9IHBhZ2VfaW8ubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUub1xubW0vTWFrZWZpbGUtODAtb2JqLSQoQ09ORklHX1pTV0FQKVx0JiM0Mzs9IHpzd2FwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NDMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFN3YXAgQ29tcGlsYXRpb24qKgoKT2theSwgc28gYENPTkZJR19TV0FQYCBjbGVhcmx5IHRha2VzIGNhcmUgb2YgY29tcGlsaW5nIGBzd2FwX3N0YXRlLm9gLiBUaGF0IG11Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgbm93IEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBtZW1vcnkgY29udHJvbCBncm91cHMsIHBhcnRpY3VsYXJseSBgQ09ORklHX01FTUNHYCBhbmQgYENPTkZJR19NRU1DR19WMWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBzd2FwIGFuZCBtZW1jZyBhcmUgaW50ZWdyYXRlZCwgb3IgaWYgdGhleSBhcmUuIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgbG9vayBmb3IgdGhlIG1lbWNnIHN3YXAtb3V0IGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgc2VhcmNoaW5nIGluIGBtbS9NYWtlZmlsZWAgb3IgcGVyaGFwcyBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgcmVmZXJlbmNlcyB0byBzb21ldGhpbmcgbGlrZSBgX19tZW1jZzFfc3dhcG91dGAgb3IgdGhlIGZpbGUgYG1lbWNvbnRyb2wtdjEuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBjbHVlIGFib3V0IHRoZSBjb25uZWN0aW9uIGFuZCBob3cgdGhlc2UgY29tcG9uZW50cyBwbGF5IHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sLXYxXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0yOD1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cbm1tL01ha2VmaWxlOjI5OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxubW0vTWFrZWZpbGUtMzAtS0NPVl9JTlNUUlVNRU5UX21tem9uZS5vIDo9IG5cbi0tXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX0xJVkVVUERBVEVfTUVNRkQpICYjNDM7PSBtZW1mZF9sdW8ub1xubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DR19WMSkgJiM0Mzs9IG1lbWNvbnRyb2wtdjEub1xubW0vTWFrZWZpbGUtMTA2LW9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyNzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHRleHQ6CgoqKkRpdmluZyBpbnRvIG1lbWNvbnRyb2wuaCBhbmQgX19tZW1jZzFfc3dhcG91dCoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IHdhbnRzIG1lIHRvIGFuYWx5emUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gbWVtb3J5IGNvbnRyb2wsIHNwZWNpZmljYWxseSBsb29raW5nIGFyb3VuZCB0aGUgYF9fbWVtY2cxX3N3YXBvdXRgIGZ1bmN0aW9uLiBSaWdodCwgdGhhdCBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBjZW50cmFsIHRvIGhvdyBtZW1vcnkgaXMgbWFuYWdlZCBhdCB0aGUgY29udHJvbCBncm91cCBsZXZlbCBhbmQgaG93IHN3YXBwaW5nIGhhcHBlbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCBoaWVyYXJjaHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoYXQgcGFydGljdWxhciBtYWNybyBkb2VzIGV4YWN0bHkuIEl0JiMzOTtzIGxpa2VseSBhIGNyaXRpY2FsIGNvbXBvbmVudCBmb3IgaW1wbGVtZW50aW5nIHN3YXAgbGltaXRzLCBldmljdGlvbiBwb2xpY2llcywgYW5kIGdlbmVyYWwgcmVzb3VyY2UgbWFuYWdlbWVudCBhdCB0aGUgbWVtY2cgbGV2ZWwuIFNvIEkgc2hvdWxkIHN0YXJ0IGJ5IHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQuIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAgd2lsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgaW50ZXJmYWNlcyByZWxhdGVkIHRvIG1lbW9yeSBjb250cm9sIGdyb3VwcyBhcmUgc2V0IHVwLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgbWVtY2dzIHRyYWNrIHBhZ2VzLCBob3cgc3dhcCBsaW1pdHMgYXJlIGVuZm9yY2VkLCBhbmQgaG93IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb3JlIHBhZ2UgY2FjaGUgYW5kIHN3YXAgc3Vic3lzdGVtcyB3b3Jrcy4gSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBiZSBsb29raW5nIGZvciBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcywgZ2xvYmFsIGZsYWdzLCBhbmQgcmVsYXRlZCBoZWxwZXIgZnVuY3Rpb25zLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01FTUNHX1YxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTg5PXN0cnVjdCBtZW1fY2dyb3VwIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0yNzUtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoyNzY6I2lmZGVmIENPTkZJR19NRU1DR19WMVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjc3LVx0LyogTGVnYWN5IGNvbnN1bWVyLW9yaWVudGVkIGNvdW50ZXJzICovXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzEwLVx0aW50IHN3YXBwaW5lc3M7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDozMTE6I2VuZGlmIC8qIENPTkZJR19NRU1DR19WMSAqL1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzEyLVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5MDg9c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MTctXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTE4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MTktYm9vbCBtZW1fY2dyb3VwX29vbV9zeW5jaHJvbml6ZShib29sIHdhaXQpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5MzI9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTkzNy1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5Mzg6I2Vsc2UgLyogQ09ORklHX01FTUNHX1YxICovXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTM5LXN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2luX21lbWNnX29vbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTk1Mz1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTU2LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk1NzojZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTU4LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk1OTojaWYgZGVmaW5lZChDT05GSUdfTUVNQ0dfVjEpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TV0FQKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwOTYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gUXVhbmRhcnkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGRlcGVuZGVuY2llcyBhbmQgYSBmZXcgdGhpbmdzIGFyZSBpbW1lZGlhdGVseSBqdW1waW5nIG91dC4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IGVuYWJsaW5nIHN3YXAgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgbGlua2VkIHRvIGBzd2FwX3N0YXRlLm9gIGFuZCBmdW5jdGlvbnMgbGlrZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgYW5kIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AsICpkZW1hbmRzKiB0aGF0IGBDT05GSUdfU1dBUGAgYmUgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIG5vLWJyYWluZXIuIEJ1dCB0aGVuLCBJJiMzOTttIG5vdGljaW5nIHRoaXMgaW50ZXJwbGF5IHdpdGggYENPTkZJR19NRU1DR19WMWAsIHdoaWNoIHJlcXVpcmVzIGBDT05GSUdfTUVNQ0dgLCBhbmQgc2VlbXMgdG8gYmUgdGllZCB0byBgX19tZW1jZzFfc3dhcG91dGAuCgpUaGlzIHNpZ25hbHMgdGhhdCB0aGVyZSYjMzk7cyBhIHBvc3NpYmxlIGludGVyYWN0aW9uIGJldHdlZW4gbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIGFuZCB0aGUgc3dhcHBpbmcgbWVjaGFuaXNtLCBzb21ldGhpbmcgdGhhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBmdWxseS4gVG8gY2xhcmlmeSB0aGUgcHJlY2lzZSByZWxhdGlvbnNoaXBzIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNvbmZpZ3VyYXRpb25zLCBJIG5lZWQgdG8gY29uc3VsdCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gTXkgaW50dWl0aW9uIGlzIHRvIHN0YXJ0IHdpdGggZWl0aGVyIGBpbml0L0tjb25maWdgIG9yIGBtbS9LY29uZmlnYCwgYXMgdGhvc2UgbG9jYXRpb25zIHVzdWFsbHkgaG91c2UgdGhlIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpbml0aWFsaXphdGlvbiBvcHRpb25zLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCBhbmQgc3dhcHBpbmcuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBleGFjdCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYE1FTUNHX1YxYCBhbmQgYFNXQVBgIHRvIGNsYXJpZnkgdGhlIHByZWNpc2UgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DR19WMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTEwMT1jb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvbmZpZ3VyYXRpb24gcHV6emxlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBpbml0L0tjb25maWdgLiBJdCYjMzk7cyB1c3VhbGx5IHRoZSBzdGFydGluZyBwb2ludCBmb3IgYSBsb3Qgb2YgY29yZSBzeXN0ZW0gb3B0aW9ucy4gQW5kIEkmIzM5O20gdGhpbmtpbmcsIGJhc2VkIG9uIHdoYXQgSSYjMzk7bSBkZWFsaW5nIHdpdGgsIGxpbmUgMTEwOCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgZGVlcCBkaXZlLiBJJiMzOTt2ZSBnb3QgYSBmZWVsaW5nIHNvbWV0aGluZyByZWxldmFudCB0byB0aGUgaXNzdWUgSSYjMzk7bSB3b3JraW5nIG9uIG1pZ2h0IGJlIGRlZmluZWQgb3IgcmVmZXJlbmNlZCBhcm91bmQgdGhlcmUuIFRpbWUgdG8gc2VlIHdoYXQgc2VjcmV0cyB0aGF0IHNlY3Rpb24gb2YgdGhlIGNvbmZpZyBmaWxlIGhvbGRzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEwMDpcdFxuMTEwMTpcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuMTEwMjpcdFx0Ym9vbFxuMTEwMzpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTEwNDpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTEwNTpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTEwNjpcdFx0ZGVmYXVsdCB5XG4xMTA3Olx0XG4xMTA4Olx0Y29uZmlnIE1FTUNHX1YxXG4xMTA5Olx0XHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjExMTA6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjExMTE6XHRcdGRlZmF1bHQgblxuMTExMjpcdFx0aGVscFxuMTExMzpcdFx0ICBMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyIHdoaWNoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnlcbjExMTQ6XHRcdCAgY2dyb3VwIHYyIGltcGxlbWVudGF0aW9uLiBUaGUgdjEgaXMgdGhlcmUgZm9yIGxlZ2FjeSBhcHBsaWNhdGlvbnNcbjExMTU6XHRcdCAgd2hpY2ggaGF2ZW4mIzM5O3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XG4xMTE2Olx0XHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xuMTExNzpcdFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbjExMTg6XHRcbjExMTk6XHRcdCAgUGxlYXNlIG5vdGUgdGhhdCBmZWF0dXJlIHNldCBvZiB0aGUgbGVnYWN5IG1lbW9yeSBjb250cm9sbGVyIGlzIGxpa2VseVxuMTEyMDpcdFx0ICBnb2luZyB0byBzaHJpbmsgZHVlIHRvIGRlcHJlY2F0aW9uIHByb2Nlc3MuIE5ldyBkZXBsb3ltZW50cyB3aXRoIHYxXG4xMTIxOlx0XHQgIGNvbnRyb2xsZXIgYXJlIGhpZ2hseSBkaXNjb3VyYWdlZC5cbjExMjI6XHRcbjExMjM6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTEyNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTEyMQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBTd2FwIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBuYWlsIGRvd24gd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBzd2FwIGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gTXkgaW5zdGluY3Qgc2F5cyB0byBzdGFydCBsb29raW5nIGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMg4oCTIHRoZXkmIzM5O3JlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgdGhpcyBraW5kIG9mIHRoaW5nLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGRyaWxsIGRvd24gdG8gZWl0aGVyIHRoZSBgaW5pdC9LY29uZmlnYCBkaXJlY3Rvcnkgb3IgdGhlIGBtbS9LY29uZmlnYCBkaXJlY3RvcnkuIEdpdmVuIHRoYXQgc3dhcCBpcyBmdW5kYW1lbnRhbCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3lzdGVtIGluaXRpYWxpemF0aW9uLCBib3RoIHNlZW0gbGlrZSBsb2dpY2FsIHBsYWNlcyB0byBmaW5kIHRoZSByZWxldmFudCBgQ09ORklHX1NXQVBgIG9wdGlvbiAob3IgcmVsYXRlZCBzZXR0aW5ncykuIEnigJlsbCBzdGFydCB3aXRoIHRob3NlIHR3byBsb2NhdGlvbnMgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuIEl0JiMzOTtzIHRoZSBtb3N0IGxpa2VseSBwYXRoIHRvIGxvY2F0aW5nIHRoZSBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMgSSBuZWVkIHRvIGluc3BlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxuLS1cbm1tL0tjb25maWctMTEtXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxubW0vS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDAzCgkJCQkJCQlvdXRwdXQ6IDE2MwoJCQkJCQkJdGhvdWdodHM6IDUyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUcmlhZ2UgRmluZGluZ3MgZm9yIFN3YXAgYW5kIE1lbWNnIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBgU1dBUGAsIGBNRU1DR2AsIGFuZCBgTUVNQ0dfVjFgLiBNeSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IGZyb20gdGhlIGluc3RydWN0aW9uczogYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gLCBgX19yZW1vdmVfbWFwcGluZ2AsIGFuZCBgX19tZW1jZzFfc3dhcG91dGAuCgpJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgZGlmZiB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJdCBsb29rcyBsaWtlIGBtbS9zd2FwLmhgIGRlZmluZXMgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLiBUaGVuLCBpbiBgbW0vc3dhcF9zdGF0ZS5jYCwgdGhlcmUmIzM5O3MgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYC4gQW5kIG92ZXIgaW4gYG1tL3Ztc2Nhbi5jYCwgd2Ugc2VlIGBfX3JlbW92ZV9tYXBwaW5nYC4KCk5vdywgYF9fcmVtb3ZlX21hcHBpbmdgIGlzIGEgY29tbW9uIGZ1bmN0aW9uLCB1c2VkIGR1cmluZyBwYWdlIHJlY2xhaW0uIEl0JiMzOTtzIG5vdCAqc3BlY2lmaWMqIHRvIHRoaXMgY2hhbmdlLiBIb3dldmVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbjogYF9fcmVtb3ZlX21hcHBpbmdgIGlzIHVzZWQgd2hlbiBldmljdGluZyBwYWdlcyBmcm9tIGFkZHJlc3Mgc3BhY2VzLCBpbmNsdWRpbmcgc3dhcGNhY2hlLiBUaGUgb3RoZXIgdHdvIGZ1bmN0aW9ucywgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gLCBhcmUgc3dhcCBjYWNoZSBmdW5jdGlvbnMuIFRoZSBgX19tZW1jZzFfc3dhcG91dGAgZnVuY3Rpb24gaXMgYSBjZ3JvdXAgdjEgc3dhcG91dCBjaGFyZ2UgdHJhbnNmZXIgZnVuY3Rpb24gd2hpY2ggaGFzIGhhZCBpdHMgY2FsbCBzaXRlIGFuZCBwcmVyZXF1aXNpdGUgb3JkZXJpbmcgbW92ZWQgaW50byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AuCgpCYWNrIHRvIHRoZSBpbnN0cnVjdGlvbnMgb24gRm9jdXNTeW1ib2xzOiAmIzM0O2Z1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMuJiMzNDsgVGhpcyByZWFmZmlybXMgbXkgc2VsZWN0aW9uOiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGBfX21lbWNnMV9zd2Fwb3V0YCBhbmQgSSYjMzk7bSBpbmNsdWRpbmcgYF9fcmVtb3ZlX21hcHBpbmdgIGJlY2F1c2UgaXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gdGhlIHByb2Nlc3MuCgpOb3cgZm9yIHRoZSBFbmFibGVDb25maWdzOiBgU1dBUGAsIGBNRU1DR2AsIGFuZCBgTUVNQ0dfVjFgLiBZZXAsIHRoYXQgbWF0Y2hlcyB0aGUgY29kZS4KCkZpbmFsbHksIGxldCYjMzk7cyBhc3Nlc3MgdGhlIHRyaWFnZSBwaGlsb3NvcGh5LiBSZWFjaGFiaWxpdHk/IFN0YW5kYXJkIFFFTVUgd2l0aCBzd2FwIGFuZCBtZW1jZyBlbmFibGVkLCB0aGlzIGlzIGVhc2lseSByZWFjaGFibGUgdGhyb3VnaCBtZW1vcnkgcHJlc3N1cmUsIHBhZ2UgcmVjbGFpbSwgc3dhcG91dCwgYW5kIHN3YXAgY2FjaGUuIFN1YnN5c3RlbTogZGVmaW5pdGVseSBtbSAobWVtb3J5IG1hbmFnZW1lbnQpLCBzcGVjaWZpY2FsbHkgc3dhcCBhbmQgbWVtY2cuIEZ1enppbmcgdmFsdWU/IFRoaXMgaXMgZGVmaW5pdGVseSBXb3J0aEZ1enppbmcgPSB0cnVlLgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGVzZSBmaW5kaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDssCiAgICAmIzM0O3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDssCiAgICAmIzM0O19fbWVtY2cxX3N3YXBvdXQmIzM0OywKICAgICYjMzQ7X19yZW1vdmVfbWFwcGluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gKG1tL3N3YXBfc3RhdGUuYywgbW0vdm1zY2FuLmMsIG1tL3N3YXAuaCksIG1vdmluZyB0aGUgX19tZW1jZzFfc3dhcG91dCgpIGNhbGwgaW50byBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgYW5kIHVwZGF0aW5nIGNhbGxlcnMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgc3dhcCBvcGVyYXRpb25zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0OywKICAgICYjMzQ7c3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0OywKICAgICYjMzQ7X19tZW1jZzFfc3dhcG91dCYjMzQ7LAogICAgJiMzNDtfX3JlbW92ZV9tYXBwaW5nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGRlbGV0aW9uIGFuZCBwYWdlIHJlY2xhaW0gcGF0aHMgaW4gY29yZSBtbSAobW0vc3dhcF9zdGF0ZS5jLCBtbS92bXNjYW4uYywgbW0vc3dhcC5oKSwgbW92aW5nIHRoZSBfX21lbWNnMV9zd2Fwb3V0KCkgY2FsbCBpbnRvIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oKSBhbmQgdXBkYXRpbmcgY2FsbGVycy4gVGhlc2UgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCBzd2FwIG9wZXJhdGlvbnMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW50ZXJuYWwgc3dhcCBjYWNoZSBhbmQgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIGxvZ2ljIChfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBzd2FwX2NhY2hlX2RlbF9mb2xpbywgYW5kIF9fcmVtb3ZlX21hcHBpbmcgaW4gdm1zY2FuLmMpIGJ5IG1vdmluZyB0aGUgY2FsbCB0byBfX21lbWNnMV9zd2Fwb3V0KCkgaW5zaWRlIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oKSB3aXRoIGFuIGV4cGxpY2l0IGJvb2xlYW4gcGFyYW1ldGVyICYjMzk7c3dhcG91dCYjMzk7LCBhbmQgYWRqdXN0aW5nIHRoZSBvcmRlcmluZyByZWxhdGl2ZSB0byBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKCkuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCByZWZhY3RvcmluZyAvIG9yZGVyaW5nIGFkanVzdG1lbnQgZm9yIGZvbGlvIHN0YXRpc3RpY3MgYW5kIG1lbWNnIHN3YXBvdXQgYWNjb3VudGluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBidWZmZXJzIHRvIHVzZXJzcGFjZSBvciBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgYW5kIGRvZXMgbm90IGNyZWF0ZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKGUuZy4gbG9ja2luZywgcGFnZSByZWZjb3VudGluZywgcmFjZSBjb25kaXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBvciBWTSBkZWJ1ZyBjaGVja3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NDM0Yjc3YjEwZTJkMGFmMWRmZDYxMDc2Yjg3NmI4NDYwODQ5NWU3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMDQ6MTc6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmgKaW5kZXggMGI1ZDUwNzczOWJjYi4uYjNiNTRjMjg5MjlhMSAxMDA2NDQKLS0tIGEvbW0vc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaApAQCAtMzE5LDcgJiM0MzszMTksOCBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTsKIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAotCQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpOwomIzQzOwkJCSAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LAomIzQzOwkJCSAgICBib29sIHN3YXBvdXQpOwogdm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCQkJCXN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7CiAKQEAgLTQ1Miw3ICYjNDM7NDUzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCi0JCXN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpCiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LAomIzQzOwkJYm9vbCBzd2Fwb3V0KQogewogfQogCmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggMzA1ODc3ZTFmNGQ3Yi4uNjI1YzE4NWExY2E0ZCAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtMzA2LDIxICYjNDM7MzA2LDI4IEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKICAqIEBmb2xpbzogVGhlIGZvbGlvLgogICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by4KICAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuCiYjNDM7ICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBmb2xpbyBpcyBiZWluZyByZWNsYWltZWQgYWZ0ZXIgc3dhcG91dC4KICAqCiAgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuCiAgKiBUaGlzIHdvbiYjMzk7dCBwdXQgdGhlIGZvbGlvJiMzOTtzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LgogICoKICAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZQogICogdXNpbmcgdGhlIGluZGV4IG9mIEBlbnRyeSwgYW5kIGxvY2sgdGhlIGNsdXN0ZXIgdGhhdCBob2xkcyB0aGUgZW50cmllcy4KJiM0MzsgKiBJZiBAc3dhcG91dCBpcyBzZXQsIHRoZSBmb2xpbyBzaG91bGQgYmUgaW4gcmVjbGFpbSBwYXRoIGFuZCBJUlFzCiYjNDM7ICogc2hvdWxkIGJlIGRpc2FibGVkLgogICovCiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbywKLQkJCSAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KQomIzQzOwkJCSAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpCiB7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIAotCV9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTsKIAlub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpOwogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpOwomIzQzOwomIzQzOwlpZiAoc3dhcG91dCkKJiM0MzsJCV9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTsKJiM0MzsKJiM0MzsJX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpOwogfQogCiAvKioKQEAgLTMzOSw3ICYjNDM7MzQ2LDcgQEAgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tJmd0O3N3YXA7CiAKIAljaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpOwotCV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCk7CiYjNDM7CV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpOwogCXN3YXBfY2x1c3Rlcl91bmxvY2soY2kpOwogCiAJZm9saW9fcmVmX3N1Yihmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMjQ1ZjY4Yzc1YjI4OS4uMjliY2VkNDNiMGNlNiAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTc1NSw4ICYjNDM7NzU1LDcgQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJCWlmIChyZWNsYWltZWQgJmFtcDsmYW1wOyAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKQogCQkJc2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTsKLQkJX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpOwotCQlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTsKJiM0MzsJCV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpOwogCQlzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7CiAJfSBlbHNlIHsKIAkJdm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMjMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMaW51eCBLZXJuZWwgUGF0Y2g6IE5lZWRzS01TQU4gRGV0ZXJtaW5hdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQuIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGFuYWx5emUgdGhpcywgc28gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBUaGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBzd2FwLXJlbGF0ZWQgZmlsZXM6IGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIGBtbS92bXNjYW4uY2AuIFRoYXQgbmFycm93cyB0aGUgZm9jdXMgcmlnaHQgYXdheS4KClRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB0aGUgYWRkaXRpb24gb2YgYSBgYm9vbCBzd2Fwb3V0YCBwYXJhbWV0ZXIgdG8gdGhlIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBmdW5jdGlvbiBpbiBgbW0vc3dhcC5oYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBjaGFuZ2UsIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBmbGFnLiBUaGVuLCBsb29raW5nIGF0IGBtbS9zd2FwX3N0YXRlLmNgLCBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2Agbm93ICp1c2VzKiB0aGF0IHBhcmFtZXRlci4gQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggbW92ZXMgdGhlIGNhbGwgdG8gYF9fbWVtY2cxX3N3YXBvdXRgICppbnNpZGUqIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgYnV0ICpjb25kaXRpb25hbGx5KiBiYXNlZCBvbiB0aGUgYHN3YXBvdXRgIGZsYWcuIEl0IHNlZW1zIHRoYXQgd2hldGhlciBgX19tZW1jZzFfc3dhcG91dGAgaGFwcGVucyBvciBub3QsIGRlcGVuZHMgb24gd2hldGhlciB0aGUgYHN3YXBvdXRgIHBhcmFtZXRlciBpcyB0cnVlIG9yIGZhbHNlLiBJdCBhcHBlYXJzIHRoYXQgaXQgaGFwcGVucyBhZnRlciBzb21lIHN0YXRpc3RpY3MgYXJlIHVwZGF0ZWQsIGBub2RlX3N0YXRfbW9kX2ZvbGlvYCBhbmQgYGxydXZlY19zdGF0X21vZF9mb2xpb2AuIEJlZm9yZSwgaXQgd2FzIGNhbGxlZCBvdXQgb2YgdGhhdCBmdW5jdGlvbiBlbnRpcmVseS4KCkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMgaW4gYG1tL3Ztc2Nhbi5jYCwgdGhlIHBhdGNoIG1vZGlmaWVzIGNhbGxzIHRvIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYC4gT25lIGNhbGwgbm93IHBhc3NlcyBgdHJ1ZWAgZm9yIGBzd2Fwb3V0YCwgYW5kIGFub3RoZXIgbm93IHBhc3NlcyBgZmFsc2VgLiBTbywgY2xlYXJseSwgdGhpcyBmbGFnIGNvbnRyb2xzIHNvbWUgc3BlY2lmaWMgYmVoYXZpb3IgcmVsYXRlZCB0byBzd2FwcGluZyBvdXQuCgpUbyByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LCBJIG5lZWQgdG8ga25vdyB3aGF0IGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgYF9fbWVtY2cxX3N3YXBvdXRgLCBhbmQgdGhvc2Ugc3RhdCBtb2RpZmljYXRpb24gZnVuY3Rpb25zICpkbyouIEkgd2lsbCB1c2UgbXkgdG9vbHMgKGdyZXBwZXIsIHJlYWQtZmlsZSkgdG8gZmlndXJlIG91dCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgZmxhZy4gVGhhdCB3aWxsIGJlIHRoZSBrZXkgdG8gZGV0ZXJtaW5pbmcgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyB0aGF0IEtNU0FOIHdvdWxkIG5lZWQgdG8gZmxhZy4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgYSBLTVNBTiBjaGVjayBtaWdodCBiZSBuZWVkZWQgaWYgdGhlcmUgaXMgYSBwb3RlbnRpYWwgdG8gcmVhZCBvciB3cml0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciB0byB3cml0ZSBtZW1vcnkgdG8gYSBsb2NhdGlvbiB0aGF0IG1heSB0cmlnZ2VyIGEgcmFjZSBjb25kaXRpb24sIG9yIGEgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGlzIGJlaW5nIGNvbnRyb2xsZWQgdG8gbWFrZSB0aGUgY2FsbC4gT25jZSBJIHNlZSAqdGhhdCosIEkgY2FuIGRldGVybWluZSBpZiBgTmVlZHNLTVNBTmAgaXMgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21lbWNnMV9zd2Fwb3V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5NTM9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2MC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjE6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2Mi12b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2NS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjY6c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjctXHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NTMzPXZvaWQgZGVmZXJyZWRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBwYXJ0aWFsbHlfbWFwcGVkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU1MS1cdCAqIEV4Y2x1ZGUgc3dhcGNhY2hlOiBvcmlnaW5hbGx5IHRvIGF2b2lkIGEgY29ycnVwdCBkZWZlcnJlZCBzcGxpdFxubW0vaHVnZV9tZW1vcnkuYzo0NTUyOlx0ICogcXVldWUuIE5vd2FkYXlzIHRoYXQgaXMgZnVsbHkgcHJldmVudGVkIGJ5IF9fbWVtY2cxX3N3YXBvdXQoKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDU1My1cdCAqIGJ1dCBpZiBwYWdlIHJlY2xhaW0gaXMgYWxyZWFkeSBoYW5kbGluZyB0aGUgc2FtZSBmb2xpbywgaXQgaXNcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjQ3PXZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yNTgtLyoqXG5tbS9tZW1jb250cm9sLXYxLmM6MjU5OiAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXG5tbS9tZW1jb250cm9sLXYxLmMtMjYwLSAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtc3cgY2hhcmdlIHRvIHRyYW5zZmVyXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTI2OC0gKi9cbm1tL21lbWNvbnRyb2wtdjEuYzoyNjk6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG5tbS9tZW1jb250cm9sLXYxLmMtMjcwLXtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MzE5PXZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMjctXHRpZiAoc3dhcG91dClcbm1tL3N3YXBfc3RhdGUuYzozMjg6XHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbm1tL3N3YXBfc3RhdGUuYy0zMjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IGluIExpbnV4KioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYSBtZW1vcnktcmVsYXRlZCBpc3N1ZSwgYW5kIEkmIzM5O20gdGhpbmtpbmcgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyBhcm91bmQgdGhlIHN3YXAgYW5kIHNjYW5uaW5nIG1lY2hhbmlzbXMuIEkgbmVlZCB0byBnZXQgbXkgaGFuZHMgZGlydHksIHNvIGxldCYjMzk7cyBqdW1wIGludG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbW0vc3dhcF9zdGF0ZS5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHZpZXcgb2YgaG93IHN3YXBwaW5nIGlzIG1hbmFnZWQgYXQgdGhlIGNvcmUgbGV2ZWwuIFRoZW4sIHNpbmNlIHRoZSBzd2FwIHByb2Nlc3MgaXMgdHJpZ2dlcmVkIGJ5IHNvbWUgc29ydCBvZiBsb3cgbWVtb3J5IGlzc3VlLCBgbW0vdm1zY2FuLmNgIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwuIEkgbmVlZCB0byBleGFtaW5lIHRoZSB2bSBzY2FubmluZyBsb2dpYyB0byBzZWUgd2hlbiwgd2h5LCBhbmQgaG93IHRoZSBrZXJuZWwgZGVjaWRlcyBpdCYjMzk7cyB0aW1lIHRvIG9mZmxvYWQgbWVtb3J5IHRvIHN3YXAuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBhcmVhcyB3aGVyZSB0aGVzZSB0d28gZmlsZXMgaW50ZXJhY3QuIEkmIzM5O2xsIGZvY3VzIG9uIHRob3NlIHBhcnRzLCBiZWNhdXNlIHRoZXkgc2hvdWxkIHJldmVhbCBob3cgd2UgdHJpZ2dlciwgbWFuYWdlIGFuZCB1dGlsaXplIHN3YXAgc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc3dhcF9zdGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDA6XHRcdH1cbiAzMDE6XHR9XG4gMzAyOlx0XG4gMzAzOlx0LyoqXG4gMzA0Olx0ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxuIDMwNTpcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4gMzA2Olx0ICogQGZvbGlvOiBUaGUgZm9saW8uXG4gMzA3Olx0ICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cbiAzMDg6XHQgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxuIDMwOTpcdCAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgZm9saW8gaXMgYmVpbmcgcmVjbGFpbWVkIGFmdGVyIHN3YXBvdXQuXG4gMzEwOlx0ICpcbiAzMTE6XHQgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXG4gMzEyOlx0ICogVGhpcyB3b24mIzM5O3QgcHV0IHRoZSBmb2xpbyYjMzk7cyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cbiAzMTM6XHQgKlxuIDMxNDpcdCAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxuIDMxNTpcdCAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXG4gMzE2Olx0ICogSWYgQHN3YXBvdXQgaXMgc2V0LCB0aGUgZm9saW8gc2hvdWxkIGJlIGluIHJlY2xhaW0gcGF0aCBhbmQgSVJRc1xuIDMxNzpcdCAqIHNob3VsZCBiZSBkaXNhYmxlZC5cbiAzMTg6XHQgKi9cbiAzMTk6XHR2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiAzMjA6XHRcdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuIDMyMTpcdHtcbiAzMjI6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gMzIzOlx0XG4gMzI0Olx0XHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpO1xuIDMyNTpcdFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XG4gMzI2Olx0XG4gMzI3Olx0XHRpZiAoc3dhcG91dClcbiAzMjg6XHRcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuIDMyOTpcdFxuIDMzMDpcdFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIDMzMTpcdH1cbiAzMzI6XHRcbiAzMzM6XHQvKipcbiAzMzQ6XHQgKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxuIDMzNTpcdCAqIEBmb2xpbzogVGhlIGZvbGlvLlxuIDMzNjpcdCAqXG4gMzM3Olx0ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXG4gMzM4Olx0ICogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBlaXRoZXIgY2xlYW4gb3IgaGFzIGEgc3dhcCBjb3VudFxuIDMzOTpcdCAqIGVxdWFsIHRvIHplcm8sIG9yIGl0IG1heSBjYXVzZSBkYXRhIGxvc3MuXG4gMzQwOlx0ICpcbiAzNDE6XHQgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGUuXG4gMzQyOlx0ICovXG4gMzQzOlx0dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIDM0NDpcdHtcbiAzNDU6XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG4gMzQ2Olx0XHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gMzQ3Olx0XG4gMzQ4Olx0XHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xuIDM0OTpcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XG4gMzUwOlx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiAzNTE6XHRcbiAzNTI6XHRcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gMzUzOlx0fVxuIDM1NDpcdFxuIDM1NTpcdC8qKlxuIDM1NjpcdCAqIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvIC0gUmVwbGFjZSBhIGZvbGlvIGluIHRoZSBzd2FwIGNhY2hlLlxuIDM1NzpcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4gMzU4Olx0ICogQG9sZDogVGhlIG9sZCBmb2xpbyB0byBiZSByZXBsYWNlZC5cbiAzNTk6XHQgKiBAbmV3OiBUaGUgbmV3IGZvbGlvLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTM3CgkJCQkJCQlvdXRwdXQ6IDIyNgoJCQkJCQkJdGhvdWdodHM6IDQ2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN3YXAgQ2FjaGUgRGVsZXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBjb2RlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHNodWZmbGluZyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpbiB0aGUgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGZ1bmN0aW9uLiBQcmV2aW91c2x5LCBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpb2Agd2FzIGNhbGxlZCBiZWZvcmUgdGhlIHN0YXRzIG1vZGlmaWNhdGlvbnMgKGBub2RlX3N0YXRfbW9kX2ZvbGlvYCwgYGxydXZlY19zdGF0X21vZF9mb2xpb2ApLCBhbmQgaW4gYF9fcmVtb3ZlX21hcHBpbmdgLCBgX19tZW1jZzFfc3dhcG91dGAgaGFwcGVuZWQgYmVmb3JlIGNhbGxpbmcgdGhlIHN3YXAgY2FjaGUgZGVsZXRpb24gZnVuY3Rpb24uIE5vdywgYF9fbWVtY2cxX3N3YXBvdXRgIGhhcyBiZWVuIG1vdmVkICppbnRvKiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGFuZCBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpb2AgaXMgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHN0YXRzIHVwZGF0ZXMgYW5kIHRoZSBgX19tZW1jZzFfc3dhcG91dGAgY2FsbC4KCk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFNvLCBJIG5lZWQgdG8gdGhvcm91Z2hseSB2ZXQgdGhpcyBjaGFuZ2UuIExldCYjMzk7cyBydW4gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2U/KiogTm9wZS4gVGhpcyBpc24mIzM5O3QgdG91Y2hpbmcgYW55IGRhdGEgdGhhdCYjMzk7cyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSB0aHJvdWdoIGFueSBvZiB0aGUgdXN1YWwgY2hhbm5lbHMgbGlrZSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgaW9jdGxzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBObywgdGhlIGxvZ2ljIGhpbmdlcyBvbiBhIGJvb2xlYW4sIGBzd2Fwb3V0YCwgd2hpY2ggaXMgcGFzc2VkIGZyb20gdGhlIGNhbGxlci4gSXQmIzM5O3MgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCBpbiBgX19yZW1vdmVfbWFwcGluZ2Agb3IgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYC4KMy4gICoqTmV3IGRhdGEgc3RydWN0dXJlcyBvciBhbGxvY2F0aW9ucyB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBOby4gVGhpcyByZWZhY3RvciBpc24mIzM5O3QgaW50cm9kdWNpbmcgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgc28gd2UmIzM5O3JlIHNhZmUgdGhlcmUuCjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/KiogTm90IGhlcmUuIE5vIGNoYW5nZXMgdGhhdCBJIGNhbiBzZWUgdGhhdCB3b3VsZCBhbGxvdyB1cyB0byByZWFkIGJleW9uZCB0aGUgYm91bmRhcmllcyBvZiBleGlzdGluZyBidWZmZXJzLgoKVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGFuIGludGVybmFsIHJlZmFjdG9yIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBXZSYjMzk7cmUgcmVvcmRlcmluZyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBwcm9jZXNzIHdpdGggbWVtY2cgYWNjb3VudGluZywgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBhY2N1cmF0ZSBtZW1vcnkgdXNhZ2UgdHJhY2tpbmcuIFRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgcG90ZW50aWFsIGJ1Z3MgYXJlIHRoaW5ncyBsaWtlIHJhY2UgY29uZGl0aW9ucywgcmVmZXJlbmNlIGNvdW50aW5nIGVycm9ycywgb3IgaXNzdWVzIHdpdGggbG9ja2luZyBvciB1c2UtYWZ0ZXItZnJlZSwgYWxsIG9mIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IG91ciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAuIEFzIGZhciBhcyBJIGNhbiBzZWUsIHdlJiMzOTtyZSBub3QgcmVhZGluZywgY3JlYXRpbmcsIG9yIGV4cG9zaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLgoKVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IEtNU0FOIGlzc3Vlcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYWxsIHRoZSBkZXRhaWxzIGFnYWluIHRvIGVuc3VyZSBteSByZWFzb25pbmcgaXMgY29tcGxldGVseSBzb3VuZCBhbmQgSSBjYW4gcHJvdmlkZSBhIGNvbXByZWhlbnNpdmUgZXhwbGFuYXRpb24gZm9yIG15IGNvbmNsdXNpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGludGVybmFsIHN3YXAgY2FjaGUgYW5kIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBsb2dpYyAoX19zd2FwX2NhY2hlX2RlbF9mb2xpbywgc3dhcF9jYWNoZV9kZWxfZm9saW8sIGFuZCBfX3JlbW92ZV9tYXBwaW5nIGluIHZtc2Nhbi5jKSBieSBtb3ZpbmcgdGhlIGNhbGwgdG8gX19tZW1jZzFfc3dhcG91dCgpIGluc2lkZSBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgd2l0aCBhbiBleHBsaWNpdCBib29sZWFuIHBhcmFtZXRlciAmIzM5O3N3YXBvdXQmIzM5OywgYW5kIGFkanVzdGluZyB0aGUgb3JkZXJpbmcgcmVsYXRpdmUgdG8gX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbygpLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYW4gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgcmVmYWN0b3JpbmcgLyBvcmRlcmluZyBhZGp1c3RtZW50IGZvciBmb2xpbyBzdGF0aXN0aWNzIGFuZCBtZW1jZyBzd2Fwb3V0IGFjY291bnRpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyB0byB1c2Vyc3BhY2Ugb3Igb3RoZXIga2VybmVsIHN1YnN5c3RlbXMsIGFuZCBkb2VzIG5vdCBjcmVhdGUgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQW55IHBvdGVudGlhbCBidWdzIChlLmcuIGxvY2tpbmcsIHBhZ2UgcmVmY291bnRpbmcsIHJhY2UgY29uZGl0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3IgVk0gZGVidWcgY2hlY2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW50ZXJuYWwgc3dhcCBjYWNoZSBhbmQgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIGxvZ2ljIChfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBzd2FwX2NhY2hlX2RlbF9mb2xpbywgYW5kIF9fcmVtb3ZlX21hcHBpbmcgaW4gdm1zY2FuLmMpIGJ5IG1vdmluZyB0aGUgY2FsbCB0byBfX21lbWNnMV9zd2Fwb3V0KCkgaW5zaWRlIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oKSB3aXRoIGFuIGV4cGxpY2l0IGJvb2xlYW4gcGFyYW1ldGVyICYjMzk7c3dhcG91dCYjMzk7LCBhbmQgYWRqdXN0aW5nIHRoZSBvcmRlcmluZyByZWxhdGl2ZSB0byBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKCkuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCByZWZhY3RvcmluZyAvIG9yZGVyaW5nIGFkanVzdG1lbnQgZm9yIGZvbGlvIHN0YXRpc3RpY3MgYW5kIG1lbWNnIHN3YXBvdXQgYWNjb3VudGluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBidWZmZXJzIHRvIHVzZXJzcGFjZSBvciBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgYW5kIGRvZXMgbm90IGNyZWF0ZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKGUuZy4gbG9ja2luZywgcGFnZSByZWZjb3VudGluZywgcmFjZSBjb25kaXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBvciBWTSBkZWJ1ZyBjaGVja3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE3OjU0LjA5Njc5OTAwM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNjY3NzM4NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc3dhcF9jYWNoZV9kZWxfZm9saW9cIixcbiAgICBcInN3YXBfY2FjaGVfZGVsX2ZvbGlvXCIsXG4gICAgXCJfX21lbWNnMV9zd2Fwb3V0XCIsXG4gICAgXCJfX3JlbW92ZV9tYXBwaW5nXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbnRlcm5hbCBzd2FwIGNhY2hlIGFuZCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgbG9naWMgKF9fc3dhcF9jYWNoZV9kZWxfZm9saW8sIHN3YXBfY2FjaGVfZGVsX2ZvbGlvLCBhbmQgX19yZW1vdmVfbWFwcGluZyBpbiB2bXNjYW4uYykgYnkgbW92aW5nIHRoZSBjYWxsIHRvIF9fbWVtY2cxX3N3YXBvdXQoKSBpbnNpZGUgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpIHdpdGggYW4gZXhwbGljaXQgYm9vbGVhbiBwYXJhbWV0ZXIgJ3N3YXBvdXQnLCBhbmQgYWRqdXN0aW5nIHRoZSBvcmRlcmluZyByZWxhdGl2ZSB0byBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKCkuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFuIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IHJlZmFjdG9yaW5nIC8gb3JkZXJpbmcgYWRqdXN0bWVudCBmb3IgZm9saW8gc3RhdGlzdGljcyBhbmQgbWVtY2cgc3dhcG91dCBhY2NvdW50aW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgdG8gdXNlcnNwYWNlIG9yIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBhbmQgZG9lcyBub3QgY3JlYXRlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgYnVncyAoZS5nLiBsb2NraW5nLCBwYWdlIHJlZmNvdW50aW5nLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIFZNIGRlYnVnIGNoZWNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gKG1tL3N3YXBfc3RhdGUuYywgbW0vdm1zY2FuLmMsIG1tL3N3YXAuaCksIG1vdmluZyB0aGUgX19tZW1jZzFfc3dhcG91dCgpIGNhbGwgaW50byBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgYW5kIHVwZGF0aW5nIGNhbGxlcnMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgc3dhcCBvcGVyYXRpb25zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MTc6NTQuMDk2ODA0NzEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTQyOTE5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NDM0Yjc3YjEwZTJkMGFmMWRmZDYxMDc2Yjg3NmI4NDYwODQ5NWU3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDA0OjE3OjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxcbmluZGV4IDBiNWQ1MDc3MzliY2IuLmIzYjU0YzI4OTI5YTEgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcC5oXFxuKysrIGIvbW0vc3dhcC5oXFxuQEAgLTMxOSw3ICszMTksOCBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcXG4gdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XFxuIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi1cXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyk7XFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxcbitcXHRcXHRcXHQgICAgYm9vbCBzd2Fwb3V0KTtcXG4gdm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpO1xcbiBcXG5AQCAtNDUyLDcgKzQ1Myw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KVxcbitcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxcbitcXHRcXHRib29sIHN3YXBvdXQpXFxuIHtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXFxuaW5kZXggMzA1ODc3ZTFmNGQ3Yi4uNjI1YzE4NWExY2E0ZCAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcXG5AQCAtMzA2LDIxICszMDYsMjggQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbiAgKiBAZm9saW86IFRoZSBmb2xpby5cXG4gICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cXG4gICogQHNoYWRvdzogc2hhZG93IHZhbHVlIHRvIGJlIGZpbGxlZCBpbiB0aGUgc3dhcCBjYWNoZS5cXG4rICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBmb2xpbyBpcyBiZWluZyByZWNsYWltZWQgYWZ0ZXIgc3dhcG91dC5cXG4gICpcXG4gICogUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgYW5kIGZpbGxzIGEgc2hhZG93IGluIHBsYWNlLlxcbiAgKiBUaGlzIHdvbid0IHB1dCB0aGUgZm9saW8ncyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cXG4gICpcXG4gICogQ29udGV4dDogQ2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQgYW5kIGluIHRoZSBzd2FwIGNhY2hlXFxuICAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXFxuKyAqIElmIEBzd2Fwb3V0IGlzIHNldCwgdGhlIGZvbGlvIHNob3VsZCBiZSBpbiByZWNsYWltIHBhdGggYW5kIElSUXNcXG4rICogc2hvdWxkIGJlIGRpc2FibGVkLlxcbiAgKi9cXG4gdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLVxcdFxcdFxcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KVxcbitcXHRcXHRcXHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIFxcbi1cXHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XFxuIFxcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIC1ucl9wYWdlcyk7XFxuIFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpO1xcbitcXG4rXFx0aWYgKHN3YXBvdXQpXFxuK1xcdFxcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcXG4rXFxuK1xcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTMzOSw3ICszNDYsNyBAQCB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuIFxcbiBcXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xcbi1cXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwpO1xcbitcXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTtcXG4gXFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuIFxcbiBcXHRmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggMjQ1ZjY4Yzc1YjI4OS4uMjliY2VkNDNiMGNlNiAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTc1NSw4ICs3NTUsNyBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcbiBcXHRcXHRpZiAocmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpXFxuIFxcdFxcdFxcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XFxuLVxcdFxcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcXG4tXFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdyk7XFxuK1xcdFxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpO1xcbiBcXHRcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHZvaWQgKCpmcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE3OjU0LjY5MTY4MzI0M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjkxMTY2NTU2ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19zd2FwX2NhY2hlX2RlbF9mb2xpb1wiLFxuICAgIFwic3dhcF9jYWNoZV9kZWxfZm9saW9cIixcbiAgICBcIl9fbWVtY2cxX3N3YXBvdXRcIixcbiAgICBcIl9fcmVtb3ZlX21hcHBpbmdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gKG1tL3N3YXBfc3RhdGUuYywgbW0vdm1zY2FuLmMsIG1tL3N3YXAuaCksIG1vdmluZyB0aGUgX19tZW1jZzFfc3dhcG91dCgpIGNhbGwgaW50byBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgYW5kIHVwZGF0aW5nIGNhbGxlcnMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgc3dhcCBvcGVyYXRpb25zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NDM0Yjc3YjEwZTJkMGFmMWRmZDYxMDc2Yjg3NmI4NDYwODQ5NWU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDQ6MTc6NTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDBiNWQ1MDc3MzliY2IuLmIzYjU0YzI4OTI5YTEgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTMxOSw3ICszMTksOCBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiB2b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLVx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KTtcbitcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcbitcdFx0XHQgICAgYm9vbCBzd2Fwb3V0KTtcbiB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0XHRzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpO1xuIFxuQEAgLTQ1Miw3ICs0NTMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdylcbitcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcbitcdFx0Ym9vbCBzd2Fwb3V0KVxuIHtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCAzMDU4NzdlMWY0ZDdiLi42MjVjMTg1YTFjYTRkIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0zMDYsMjEgKzMwNiwyOCBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gICogQGZvbGlvOiBUaGUgZm9saW8uXG4gICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cbiAgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxuKyAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgZm9saW8gaXMgYmVpbmcgcmVjbGFpbWVkIGFmdGVyIHN3YXBvdXQuXG4gICpcbiAgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXG4gICogVGhpcyB3b24ndCBwdXQgdGhlIGZvbGlvJ3MgcmVmY291bnQuIFRoZSBjYWxsZXIgaGFzIHRvIGRvIHRoYXQuXG4gICpcbiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGVcbiAgKiB1c2luZyB0aGUgaW5kZXggb2YgQGVudHJ5LCBhbmQgbG9jayB0aGUgY2x1c3RlciB0aGF0IGhvbGRzIHRoZSBlbnRyaWVzLlxuKyAqIElmIEBzd2Fwb3V0IGlzIHNldCwgdGhlIGZvbGlvIHNob3VsZCBiZSBpbiByZWNsYWltIHBhdGggYW5kIElSUXNcbisgKiBzaG91bGQgYmUgZGlzYWJsZWQuXG4gICovXG4gdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpXG4rXHRcdFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFxuLVx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpO1xuK1xuK1x0aWYgKHN3YXBvdXQpXG4rXHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbitcbitcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcbiB9XG4gXG4gLyoqXG5AQCAtMzM5LDcgKzM0Niw3IEBAIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XG4tXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwpO1xuK1x0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiBcbiBcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMjQ1ZjY4Yzc1YjI4OS4uMjliY2VkNDNiMGNlNiAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTc1NSw4ICs3NTUsNyBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gXHRcdGlmIChyZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpXG4gXHRcdFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcbi1cdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuLVx0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTtcbitcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XG4gXHRcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHZvaWQgKCpmcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxNzo1NC42OTE2ODQ2NjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjQ0NTU2MzYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGlzIGRpZmYuIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgYmVlbiBhbHRlcmVkLiBJdCBsb29rcyBsaWtlIHdlJ3ZlIGdvdCBtb2RpZmljYXRpb25zIGFjcm9zcyB0aGUgc3dhcCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0b3VjaGluZyBgbW0vc3dhcC5oYCwgYG1tL3N3YXBfc3RhdGUuY2AsIGFuZCBgbW0vdm1zY2FuLmNgLiBUaGlzIHN1Z2dlc3RzIGl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gc3dhcCBtYW5hZ2VtZW50LCBwb3NzaWJseSB3aXRoIGNoYW5nZXMgaW4gdGhlIGRhdGEgc3RydWN0dXJlcywgc3RhdGUgdHJhY2tpbmcsIG9yIHRoZSBtZW1vcnkgc2Nhbm5pbmcgcHJvY2Vzcy5cblxuTm93LCBpbnN0ZWFkIG9mIGp1c3Qgc3RhcmluZyBhdCB0aGUgZGlmZiBvdXRwdXQsIEknbGwgbmVlZCB0byBnYWluIHNvbWUgY29udGV4dCBhcm91bmQgdGhlc2UgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IgcG9zc2libHkgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZSBibG9ja3MuIEknbGwgbG9vayBhdCB0aGUgY29kZSBpbW1lZGlhdGVseSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBjaGFuZ2UgaW4gZWFjaCBvZiB0aGVzZSBmaWxlcy4gVGhhdCB3YXkgSSBjYW4gZnVsbHkgdW5kZXJzdGFuZCAqd2h5KiB0aGUgY2hhbmdlcyB3ZXJlIGltcGxlbWVudGVkLiBXaXRoIHRoZXNlIHRvb2xzLCBJIGV4cGVjdCB0byBpZGVudGlmeSB0aGUga2V5IGFzcGVjdHMgb2YgdGhpcyB1cGRhdGUgYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE4OjA3LjEzNzI1MjE4NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zd2FwX3N0YXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk1LFxuICBcIkxpbmVDb3VudFwiOiA2NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjk1OlxcdFxcdFxcdGNpX29mZiA9IGNpX3N0YXJ0O1xcbiAyOTY6XFx0XFx0XFx0ZG8ge1xcbiAyOTc6XFx0XFx0XFx0XFx0aWYgKCFfX3N3cF90Yl9nZXRfY291bnQoX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKSkpXFxuIDI5ODpcXHRcXHRcXHRcXHRcXHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9vZmYsIDEpO1xcbiAyOTk6XFx0XFx0XFx0fSB3aGlsZSAoKytjaV9vZmYgXFx1MDAzYyBjaV9lbmQpO1xcbiAzMDA6XFx0XFx0fVxcbiAzMDE6XFx0fVxcbiAzMDI6XFx0XFxuIDMwMzpcXHQvKipcXG4gMzA0OlxcdCAqIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gLSBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZS5cXG4gMzA1OlxcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXFxuIDMwNjpcXHQgKiBAZm9saW86IFRoZSBmb2xpby5cXG4gMzA3OlxcdCAqIEBlbnRyeTogVGhlIGZpcnN0IHN3YXAgZW50cnkgdGhhdCB0aGUgZm9saW8gY29ycmVzcG9uZHMgdG8uXFxuIDMwODpcXHQgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxcbiAzMDk6XFx0ICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBmb2xpbyBpcyBiZWluZyByZWNsYWltZWQgYWZ0ZXIgc3dhcG91dC5cXG4gMzEwOlxcdCAqXFxuIDMxMTpcXHQgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXFxuIDMxMjpcXHQgKiBUaGlzIHdvbid0IHB1dCB0aGUgZm9saW8ncyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cXG4gMzEzOlxcdCAqXFxuIDMxNDpcXHQgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGVcXG4gMzE1OlxcdCAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXFxuIDMxNjpcXHQgKiBJZiBAc3dhcG91dCBpcyBzZXQsIHRoZSBmb2xpbyBzaG91bGQgYmUgaW4gcmVjbGFpbSBwYXRoIGFuZCBJUlFzXFxuIDMxNzpcXHQgKiBzaG91bGQgYmUgZGlzYWJsZWQuXFxuIDMxODpcXHQgKi9cXG4gMzE5OlxcdHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiAzMjA6XFx0XFx0XFx0XFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcXG4gMzIxOlxcdHtcXG4gMzIyOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIDMyMzpcXHRcXG4gMzI0OlxcdFxcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIC1ucl9wYWdlcyk7XFxuIDMyNTpcXHRcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgLW5yX3BhZ2VzKTtcXG4gMzI2OlxcdFxcbiAzMjc6XFx0XFx0aWYgKHN3YXBvdXQpXFxuIDMyODpcXHRcXHRcXHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XFxuIDMyOTpcXHRcXG4gMzMwOlxcdFxcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcXG4gMzMxOlxcdH1cXG4gMzMyOlxcdFxcbiAzMzM6XFx0LyoqXFxuIDMzNDpcXHQgKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxcbiAzMzU6XFx0ICogQGZvbGlvOiBUaGUgZm9saW8uXFxuIDMzNjpcXHQgKlxcbiAzMzc6XFx0ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXFxuIDMzODpcXHQgKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XFxuIDMzOTpcXHQgKiBlcXVhbCB0byB6ZXJvLCBvciBpdCBtYXkgY2F1c2UgZGF0YSBsb3NzLlxcbiAzNDA6XFx0ICpcXG4gMzQxOlxcdCAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZS5cXG4gMzQyOlxcdCAqL1xcbiAzNDM6XFx0dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAzNDQ6XFx0e1xcbiAzNDU6XFx0XFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcXG4gMzQ2OlxcdFxcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XFxuIDM0OTpcXHRcXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTtcXG4gMzUwOlxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xcbiAzNTE6XFx0XFxuIDM1MjpcXHRcXHRmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbiAzNTM6XFx0fVxcbiAzNTQ6XFx0XFxuIDM1NTpcXHQvKipcXG4gMzU2OlxcdCAqIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvIC0gUmVwbGFjZSBhIGZvbGlvIGluIHRoZSBzd2FwIGNhY2hlLlxcbiAzNTc6XFx0ICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cXG4gMzU4OlxcdCAqIEBvbGQ6IFRoZSBvbGQgZm9saW8gdG8gYmUgcmVwbGFjZWQuXFxuIDM1OTpcXHQgKiBAbmV3OiBUaGUgbmV3IGZvbGlvLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxODowNy4xMzczOTc1MDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzAyMDU1ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgVmlydHVhbCBNZW1vcnkgU2Nhbm5lcioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBUaGUgcHJvYmxlbSdzIGhpbnRpbmcgYXQgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aGluIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmVyLCBzbyBsZXQncyBzdGFydCB0aGVyZS4gTXkgZ3V0IHRlbGxzIG1lIHRvIGV4YW1pbmUgYG1tL3Ztc2Nhbi5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSA3NTUuIFRoaXMgcmVnaW9uIGxpa2VseSBpbnZvbHZlcyBzb21ldGhpbmcgY3J1Y2lhbCDigJMgcGVyaGFwcyBtZW1vcnkgcmVjbGFtYXRpb24gbG9naWMsIHBhZ2Ugc2VsZWN0aW9uLCBvciBhIHJlbGF0ZWQgb3B0aW1pemF0aW9uLiBUaGUgcmVhbCBrZXksIGFzIGFsd2F5cywgd2lsbCBiZSB1bmRlcnN0YW5kaW5nIHRoZSAqY2FsbGVyIGNvbnRleHQqLiBLbm93aW5nICp3aG8qIGlzIGNhbGxpbmcgdGhhdCBmdW5jdGlvbiBhcm91bmQgbGluZSA3NTUgaXMgYWJzb2x1dGVseSBjcml0aWNhbC4gVGhhdCB3aWxsIGNsdWUgbWUgaW50byB0aGUgc3BlY2lmaWMgc2NlbmFyaW8gdHJpZ2dlcmluZyB0aGUgcG90ZW50aWFsIGlzc3VlIGFuZCBwcm92aWRlIHRoZSBpbmZvcm1hdGlvbiB0byBpZGVudGlmeSB0aGUgcm9vdCBjYXVzZSBxdWlja2x5LiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzI5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxODoxMC40Mzk0NTc1NzVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjcwMjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczNSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDczNTpcXHRcXHQgKiBbb29wcywgb3VyIHdyaXRlX3RvIGRhdGEgaXMgbG9zdF1cXG4gNzM2OlxcdFxcdCAqXFxuIDczNzpcXHRcXHQgKiBSZXZlcnNpbmcgdGhlIG9yZGVyIG9mIHRoZSB0ZXN0cyBlbnN1cmVzIHN1Y2ggYSBzaXR1YXRpb24gY2Fubm90XFxuIDczODpcXHRcXHQgKiBlc2NhcGUgdW5ub3RpY2VkLiBUaGUgc21wX3JtYiBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoZSBmb2xpby1cXHUwMDNlZmxhZ3NcXG4gNzM5OlxcdFxcdCAqIGxvYWQgaXMgbm90IHNhdGlzZmllZCBiZWZvcmUgdGhhdCBvZiBmb2xpby1cXHUwMDNlX3JlZmNvdW50LlxcbiA3NDA6XFx0XFx0ICpcXG4gNzQxOlxcdFxcdCAqIE5vdGUgdGhhdCBpZiB0aGUgZGlydHkgZmxhZyBpcyBhbHdheXMgc2V0IHZpYSBmb2xpb19tYXJrX2RpcnR5LFxcbiA3NDI6XFx0XFx0ICogYW5kIHRodXMgdW5kZXIgdGhlIGlfcGFnZXMgbG9jaywgdGhlbiB0aGlzIG9yZGVyaW5nIGlzIG5vdCByZXF1aXJlZC5cXG4gNzQzOlxcdFxcdCAqL1xcbiA3NDQ6XFx0XFx0cmVmY291bnQgPSAxICsgZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbiA3NDU6XFx0XFx0aWYgKCFmb2xpb19yZWZfZnJlZXplKGZvbGlvLCByZWZjb3VudCkpXFxuIDc0NjpcXHRcXHRcXHRnb3RvIGNhbm5vdF9mcmVlO1xcbiA3NDc6XFx0XFx0Lyogbm90ZTogYXRvbWljX2NtcHhjaGcgaW4gZm9saW9fcmVmX2ZyZWV6ZSBwcm92aWRlcyB0aGUgc21wX3JtYiAqL1xcbiA3NDg6XFx0XFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSkge1xcbiA3NDk6XFx0XFx0XFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCByZWZjb3VudCk7XFxuIDc1MDpcXHRcXHRcXHRnb3RvIGNhbm5vdF9mcmVlO1xcbiA3NTE6XFx0XFx0fVxcbiA3NTI6XFx0XFxuIDc1MzpcXHRcXHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XFxuIDc1NDpcXHRcXHRcXHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuIDc1NTpcXHRcXG4gNzU2OlxcdFxcdFxcdGlmIChyZWNsYWltZWQgXFx1MDAyNlxcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcXG4gNzU3OlxcdFxcdFxcdFxcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XFxuIDc1ODpcXHRcXHRcXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcXG4gNzU5OlxcdFxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcXG4gNzYwOlxcdFxcdH0gZWxzZSB7XFxuIDc2MTpcXHRcXHRcXHR2b2lkICgqZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICopO1xcbiA3NjI6XFx0XFxuIDc2MzpcXHRcXHRcXHRmcmVlX2ZvbGlvID0gbWFwcGluZy1cXHUwMDNlYV9vcHMtXFx1MDAzZWZyZWVfZm9saW87XFxuIDc2NDpcXHRcXHRcXHQvKlxcbiA3NjU6XFx0XFx0XFx0ICogUmVtZW1iZXIgYSBzaGFkb3cgZW50cnkgZm9yIHJlY2xhaW1lZCBmaWxlIGNhY2hlIGluXFxuIDc2NjpcXHRcXHRcXHQgKiBvcmRlciB0byBkZXRlY3QgcmVmYXVsdHMsIHRodXMgdGhyYXNoaW5nLCBsYXRlciBvbi5cXG4gNzY3OlxcdFxcdFxcdCAqXFxuIDc2ODpcXHRcXHRcXHQgKiBCdXQgZG9uJ3Qgc3RvcmUgc2hhZG93cyBpbiBhbiBhZGRyZXNzIHNwYWNlIHRoYXQgaXNcXG4gNzY5OlxcdFxcdFxcdCAqIGFscmVhZHkgZXhpdGluZy4gIFRoaXMgaXMgbm90IGp1c3QgYW4gb3B0aW1pemF0aW9uLFxcbiA3NzA6XFx0XFx0XFx0ICogaW5vZGUgcmVjbGFpbSBuZWVkcyB0byBlbXB0eSBvdXQgdGhlIHJhZGl4IHRyZWUgb3JcXG4gNzcxOlxcdFxcdFxcdCAqIHRoZSBub2RlcyBhcmUgbG9zdC4gIERvbid0IHBsYW50IHNoYWRvd3MgYmVoaW5kIGl0c1xcbiA3NzI6XFx0XFx0XFx0ICogYmFjay5cXG4gNzczOlxcdFxcdFxcdCAqXFxuIDc3NDpcXHRcXHRcXHQgKiBXZSBhbHNvIGRvbid0IHN0b3JlIHNoYWRvd3MgZm9yIERBWCBtYXBwaW5ncyBiZWNhdXNlIHRoZVxcbiA3NzU6XFx0XFx0XFx0ICogb25seSBwYWdlIGNhY2hlIGZvbGlvcyBmb3VuZCBpbiB0aGVzZSBhcmUgemVybyBwYWdlc1xcbiA3NzY6XFx0XFx0XFx0ICogY292ZXJpbmcgaG9sZXMsIGFuZCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gbWl4IERBWFxcbiA3Nzc6XFx0XFx0XFx0ICogZXhjZXB0aW9uYWwgZW50cmllcyBhbmQgc2hhZG93IGV4Y2VwdGlvbmFsIGVudHJpZXMgaW4gdGhlXFxuIDc3ODpcXHRcXHRcXHQgKiBzYW1lIGFkZHJlc3Nfc3BhY2UuXFxuIDc3OTpcXHRcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MTg6MTAuNDQyMTMxMjQ4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA2NTc0MzAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY2hhbmdlIGludm9sdmluZyBgX19tZW1jZzFfc3dhcG91dGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gYW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aHkgdGhlIG1vZGlmaWNhdGlvbiB3YXMgZGVlbWVkIG5lY2Vzc2FyeS4gXG5cblRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAsIG9mIGNvdXJzZSwgaXMgYSBxdWljayBncmVwLiBMZXQncyBzZWUgaG93IGFuZCB3aGVyZSBgX19tZW1jZzFfc3dhcG91dGAgaXMgdXNlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGUgc3Vycm91bmRpbmcgY29udGV4dCB3aWxsIHRlbGwgdGhlIHN0b3J5LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNhbGxzLCBkZWZpbml0aW9ucywgYW5kIGFueSByZWxhdGVkIGNvbW1lbnRzIHRoYXQgc2hlZCBsaWdodCBvbiBpdHMgZnVuY3Rpb24gYW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBjaGFuZ2UuIFRoaXMgc2hvdWxkIHF1aWNrbHkgb3JpZW50IG1lIGFuZCBndWlkZSBtZSB0b3dhcmQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJ3MgbWVtb3J5IG1hbmFnZW1lbnQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMTEsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE4OjEzLjUwNzg3NjI3NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA2OTQ5MzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtY2cxX3N3YXBvdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTk1Mz1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjAtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk2MTp2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2Mi12b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTY1LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjY6c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTY3LVxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ1MzM9dm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1NTEtXFx0ICogRXhjbHVkZSBzd2FwY2FjaGU6IG9yaWdpbmFsbHkgdG8gYXZvaWQgYSBjb3JydXB0IGRlZmVycmVkIHNwbGl0XFxubW0vaHVnZV9tZW1vcnkuYzo0NTUyOlxcdCAqIHF1ZXVlLiBOb3dhZGF5cyB0aGF0IGlzIGZ1bGx5IHByZXZlbnRlZCBieSBfX21lbWNnMV9zd2Fwb3V0KCk7XFxubW0vaHVnZV9tZW1vcnkuYy00NTUzLVxcdCAqIGJ1dCBpZiBwYWdlIHJlY2xhaW0gaXMgYWxyZWFkeSBoYW5kbGluZyB0aGUgc2FtZSBmb2xpbywgaXQgaXNcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0yNDc9dm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjU4LS8qKlxcbm1tL21lbWNvbnRyb2wtdjEuYzoyNTk6ICogX19tZW1jZzFfc3dhcG91dCAtIHRyYW5zZmVyIGEgbWVtc3cgY2hhcmdlIHRvIHN3YXBcXG5tbS9tZW1jb250cm9sLXYxLmMtMjYwLSAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtc3cgY2hhcmdlIHRvIHRyYW5zZmVyXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjY4LSAqL1xcbm1tL21lbWNvbnRyb2wtdjEuYzoyNjk6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxubW0vbWVtY29udHJvbC12MS5jLTI3MC17XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MzE5PXZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMyNy1cXHRpZiAoc3dhcG91dClcXG5tbS9zd2FwX3N0YXRlLmM6MzI4OlxcdFxcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcXG5tbS9zd2FwX3N0YXRlLmMtMzI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxODoxNi4zMTQ4MzExNTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDA1NjAyMzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBfX21lbWNnMV9zd2Fwb3V0YCoqXG5cbk9rYXksIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIG1lbW9yeSBjb250cm9sIHYxIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc3dhcC1vdXQgaXMgaGFuZGxlZCBhdCB0aGUgbWVtY2cgbGV2ZWwsIHNvIEknbSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBgX19tZW1jZzFfc3dhcG91dGAgZnVuY3Rpb24gd2l0aGluIGBtbS9tZW1jb250cm9sLXYxLmNgLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgdGhhdCBvcmNoZXN0cmF0ZXMgcGFnZSBzZWxlY3Rpb24gYW5kIGV2aWN0aW9uIHNwZWNpZmljIHRvIGEgbWVtY2cgY29udGV4dC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBpcyBpbiB1bmRlcnN0YW5kaW5nIHRoZSBjcml0ZXJpYSB1c2VkIGZvciBjaG9vc2luZyBwYWdlcywgYW55IGFjY291bnRpbmcgbnVhbmNlcyB3aXRoaW4gdGhlIG1lbWNnIGhpZXJhcmNoeSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzd2FwcGluZyBpbmZyYXN0cnVjdHVyZS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byB0aGUgYmFsYW5jZSBvZiBkaXJlY3QgYW5kIGluZGlyZWN0IHJlY2xhaW0sIGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgaXQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTIwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MTg6MTguMzIwNDM2NDI4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNDU0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLXYxLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjU1OlxcdH1cXG4gMjU2OlxcdFxcbiAyNTc6XFx0I2lmZGVmIENPTkZJR19TV0FQXFxuIDI1ODpcXHQvKipcXG4gMjU5OlxcdCAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXFxuIDI2MDpcXHQgKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbXN3IGNoYXJnZSB0byB0cmFuc2ZlclxcbiAyNjE6XFx0ICogQGNpOiB0aGUgbG9ja2VkIHN3YXAgY2x1c3RlciBob2xkaW5nIHRoZSBzd2FwIGVudHJpZXNcXG4gMjYyOlxcdCAqXFxuIDI2MzpcXHQgKiBUcmFuc2ZlciB0aGUgbWVtc3cgY2hhcmdlIG9mIEBmb2xpbyB0byB0aGUgc3dhcCBlbnRyeSBzdG9yZWQgaW5cXG4gMjY0OlxcdCAqIGZvbGlvLVxcdTAwM2Vzd2FwLlxcbiAyNjU6XFx0ICpcXG4gMjY2OlxcdCAqIENvbnRleHQ6IGZvbGlvIG11c3QgYmUgaXNvbGF0ZWQsIHVubWFwcGVkLCBsb2NrZWQgYW5kIGlzIGp1c3QgYWJvdXQgdG9cXG4gMjY3OlxcdCAqIGJlIGZyZWVkLCBhbmQgY2FsbGVyIG11c3QgZGlzYWJsZSBJUlFzIGFuZCBob2xkIHRoZSBzd2FwIGNsdXN0ZXIgbG9jay5cXG4gMjY4OlxcdCAqL1xcbiAyNjk6XFx0dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuIDI3MDpcXHR7XFxuIDI3MTpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpzd2FwX21lbWNnO1xcbiAyNzI6XFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiAyNzM6XFx0XFx0dW5zaWduZWQgaW50IG5yX2VudHJpZXM7XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XFxuIDI3NjpcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xcbiAyNzc6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xcbiAyNzg6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcXG4gMjc5OlxcdFxcbiAyODA6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gMjgxOlxcdFxcdFxcdHJldHVybjtcXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkpXFxuIDI4NDpcXHRcXHRcXHRyZXR1cm47XFxuIDI4NTpcXHRcXG4gMjg2OlxcdFxcdG9iamNnID0gZm9saW9fb2JqY2coZm9saW8pO1xcbiAyODc6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFvYmpjZywgZm9saW8pO1xcbiAyODg6XFx0XFx0aWYgKCFvYmpjZylcXG4gMjg5OlxcdFxcdFxcdHJldHVybjtcXG4gMjkwOlxcdFxcbiAyOTE6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAyOTI6XFx0XFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcXG4gMjkzOlxcdFxcdC8qXFxuIDI5NDpcXHRcXHQgKiBJbiBjYXNlIHRoZSBtZW1jZyBvd25pbmcgdGhlc2UgcGFnZXMgaGFzIGJlZW4gb2ZmbGluZWQgYW5kIGRvZXNuJ3RcXG4gMjk1OlxcdFxcdCAqIGhhdmUgYW4gSUQgYWxsb2NhdGVkIHRvIGl0IGFueW1vcmUsIGNoYXJnZSB0aGUgY2xvc2VzdCBvbmxpbmVcXG4gMjk2OlxcdFxcdCAqIGFuY2VzdG9yIGZvciB0aGUgc3dhcCBpbnN0ZWFkIGFuZCB0cmFuc2ZlciB0aGUgbWVtb3J5K3N3YXAgY2hhcmdlLlxcbiAyOTc6XFx0XFx0ICovXFxuIDI5ODpcXHRcXHRucl9lbnRyaWVzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbiAyOTk6XFx0XFx0c3dhcF9tZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9lbnRyaWVzKTtcXG4gMzAwOlxcdFxcdG1vZF9tZW1jZ19zdGF0ZShzd2FwX21lbWNnLCBNRU1DR19TV0FQLCBucl9lbnRyaWVzKTtcXG4gMzAxOlxcdFxcbiAzMDI6XFx0XFx0X19zd2FwX2Nncm91cF9zZXQoY2ksIHN3cF9jbHVzdGVyX29mZnNldChmb2xpby1cXHUwMDNlc3dhcCksIG5yX2VudHJpZXMsXFxuIDMwMzpcXHRcXHRcXHRcXHQgIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzd2FwX21lbWNnKSk7XFxuIDMwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MTg6MTguMzIwNzQ0NTE5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNjg4ODMxOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVjZW50IEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBjaGFuZ2UgY29uY2VybmluZyBgX19tZW1jZzFfc3dhcG91dGAgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gc3dhcCBjYWNoZSBkZWxldGlvbi4gVGhlIGtleSBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoZSBjYWxsIHRvIGBfX21lbWNnMV9zd2Fwb3V0YCBoYXMgYmVlbiBtb3ZlZCB3aXRoaW4gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLCBzcGVjaWZpY2FsbHkgcmlnaHQgYmVmb3JlIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYC4gVGhpcyBtZWFucyB0aGUgbWVtY2cgc3dhcG91dCBvcGVyYXRpb24gbm93IGhhcHBlbnMgKmJlZm9yZSogdGhlIHN3YXBjYWNoZSBzdGF0dXMgaXMgY2xlYXJlZCwgd2hpY2ggaXMgYW4gaW1wb3J0YW50IGNoYW5nZSBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgY29uc2lzdGVuY3kuXG5cbkkgc2VlIHRoYXQgdGhpcyBpbnZvbHZlcyBjb2RlIHdpdGhpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWFzOiBzcGVjaWZpY2FsbHkgYG1tL3N3YXBfc3RhdGUuY2AsIGBtbS92bXNjYW4uY2AsIGFuZCBwb3RlbnRpYWxseSB0b3VjaGVkIHRocm91Z2ggYG1tL3N3YXAuaGAuIFRoZXNlIGFyZSBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBpbiBhbnkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQg4oCTIHRoZXNlIGFyZSBmdW5kYW1lbnRhbCBzd2FwIGFuZCByZWNsYWltIG9wZXJhdGlvbnMuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIGNyaXRlcmlhIGZvciBgV29ydGhGdXp6aW5nYCwgdGhpcyBpcyBhIGNsZWFyIFwieWVzLlwiIFRoaXMgcGF0Y2ggdG91Y2hlcyBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGluY2x1ZGVzIGxvZ2ljIG1vZGlmaWNhdGlvbnMuIE1vcmVvdmVyLCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYCBjaGVjayBpcyBhIGRpcmVjdCBhbHRlcmF0aW9uIG9mIHJ1bnRpbWUgYXNzZXJ0aW9ucy4gVGhlcmVmb3JlLCBpdCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSB0aGUgXCJGb2N1c1N5bWJvbHNcIi4gV2UgbmVlZCB0byB0YXJnZXQgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgaW1wbGVtZW50IG9yIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBjb2RlIGFuZCBhcmUgbm90IHViaXF1aXRvdXMuIFRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBJJ20gaW50ZXJlc3RlZCBpbiBhcmU6XG5cbiogICBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgKG1tL3N3YXBfc3RhdGUuYykgLSAqVGhpcyBpcyBhIGNvcmUgY2hhbmdlIHBvaW50Ki5cbiogICBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIChtbS9zd2FwX3N0YXRlLmMpIC0gKlRoaXMgYWxzbyBjaGFuZ2VzLipcbiogICBgX19yZW1vdmVfbWFwcGluZ2AgKG1tL3Ztc2Nhbi5jKSAtICpUaGlzIGNhbGxzIHRoZSBtb2RpZmllZCBmdW5jdGlvbi4qXG4qICAgYF9fbWVtY2cxX3N3YXBvdXRgIChtbS9tZW1jb250cm9sLXYxLmMpIC0gKlRoaXMgaXMgY29uZGl0aW9uYWxseSBjYWxsZWQgZnJvbSB0aGUgY29yZSBjaGFuZ2UuKlxuXG5XZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSB1bmRlcnN0YW5kIGFsbCBjYWxsIHBhdGhzIHRvIHRoZXNlIGNvcmUgZnVuY3Rpb25zLCB0byBzZWUgdGhlIGVudGlyZSBzdXJmYWNlLiBXZSBuZWVkIHRvIGJlIGF3YXJlIG9mIG90aGVyIGNhbGxlcnMgb2YgdGhlIHN3YXAgY2FjaGUgZGVsZXRlIGZ1bmN0aW9ucyEgVGltZSB0byBncmVwLlxuXG5Gcm9tIGhlcmUsIEknbGwgZGV0ZXJtaW5lIGBFbmFibGVDb25maWdzYCBiYXNlZCBvbiB3aGljaCBjb25maWd1cmF0aW9ucyBtYXhpbWl6ZSB0aGUgY2hhbmNlIG9mIGV4ZXJjaXNpbmcgdGhlIGNvZGUgcGF0aHMgb2YgaW50ZXJlc3QuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCBtZW1jZyBjb25maWd1cmF0aW9ucywgc3dhcCBlbmFibGVkLCBldGMuIFRoZSBwcmVjaXNlIGNvbmZpZ3Mgd2lsbCBkZXBlbmQgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgY2hhbmdlIGFuZCB0aGUgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIwNywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE4OjIzLjM4OTYzMDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTQzMTgwMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zd2FwX2NhY2hlX2RlbF9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwLmg9MzE5PXZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbm1tL3N3YXAuaC0zMjAtXFx0XFx0XFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcXG5tbS9zd2FwLmg6MzIxOnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbm1tL3N3YXAuaC0zMjItXFx0XFx0XFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXFxuLS1cXG5tbS9zd2FwLmg9NDUxPXN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc3dhcC5oLTQ1NC1cXG5tbS9zd2FwLmg6NDU1OnN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcC5oLTQ1Ni1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTI1Nz1zdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzAzLS8qKlxcbm1tL3N3YXBfc3RhdGUuYzozMDQ6ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxcbm1tL3N3YXBfc3RhdGUuYy0zMDUtICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMTgtICovXFxubW0vc3dhcF9zdGF0ZS5jOjMxOTp2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9zd2FwX3N0YXRlLmMtMzIwLVxcdFxcdFxcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzM2LSAqXFxubW0vc3dhcF9zdGF0ZS5jOjMzNzogKiBTYW1lIGFzIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8sIGJ1dCBoYW5kbGVzIGxvY2sgYW5kIHJlZmNvdW50LiBUaGVcXG5tbS9zd2FwX3N0YXRlLmMtMzM4LSAqIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgZWl0aGVyIGNsZWFuIG9yIGhhcyBhIHN3YXAgY291bnRcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0zNDM9dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTM0OC1cXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xcbm1tL3N3YXBfc3RhdGUuYzozNDk6XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XFxubW0vc3dhcF9zdGF0ZS5jLTM1MC1cXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTU4OD1zdGF0aWMgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xNjE4LVxcdFxcdCAqIHNsb3RzIHdpbGwgYmUgZnJlZWQgd2hlbiBmb2xpbyBpcyByZW1vdmVkIGZyb20gc3dhcCBjYWNoZVxcbm1tL3N3YXBmaWxlLmM6MTYxOTpcXHRcXHQgKiAoX19zd2FwX2NhY2hlX2RlbF9mb2xpbykuXFxubW0vc3dhcGZpbGUuYy0xNjIwLVxcdFxcdCAqL1xcbi0tXFxubW0vdm1zY2FuLmM9NzAyPXN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1Ny1cXHRcXHRcXHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xcbm1tL3Ztc2Nhbi5jOjc1ODpcXHRcXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcXG5tbS92bXNjYW4uYy03NTktXFx0XFx0c3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxODoyNS42NDM5NTY3NDhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkxNjY1Mjg2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBDYWxsZXJzIG9mIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJJ3ZlIGFscmVhZHkgZXhhbWluZWQgc29tZSBhcmVhcywgYnV0IG5vdyBJJ20gdGhpbmtpbmcgSSBzaG91bGQgZGVmaW5pdGVseSBleHBhbmQgbXkgc2NvcGUgYW5kIGludmVzdGlnYXRlIHRoZSBjYWxsZXJzIG9mIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AuIEl0J3MgYSBrZXkgZnVuY3Rpb24gaW4gdGhlIHN3YXAgY2FjaGUsIGFuZCB1bmRlcnN0YW5kaW5nICp3aG8qIGlzIGNhbGxpbmcgaXQgaXMgY3JpdGljYWwgdG8gZ2V0dGluZyBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgaXNzdWVzLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgZnVuY3Rpb24gdG8gc2VlIHRoZSBkaWZmZXJlbnQgcGF0aHMgdGhhdCBsZWFkIHRvIGl0cyBleGVjdXRpb24uIFRoaXMgaXMgZ29pbmcgdG8gZ2l2ZSBtZSBhIG1vcmUgcm91bmRlZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSB3aG9sZSBzeXN0ZW0ncyBpbnRlcmFjdGlvbnMgd2l0aCBzd2FwcGluZy4gSSdtIGhvcGluZyB0byBjYXRjaCBhIGdsaW1wc2Ugb2YgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGN1cnJlbnQgaXNzdWUuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMDcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxODoyNy41NjA2MTQyMDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzAxNDkxNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9jYWNoZV9kZWxfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0xMTI1PXN0YXRpYyBpbnQgbWVfc3dhcGNhY2hlX2NsZWFuKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTExMjktXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxMTMwOlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTExMzEtXFxuLS1cXG5tbS9tZW1vcnkuYz00ODQ0PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTA3Ni1cXHRcXHRpZiAoIVdBUk5fT05fT05DRShmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkpXFxubW0vbWVtb3J5LmM6NTA3NzpcXHRcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxubW0vbWVtb3J5LmMtNTA3OC1cXHRcXHRnb3RvIG91dF9ub21hcDtcXG4tLVxcbm1tL3NobWVtLmM9MTgwOD1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zaG1lbS5jLTE5NDEtXFx0XFx0LypcXG5tbS9zaG1lbS5jOjE5NDI6XFx0XFx0ICogVGhlIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgYmVsb3cgY291bGQgYmUgbGVmdCBmb3JcXG5tbS9zaG1lbS5jLTE5NDMtXFx0XFx0ICogc2hyaW5rX2ZvbGlvX2xpc3QoKSdzIGZvbGlvX2ZyZWVfc3dhcCgpIHRvIGRpc3Bvc2Ugb2Y7XFxuLS1cXG5tbS9zaG1lbS5jLTE5NDctXFx0XFx0ICovXFxubW0vc2htZW0uYzoxOTQ4OlxcdFxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zaG1lbS5jLTE5NDktXFx0XFx0Z290byByZWRpcnR5O1xcbi0tXFxubW0vc2htZW0uYz0yMzUxPXN0YXRpYyB2b2lkIHNobWVtX3NldF9mb2xpb19zd2FwaW5fZXJyb3Ioc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmMtMjM2OC1cXHRmb2xpb19wdXRfc3dhcChmb2xpbywgTlVMTCk7XFxubW0vc2htZW0uYzoyMzY5OlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zaG1lbS5jLTIzNzAtXFx0LypcXG4tLVxcbm1tL3NobWVtLmM9MjQ1Nj1zdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy0yNTk4LVxcdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBOVUxMKTtcXG5tbS9zaG1lbS5jOjI1OTk6XFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xcbm1tL3NobWVtLmMtMjYwMC1cXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4tLVxcbm1tL3N3YXAuaD0zMTM9dm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcXG5tbS9zd2FwLmg6MzE0OnZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vc3dhcC5oLTMxNS1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3N3YXAuaD0zMTk9dm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcC5oLTMyMC1cXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xcbm1tL3N3YXAuaDozMjE6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcC5oLTMyMi1cXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcXG4tLVxcbm1tL3N3YXAuaD00NDY9c3RhdGljIGlubGluZSB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpXFxuLS1cXG5tbS9zd2FwLmgtNDUwLVxcbm1tL3N3YXAuaDo0NTE6c3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vc3dhcC5oLTQ1Mi17XFxuLS1cXG5tbS9zd2FwLmgtNDU0LVxcbm1tL3N3YXAuaDo0NTU6c3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtNDU2LVxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MjU3PXN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMDMtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjMwNDogKiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXFxubW0vc3dhcF9zdGF0ZS5jLTMwNS0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMxOC0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6MzE5OnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3N3YXBfc3RhdGUuYy0zMjAtXFx0XFx0XFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMzMtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjMzNDogKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxcbm1tL3N3YXBfc3RhdGUuYy0zMzUtICogQGZvbGlvOiBUaGUgZm9saW8uXFxubW0vc3dhcF9zdGF0ZS5jLTMzNi0gKlxcbm1tL3N3YXBfc3RhdGUuYzozMzc6ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXFxubW0vc3dhcF9zdGF0ZS5jLTMzOC0gKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzQyLSAqL1xcbm1tL3N3YXBfc3RhdGUuYzozNDM6dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3N3YXBfc3RhdGUuYy0zNDQte1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTM0OC1cXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xcbm1tL3N3YXBfc3RhdGUuYzozNDk6XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XFxubW0vc3dhcF9zdGF0ZS5jLTM1MC1cXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTk4PXN0YXRpYyBpbnQgX190cnlfdG9fcmVjbGFpbV9zd2FwKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjUxLVxcbm1tL3N3YXBmaWxlLmM6MjUyOlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zd2FwZmlsZS5jLTI1My1cXHRmb2xpb19zZXRfZGlydHkoZm9saW8pO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xNTg4PXN0YXRpYyB2b2lkIHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE2MTgtXFx0XFx0ICogc2xvdHMgd2lsbCBiZSBmcmVlZCB3aGVuIGZvbGlvIGlzIHJlbW92ZWQgZnJvbSBzd2FwIGNhY2hlXFxubW0vc3dhcGZpbGUuYzoxNjE5OlxcdFxcdCAqIChfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKS5cXG5tbS9zd2FwZmlsZS5jLTE2MjAtXFx0XFx0ICovXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE3NDI9aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTc4MC1cXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSkge1xcbm1tL3N3YXBmaWxlLmM6MTc4MTpcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxubW0vc3dhcGZpbGUuYy0xNzgyLVxcdFxcdGdvdG8gZmFpbGVkO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0yMTE0PWJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIxMjAtXFxubW0vc3dhcGZpbGUuYzoyMTIxOlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zd2FwZmlsZS5jLTIxMjItXFx0Zm9saW9fc2V0X2RpcnR5KGZvbGlvKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTcwMj1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy03NTctXFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG5tbS92bXNjYW4uYzo3NTg6XFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XFxubW0vdm1zY2FuLmMtNzU5LVxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcXG4tLVxcbm1tL3pzd2FwLmM9OTc0PXN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuLS1cXG5tbS96c3dhcC5jLTEwNDQtXFx0aWYgKHJldCkge1xcbm1tL3pzd2FwLmM6MTA0NTpcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxubW0venN3YXAuYy0xMDQ2LVxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE4OjI5Ljc5MDc2NzU0MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTEzMzUzOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktjb25maWcgYW5kIE1ha2VmaWxlIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYG1tL3N3YXBfc3RhdGUuY2AgaXMgYmVpbmcgY29tcGlsZWQuIFRoaXMgaXNuJ3QgaW1tZWRpYXRlbHkgb2J2aW91cywgc28gbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdGhhdCBjb250cm9sIGl0cyBpbmNsdXNpb24uIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIHRoZXNlIGZ1bmN0aW9uYWxpdGllcy4gU28sIHRoZSBxdWVzdGlvbiBpczogd2hlcmUgYXJlIHRoZXNlIGZ1bmN0aW9uYWxpdGllcyBkZWZpbmVkLCBhbmQgaG93IGFyZSB0aGV5IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQ/IFRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBJZiBLY29uZmlnIGlzIG5vdCB0aGUgc291cmNlLCB0aGVuIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcHJlcHJvY2Vzc29yIGZsYWdzIGluIHRoZSByZWxldmFudCBzb3VyY2UgY29kZS5cblxuRmFpbGluZyB0aGF0LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBjb250cm9sIHBvaW50IGZvciBidWlsZGluZyBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgbW9kdWxlcywgYW5kIGl0IHNob3VsZCBjb250YWluIHRoZSBydWxlcyBmb3IgY29tcGlsaW5nIGBtbS9zd2FwX3N0YXRlLmNgLiBJdCB3aWxsIHJldmVhbCB0aGUgb2JqZWN0IGZpbGUgZGVwZW5kZW5jaWVzLCBpbmNsdWRlIHBhdGhzLCBhbmQgYW55IGNvbXBpbGVyIGZsYWdzIGJlaW5nIHVzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgZGV0ZXJtaW5lcyBpdHMgY29tcGlsYXRpb24gaW50byB0aGUgZmluYWwga2VybmVsIGltYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ3OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE4OjMxLjkwNDEyNDM3MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwOTY5NTY4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwX3N0YXRlXFxcXC5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTc3PWVuZGlmXFxubW0vTWFrZWZpbGUtNzgtXFxubW0vTWFrZWZpbGU6Nzk6b2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxubW0vTWFrZWZpbGUtODAtb2JqLSQoQ09ORklHX1pTV0FQKVxcdCs9IHpzd2FwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MTg6MzQuNDEzODI0NDg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzcxMDkyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBTd2FwIENvbXBpbGF0aW9uKipcblxuT2theSwgc28gYENPTkZJR19TV0FQYCBjbGVhcmx5IHRha2VzIGNhcmUgb2YgY29tcGlsaW5nIGBzd2FwX3N0YXRlLm9gLiBUaGF0IG11Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgbm93IEknbSBjdXJpb3VzIGFib3V0IHRoZSBpbnRlcmFjdGlvbiB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3VwcywgcGFydGljdWxhcmx5IGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX01FTUNHX1YxYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHN3YXAgYW5kIG1lbWNnIGFyZSBpbnRlZ3JhdGVkLCBvciBpZiB0aGV5IGFyZS4gSSdtIHRoaW5raW5nIEkgc2hvdWxkIGxvb2sgZm9yIHRoZSBtZW1jZyBzd2FwLW91dCBmdW5jdGlvbi4gTGV0J3Mgc3RhcnQgYnkgc2VhcmNoaW5nIGluIGBtbS9NYWtlZmlsZWAgb3IgcGVyaGFwcyBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBsb29rIGZvciByZWZlcmVuY2VzIHRvIHNvbWV0aGluZyBsaWtlIGBfX21lbWNnMV9zd2Fwb3V0YCBvciB0aGUgZmlsZSBgbWVtY29udHJvbC12MS5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGNsdWUgYWJvdXQgdGhlIGNvbm5lY3Rpb24gYW5kIGhvdyB0aGVzZSBjb21wb25lbnRzIHBsYXkgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODQzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MTg6MzYuMjkwOTM2MjI3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE0MTkzMzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNvbnRyb2wtdjFcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Mjg9S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjk6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXFxubW0vTWFrZWZpbGUtMzAtS0NPVl9JTlNUUlVNRU5UX21tem9uZS5vIDo9IG5cXG4tLVxcbm1tL01ha2VmaWxlPTEwND1vYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgKz0gbWVtZmRfbHVvLm9cXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5tbS9NYWtlZmlsZS0xMDYtb2JqLSQoQ09ORklHX01FTUNHKSArPSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE4OjM4LjYwNTEzNDY4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTg4NzUxMzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBwcm92aWRlZCB0ZXh0OlxuXG4qKkRpdmluZyBpbnRvIG1lbWNvbnRyb2wuaCBhbmQgX19tZW1jZzFfc3dhcG91dCoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgd2FudHMgbWUgdG8gYW5hbHl6ZSBzb21ldGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXJvdW5kIHRoZSBgX19tZW1jZzFfc3dhcG91dGAgZnVuY3Rpb24uIFJpZ2h0LCB0aGF0IGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGNlbnRyYWwgdG8gaG93IG1lbW9yeSBpcyBtYW5hZ2VkIGF0IHRoZSBjb250cm9sIGdyb3VwIGxldmVsIGFuZCBob3cgc3dhcHBpbmcgaGFwcGVucyB3aXRoIHJlc3BlY3QgdG8gdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIGhpZXJhcmNoeS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgdGhhdCBwYXJ0aWN1bGFyIG1hY3JvIGRvZXMgZXhhY3RseS4gSXQncyBsaWtlbHkgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIGltcGxlbWVudGluZyBzd2FwIGxpbWl0cywgZXZpY3Rpb24gcG9saWNpZXMsIGFuZCBnZW5lcmFsIHJlc291cmNlIG1hbmFnZW1lbnQgYXQgdGhlIG1lbWNnIGxldmVsLiBTbyBJIHNob3VsZCBzdGFydCBieSB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0LiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGludGVyZmFjZXMgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCBncm91cHMgYXJlIHNldCB1cC4gSSdsbCBuZWVkIHRvIHNlZSBob3cgbWVtY2dzIHRyYWNrIHBhZ2VzLCBob3cgc3dhcCBsaW1pdHMgYXJlIGVuZm9yY2VkLCBhbmQgaG93IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb3JlIHBhZ2UgY2FjaGUgYW5kIHN3YXAgc3Vic3lzdGVtcyB3b3Jrcy4gSSdtIHByb2JhYmx5IGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBnbG9iYWwgZmxhZ3MsIGFuZCByZWxhdGVkIGhlbHBlciBmdW5jdGlvbnMuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI3OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE4OjQyLjU5Mzg4Nzg3MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NDkxNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NRU1DR19WMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODk9c3RydWN0IG1lbV9jZ3JvdXAge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjc1LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjI3NjojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjc3LVxcdC8qIExlZ2FjeSBjb25zdW1lci1vcmllbnRlZCBjb3VudGVycyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzEwLVxcdGludCBzd2FwcGluZXNzO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjMxMTojZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzEyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTkwOD1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTE3LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5MTg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MTktYm9vbCBtZW1fY2dyb3VwX29vbV9zeW5jaHJvbml6ZShib29sIHdhaXQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTkzMj1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MzctXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTkzODojZWxzZSAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTM5LXN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2luX21lbWNnX29vbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xOTUzPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2V4aXRfdXNlcl9mYXVsdCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk1Ni1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTU3OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTU4LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NTk6I2lmIGRlZmluZWQoQ09ORklHX01FTUNHX1YxKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TV0FQKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE4OjQyLjcwMjM4NDE3OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjUwNjE5NTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIFF1YW5kYXJ5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZGVwZW5kZW5jaWVzIGFuZCBhIGZldyB0aGluZ3MgYXJlIGltbWVkaWF0ZWx5IGp1bXBpbmcgb3V0LiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgZW5hYmxpbmcgc3dhcCBmdW5jdGlvbmFsaXR5LCB3aGljaCBpcyBsaW5rZWQgdG8gYHN3YXBfc3RhdGUub2AgYW5kIGZ1bmN0aW9ucyBsaWtlIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgKmRlbWFuZHMqIHRoYXQgYENPTkZJR19TV0FQYCBiZSBlbmFibGVkLiBUaGF0J3MgYSBuby1icmFpbmVyLiBCdXQgdGhlbiwgSSdtIG5vdGljaW5nIHRoaXMgaW50ZXJwbGF5IHdpdGggYENPTkZJR19NRU1DR19WMWAsIHdoaWNoIHJlcXVpcmVzIGBDT05GSUdfTUVNQ0dgLCBhbmQgc2VlbXMgdG8gYmUgdGllZCB0byBgX19tZW1jZzFfc3dhcG91dGAuXG5cblRoaXMgc2lnbmFscyB0aGF0IHRoZXJlJ3MgYSBwb3NzaWJsZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIG1lbW9yeSBjb250cm9sIGdyb3VwcyBhbmQgdGhlIHN3YXBwaW5nIG1lY2hhbmlzbSwgc29tZXRoaW5nIHRoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZnVsbHkuIFRvIGNsYXJpZnkgdGhlIHByZWNpc2UgcmVsYXRpb25zaGlwcyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjb25maWd1cmF0aW9ucywgSSBuZWVkIHRvIGNvbnN1bHQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIE15IGludHVpdGlvbiBpcyB0byBzdGFydCB3aXRoIGVpdGhlciBgaW5pdC9LY29uZmlnYCBvciBgbW0vS2NvbmZpZ2AsIGFzIHRob3NlIGxvY2F0aW9ucyB1c3VhbGx5IGhvdXNlIHRoZSBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaW5pdGlhbGl6YXRpb24gb3B0aW9ucywgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gbWVtb3J5IGNvbnRyb2wgYW5kIHN3YXBwaW5nLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGBNRU1DR19WMWAgYW5kIGBTV0FQYCB0byBjbGFyaWZ5IHRoZSBwcmVjaXNlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA5NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxODo0OC4zNTMwMDcyNDdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzU5MTIxNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHX1YxXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMTAxPWNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbi0tXFxuaW5pdC9LY29uZmlnLTExMDctXFxuaW5pdC9LY29uZmlnOjExMDg6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDktXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MTg6NTAuNTI4OTQ2NDY4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MjE0MTA1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGNvbmZpZ3VyYXRpb24gcHV6emxlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBpbml0L0tjb25maWdgLiBJdCdzIHVzdWFsbHkgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBhIGxvdCBvZiBjb3JlIHN5c3RlbSBvcHRpb25zLiBBbmQgSSdtIHRoaW5raW5nLCBiYXNlZCBvbiB3aGF0IEknbSBkZWFsaW5nIHdpdGgsIGxpbmUgMTEwOCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgZGVlcCBkaXZlLiBJJ3ZlIGdvdCBhIGZlZWxpbmcgc29tZXRoaW5nIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJ20gd29ya2luZyBvbiBtaWdodCBiZSBkZWZpbmVkIG9yIHJlZmVyZW5jZWQgYXJvdW5kIHRoZXJlLiBUaW1lIHRvIHNlZSB3aGF0IHNlY3JldHMgdGhhdCBzZWN0aW9uIG9mIHRoZSBjb25maWcgZmlsZSBob2xkcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1NjIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxODo1Mi4xNTAzNTk4MDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjczODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTAwOlxcdFxcbjExMDE6XFx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuMTEwMjpcXHRcXHRib29sXFxuMTEwMzpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTEwNDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTEwNTpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMTA2OlxcdFxcdGRlZmF1bHQgeVxcbjExMDc6XFx0XFxuMTEwODpcXHRjb25maWcgTUVNQ0dfVjFcXG4xMTA5OlxcdFxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTExMDpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTExMTpcXHRcXHRkZWZhdWx0IG5cXG4xMTEyOlxcdFxcdGhlbHBcXG4xMTEzOlxcdFxcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XFxuMTExNDpcXHRcXHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXFxuMTExNTpcXHRcXHQgIHdoaWNoIGhhdmVuJ3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XFxuMTExNjpcXHRcXHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xcbjExMTc6XFx0XFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cXG4xMTE4OlxcdFxcbjExMTk6XFx0XFx0ICBQbGVhc2Ugbm90ZSB0aGF0IGZlYXR1cmUgc2V0IG9mIHRoZSBsZWdhY3kgbWVtb3J5IGNvbnRyb2xsZXIgaXMgbGlrZWx5XFxuMTEyMDpcXHRcXHQgIGdvaW5nIHRvIHNocmluayBkdWUgdG8gZGVwcmVjYXRpb24gcHJvY2Vzcy4gTmV3IGRlcGxveW1lbnRzIHdpdGggdjFcXG4xMTIxOlxcdFxcdCAgY29udHJvbGxlciBhcmUgaGlnaGx5IGRpc2NvdXJhZ2VkLlxcbjExMjI6XFx0XFxuMTEyMzpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMTI0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxODo1Mi4xNTA2MzcxNjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg5MDU1NTY2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFN3YXAgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBuYWlsIGRvd24gd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBzd2FwIGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gTXkgaW5zdGluY3Qgc2F5cyB0byBzdGFydCBsb29raW5nIGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMg4oCTIHRoZXkncmUgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciB0aGlzIGtpbmQgb2YgdGhpbmcuIFNwZWNpZmljYWxseSwgSSdsbCBkcmlsbCBkb3duIHRvIGVpdGhlciB0aGUgYGluaXQvS2NvbmZpZ2AgZGlyZWN0b3J5IG9yIHRoZSBgbW0vS2NvbmZpZ2AgZGlyZWN0b3J5LiBHaXZlbiB0aGF0IHN3YXAgaXMgZnVuZGFtZW50YWwgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN5c3RlbSBpbml0aWFsaXphdGlvbiwgYm90aCBzZWVtIGxpa2UgbG9naWNhbCBwbGFjZXMgdG8gZmluZCB0aGUgcmVsZXZhbnQgYENPTkZJR19TV0FQYCBvcHRpb24gKG9yIHJlbGF0ZWQgc2V0dGluZ3MpLiBJ4oCZbGwgc3RhcnQgd2l0aCB0aG9zZSB0d28gbG9jYXRpb25zIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJdCdzIHRoZSBtb3N0IGxpa2VseSBwYXRoIHRvIGxvY2F0aW5nIHRoZSBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMgSSBuZWVkIHRvIGluc3BlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTIxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxODo1NS4wNDExOTY1NDdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MDU3Mzc4NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNXQVAkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXFxuLS1cXG5tbS9LY29uZmlnLTExLVxcbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXFxubW0vS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE4OjU3LjU0Njk0MTYzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxNDI4MTU2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJpYWdlIEZpbmRpbmdzIGZvciBTd2FwIGFuZCBNZW1jZyBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIGBTV0FQYCwgYE1FTUNHYCwgYW5kIGBNRU1DR19WMWAuIE15IGZpcnN0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHN5bWJvbHMuIEkndmUgZ290IGEgbGlzdCBmcm9tIHRoZSBpbnN0cnVjdGlvbnM6IGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgYF9fcmVtb3ZlX21hcHBpbmdgLCBhbmQgYF9fbWVtY2cxX3N3YXBvdXRgLlxuXG5JJ20gZGlnZ2luZyBpbnRvIHRoZSBkaWZmIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEl0IGxvb2tzIGxpa2UgYG1tL3N3YXAuaGAgZGVmaW5lcyBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AuIFRoZW4sIGluIGBtbS9zd2FwX3N0YXRlLmNgLCB0aGVyZSdzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgYW5kIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AuIEFuZCBvdmVyIGluIGBtbS92bXNjYW4uY2AsIHdlIHNlZSBgX19yZW1vdmVfbWFwcGluZ2AuXG5cbk5vdywgYF9fcmVtb3ZlX21hcHBpbmdgIGlzIGEgY29tbW9uIGZ1bmN0aW9uLCB1c2VkIGR1cmluZyBwYWdlIHJlY2xhaW0uIEl0J3Mgbm90ICpzcGVjaWZpYyogdG8gdGhpcyBjaGFuZ2UuIEhvd2V2ZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uOiBgX19yZW1vdmVfbWFwcGluZ2AgaXMgdXNlZCB3aGVuIGV2aWN0aW5nIHBhZ2VzIGZyb20gYWRkcmVzcyBzcGFjZXMsIGluY2x1ZGluZyBzd2FwY2FjaGUuIFRoZSBvdGhlciB0d28gZnVuY3Rpb25zLCBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgYW5kIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGFyZSBzd2FwIGNhY2hlIGZ1bmN0aW9ucy4gVGhlIGBfX21lbWNnMV9zd2Fwb3V0YCBmdW5jdGlvbiBpcyBhIGNncm91cCB2MSBzd2Fwb3V0IGNoYXJnZSB0cmFuc2ZlciBmdW5jdGlvbiB3aGljaCBoYXMgaGFkIGl0cyBjYWxsIHNpdGUgYW5kIHByZXJlcXVpc2l0ZSBvcmRlcmluZyBtb3ZlZCBpbnRvIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYC5cblxuQmFjayB0byB0aGUgaW5zdHJ1Y3Rpb25zIG9uIEZvY3VzU3ltYm9sczogXCJmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzLlwiIFRoaXMgcmVhZmZpcm1zIG15IHNlbGVjdGlvbjogYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gLCBgX19tZW1jZzFfc3dhcG91dGAgYW5kIEknbSBpbmNsdWRpbmcgYF9fcmVtb3ZlX21hcHBpbmdgIGJlY2F1c2UgaXQncyBhIGtleSBmdW5jdGlvbiBpbiB0aGUgcHJvY2Vzcy5cblxuTm93IGZvciB0aGUgRW5hYmxlQ29uZmlnczogYFNXQVBgLCBgTUVNQ0dgLCBhbmQgYE1FTUNHX1YxYC4gWWVwLCB0aGF0IG1hdGNoZXMgdGhlIGNvZGUuXG5cbkZpbmFsbHksIGxldCdzIGFzc2VzcyB0aGUgdHJpYWdlIHBoaWxvc29waHkuIFJlYWNoYWJpbGl0eT8gU3RhbmRhcmQgUUVNVSB3aXRoIHN3YXAgYW5kIG1lbWNnIGVuYWJsZWQsIHRoaXMgaXMgZWFzaWx5IHJlYWNoYWJsZSB0aHJvdWdoIG1lbW9yeSBwcmVzc3VyZSwgcGFnZSByZWNsYWltLCBzd2Fwb3V0LCBhbmQgc3dhcCBjYWNoZS4gU3Vic3lzdGVtOiBkZWZpbml0ZWx5IG1tIChtZW1vcnkgbWFuYWdlbWVudCksIHNwZWNpZmljYWxseSBzd2FwIGFuZCBtZW1jZy4gRnV6emluZyB2YWx1ZT8gVGhpcyBpcyBkZWZpbml0ZWx5IFdvcnRoRnV6emluZyA9IHRydWUuXG5cbkFscmlnaHQsIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGVzZSBmaW5kaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MDMsIk91dHB1dFRva2VucyI6MTYzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE5OjAzLjY4OTc2MDYzOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODU3NDIwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19zd2FwX2NhY2hlX2RlbF9mb2xpb1wiLFxuICAgIFwic3dhcF9jYWNoZV9kZWxfZm9saW9cIixcbiAgICBcIl9fbWVtY2cxX3N3YXBvdXRcIixcbiAgICBcIl9fcmVtb3ZlX21hcHBpbmdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gKG1tL3N3YXBfc3RhdGUuYywgbW0vdm1zY2FuLmMsIG1tL3N3YXAuaCksIG1vdmluZyB0aGUgX19tZW1jZzFfc3dhcG91dCgpIGNhbGwgaW50byBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgYW5kIHVwZGF0aW5nIGNhbGxlcnMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgc3dhcCBvcGVyYXRpb25zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvXCIsXG4gICAgXCJzd2FwX2NhY2hlX2RlbF9mb2xpb1wiLFxuICAgIFwiX19tZW1jZzFfc3dhcG91dFwiLFxuICAgIFwiX19yZW1vdmVfbWFwcGluZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGRlbGV0aW9uIGFuZCBwYWdlIHJlY2xhaW0gcGF0aHMgaW4gY29yZSBtbSAobW0vc3dhcF9zdGF0ZS5jLCBtbS92bXNjYW4uYywgbW0vc3dhcC5oKSwgbW92aW5nIHRoZSBfX21lbWNnMV9zd2Fwb3V0KCkgY2FsbCBpbnRvIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oKSBhbmQgdXBkYXRpbmcgY2FsbGVycy4gVGhlc2UgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCBzd2FwIG9wZXJhdGlvbnMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxOTowMy44MDgzNDMwMzRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzOTU2MTgyNTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MTk6MDMuODA4ODQ4OTU0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjM5NTU2NzIzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGludGVybmFsIHN3YXAgY2FjaGUgYW5kIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBsb2dpYyAoX19zd2FwX2NhY2hlX2RlbF9mb2xpbywgc3dhcF9jYWNoZV9kZWxfZm9saW8sIGFuZCBfX3JlbW92ZV9tYXBwaW5nIGluIHZtc2Nhbi5jKSBieSBtb3ZpbmcgdGhlIGNhbGwgdG8gX19tZW1jZzFfc3dhcG91dCgpIGluc2lkZSBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgd2l0aCBhbiBleHBsaWNpdCBib29sZWFuIHBhcmFtZXRlciAnc3dhcG91dCcsIGFuZCBhZGp1c3RpbmcgdGhlIG9yZGVyaW5nIHJlbGF0aXZlIHRvIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oKS5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYW4gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgcmVmYWN0b3JpbmcgLyBvcmRlcmluZyBhZGp1c3RtZW50IGZvciBmb2xpbyBzdGF0aXN0aWNzIGFuZCBtZW1jZyBzd2Fwb3V0IGFjY291bnRpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyB0byB1c2Vyc3BhY2Ugb3Igb3RoZXIga2VybmVsIHN1YnN5c3RlbXMsIGFuZCBkb2VzIG5vdCBjcmVhdGUgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQW55IHBvdGVudGlhbCBidWdzIChlLmcuIGxvY2tpbmcsIHBhZ2UgcmVmY291bnRpbmcsIHJhY2UgY29uZGl0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3IgVk0gZGVidWcgY2hlY2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ0MzRiNzdiMTBlMmQwYWYxZGZkNjEwNzZiODc2Yjg0NjA4NDk1ZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwNDoxNzo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxuaW5kZXggMGI1ZDUwNzczOWJjYi4uYjNiNTRjMjg5MjlhMSAxMDA2NDRcbi0tLSBhL21tL3N3YXAuaFxuKysrIGIvbW0vc3dhcC5oXG5AQCAtMzE5LDcgKzMxOSw4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpO1xuK1x0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuK1x0XHRcdCAgICBib29sIHN3YXBvdXQpO1xuIHZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdFx0XHRcdHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7XG4gXG5AQCAtNDUyLDcgKzQ1Myw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KVxuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuK1x0XHRib29sIHN3YXBvdXQpXG4ge1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDMwNTg3N2UxZjRkN2IuLjYyNWMxODVhMWNhNGQgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTMwNiwyMSArMzA2LDI4IEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKiBAZm9saW86IFRoZSBmb2xpby5cbiAgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLlxuICAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuXG4rICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBmb2xpbyBpcyBiZWluZyByZWNsYWltZWQgYWZ0ZXIgc3dhcG91dC5cbiAgKlxuICAqIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBmaWxscyBhIHNoYWRvdyBpbiBwbGFjZS5cbiAgKiBUaGlzIHdvbid0IHB1dCB0aGUgZm9saW8ncyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cbiAgKlxuICAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxuICAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXG4rICogSWYgQHN3YXBvdXQgaXMgc2V0LCB0aGUgZm9saW8gc2hvdWxkIGJlIGluIHJlY2xhaW0gcGF0aCBhbmQgSVJRc1xuKyAqIHNob3VsZCBiZSBkaXNhYmxlZC5cbiAgKi9cbiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdylcbitcdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG4tXHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XG4gXHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpO1xuIFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XG4rXG4rXHRpZiAoc3dhcG91dClcbitcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuK1xuK1x0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIH1cbiBcbiAvKipcbkBAIC0zMzksNyArMzQ2LDcgQEAgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIFxuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcbi1cdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCk7XG4rXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTtcbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFxuIFx0Zm9saW9fcmVmX3N1Yihmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAyNDVmNjhjNzViMjg5Li4yOWJjZWQ0M2IwY2U2IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNzU1LDggKzc1NSw3IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbiBcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuLVx0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4tXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xuK1x0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcbiBcdFx0c3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpO1xuIFx0fSBlbHNlIHtcbiBcdFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE5OjAzLjgwODg0OTg5NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDU4OTUzMzAyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExpbnV4IEtlcm5lbCBQYXRjaDogTmVlZHNLTVNBTiBEZXRlcm1pbmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQuIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGFuYWx5emUgdGhpcywgc28gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBUaGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBzd2FwLXJlbGF0ZWQgZmlsZXM6IGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIGBtbS92bXNjYW4uY2AuIFRoYXQgbmFycm93cyB0aGUgZm9jdXMgcmlnaHQgYXdheS5cblxuVGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoZSBhZGRpdGlvbiBvZiBhIGBib29sIHN3YXBvdXRgIHBhcmFtZXRlciB0byB0aGUgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGZ1bmN0aW9uIGluIGBtbS9zd2FwLmhgLiBUaGF0J3MgdGhlIGNvcmUgY2hhbmdlLCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgZmxhZy4gVGhlbiwgbG9va2luZyBhdCBgbW0vc3dhcF9zdGF0ZS5jYCwgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIG5vdyAqdXNlcyogdGhhdCBwYXJhbWV0ZXIuIENydWNpYWxseSwgdGhlIHBhdGNoIG1vdmVzIHRoZSBjYWxsIHRvIGBfX21lbWNnMV9zd2Fwb3V0YCAqaW5zaWRlKiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGJ1dCAqY29uZGl0aW9uYWxseSogYmFzZWQgb24gdGhlIGBzd2Fwb3V0YCBmbGFnLiBJdCBzZWVtcyB0aGF0IHdoZXRoZXIgYF9fbWVtY2cxX3N3YXBvdXRgIGhhcHBlbnMgb3Igbm90LCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIGBzd2Fwb3V0YCBwYXJhbWV0ZXIgaXMgdHJ1ZSBvciBmYWxzZS4gSXQgYXBwZWFycyB0aGF0IGl0IGhhcHBlbnMgYWZ0ZXIgc29tZSBzdGF0aXN0aWNzIGFyZSB1cGRhdGVkLCBgbm9kZV9zdGF0X21vZF9mb2xpb2AgYW5kIGBscnV2ZWNfc3RhdF9tb2RfZm9saW9gLiBCZWZvcmUsIGl0IHdhcyBjYWxsZWQgb3V0IG9mIHRoYXQgZnVuY3Rpb24gZW50aXJlbHkuXG5cbkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMgaW4gYG1tL3Ztc2Nhbi5jYCwgdGhlIHBhdGNoIG1vZGlmaWVzIGNhbGxzIHRvIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYC4gT25lIGNhbGwgbm93IHBhc3NlcyBgdHJ1ZWAgZm9yIGBzd2Fwb3V0YCwgYW5kIGFub3RoZXIgbm93IHBhc3NlcyBgZmFsc2VgLiBTbywgY2xlYXJseSwgdGhpcyBmbGFnIGNvbnRyb2xzIHNvbWUgc3BlY2lmaWMgYmVoYXZpb3IgcmVsYXRlZCB0byBzd2FwcGluZyBvdXQuXG5cblRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QsIEkgbmVlZCB0byBrbm93IHdoYXQgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLCBgX19tZW1jZzFfc3dhcG91dGAsIGFuZCB0aG9zZSBzdGF0IG1vZGlmaWNhdGlvbiBmdW5jdGlvbnMgKmRvKi4gSSB3aWxsIHVzZSBteSB0b29scyAoZ3JlcHBlciwgcmVhZC1maWxlKSB0byBmaWd1cmUgb3V0IHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhpcyBmbGFnLiBUaGF0IHdpbGwgYmUgdGhlIGtleSB0byBkZXRlcm1pbmluZyBpZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHRoYXQgS01TQU4gd291bGQgbmVlZCB0byBmbGFnLiBJdCdzIGxpa2VseSB0aGF0IGEgS01TQU4gY2hlY2sgbWlnaHQgYmUgbmVlZGVkIGlmIHRoZXJlIGlzIGEgcG90ZW50aWFsIHRvIHJlYWQgb3Igd3JpdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgdG8gd3JpdGUgbWVtb3J5IHRvIGEgbG9jYXRpb24gdGhhdCBtYXkgdHJpZ2dlciBhIHJhY2UgY29uZGl0aW9uLCBvciBhIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBiZWluZyBjb250cm9sbGVkIHRvIG1ha2UgdGhlIGNhbGwuIE9uY2UgSSBzZWUgKnRoYXQqLCBJIGNhbiBkZXRlcm1pbmUgaWYgYE5lZWRzS01TQU5gIGlzIG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEyMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE5OjE0LjM5ODM4NjE1OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMzM4NTI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21lbWNnMV9zd2Fwb3V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5NTM9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTYwLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjE6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjItdm9pZCBtZW1jZzFfc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2NS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTY2OnN0YXRpYyBpbmxpbmUgdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2Ny1cXHRcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NTMzPXZvaWQgZGVmZXJyZWRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBwYXJ0aWFsbHlfbWFwcGVkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTUxLVxcdCAqIEV4Y2x1ZGUgc3dhcGNhY2hlOiBvcmlnaW5hbGx5IHRvIGF2b2lkIGEgY29ycnVwdCBkZWZlcnJlZCBzcGxpdFxcbm1tL2h1Z2VfbWVtb3J5LmM6NDU1MjpcXHQgKiBxdWV1ZS4gTm93YWRheXMgdGhhdCBpcyBmdWxseSBwcmV2ZW50ZWQgYnkgX19tZW1jZzFfc3dhcG91dCgpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDU1My1cXHQgKiBidXQgaWYgcGFnZSByZWNsYWltIGlzIGFscmVhZHkgaGFuZGxpbmcgdGhlIHNhbWUgZm9saW8sIGl0IGlzXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MjQ3PXZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTI1OC0vKipcXG5tbS9tZW1jb250cm9sLXYxLmM6MjU5OiAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXFxubW0vbWVtY29udHJvbC12MS5jLTI2MC0gKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbXN3IGNoYXJnZSB0byB0cmFuc2Zlclxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTI2OC0gKi9cXG5tbS9tZW1jb250cm9sLXYxLmM6MjY5OnZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yNzAte1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTMxOT12b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMjctXFx0aWYgKHN3YXBvdXQpXFxubW0vc3dhcF9zdGF0ZS5jOjMyODpcXHRcXHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XFxubW0vc3dhcF9zdGF0ZS5jLTMyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MTk6MTYuNTExNzc2NTg4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzM3NTk3MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBpbiBMaW51eCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIG1lbW9yeS1yZWxhdGVkIGlzc3VlLCBhbmQgSSdtIHRoaW5raW5nIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgYXJvdW5kIHRoZSBzd2FwIGFuZCBzY2FubmluZyBtZWNoYW5pc21zLiBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LCBzbyBsZXQncyBqdW1wIGludG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBtbS9zd2FwX3N0YXRlLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdmlldyBvZiBob3cgc3dhcHBpbmcgaXMgbWFuYWdlZCBhdCB0aGUgY29yZSBsZXZlbC4gVGhlbiwgc2luY2UgdGhlIHN3YXAgcHJvY2VzcyBpcyB0cmlnZ2VyZWQgYnkgc29tZSBzb3J0IG9mIGxvdyBtZW1vcnkgaXNzdWUsIGBtbS92bXNjYW4uY2AgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbC4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIHZtIHNjYW5uaW5nIGxvZ2ljIHRvIHNlZSB3aGVuLCB3aHksIGFuZCBob3cgdGhlIGtlcm5lbCBkZWNpZGVzIGl0J3MgdGltZSB0byBvZmZsb2FkIG1lbW9yeSB0byBzd2FwLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBhcmVhcyB3aGVyZSB0aGVzZSB0d28gZmlsZXMgaW50ZXJhY3QuIEknbGwgZm9jdXMgb24gdGhvc2UgcGFydHMsIGJlY2F1c2UgdGhleSBzaG91bGQgcmV2ZWFsIGhvdyB3ZSB0cmlnZ2VyLCBtYW5hZ2UgYW5kIHV0aWxpemUgc3dhcCBzcGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY3OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE5OjE4LjU0NTUzOTAzMVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc3dhcF9zdGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRcXHR9XFxuIDMwMTpcXHR9XFxuIDMwMjpcXHRcXG4gMzAzOlxcdC8qKlxcbiAzMDQ6XFx0ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxcbiAzMDU6XFx0ICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cXG4gMzA2OlxcdCAqIEBmb2xpbzogVGhlIGZvbGlvLlxcbiAzMDc6XFx0ICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cXG4gMzA4OlxcdCAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuXFxuIDMwOTpcXHQgKiBAc3dhcG91dDogd2hldGhlciB0aGlzIGZvbGlvIGlzIGJlaW5nIHJlY2xhaW1lZCBhZnRlciBzd2Fwb3V0LlxcbiAzMTA6XFx0ICpcXG4gMzExOlxcdCAqIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBmaWxscyBhIHNoYWRvdyBpbiBwbGFjZS5cXG4gMzEyOlxcdCAqIFRoaXMgd29uJ3QgcHV0IHRoZSBmb2xpbydzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LlxcbiAzMTM6XFx0ICpcXG4gMzE0OlxcdCAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxcbiAzMTU6XFx0ICogdXNpbmcgdGhlIGluZGV4IG9mIEBlbnRyeSwgYW5kIGxvY2sgdGhlIGNsdXN0ZXIgdGhhdCBob2xkcyB0aGUgZW50cmllcy5cXG4gMzE2OlxcdCAqIElmIEBzd2Fwb3V0IGlzIHNldCwgdGhlIGZvbGlvIHNob3VsZCBiZSBpbiByZWNsYWltIHBhdGggYW5kIElSUXNcXG4gMzE3OlxcdCAqIHNob3VsZCBiZSBkaXNhYmxlZC5cXG4gMzE4OlxcdCAqL1xcbiAzMTk6XFx0dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIDMyMDpcXHRcXHRcXHRcXHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxcbiAzMjE6XFx0e1xcbiAzMjI6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gMzIzOlxcdFxcbiAzMjQ6XFx0XFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcXG4gMzI1OlxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpO1xcbiAzMjY6XFx0XFxuIDMyNzpcXHRcXHRpZiAoc3dhcG91dClcXG4gMzI4OlxcdFxcdFxcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcXG4gMzI5OlxcdFxcbiAzMzA6XFx0XFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xcbiAzMzE6XFx0fVxcbiAzMzI6XFx0XFxuIDMzMzpcXHQvKipcXG4gMzM0OlxcdCAqIHN3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXFxuIDMzNTpcXHQgKiBAZm9saW86IFRoZSBmb2xpby5cXG4gMzM2OlxcdCAqXFxuIDMzNzpcXHQgKiBTYW1lIGFzIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8sIGJ1dCBoYW5kbGVzIGxvY2sgYW5kIHJlZmNvdW50LiBUaGVcXG4gMzM4OlxcdCAqIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgZWl0aGVyIGNsZWFuIG9yIGhhcyBhIHN3YXAgY291bnRcXG4gMzM5OlxcdCAqIGVxdWFsIHRvIHplcm8sIG9yIGl0IG1heSBjYXVzZSBkYXRhIGxvc3MuXFxuIDM0MDpcXHQgKlxcbiAzNDE6XFx0ICogQ29udGV4dDogQ2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQgYW5kIGluIHRoZSBzd2FwIGNhY2hlLlxcbiAzNDI6XFx0ICovXFxuIDM0MzpcXHR2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIDM0NDpcXHR7XFxuIDM0NTpcXHRcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xcbiAzNDY6XFx0XFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cXHUwMDNlc3dhcDtcXG4gMzQ3OlxcdFxcbiAzNDg6XFx0XFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcXG4gMzQ5OlxcdFxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xcbiAzNTA6XFx0XFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuIDM1MzpcXHR9XFxuIDM1NDpcXHRcXG4gMzU1OlxcdC8qKlxcbiAzNTY6XFx0ICogX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8gLSBSZXBsYWNlIGEgZm9saW8gaW4gdGhlIHN3YXAgY2FjaGUuXFxuIDM1NzpcXHQgKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxcbiAzNTg6XFx0ICogQG9sZDogVGhlIG9sZCBmb2xpbyB0byBiZSByZXBsYWNlZC5cXG4gMzU5OlxcdCAqIEBuZXc6IFRoZSBuZXcgZm9saW8uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE5OjE4LjU0NTcyNTAyMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MjE4NzcyODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3dhcCBDYWNoZSBEZWxldGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBjb2RlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2Ugd2UncmUgc2h1ZmZsaW5nIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGluIHRoZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgZnVuY3Rpb24uIFByZXZpb3VzbHksIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCB3YXMgY2FsbGVkIGJlZm9yZSB0aGUgc3RhdHMgbW9kaWZpY2F0aW9ucyAoYG5vZGVfc3RhdF9tb2RfZm9saW9gLCBgbHJ1dmVjX3N0YXRfbW9kX2ZvbGlvYCksIGFuZCBpbiBgX19yZW1vdmVfbWFwcGluZ2AsIGBfX21lbWNnMV9zd2Fwb3V0YCBoYXBwZW5lZCBiZWZvcmUgY2FsbGluZyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBmdW5jdGlvbi4gTm93LCBgX19tZW1jZzFfc3dhcG91dGAgaGFzIGJlZW4gbW92ZWQgKmludG8qIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgYW5kIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCBpcyBleGVjdXRlZCBhZnRlciB0aGUgc3RhdHMgdXBkYXRlcyBhbmQgdGhlIGBfX21lbWNnMV9zd2Fwb3V0YCBjYWxsLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBTbywgSSBuZWVkIHRvIHRob3JvdWdobHkgdmV0IHRoaXMgY2hhbmdlLiBMZXQncyBydW4gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXJzcGFjZT8qKiBOb3BlLiBUaGlzIGlzbid0IHRvdWNoaW5nIGFueSBkYXRhIHRoYXQncyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSB0aHJvdWdoIGFueSBvZiB0aGUgdXN1YWwgY2hhbm5lbHMgbGlrZSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgaW9jdGxzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGE/KiogTm8sIHRoZSBsb2dpYyBoaW5nZXMgb24gYSBib29sZWFuLCBgc3dhcG91dGAsIHdoaWNoIGlzIHBhc3NlZCBmcm9tIHRoZSBjYWxsZXIuIEl0J3MgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCBpbiBgX19yZW1vdmVfbWFwcGluZ2Agb3IgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYC5cbjMuICAqKk5ldyBkYXRhIHN0cnVjdHVyZXMgb3IgYWxsb2NhdGlvbnMgd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm8uIFRoaXMgcmVmYWN0b3IgaXNuJ3QgaW50cm9kdWNpbmcgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgc28gd2UncmUgc2FmZSB0aGVyZS5cbjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/KiogTm90IGhlcmUuIE5vIGNoYW5nZXMgdGhhdCBJIGNhbiBzZWUgdGhhdCB3b3VsZCBhbGxvdyB1cyB0byByZWFkIGJleW9uZCB0aGUgYm91bmRhcmllcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5UaGlzIGlzIGZ1bmRhbWVudGFsbHkgYW4gaW50ZXJuYWwgcmVmYWN0b3Igd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFdlJ3JlIHJlb3JkZXJpbmcgdGhlIHN3YXAgY2FjaGUgZGVsZXRpb24gcHJvY2VzcyB3aXRoIG1lbWNnIGFjY291bnRpbmcsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgYWNjdXJhdGUgbWVtb3J5IHVzYWdlIHRyYWNraW5nLiBUaGUgdXN1YWwgc3VzcGVjdHMgZm9yIHBvdGVudGlhbCBidWdzIGFyZSB0aGluZ3MgbGlrZSByYWNlIGNvbmRpdGlvbnMsIHJlZmVyZW5jZSBjb3VudGluZyBlcnJvcnMsIG9yIGlzc3VlcyB3aXRoIGxvY2tpbmcgb3IgdXNlLWFmdGVyLWZyZWUsIGFsbCBvZiB3aGljaCBhcmUgY292ZXJlZCBieSBvdXIgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQLiBBcyBmYXIgYXMgSSBjYW4gc2VlLCB3ZSdyZSBub3QgcmVhZGluZywgY3JlYXRpbmcsIG9yIGV4cG9zaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLlxuXG5UaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBLTVNBTiBpc3N1ZXMuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYWxsIHRoZSBkZXRhaWxzIGFnYWluIHRvIGVuc3VyZSBteSByZWFzb25pbmcgaXMgY29tcGxldGVseSBzb3VuZCBhbmQgSSBjYW4gcHJvdmlkZSBhIGNvbXByZWhlbnNpdmUgZXhwbGFuYXRpb24gZm9yIG15IGNvbmNsdXNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MzcsIk91dHB1dFRva2VucyI6MjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MTk6MjcuNzY0NTAwNDM5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbnRlcm5hbCBzd2FwIGNhY2hlIGFuZCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgbG9naWMgKF9fc3dhcF9jYWNoZV9kZWxfZm9saW8sIHN3YXBfY2FjaGVfZGVsX2ZvbGlvLCBhbmQgX19yZW1vdmVfbWFwcGluZyBpbiB2bXNjYW4uYykgYnkgbW92aW5nIHRoZSBjYWxsIHRvIF9fbWVtY2cxX3N3YXBvdXQoKSBpbnNpZGUgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpIHdpdGggYW4gZXhwbGljaXQgYm9vbGVhbiBwYXJhbWV0ZXIgJ3N3YXBvdXQnLCBhbmQgYWRqdXN0aW5nIHRoZSBvcmRlcmluZyByZWxhdGl2ZSB0byBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKCkuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFuIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IHJlZmFjdG9yaW5nIC8gb3JkZXJpbmcgYWRqdXN0bWVudCBmb3IgZm9saW8gc3RhdGlzdGljcyBhbmQgbWVtY2cgc3dhcG91dCBhY2NvdW50aW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgdG8gdXNlcnNwYWNlIG9yIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBhbmQgZG9lcyBub3QgY3JlYXRlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgYnVncyAoZS5nLiBsb2NraW5nLCBwYWdlIHJlZmNvdW50aW5nLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIFZNIGRlYnVnIGNoZWNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbnRlcm5hbCBzd2FwIGNhY2hlIGFuZCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgbG9naWMgKF9fc3dhcF9jYWNoZV9kZWxfZm9saW8sIHN3YXBfY2FjaGVfZGVsX2ZvbGlvLCBhbmQgX19yZW1vdmVfbWFwcGluZyBpbiB2bXNjYW4uYykgYnkgbW92aW5nIHRoZSBjYWxsIHRvIF9fbWVtY2cxX3N3YXBvdXQoKSBpbnNpZGUgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpIHdpdGggYW4gZXhwbGljaXQgYm9vbGVhbiBwYXJhbWV0ZXIgJ3N3YXBvdXQnLCBhbmQgYWRqdXN0aW5nIHRoZSBvcmRlcmluZyByZWxhdGl2ZSB0byBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKCkuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFuIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IHJlZmFjdG9yaW5nIC8gb3JkZXJpbmcgYWRqdXN0bWVudCBmb3IgZm9saW8gc3RhdGlzdGljcyBhbmQgbWVtY2cgc3dhcG91dCBhY2NvdW50aW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgdG8gdXNlcnNwYWNlIG9yIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBhbmQgZG9lcyBub3QgY3JlYXRlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgYnVncyAoZS5nLiBsb2NraW5nLCBwYWdlIHJlZmNvdW50aW5nLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIFZNIGRlYnVnIGNoZWNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowqdcnb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 04:01:06 +0000 UTC FinishedAt: 2026-09-10 04:19:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "c74cc17fcf422576c5327ac11c74073d5deff4a9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "MEMCG_V1" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "c74cc17fcf422576c5327ac11c74073d5deff4a9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "MEMCG_V1" ], "series_id": "bc46f6e9-d378-459a-a08b-e9690e113576" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__swap_cache_del_folio", "swap_cache_del_folio", "__memcg1_swapout", "__remove_mapping" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDssCiAgICAmIzM0O3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDssCiAgICAmIzM0O19fbWVtY2cxX3N3YXBvdXQmIzM0OywKICAgICYjMzQ7X19yZW1vdmVfbWFwcGluZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGludGVybmFsIHN3YXAgY2FjaGUgYW5kIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBsb2dpYyAoX19zd2FwX2NhY2hlX2RlbF9mb2xpbywgc3dhcF9jYWNoZV9kZWxfZm9saW8sIGFuZCBfX3JlbW92ZV9tYXBwaW5nIGluIHZtc2Nhbi5jKSBieSBtb3ZpbmcgdGhlIGNhbGwgdG8gX19tZW1jZzFfc3dhcG91dCgpIGluc2lkZSBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgd2l0aCBhbiBleHBsaWNpdCBib29sZWFuIHBhcmFtZXRlciAmIzM5O3N3YXBvdXQmIzM5OywgYW5kIGFkanVzdGluZyB0aGUgb3JkZXJpbmcgcmVsYXRpdmUgdG8gX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbygpLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYW4gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgcmVmYWN0b3JpbmcgLyBvcmRlcmluZyBhZGp1c3RtZW50IGZvciBmb2xpbyBzdGF0aXN0aWNzIGFuZCBtZW1jZyBzd2Fwb3V0IGFjY291bnRpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyB0byB1c2Vyc3BhY2Ugb3Igb3RoZXIga2VybmVsIHN1YnN5c3RlbXMsIGFuZCBkb2VzIG5vdCBjcmVhdGUgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQW55IHBvdGVudGlhbCBidWdzIChlLmcuIGxvY2tpbmcsIHBhZ2UgcmVmY291bnRpbmcsIHJhY2UgY29uZGl0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3IgVk0gZGVidWcgY2hlY2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gKG1tL3N3YXBfc3RhdGUuYywgbW0vdm1zY2FuLmMsIG1tL3N3YXAuaCksIG1vdmluZyB0aGUgX19tZW1jZzFfc3dhcG91dCgpIGNhbGwgaW50byBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgYW5kIHVwZGF0aW5nIGNhbGxlcnMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgc3dhcCBvcGVyYXRpb25zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ0MzRiNzdiMTBlMmQwYWYxZGZkNjEwNzZiODc2Yjg0NjA4NDk1ZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwNDoxNzo1MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDBiNWQ1MDc3MzliY2IuLmIzYjU0YzI4OTI5YTEgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaFxuQEAgLTMxOSw3ICYjNDM7MzE5LDggQEAgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4gdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi1cdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyk7XG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuJiM0MztcdFx0XHQgICAgYm9vbCBzd2Fwb3V0KTtcbiB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0XHRzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpO1xuIFxuQEAgLTQ1Miw3ICYjNDM7NDUzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpXG4mIzQzO1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuJiM0MztcdFx0Ym9vbCBzd2Fwb3V0KVxuIHtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCAzMDU4NzdlMWY0ZDdiLi42MjVjMTg1YTFjYTRkIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0zMDYsMjEgJiM0MzszMDYsMjggQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuICAqIEBmb2xpbzogVGhlIGZvbGlvLlxuICAqIEBlbnRyeTogVGhlIGZpcnN0IHN3YXAgZW50cnkgdGhhdCB0aGUgZm9saW8gY29ycmVzcG9uZHMgdG8uXG4gICogQHNoYWRvdzogc2hhZG93IHZhbHVlIHRvIGJlIGZpbGxlZCBpbiB0aGUgc3dhcCBjYWNoZS5cbiYjNDM7ICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBmb2xpbyBpcyBiZWluZyByZWNsYWltZWQgYWZ0ZXIgc3dhcG91dC5cbiAgKlxuICAqIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBmaWxscyBhIHNoYWRvdyBpbiBwbGFjZS5cbiAgKiBUaGlzIHdvbiYjMzk7dCBwdXQgdGhlIGZvbGlvJiMzOTtzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LlxuICAqXG4gICogQ29udGV4dDogQ2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQgYW5kIGluIHRoZSBzd2FwIGNhY2hlXG4gICogdXNpbmcgdGhlIGluZGV4IG9mIEBlbnRyeSwgYW5kIGxvY2sgdGhlIGNsdXN0ZXIgdGhhdCBob2xkcyB0aGUgZW50cmllcy5cbiYjNDM7ICogSWYgQHN3YXBvdXQgaXMgc2V0LCB0aGUgZm9saW8gc2hvdWxkIGJlIGluIHJlY2xhaW0gcGF0aCBhbmQgSVJRc1xuJiM0MzsgKiBzaG91bGQgYmUgZGlzYWJsZWQuXG4gICovXG4gdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpXG4mIzQzO1x0XHRcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcbi1cdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcbiBcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIC1ucl9wYWdlcyk7XG4gXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgLW5yX3BhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN3YXBvdXQpXG4mIzQzO1x0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4mIzQzO1xuJiM0MztcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcbiB9XG4gXG4gLyoqXG5AQCAtMzM5LDcgJiM0MzszNDYsNyBAQCB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gXG4gXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xuLVx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMKTtcbiYjNDM7XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTtcbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFxuIFx0Zm9saW9fcmVmX3N1Yihmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAyNDVmNjhjNzViMjg5Li4yOWJjZWQ0M2IwY2U2IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNzU1LDggJiM0Mzs3NTUsNyBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gXHRcdGlmIChyZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpXG4gXHRcdFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcbi1cdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuLVx0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTtcbiYjNDM7XHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpO1xuIFx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XG4gXHR9IGVsc2Uge1xuIFx0XHR2b2lkICgqZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICopO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDssCiAgICAmIzM0O3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDssCiAgICAmIzM0O19fbWVtY2cxX3N3YXBvdXQmIzM0OywKICAgICYjMzQ7X19yZW1vdmVfbWFwcGluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gKG1tL3N3YXBfc3RhdGUuYywgbW0vdm1zY2FuLmMsIG1tL3N3YXAuaCksIG1vdmluZyB0aGUgX19tZW1jZzFfc3dhcG91dCgpIGNhbGwgaW50byBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgYW5kIHVwZGF0aW5nIGNhbGxlcnMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgc3dhcCBvcGVyYXRpb25zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ0MzRiNzdiMTBlMmQwYWYxZGZkNjEwNzZiODc2Yjg0NjA4NDk1ZTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAwNDoxNzo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaAppbmRleCAwYjVkNTA3NzM5YmNiLi5iM2I1NGMyODkyOWExIDEwMDY0NAotLS0gYS9tbS9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcC5oCkBAIC0zMTksNyAmIzQzOzMxOSw4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLAogdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpOwogdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCi0JCQkgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyk7CiYjNDM7CQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csCiYjNDM7CQkJICAgIGJvb2wgc3dhcG91dCk7CiB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJCQkJc3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KTsKIApAQCAtNDUyLDcgJiM0Mzs0NTMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKLQkJc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdykKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csCiYjNDM7CQlib29sIHN3YXBvdXQpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCAzMDU4NzdlMWY0ZDdiLi42MjVjMTg1YTFjYTRkIDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC0zMDYsMjEgJiM0MzszMDYsMjggQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogICogQGZvbGlvOiBUaGUgZm9saW8uCiAgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLgogICogQHNoYWRvdzogc2hhZG93IHZhbHVlIHRvIGJlIGZpbGxlZCBpbiB0aGUgc3dhcCBjYWNoZS4KJiM0MzsgKiBAc3dhcG91dDogd2hldGhlciB0aGlzIGZvbGlvIGlzIGJlaW5nIHJlY2xhaW1lZCBhZnRlciBzd2Fwb3V0LgogICoKICAqIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBmaWxscyBhIHNoYWRvdyBpbiBwbGFjZS4KICAqIFRoaXMgd29uJiMzOTt0IHB1dCB0aGUgZm9saW8mIzM5O3MgcmVmY291bnQuIFRoZSBjYWxsZXIgaGFzIHRvIGRvIHRoYXQuCiAgKgogICogQ29udGV4dDogQ2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQgYW5kIGluIHRoZSBzd2FwIGNhY2hlCiAgKiB1c2luZyB0aGUgaW5kZXggb2YgQGVudHJ5LCBhbmQgbG9jayB0aGUgY2x1c3RlciB0aGF0IGhvbGRzIHRoZSBlbnRyaWVzLgomIzQzOyAqIElmIEBzd2Fwb3V0IGlzIHNldCwgdGhlIGZvbGlvIHNob3VsZCBiZSBpbiByZWNsYWltIHBhdGggYW5kIElSUXMKJiM0MzsgKiBzaG91bGQgYmUgZGlzYWJsZWQuCiAgKi8KIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAotCQkJICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpCiYjNDM7CQkJICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dCkKIHsKIAl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwogCi0JX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpOwogCW5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIC1ucl9wYWdlcyk7CiAJbHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7CiYjNDM7CiYjNDM7CWlmIChzd2Fwb3V0KQomIzQzOwkJX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpOwomIzQzOwomIzQzOwlfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7CiB9CiAKIC8qKgpAQCAtMzM5LDcgJiM0MzszNDYsNyBAQCB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJc3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby0mZ3Q7c3dhcDsKIAogCWNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7Ci0JX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMKTsKJiM0MzsJX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7CiAJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiAKIAlmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCAyNDVmNjhjNzViMjg5Li4yOWJjZWQ0M2IwY2U2IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNzU1LDggJiM0Mzs3NTUsNyBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAKIAkJaWYgKHJlY2xhaW1lZCAmYW1wOyZhbXA7ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpCiAJCQlzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpOwotCQlfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7Ci0JCV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpOwomIzQzOwkJX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7CiAJCXN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTsKIAl9IGVsc2UgewogCQl2b2lkICgqZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICopOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTExCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IHRoaXMgZGlmZi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgYmVlbiBhbHRlcmVkLiBJdCBsb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgbW9kaWZpY2F0aW9ucyBhY3Jvc3MgdGhlIHN3YXAgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgYG1tL3N3YXAuaGAsIGBtbS9zd2FwX3N0YXRlLmNgLCBhbmQgYG1tL3Ztc2Nhbi5jYC4gVGhpcyBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBzd2FwIG1hbmFnZW1lbnQsIHBvc3NpYmx5IHdpdGggY2hhbmdlcyBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBzdGF0ZSB0cmFja2luZywgb3IgdGhlIG1lbW9yeSBzY2FubmluZyBwcm9jZXNzLgoKTm93LCBpbnN0ZWFkIG9mIGp1c3Qgc3RhcmluZyBhdCB0aGUgZGlmZiBvdXRwdXQsIEkmIzM5O2xsIG5lZWQgdG8gZ2FpbiBzb21lIGNvbnRleHQgYXJvdW5kIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGBncmVwcGVyYCBvciBwb3NzaWJseSBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlIGJsb2Nrcy4gSSYjMzk7bGwgbG9vayBhdCB0aGUgY29kZSBpbW1lZGlhdGVseSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBjaGFuZ2UgaW4gZWFjaCBvZiB0aGVzZSBmaWxlcy4gVGhhdCB3YXkgSSBjYW4gZnVsbHkgdW5kZXJzdGFuZCAqd2h5KiB0aGUgY2hhbmdlcyB3ZXJlIGltcGxlbWVudGVkLiBXaXRoIHRoZXNlIHRvb2xzLCBJIGV4cGVjdCB0byBpZGVudGlmeSB0aGUga2V5IGFzcGVjdHMgb2YgdGhpcyB1cGRhdGUgYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5NTpcdFx0XHRjaV9vZmYgPSBjaV9zdGFydDtcbiAyOTY6XHRcdFx0ZG8ge1xuIDI5NzpcdFx0XHRcdGlmICghX19zd3BfdGJfZ2V0X2NvdW50KF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZikpKVxuIDI5ODpcdFx0XHRcdFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfb2ZmLCAxKTtcbiAyOTk6XHRcdFx0fSB3aGlsZSAoJiM0MzsmIzQzO2NpX29mZiBcdTAwM2MgY2lfZW5kKTtcbiAzMDA6XHRcdH1cbiAzMDE6XHR9XG4gMzAyOlx0XG4gMzAzOlx0LyoqXG4gMzA0Olx0ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxuIDMwNTpcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4gMzA2Olx0ICogQGZvbGlvOiBUaGUgZm9saW8uXG4gMzA3Olx0ICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cbiAzMDg6XHQgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxuIDMwOTpcdCAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgZm9saW8gaXMgYmVpbmcgcmVjbGFpbWVkIGFmdGVyIHN3YXBvdXQuXG4gMzEwOlx0ICpcbiAzMTE6XHQgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXG4gMzEyOlx0ICogVGhpcyB3b24mIzM5O3QgcHV0IHRoZSBmb2xpbyYjMzk7cyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cbiAzMTM6XHQgKlxuIDMxNDpcdCAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxuIDMxNTpcdCAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXG4gMzE2Olx0ICogSWYgQHN3YXBvdXQgaXMgc2V0LCB0aGUgZm9saW8gc2hvdWxkIGJlIGluIHJlY2xhaW0gcGF0aCBhbmQgSVJRc1xuIDMxNzpcdCAqIHNob3VsZCBiZSBkaXNhYmxlZC5cbiAzMTg6XHQgKi9cbiAzMTk6XHR2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiAzMjA6XHRcdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuIDMyMTpcdHtcbiAzMjI6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gMzIzOlx0XG4gMzI0Olx0XHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpO1xuIDMyNTpcdFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XG4gMzI2Olx0XG4gMzI3Olx0XHRpZiAoc3dhcG91dClcbiAzMjg6XHRcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuIDMyOTpcdFxuIDMzMDpcdFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIDMzMTpcdH1cbiAzMzI6XHRcbiAzMzM6XHQvKipcbiAzMzQ6XHQgKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxuIDMzNTpcdCAqIEBmb2xpbzogVGhlIGZvbGlvLlxuIDMzNjpcdCAqXG4gMzM3Olx0ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXG4gMzM4Olx0ICogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBlaXRoZXIgY2xlYW4gb3IgaGFzIGEgc3dhcCBjb3VudFxuIDMzOTpcdCAqIGVxdWFsIHRvIHplcm8sIG9yIGl0IG1heSBjYXVzZSBkYXRhIGxvc3MuXG4gMzQwOlx0ICpcbiAzNDE6XHQgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGUuXG4gMzQyOlx0ICovXG4gMzQzOlx0dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIDM0NDpcdHtcbiAzNDU6XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG4gMzQ2Olx0XHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gMzQ3Olx0XG4gMzQ4Olx0XHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xuIDM0OTpcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XG4gMzUwOlx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiAzNTE6XHRcbiAzNTI6XHRcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gMzUzOlx0fVxuIDM1NDpcdFxuIDM1NTpcdC8qKlxuIDM1NjpcdCAqIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvIC0gUmVwbGFjZSBhIGZvbGlvIGluIHRoZSBzd2FwIGNhY2hlLlxuIDM1NzpcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4gMzU4Olx0ICogQG9sZDogVGhlIG9sZCBmb2xpbyB0byBiZSByZXBsYWNlZC5cbiAzNTk6XHQgKiBAbmV3OiBUaGUgbmV3IGZvbGlvLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFZpcnR1YWwgTWVtb3J5IFNjYW5uZXIqKgoKT2theSwgdGltZSB0byBkaWcgaW4uIFRoZSBwcm9ibGVtJiMzOTtzIGhpbnRpbmcgYXQgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aGluIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmVyLCBzbyBsZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIE15IGd1dCB0ZWxscyBtZSB0byBleGFtaW5lIGBtbS92bXNjYW4uY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIHRvIGFyb3VuZCBsaW5lIDc1NS4gVGhpcyByZWdpb24gbGlrZWx5IGludm9sdmVzIHNvbWV0aGluZyBjcnVjaWFsIOKAkyBwZXJoYXBzIG1lbW9yeSByZWNsYW1hdGlvbiBsb2dpYywgcGFnZSBzZWxlY3Rpb24sIG9yIGEgcmVsYXRlZCBvcHRpbWl6YXRpb24uIFRoZSByZWFsIGtleSwgYXMgYWx3YXlzLCB3aWxsIGJlIHVuZGVyc3RhbmRpbmcgdGhlICpjYWxsZXIgY29udGV4dCouIEtub3dpbmcgKndobyogaXMgY2FsbGluZyB0aGF0IGZ1bmN0aW9uIGFyb3VuZCBsaW5lIDc1NSBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsLiBUaGF0IHdpbGwgY2x1ZSBtZSBpbnRvIHRoZSBzcGVjaWZpYyBzY2VuYXJpbyB0cmlnZ2VyaW5nIHRoZSBwb3RlbnRpYWwgaXNzdWUgYW5kIHByb3ZpZGUgdGhlIGluZm9ybWF0aW9uIHRvIGlkZW50aWZ5IHRoZSByb290IGNhdXNlIHF1aWNrbHkuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDczNTpcdFx0ICogW29vcHMsIG91ciB3cml0ZV90byBkYXRhIGlzIGxvc3RdXG4gNzM2Olx0XHQgKlxuIDczNzpcdFx0ICogUmV2ZXJzaW5nIHRoZSBvcmRlciBvZiB0aGUgdGVzdHMgZW5zdXJlcyBzdWNoIGEgc2l0dWF0aW9uIGNhbm5vdFxuIDczODpcdFx0ICogZXNjYXBlIHVubm90aWNlZC4gVGhlIHNtcF9ybWIgaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGUgZm9saW8tXHUwMDNlZmxhZ3NcbiA3Mzk6XHRcdCAqIGxvYWQgaXMgbm90IHNhdGlzZmllZCBiZWZvcmUgdGhhdCBvZiBmb2xpby1cdTAwM2VfcmVmY291bnQuXG4gNzQwOlx0XHQgKlxuIDc0MTpcdFx0ICogTm90ZSB0aGF0IGlmIHRoZSBkaXJ0eSBmbGFnIGlzIGFsd2F5cyBzZXQgdmlhIGZvbGlvX21hcmtfZGlydHksXG4gNzQyOlx0XHQgKiBhbmQgdGh1cyB1bmRlciB0aGUgaV9wYWdlcyBsb2NrLCB0aGVuIHRoaXMgb3JkZXJpbmcgaXMgbm90IHJlcXVpcmVkLlxuIDc0MzpcdFx0ICovXG4gNzQ0Olx0XHRyZWZjb3VudCA9IDEgJiM0MzsgZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIDc0NTpcdFx0aWYgKCFmb2xpb19yZWZfZnJlZXplKGZvbGlvLCByZWZjb3VudCkpXG4gNzQ2Olx0XHRcdGdvdG8gY2Fubm90X2ZyZWU7XG4gNzQ3Olx0XHQvKiBub3RlOiBhdG9taWNfY21weGNoZyBpbiBmb2xpb19yZWZfZnJlZXplIHByb3ZpZGVzIHRoZSBzbXBfcm1iICovXG4gNzQ4Olx0XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpKSB7XG4gNzQ5Olx0XHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgcmVmY291bnQpO1xuIDc1MDpcdFx0XHRnb3RvIGNhbm5vdF9mcmVlO1xuIDc1MTpcdFx0fVxuIDc1MjpcdFxuIDc1MzpcdFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuIDc1NDpcdFx0XHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXHUwMDNlc3dhcDtcbiA3NTU6XHRcbiA3NTY6XHRcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbiA3NTc6XHRcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuIDc1ODpcdFx0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcbiA3NTk6XHRcdFx0c3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpO1xuIDc2MDpcdFx0fSBlbHNlIHtcbiA3NjE6XHRcdFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcbiA3NjI6XHRcbiA3NjM6XHRcdFx0ZnJlZV9mb2xpbyA9IG1hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZnJlZV9mb2xpbztcbiA3NjQ6XHRcdFx0LypcbiA3NjU6XHRcdFx0ICogUmVtZW1iZXIgYSBzaGFkb3cgZW50cnkgZm9yIHJlY2xhaW1lZCBmaWxlIGNhY2hlIGluXG4gNzY2Olx0XHRcdCAqIG9yZGVyIHRvIGRldGVjdCByZWZhdWx0cywgdGh1cyB0aHJhc2hpbmcsIGxhdGVyIG9uLlxuIDc2NzpcdFx0XHQgKlxuIDc2ODpcdFx0XHQgKiBCdXQgZG9uJiMzOTt0IHN0b3JlIHNoYWRvd3MgaW4gYW4gYWRkcmVzcyBzcGFjZSB0aGF0IGlzXG4gNzY5Olx0XHRcdCAqIGFscmVhZHkgZXhpdGluZy4gIFRoaXMgaXMgbm90IGp1c3QgYW4gb3B0aW1pemF0aW9uLFxuIDc3MDpcdFx0XHQgKiBpbm9kZSByZWNsYWltIG5lZWRzIHRvIGVtcHR5IG91dCB0aGUgcmFkaXggdHJlZSBvclxuIDc3MTpcdFx0XHQgKiB0aGUgbm9kZXMgYXJlIGxvc3QuICBEb24mIzM5O3QgcGxhbnQgc2hhZG93cyBiZWhpbmQgaXRzXG4gNzcyOlx0XHRcdCAqIGJhY2suXG4gNzczOlx0XHRcdCAqXG4gNzc0Olx0XHRcdCAqIFdlIGFsc28gZG9uJiMzOTt0IHN0b3JlIHNoYWRvd3MgZm9yIERBWCBtYXBwaW5ncyBiZWNhdXNlIHRoZVxuIDc3NTpcdFx0XHQgKiBvbmx5IHBhZ2UgY2FjaGUgZm9saW9zIGZvdW5kIGluIHRoZXNlIGFyZSB6ZXJvIHBhZ2VzXG4gNzc2Olx0XHRcdCAqIGNvdmVyaW5nIGhvbGVzLCBhbmQgYmVjYXVzZSB3ZSBkb24mIzM5O3Qgd2FudCB0byBtaXggREFYXG4gNzc3Olx0XHRcdCAqIGV4Y2VwdGlvbmFsIGVudHJpZXMgYW5kIHNoYWRvdyBleGNlcHRpb25hbCBlbnRyaWVzIGluIHRoZVxuIDc3ODpcdFx0XHQgKiBzYW1lIGFkZHJlc3Nfc3BhY2UuXG4gNzc5Olx0XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMTEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZSBpbnZvbHZpbmcgYF9fbWVtY2cxX3N3YXBvdXRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgd2h5IHRoZSBtb2RpZmljYXRpb24gd2FzIGRlZW1lZCBuZWNlc3NhcnkuIAoKVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCwgb2YgY291cnNlLCBpcyBhIHF1aWNrIGdyZXAuIExldCYjMzk7cyBzZWUgaG93IGFuZCB3aGVyZSBgX19tZW1jZzFfc3dhcG91dGAgaXMgdXNlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGUgc3Vycm91bmRpbmcgY29udGV4dCB3aWxsIHRlbGwgdGhlIHN0b3J5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjYWxscywgZGVmaW5pdGlvbnMsIGFuZCBhbnkgcmVsYXRlZCBjb21tZW50cyB0aGF0IHNoZWQgbGlnaHQgb24gaXRzIGZ1bmN0aW9uIGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgY2hhbmdlLiBUaGlzIHNob3VsZCBxdWlja2x5IG9yaWVudCBtZSBhbmQgZ3VpZGUgbWUgdG93YXJkIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21lbWNnMV9zd2Fwb3V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5NTM9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2MC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjE6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2Mi12b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2NS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjY6c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjctXHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NTMzPXZvaWQgZGVmZXJyZWRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBwYXJ0aWFsbHlfbWFwcGVkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU1MS1cdCAqIEV4Y2x1ZGUgc3dhcGNhY2hlOiBvcmlnaW5hbGx5IHRvIGF2b2lkIGEgY29ycnVwdCBkZWZlcnJlZCBzcGxpdFxubW0vaHVnZV9tZW1vcnkuYzo0NTUyOlx0ICogcXVldWUuIE5vd2FkYXlzIHRoYXQgaXMgZnVsbHkgcHJldmVudGVkIGJ5IF9fbWVtY2cxX3N3YXBvdXQoKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDU1My1cdCAqIGJ1dCBpZiBwYWdlIHJlY2xhaW0gaXMgYWxyZWFkeSBoYW5kbGluZyB0aGUgc2FtZSBmb2xpbywgaXQgaXNcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjQ3PXZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yNTgtLyoqXG5tbS9tZW1jb250cm9sLXYxLmM6MjU5OiAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXG5tbS9tZW1jb250cm9sLXYxLmMtMjYwLSAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtc3cgY2hhcmdlIHRvIHRyYW5zZmVyXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTI2OC0gKi9cbm1tL21lbWNvbnRyb2wtdjEuYzoyNjk6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG5tbS9tZW1jb250cm9sLXYxLmMtMjcwLXtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MzE5PXZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMjctXHRpZiAoc3dhcG91dClcbm1tL3N3YXBfc3RhdGUuYzozMjg6XHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbm1tL3N3YXBfc3RhdGUuYy0zMjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEyMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYF9fbWVtY2cxX3N3YXBvdXRgKioKCk9rYXksIGxldCYjMzk7cyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBtZW1vcnkgY29udHJvbCB2MSBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHN3YXAtb3V0IGlzIGhhbmRsZWQgYXQgdGhlIG1lbWNnIGxldmVsLCBzbyBJJiMzOTttIGhlYWRpbmcgZGlyZWN0bHkgdG8gdGhlIGBfX21lbWNnMV9zd2Fwb3V0YCBmdW5jdGlvbiB3aXRoaW4gYG1tL21lbWNvbnRyb2wtdjEuY2AuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgdGhhdCBvcmNoZXN0cmF0ZXMgcGFnZSBzZWxlY3Rpb24gYW5kIGV2aWN0aW9uIHNwZWNpZmljIHRvIGEgbWVtY2cgY29udGV4dC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBpcyBpbiB1bmRlcnN0YW5kaW5nIHRoZSBjcml0ZXJpYSB1c2VkIGZvciBjaG9vc2luZyBwYWdlcywgYW55IGFjY291bnRpbmcgbnVhbmNlcyB3aXRoaW4gdGhlIG1lbWNnIGhpZXJhcmNoeSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzd2FwcGluZyBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcywgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gdGhlIGJhbGFuY2Ugb2YgZGlyZWN0IGFuZCBpbmRpcmVjdCByZWNsYWltLCBhbmQgaG93IHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTU6XHR9XG4gMjU2Olx0XG4gMjU3Olx0I2lmZGVmIENPTkZJR19TV0FQXG4gMjU4Olx0LyoqXG4gMjU5Olx0ICogX19tZW1jZzFfc3dhcG91dCAtIHRyYW5zZmVyIGEgbWVtc3cgY2hhcmdlIHRvIHN3YXBcbiAyNjA6XHQgKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbXN3IGNoYXJnZSB0byB0cmFuc2ZlclxuIDI2MTpcdCAqIEBjaTogdGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIgaG9sZGluZyB0aGUgc3dhcCBlbnRyaWVzXG4gMjYyOlx0ICpcbiAyNjM6XHQgKiBUcmFuc2ZlciB0aGUgbWVtc3cgY2hhcmdlIG9mIEBmb2xpbyB0byB0aGUgc3dhcCBlbnRyeSBzdG9yZWQgaW5cbiAyNjQ6XHQgKiBmb2xpby1cdTAwM2Vzd2FwLlxuIDI2NTpcdCAqXG4gMjY2Olx0ICogQ29udGV4dDogZm9saW8gbXVzdCBiZSBpc29sYXRlZCwgdW5tYXBwZWQsIGxvY2tlZCBhbmQgaXMganVzdCBhYm91dCB0b1xuIDI2NzpcdCAqIGJlIGZyZWVkLCBhbmQgY2FsbGVyIG11c3QgZGlzYWJsZSBJUlFzIGFuZCBob2xkIHRoZSBzd2FwIGNsdXN0ZXIgbG9jay5cbiAyNjg6XHQgKi9cbiAyNjk6XHR2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiAyNzA6XHR7XG4gMjcxOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpzd2FwX21lbWNnO1xuIDI3MjpcdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIDI3MzpcdFx0dW5zaWduZWQgaW50IG5yX2VudHJpZXM7XG4gMjc0Olx0XG4gMjc1Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuIDI3NjpcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcbiAyNzc6XHRcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcbiAyNzg6XHRcdFZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XG4gMjc5Olx0XG4gMjgwOlx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIDI4MTpcdFx0XHRyZXR1cm47XG4gMjgyOlx0XG4gMjgzOlx0XHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSlcbiAyODQ6XHRcdFx0cmV0dXJuO1xuIDI4NTpcdFxuIDI4NjpcdFx0b2JqY2cgPSBmb2xpb19vYmpjZyhmb2xpbyk7XG4gMjg3Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIW9iamNnLCBmb2xpbyk7XG4gMjg4Olx0XHRpZiAoIW9iamNnKVxuIDI4OTpcdFx0XHRyZXR1cm47XG4gMjkwOlx0XG4gMjkxOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMjkyOlx0XHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xuIDI5MzpcdFx0LypcbiAyOTQ6XHRcdCAqIEluIGNhc2UgdGhlIG1lbWNnIG93bmluZyB0aGVzZSBwYWdlcyBoYXMgYmVlbiBvZmZsaW5lZCBhbmQgZG9lc24mIzM5O3RcbiAyOTU6XHRcdCAqIGhhdmUgYW4gSUQgYWxsb2NhdGVkIHRvIGl0IGFueW1vcmUsIGNoYXJnZSB0aGUgY2xvc2VzdCBvbmxpbmVcbiAyOTY6XHRcdCAqIGFuY2VzdG9yIGZvciB0aGUgc3dhcCBpbnN0ZWFkIGFuZCB0cmFuc2ZlciB0aGUgbWVtb3J5JiM0Mztzd2FwIGNoYXJnZS5cbiAyOTc6XHRcdCAqL1xuIDI5ODpcdFx0bnJfZW50cmllcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiAyOTk6XHRcdHN3YXBfbWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfZW50cmllcyk7XG4gMzAwOlx0XHRtb2RfbWVtY2dfc3RhdGUoc3dhcF9tZW1jZywgTUVNQ0dfU1dBUCwgbnJfZW50cmllcyk7XG4gMzAxOlx0XG4gMzAyOlx0XHRfX3N3YXBfY2dyb3VwX3NldChjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGZvbGlvLVx1MDAzZXN3YXApLCBucl9lbnRyaWVzLFxuIDMwMzpcdFx0XHRcdCAgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN3YXBfbWVtY2cpKTtcbiAzMDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIwNwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDYxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgS2VybmVsIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIGNoYW5nZSBjb25jZXJuaW5nIGBfX21lbWNnMV9zd2Fwb3V0YCBhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBzd2FwIGNhY2hlIGRlbGV0aW9uLiBUaGUga2V5IG9ic2VydmF0aW9uIGlzIHRoYXQgdGhlIGNhbGwgdG8gYF9fbWVtY2cxX3N3YXBvdXRgIGhhcyBiZWVuIG1vdmVkIHdpdGhpbiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIHNwZWNpZmljYWxseSByaWdodCBiZWZvcmUgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLiBUaGlzIG1lYW5zIHRoZSBtZW1jZyBzd2Fwb3V0IG9wZXJhdGlvbiBub3cgaGFwcGVucyAqYmVmb3JlKiB0aGUgc3dhcGNhY2hlIHN0YXR1cyBpcyBjbGVhcmVkLCB3aGljaCBpcyBhbiBpbXBvcnRhbnQgY2hhbmdlIGZvciBtZW1vcnkgbWFuYWdlbWVudCBjb25zaXN0ZW5jeS4KCkkgc2VlIHRoYXQgdGhpcyBpbnZvbHZlcyBjb2RlIHdpdGhpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWFzOiBzcGVjaWZpY2FsbHkgYG1tL3N3YXBfc3RhdGUuY2AsIGBtbS92bXNjYW4uY2AsIGFuZCBwb3RlbnRpYWxseSB0b3VjaGVkIHRocm91Z2ggYG1tL3N3YXAuaGAuIFRoZXNlIGFyZSBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBpbiBhbnkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQg4oCTIHRoZXNlIGFyZSBmdW5kYW1lbnRhbCBzd2FwIGFuZCByZWNsYWltIG9wZXJhdGlvbnMuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBjcml0ZXJpYSBmb3IgYFdvcnRoRnV6emluZ2AsIHRoaXMgaXMgYSBjbGVhciAmIzM0O3llcy4mIzM0OyBUaGlzIHBhdGNoIHRvdWNoZXMgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBpbmNsdWRlcyBsb2dpYyBtb2RpZmljYXRpb25zLiBNb3Jlb3ZlciwgdGhlIGludHJvZHVjdGlvbiBvZiB0aGUgYFZNX1dBUk5fT05fT05DRV9GT0xJT2AgY2hlY2sgaXMgYSBkaXJlY3QgYWx0ZXJhdGlvbiBvZiBydW50aW1lIGFzc2VydGlvbnMuIFRoZXJlZm9yZSwgaXQgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSB0aGUgJiMzNDtGb2N1c1N5bWJvbHMmIzM0Oy4gV2UgbmVlZCB0byB0YXJnZXQgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgaW1wbGVtZW50IG9yIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBjb2RlIGFuZCBhcmUgbm90IHViaXF1aXRvdXMuIFRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBJJiMzOTttIGludGVyZXN0ZWQgaW4gYXJlOgoKKiAgIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCAobW0vc3dhcF9zdGF0ZS5jKSAtICpUaGlzIGlzIGEgY29yZSBjaGFuZ2UgcG9pbnQqLgoqICAgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCAobW0vc3dhcF9zdGF0ZS5jKSAtICpUaGlzIGFsc28gY2hhbmdlcy4qCiogICBgX19yZW1vdmVfbWFwcGluZ2AgKG1tL3Ztc2Nhbi5jKSAtICpUaGlzIGNhbGxzIHRoZSBtb2RpZmllZCBmdW5jdGlvbi4qCiogICBgX19tZW1jZzFfc3dhcG91dGAgKG1tL21lbWNvbnRyb2wtdjEuYykgLSAqVGhpcyBpcyBjb25kaXRpb25hbGx5IGNhbGxlZCBmcm9tIHRoZSBjb3JlIGNoYW5nZS4qCgpXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSB1bmRlcnN0YW5kIGFsbCBjYWxsIHBhdGhzIHRvIHRoZXNlIGNvcmUgZnVuY3Rpb25zLCB0byBzZWUgdGhlIGVudGlyZSBzdXJmYWNlLiBXZSBuZWVkIHRvIGJlIGF3YXJlIG9mIG90aGVyIGNhbGxlcnMgb2YgdGhlIHN3YXAgY2FjaGUgZGVsZXRlIGZ1bmN0aW9ucyEgVGltZSB0byBncmVwLgoKRnJvbSBoZXJlLCBJJiMzOTtsbCBkZXRlcm1pbmUgYEVuYWJsZUNvbmZpZ3NgIGJhc2VkIG9uIHdoaWNoIGNvbmZpZ3VyYXRpb25zIG1heGltaXplIHRoZSBjaGFuY2Ugb2YgZXhlcmNpc2luZyB0aGUgY29kZSBwYXRocyBvZiBpbnRlcmVzdC4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBtZW1jZyBjb25maWd1cmF0aW9ucywgc3dhcCBlbmFibGVkLCBldGMuIFRoZSBwcmVjaXNlIGNvbmZpZ3Mgd2lsbCBkZXBlbmQgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgY2hhbmdlIGFuZCB0aGUgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zd2FwX2NhY2hlX2RlbF9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwLmg9MzE5PXZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxubW0vc3dhcC5oLTMyMC1cdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xubW0vc3dhcC5oOjMyMTp2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC0zMjItXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXG4tLVxubW0vc3dhcC5oPTQ1MT1zdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwLmgtNDU0LVxubW0vc3dhcC5oOjQ1NTpzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxubW0vc3dhcC5oLTQ1Ni1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MjU3PXN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzAzLS8qKlxubW0vc3dhcF9zdGF0ZS5jOjMwNDogKiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXG5tbS9zd2FwX3N0YXRlLmMtMzA1LSAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMxOC0gKi9cbm1tL3N3YXBfc3RhdGUuYzozMTk6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9zd2FwX3N0YXRlLmMtMzIwLVx0XHRcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMzNi0gKlxubW0vc3dhcF9zdGF0ZS5jOjMzNzogKiBTYW1lIGFzIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8sIGJ1dCBoYW5kbGVzIGxvY2sgYW5kIHJlZmNvdW50LiBUaGVcbm1tL3N3YXBfc3RhdGUuYy0zMzgtICogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBlaXRoZXIgY2xlYW4gb3IgaGFzIGEgc3dhcCBjb3VudFxuLS1cbm1tL3N3YXBfc3RhdGUuYz0zNDM9dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zNDgtXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xubW0vc3dhcF9zdGF0ZS5jOjM0OTpcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xubW0vc3dhcF9zdGF0ZS5jLTM1MC1cdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuLS1cbm1tL3N3YXBmaWxlLmM9MTU4OD1zdGF0aWMgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtMTYxOC1cdFx0ICogc2xvdHMgd2lsbCBiZSBmcmVlZCB3aGVuIGZvbGlvIGlzIHJlbW92ZWQgZnJvbSBzd2FwIGNhY2hlXG5tbS9zd2FwZmlsZS5jOjE2MTk6XHRcdCAqIChfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKS5cbm1tL3N3YXBmaWxlLmMtMTYyMC1cdFx0ICovXG4tLVxubW0vdm1zY2FuLmM9NzAyPXN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS92bXNjYW4uYy03NTctXHRcdFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcbm1tL3Ztc2Nhbi5jOjc1ODpcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XG5tbS92bXNjYW4uYy03NTktXHRcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMDcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIENhbGxlcnMgb2YgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBzb21ldGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSYjMzk7dmUgYWxyZWFkeSBleGFtaW5lZCBzb21lIGFyZWFzLCBidXQgbm93IEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgZGVmaW5pdGVseSBleHBhbmQgbXkgc2NvcGUgYW5kIGludmVzdGlnYXRlIHRoZSBjYWxsZXJzIG9mIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIHRoZSBzd2FwIGNhY2hlLCBhbmQgdW5kZXJzdGFuZGluZyAqd2hvKiBpcyBjYWxsaW5nIGl0IGlzIGNyaXRpY2FsIHRvIGdldHRpbmcgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIHNlZSB0aGUgZGlmZmVyZW50IHBhdGhzIHRoYXQgbGVhZCB0byBpdHMgZXhlY3V0aW9uLiBUaGlzIGlzIGdvaW5nIHRvIGdpdmUgbWUgYSBtb3JlIHJvdW5kZWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2hvbGUgc3lzdGVtJiMzOTtzIGludGVyYWN0aW9ucyB3aXRoIHN3YXBwaW5nLiBJJiMzOTttIGhvcGluZyB0byBjYXRjaCBhIGdsaW1wc2Ugb2YgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGN1cnJlbnQgaXNzdWUuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmM9MTEyNT1zdGF0aWMgaW50IG1lX3N3YXBjYWNoZV9jbGVhbihzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTEyOS1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTEzMDpcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTEzMS1cbi0tXG5tbS9tZW1vcnkuYz00ODQ0PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTUwNzYtXHRcdGlmICghV0FSTl9PTl9PTkNFKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSlcbm1tL21lbW9yeS5jOjUwNzc6XHRcdFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xubW0vbWVtb3J5LmMtNTA3OC1cdFx0Z290byBvdXRfbm9tYXA7XG4tLVxubW0vc2htZW0uYz0xODA4PWludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9zaG1lbS5jLTE5NDEtXHRcdC8qXG5tbS9zaG1lbS5jOjE5NDI6XHRcdCAqIFRoZSBzd2FwX2NhY2hlX2RlbF9mb2xpbygpIGJlbG93IGNvdWxkIGJlIGxlZnQgZm9yXG5tbS9zaG1lbS5jLTE5NDMtXHRcdCAqIHNocmlua19mb2xpb19saXN0KCkmIzM5O3MgZm9saW9fZnJlZV9zd2FwKCkgdG8gZGlzcG9zZSBvZjtcbi0tXG5tbS9zaG1lbS5jLTE5NDctXHRcdCAqL1xubW0vc2htZW0uYzoxOTQ4Olx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG5tbS9zaG1lbS5jLTE5NDktXHRcdGdvdG8gcmVkaXJ0eTtcbi0tXG5tbS9zaG1lbS5jPTIzNTE9c3RhdGljIHZvaWQgc2htZW1fc2V0X2ZvbGlvX3N3YXBpbl9lcnJvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtMjM2OC1cdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBOVUxMKTtcbm1tL3NobWVtLmM6MjM2OTpcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbm1tL3NobWVtLmMtMjM3MC1cdC8qXG4tLVxubW0vc2htZW0uYz0yNDU2PXN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYy0yNTk4LVx0Zm9saW9fcHV0X3N3YXAoZm9saW8sIE5VTEwpO1xubW0vc2htZW0uYzoyNTk5Olx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xubW0vc2htZW0uYy0yNjAwLVx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4tLVxubW0vc3dhcC5oPTMxMz12b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpO1xubW0vc3dhcC5oOjMxNDp2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vc3dhcC5oLTMxNS1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9zd2FwLmg9MzE5PXZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxubW0vc3dhcC5oLTMyMC1cdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xubW0vc3dhcC5oOjMyMTp2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC0zMjItXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXG4tLVxubW0vc3dhcC5oPTQ0Nj1zdGF0aWMgaW5saW5lIHZvaWQgKnN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5tbS9zd2FwLmgtNDUwLVxubW0vc3dhcC5oOjQ1MTpzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3N3YXAuaC00NTIte1xuLS1cbm1tL3N3YXAuaC00NTQtXG5tbS9zd2FwLmg6NDU1OnN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwLmgtNDU2LVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuLS1cbm1tL3N3YXBfc3RhdGUuYz0yNTc9c3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMDMtLyoqXG5tbS9zd2FwX3N0YXRlLmM6MzA0OiAqIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gLSBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZS5cbm1tL3N3YXBfc3RhdGUuYy0zMDUtICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzE4LSAqL1xubW0vc3dhcF9zdGF0ZS5jOjMxOTp2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3N3YXBfc3RhdGUuYy0zMjAtXHRcdFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzMzLS8qKlxubW0vc3dhcF9zdGF0ZS5jOjMzNDogKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxubW0vc3dhcF9zdGF0ZS5jLTMzNS0gKiBAZm9saW86IFRoZSBmb2xpby5cbm1tL3N3YXBfc3RhdGUuYy0zMzYtICpcbm1tL3N3YXBfc3RhdGUuYzozMzc6ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXG5tbS9zd2FwX3N0YXRlLmMtMzM4LSAqIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgZWl0aGVyIGNsZWFuIG9yIGhhcyBhIHN3YXAgY291bnRcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzQyLSAqL1xubW0vc3dhcF9zdGF0ZS5jOjM0Mzp2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9zd2FwX3N0YXRlLmMtMzQ0LXtcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzQ4LVx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcbm1tL3N3YXBfc3RhdGUuYzozNDk6XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTtcbm1tL3N3YXBfc3RhdGUuYy0zNTAtXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTE5OD1zdGF0aWMgaW50IF9fdHJ5X3RvX3JlY2xhaW1fc3dhcChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0yNTEtXG5tbS9zd2FwZmlsZS5jOjI1MjpcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbm1tL3N3YXBmaWxlLmMtMjUzLVx0Zm9saW9fc2V0X2RpcnR5KGZvbGlvKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTE1ODg9c3RhdGljIHZvaWQgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE2MTgtXHRcdCAqIHNsb3RzIHdpbGwgYmUgZnJlZWQgd2hlbiBmb2xpbyBpcyByZW1vdmVkIGZyb20gc3dhcCBjYWNoZVxubW0vc3dhcGZpbGUuYzoxNjE5Olx0XHQgKiAoX19zd2FwX2NhY2hlX2RlbF9mb2xpbykuXG5tbS9zd2FwZmlsZS5jLTE2MjAtXHRcdCAqL1xuLS1cbm1tL3N3YXBmaWxlLmM9MTc0Mj1pbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3N3YXBmaWxlLmMtMTc4MC1cdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKSB7XG5tbS9zd2FwZmlsZS5jOjE3ODE6XHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbm1tL3N3YXBmaWxlLmMtMTc4Mi1cdFx0Z290byBmYWlsZWQ7XG4tLVxubW0vc3dhcGZpbGUuYz0yMTE0PWJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcGZpbGUuYy0yMTIwLVxubW0vc3dhcGZpbGUuYzoyMTIxOlx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xubW0vc3dhcGZpbGUuYy0yMTIyLVx0Zm9saW9fc2V0X2RpcnR5KGZvbGlvKTtcbi0tXG5tbS92bXNjYW4uYz03MDI9c3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3Ztc2Nhbi5jLTc1Ny1cdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xubW0vdm1zY2FuLmM6NzU4Olx0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcbm1tL3Ztc2Nhbi5jLTc1OS1cdFx0c3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpO1xuLS1cbm1tL3pzd2FwLmM9OTc0PXN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4tLVxubW0venN3YXAuYy0xMDQ0LVx0aWYgKHJldCkge1xubW0venN3YXAuYzoxMDQ1Olx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG5tbS96c3dhcC5jLTEwNDYtXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDc4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2NvbmZpZyBhbmQgTWFrZWZpbGUgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYG1tL3N3YXBfc3RhdGUuY2AgaXMgYmVpbmcgY29tcGlsZWQuIFRoaXMgaXNuJiMzOTt0IGltbWVkaWF0ZWx5IG9idmlvdXMsIHNvIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgaXRzIGluY2x1c2lvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIHRoZXNlIGZ1bmN0aW9uYWxpdGllcy4gU28sIHRoZSBxdWVzdGlvbiBpczogd2hlcmUgYXJlIHRoZXNlIGZ1bmN0aW9uYWxpdGllcyBkZWZpbmVkLCBhbmQgaG93IGFyZSB0aGV5IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQ/IFRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBJZiBLY29uZmlnIGlzIG5vdCB0aGUgc291cmNlLCB0aGVuIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcHJlcHJvY2Vzc29yIGZsYWdzIGluIHRoZSByZWxldmFudCBzb3VyY2UgY29kZS4KCkZhaWxpbmcgdGhhdCwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCBmaWxlIGlzIHRoZSBjZW50cmFsIGNvbnRyb2wgcG9pbnQgZm9yIGJ1aWxkaW5nIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBtb2R1bGVzLCBhbmQgaXQgc2hvdWxkIGNvbnRhaW4gdGhlIHJ1bGVzIGZvciBjb21waWxpbmcgYG1tL3N3YXBfc3RhdGUuY2AuIEl0IHdpbGwgcmV2ZWFsIHRoZSBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMsIGluY2x1ZGUgcGF0aHMsIGFuZCBhbnkgY29tcGlsZXIgZmxhZ3MgYmVpbmcgdXNlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBkZXRlcm1pbmVzIGl0cyBjb21waWxhdGlvbiBpbnRvIHRoZSBmaW5hbCBrZXJuZWwgaW1hZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfc3RhdGVcXC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTc3PWVuZGlmXG5tbS9NYWtlZmlsZS03OC1cbm1tL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19TV0FQKVx0JiM0Mzs9IHBhZ2VfaW8ubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUub1xubW0vTWFrZWZpbGUtODAtb2JqLSQoQ09ORklHX1pTV0FQKVx0JiM0Mzs9IHpzd2FwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NDMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFN3YXAgQ29tcGlsYXRpb24qKgoKT2theSwgc28gYENPTkZJR19TV0FQYCBjbGVhcmx5IHRha2VzIGNhcmUgb2YgY29tcGlsaW5nIGBzd2FwX3N0YXRlLm9gLiBUaGF0IG11Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgbm93IEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBtZW1vcnkgY29udHJvbCBncm91cHMsIHBhcnRpY3VsYXJseSBgQ09ORklHX01FTUNHYCBhbmQgYENPTkZJR19NRU1DR19WMWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBzd2FwIGFuZCBtZW1jZyBhcmUgaW50ZWdyYXRlZCwgb3IgaWYgdGhleSBhcmUuIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgbG9vayBmb3IgdGhlIG1lbWNnIHN3YXAtb3V0IGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgc2VhcmNoaW5nIGluIGBtbS9NYWtlZmlsZWAgb3IgcGVyaGFwcyBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgcmVmZXJlbmNlcyB0byBzb21ldGhpbmcgbGlrZSBgX19tZW1jZzFfc3dhcG91dGAgb3IgdGhlIGZpbGUgYG1lbWNvbnRyb2wtdjEuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBjbHVlIGFib3V0IHRoZSBjb25uZWN0aW9uIGFuZCBob3cgdGhlc2UgY29tcG9uZW50cyBwbGF5IHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sLXYxXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0yOD1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cbm1tL01ha2VmaWxlOjI5OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxubW0vTWFrZWZpbGUtMzAtS0NPVl9JTlNUUlVNRU5UX21tem9uZS5vIDo9IG5cbi0tXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX0xJVkVVUERBVEVfTUVNRkQpICYjNDM7PSBtZW1mZF9sdW8ub1xubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DR19WMSkgJiM0Mzs9IG1lbWNvbnRyb2wtdjEub1xubW0vTWFrZWZpbGUtMTA2LW9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyNzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHRleHQ6CgoqKkRpdmluZyBpbnRvIG1lbWNvbnRyb2wuaCBhbmQgX19tZW1jZzFfc3dhcG91dCoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IHdhbnRzIG1lIHRvIGFuYWx5emUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gbWVtb3J5IGNvbnRyb2wsIHNwZWNpZmljYWxseSBsb29raW5nIGFyb3VuZCB0aGUgYF9fbWVtY2cxX3N3YXBvdXRgIGZ1bmN0aW9uLiBSaWdodCwgdGhhdCBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBjZW50cmFsIHRvIGhvdyBtZW1vcnkgaXMgbWFuYWdlZCBhdCB0aGUgY29udHJvbCBncm91cCBsZXZlbCBhbmQgaG93IHN3YXBwaW5nIGhhcHBlbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCBoaWVyYXJjaHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoYXQgcGFydGljdWxhciBtYWNybyBkb2VzIGV4YWN0bHkuIEl0JiMzOTtzIGxpa2VseSBhIGNyaXRpY2FsIGNvbXBvbmVudCBmb3IgaW1wbGVtZW50aW5nIHN3YXAgbGltaXRzLCBldmljdGlvbiBwb2xpY2llcywgYW5kIGdlbmVyYWwgcmVzb3VyY2UgbWFuYWdlbWVudCBhdCB0aGUgbWVtY2cgbGV2ZWwuIFNvIEkgc2hvdWxkIHN0YXJ0IGJ5IHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQuIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAgd2lsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgaW50ZXJmYWNlcyByZWxhdGVkIHRvIG1lbW9yeSBjb250cm9sIGdyb3VwcyBhcmUgc2V0IHVwLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgbWVtY2dzIHRyYWNrIHBhZ2VzLCBob3cgc3dhcCBsaW1pdHMgYXJlIGVuZm9yY2VkLCBhbmQgaG93IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb3JlIHBhZ2UgY2FjaGUgYW5kIHN3YXAgc3Vic3lzdGVtcyB3b3Jrcy4gSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBiZSBsb29raW5nIGZvciBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcywgZ2xvYmFsIGZsYWdzLCBhbmQgcmVsYXRlZCBoZWxwZXIgZnVuY3Rpb25zLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01FTUNHX1YxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTg5PXN0cnVjdCBtZW1fY2dyb3VwIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0yNzUtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoyNzY6I2lmZGVmIENPTkZJR19NRU1DR19WMVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjc3LVx0LyogTGVnYWN5IGNvbnN1bWVyLW9yaWVudGVkIGNvdW50ZXJzICovXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzEwLVx0aW50IHN3YXBwaW5lc3M7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDozMTE6I2VuZGlmIC8qIENPTkZJR19NRU1DR19WMSAqL1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzEyLVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5MDg9c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MTctXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTE4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MTktYm9vbCBtZW1fY2dyb3VwX29vbV9zeW5jaHJvbml6ZShib29sIHdhaXQpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5MzI9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTkzNy1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5Mzg6I2Vsc2UgLyogQ09ORklHX01FTUNHX1YxICovXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTM5LXN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2luX21lbWNnX29vbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTk1Mz1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTU2LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk1NzojZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTU4LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk1OTojaWYgZGVmaW5lZChDT05GSUdfTUVNQ0dfVjEpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TV0FQKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwOTYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gUXVhbmRhcnkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGRlcGVuZGVuY2llcyBhbmQgYSBmZXcgdGhpbmdzIGFyZSBpbW1lZGlhdGVseSBqdW1waW5nIG91dC4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IGVuYWJsaW5nIHN3YXAgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgbGlua2VkIHRvIGBzd2FwX3N0YXRlLm9gIGFuZCBmdW5jdGlvbnMgbGlrZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgYW5kIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AsICpkZW1hbmRzKiB0aGF0IGBDT05GSUdfU1dBUGAgYmUgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIG5vLWJyYWluZXIuIEJ1dCB0aGVuLCBJJiMzOTttIG5vdGljaW5nIHRoaXMgaW50ZXJwbGF5IHdpdGggYENPTkZJR19NRU1DR19WMWAsIHdoaWNoIHJlcXVpcmVzIGBDT05GSUdfTUVNQ0dgLCBhbmQgc2VlbXMgdG8gYmUgdGllZCB0byBgX19tZW1jZzFfc3dhcG91dGAuCgpUaGlzIHNpZ25hbHMgdGhhdCB0aGVyZSYjMzk7cyBhIHBvc3NpYmxlIGludGVyYWN0aW9uIGJldHdlZW4gbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIGFuZCB0aGUgc3dhcHBpbmcgbWVjaGFuaXNtLCBzb21ldGhpbmcgdGhhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBmdWxseS4gVG8gY2xhcmlmeSB0aGUgcHJlY2lzZSByZWxhdGlvbnNoaXBzIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNvbmZpZ3VyYXRpb25zLCBJIG5lZWQgdG8gY29uc3VsdCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gTXkgaW50dWl0aW9uIGlzIHRvIHN0YXJ0IHdpdGggZWl0aGVyIGBpbml0L0tjb25maWdgIG9yIGBtbS9LY29uZmlnYCwgYXMgdGhvc2UgbG9jYXRpb25zIHVzdWFsbHkgaG91c2UgdGhlIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpbml0aWFsaXphdGlvbiBvcHRpb25zLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCBhbmQgc3dhcHBpbmcuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBleGFjdCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYE1FTUNHX1YxYCBhbmQgYFNXQVBgIHRvIGNsYXJpZnkgdGhlIHByZWNpc2UgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DR19WMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTEwMT1jb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvbmZpZ3VyYXRpb24gcHV6emxlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBpbml0L0tjb25maWdgLiBJdCYjMzk7cyB1c3VhbGx5IHRoZSBzdGFydGluZyBwb2ludCBmb3IgYSBsb3Qgb2YgY29yZSBzeXN0ZW0gb3B0aW9ucy4gQW5kIEkmIzM5O20gdGhpbmtpbmcsIGJhc2VkIG9uIHdoYXQgSSYjMzk7bSBkZWFsaW5nIHdpdGgsIGxpbmUgMTEwOCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgZGVlcCBkaXZlLiBJJiMzOTt2ZSBnb3QgYSBmZWVsaW5nIHNvbWV0aGluZyByZWxldmFudCB0byB0aGUgaXNzdWUgSSYjMzk7bSB3b3JraW5nIG9uIG1pZ2h0IGJlIGRlZmluZWQgb3IgcmVmZXJlbmNlZCBhcm91bmQgdGhlcmUuIFRpbWUgdG8gc2VlIHdoYXQgc2VjcmV0cyB0aGF0IHNlY3Rpb24gb2YgdGhlIGNvbmZpZyBmaWxlIGhvbGRzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEwMDpcdFxuMTEwMTpcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuMTEwMjpcdFx0Ym9vbFxuMTEwMzpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTEwNDpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTEwNTpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTEwNjpcdFx0ZGVmYXVsdCB5XG4xMTA3Olx0XG4xMTA4Olx0Y29uZmlnIE1FTUNHX1YxXG4xMTA5Olx0XHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjExMTA6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjExMTE6XHRcdGRlZmF1bHQgblxuMTExMjpcdFx0aGVscFxuMTExMzpcdFx0ICBMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyIHdoaWNoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnlcbjExMTQ6XHRcdCAgY2dyb3VwIHYyIGltcGxlbWVudGF0aW9uLiBUaGUgdjEgaXMgdGhlcmUgZm9yIGxlZ2FjeSBhcHBsaWNhdGlvbnNcbjExMTU6XHRcdCAgd2hpY2ggaGF2ZW4mIzM5O3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XG4xMTE2Olx0XHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xuMTExNzpcdFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbjExMTg6XHRcbjExMTk6XHRcdCAgUGxlYXNlIG5vdGUgdGhhdCBmZWF0dXJlIHNldCBvZiB0aGUgbGVnYWN5IG1lbW9yeSBjb250cm9sbGVyIGlzIGxpa2VseVxuMTEyMDpcdFx0ICBnb2luZyB0byBzaHJpbmsgZHVlIHRvIGRlcHJlY2F0aW9uIHByb2Nlc3MuIE5ldyBkZXBsb3ltZW50cyB3aXRoIHYxXG4xMTIxOlx0XHQgIGNvbnRyb2xsZXIgYXJlIGhpZ2hseSBkaXNjb3VyYWdlZC5cbjExMjI6XHRcbjExMjM6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTEyNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTEyMQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBTd2FwIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBuYWlsIGRvd24gd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBzd2FwIGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gTXkgaW5zdGluY3Qgc2F5cyB0byBzdGFydCBsb29raW5nIGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMg4oCTIHRoZXkmIzM5O3JlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgdGhpcyBraW5kIG9mIHRoaW5nLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGRyaWxsIGRvd24gdG8gZWl0aGVyIHRoZSBgaW5pdC9LY29uZmlnYCBkaXJlY3Rvcnkgb3IgdGhlIGBtbS9LY29uZmlnYCBkaXJlY3RvcnkuIEdpdmVuIHRoYXQgc3dhcCBpcyBmdW5kYW1lbnRhbCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3lzdGVtIGluaXRpYWxpemF0aW9uLCBib3RoIHNlZW0gbGlrZSBsb2dpY2FsIHBsYWNlcyB0byBmaW5kIHRoZSByZWxldmFudCBgQ09ORklHX1NXQVBgIG9wdGlvbiAob3IgcmVsYXRlZCBzZXR0aW5ncykuIEnigJlsbCBzdGFydCB3aXRoIHRob3NlIHR3byBsb2NhdGlvbnMgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuIEl0JiMzOTtzIHRoZSBtb3N0IGxpa2VseSBwYXRoIHRvIGxvY2F0aW5nIHRoZSBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMgSSBuZWVkIHRvIGluc3BlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxuLS1cbm1tL0tjb25maWctMTEtXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxubW0vS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDAzCgkJCQkJCQlvdXRwdXQ6IDE2MwoJCQkJCQkJdGhvdWdodHM6IDUyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUcmlhZ2UgRmluZGluZ3MgZm9yIFN3YXAgYW5kIE1lbWNnIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBgU1dBUGAsIGBNRU1DR2AsIGFuZCBgTUVNQ0dfVjFgLiBNeSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IGZyb20gdGhlIGluc3RydWN0aW9uczogYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gLCBgX19yZW1vdmVfbWFwcGluZ2AsIGFuZCBgX19tZW1jZzFfc3dhcG91dGAuCgpJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgZGlmZiB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJdCBsb29rcyBsaWtlIGBtbS9zd2FwLmhgIGRlZmluZXMgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLiBUaGVuLCBpbiBgbW0vc3dhcF9zdGF0ZS5jYCwgdGhlcmUmIzM5O3MgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYC4gQW5kIG92ZXIgaW4gYG1tL3Ztc2Nhbi5jYCwgd2Ugc2VlIGBfX3JlbW92ZV9tYXBwaW5nYC4KCk5vdywgYF9fcmVtb3ZlX21hcHBpbmdgIGlzIGEgY29tbW9uIGZ1bmN0aW9uLCB1c2VkIGR1cmluZyBwYWdlIHJlY2xhaW0uIEl0JiMzOTtzIG5vdCAqc3BlY2lmaWMqIHRvIHRoaXMgY2hhbmdlLiBIb3dldmVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbjogYF9fcmVtb3ZlX21hcHBpbmdgIGlzIHVzZWQgd2hlbiBldmljdGluZyBwYWdlcyBmcm9tIGFkZHJlc3Mgc3BhY2VzLCBpbmNsdWRpbmcgc3dhcGNhY2hlLiBUaGUgb3RoZXIgdHdvIGZ1bmN0aW9ucywgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gLCBhcmUgc3dhcCBjYWNoZSBmdW5jdGlvbnMuIFRoZSBgX19tZW1jZzFfc3dhcG91dGAgZnVuY3Rpb24gaXMgYSBjZ3JvdXAgdjEgc3dhcG91dCBjaGFyZ2UgdHJhbnNmZXIgZnVuY3Rpb24gd2hpY2ggaGFzIGhhZCBpdHMgY2FsbCBzaXRlIGFuZCBwcmVyZXF1aXNpdGUgb3JkZXJpbmcgbW92ZWQgaW50byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AuCgpCYWNrIHRvIHRoZSBpbnN0cnVjdGlvbnMgb24gRm9jdXNTeW1ib2xzOiAmIzM0O2Z1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMuJiMzNDsgVGhpcyByZWFmZmlybXMgbXkgc2VsZWN0aW9uOiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGBfX21lbWNnMV9zd2Fwb3V0YCBhbmQgSSYjMzk7bSBpbmNsdWRpbmcgYF9fcmVtb3ZlX21hcHBpbmdgIGJlY2F1c2UgaXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gdGhlIHByb2Nlc3MuCgpOb3cgZm9yIHRoZSBFbmFibGVDb25maWdzOiBgU1dBUGAsIGBNRU1DR2AsIGFuZCBgTUVNQ0dfVjFgLiBZZXAsIHRoYXQgbWF0Y2hlcyB0aGUgY29kZS4KCkZpbmFsbHksIGxldCYjMzk7cyBhc3Nlc3MgdGhlIHRyaWFnZSBwaGlsb3NvcGh5LiBSZWFjaGFiaWxpdHk/IFN0YW5kYXJkIFFFTVUgd2l0aCBzd2FwIGFuZCBtZW1jZyBlbmFibGVkLCB0aGlzIGlzIGVhc2lseSByZWFjaGFibGUgdGhyb3VnaCBtZW1vcnkgcHJlc3N1cmUsIHBhZ2UgcmVjbGFpbSwgc3dhcG91dCwgYW5kIHN3YXAgY2FjaGUuIFN1YnN5c3RlbTogZGVmaW5pdGVseSBtbSAobWVtb3J5IG1hbmFnZW1lbnQpLCBzcGVjaWZpY2FsbHkgc3dhcCBhbmQgbWVtY2cuIEZ1enppbmcgdmFsdWU/IFRoaXMgaXMgZGVmaW5pdGVseSBXb3J0aEZ1enppbmcgPSB0cnVlLgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGVzZSBmaW5kaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDssCiAgICAmIzM0O3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDssCiAgICAmIzM0O19fbWVtY2cxX3N3YXBvdXQmIzM0OywKICAgICYjMzQ7X19yZW1vdmVfbWFwcGluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gKG1tL3N3YXBfc3RhdGUuYywgbW0vdm1zY2FuLmMsIG1tL3N3YXAuaCksIG1vdmluZyB0aGUgX19tZW1jZzFfc3dhcG91dCgpIGNhbGwgaW50byBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgYW5kIHVwZGF0aW5nIGNhbGxlcnMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgc3dhcCBvcGVyYXRpb25zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0OywKICAgICYjMzQ7c3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0OywKICAgICYjMzQ7X19tZW1jZzFfc3dhcG91dCYjMzQ7LAogICAgJiMzNDtfX3JlbW92ZV9tYXBwaW5nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGRlbGV0aW9uIGFuZCBwYWdlIHJlY2xhaW0gcGF0aHMgaW4gY29yZSBtbSAobW0vc3dhcF9zdGF0ZS5jLCBtbS92bXNjYW4uYywgbW0vc3dhcC5oKSwgbW92aW5nIHRoZSBfX21lbWNnMV9zd2Fwb3V0KCkgY2FsbCBpbnRvIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oKSBhbmQgdXBkYXRpbmcgY2FsbGVycy4gVGhlc2UgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCBzd2FwIG9wZXJhdGlvbnMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW50ZXJuYWwgc3dhcCBjYWNoZSBhbmQgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIGxvZ2ljIChfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBzd2FwX2NhY2hlX2RlbF9mb2xpbywgYW5kIF9fcmVtb3ZlX21hcHBpbmcgaW4gdm1zY2FuLmMpIGJ5IG1vdmluZyB0aGUgY2FsbCB0byBfX21lbWNnMV9zd2Fwb3V0KCkgaW5zaWRlIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oKSB3aXRoIGFuIGV4cGxpY2l0IGJvb2xlYW4gcGFyYW1ldGVyICYjMzk7c3dhcG91dCYjMzk7LCBhbmQgYWRqdXN0aW5nIHRoZSBvcmRlcmluZyByZWxhdGl2ZSB0byBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKCkuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCByZWZhY3RvcmluZyAvIG9yZGVyaW5nIGFkanVzdG1lbnQgZm9yIGZvbGlvIHN0YXRpc3RpY3MgYW5kIG1lbWNnIHN3YXBvdXQgYWNjb3VudGluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBidWZmZXJzIHRvIHVzZXJzcGFjZSBvciBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgYW5kIGRvZXMgbm90IGNyZWF0ZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKGUuZy4gbG9ja2luZywgcGFnZSByZWZjb3VudGluZywgcmFjZSBjb25kaXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBvciBWTSBkZWJ1ZyBjaGVja3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NDM0Yjc3YjEwZTJkMGFmMWRmZDYxMDc2Yjg3NmI4NDYwODQ5NWU3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMDQ6MTc6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmgKaW5kZXggMGI1ZDUwNzczOWJjYi4uYjNiNTRjMjg5MjlhMSAxMDA2NDQKLS0tIGEvbW0vc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaApAQCAtMzE5LDcgJiM0MzszMTksOCBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTsKIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAotCQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpOwomIzQzOwkJCSAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LAomIzQzOwkJCSAgICBib29sIHN3YXBvdXQpOwogdm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCQkJCXN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7CiAKQEAgLTQ1Miw3ICYjNDM7NDUzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCi0JCXN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpCiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LAomIzQzOwkJYm9vbCBzd2Fwb3V0KQogewogfQogCmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggMzA1ODc3ZTFmNGQ3Yi4uNjI1YzE4NWExY2E0ZCAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtMzA2LDIxICYjNDM7MzA2LDI4IEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKICAqIEBmb2xpbzogVGhlIGZvbGlvLgogICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by4KICAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuCiYjNDM7ICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBmb2xpbyBpcyBiZWluZyByZWNsYWltZWQgYWZ0ZXIgc3dhcG91dC4KICAqCiAgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuCiAgKiBUaGlzIHdvbiYjMzk7dCBwdXQgdGhlIGZvbGlvJiMzOTtzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LgogICoKICAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZQogICogdXNpbmcgdGhlIGluZGV4IG9mIEBlbnRyeSwgYW5kIGxvY2sgdGhlIGNsdXN0ZXIgdGhhdCBob2xkcyB0aGUgZW50cmllcy4KJiM0MzsgKiBJZiBAc3dhcG91dCBpcyBzZXQsIHRoZSBmb2xpbyBzaG91bGQgYmUgaW4gcmVjbGFpbSBwYXRoIGFuZCBJUlFzCiYjNDM7ICogc2hvdWxkIGJlIGRpc2FibGVkLgogICovCiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbywKLQkJCSAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KQomIzQzOwkJCSAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpCiB7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIAotCV9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTsKIAlub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpOwogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpOwomIzQzOwomIzQzOwlpZiAoc3dhcG91dCkKJiM0MzsJCV9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTsKJiM0MzsKJiM0MzsJX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpOwogfQogCiAvKioKQEAgLTMzOSw3ICYjNDM7MzQ2LDcgQEAgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tJmd0O3N3YXA7CiAKIAljaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpOwotCV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCk7CiYjNDM7CV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpOwogCXN3YXBfY2x1c3Rlcl91bmxvY2soY2kpOwogCiAJZm9saW9fcmVmX3N1Yihmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMjQ1ZjY4Yzc1YjI4OS4uMjliY2VkNDNiMGNlNiAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTc1NSw4ICYjNDM7NzU1LDcgQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJCWlmIChyZWNsYWltZWQgJmFtcDsmYW1wOyAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKQogCQkJc2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTsKLQkJX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpOwotCQlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTsKJiM0MzsJCV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpOwogCQlzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7CiAJfSBlbHNlIHsKIAkJdm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMjMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMaW51eCBLZXJuZWwgUGF0Y2g6IE5lZWRzS01TQU4gRGV0ZXJtaW5hdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQuIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGFuYWx5emUgdGhpcywgc28gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBUaGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBzd2FwLXJlbGF0ZWQgZmlsZXM6IGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIGBtbS92bXNjYW4uY2AuIFRoYXQgbmFycm93cyB0aGUgZm9jdXMgcmlnaHQgYXdheS4KClRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB0aGUgYWRkaXRpb24gb2YgYSBgYm9vbCBzd2Fwb3V0YCBwYXJhbWV0ZXIgdG8gdGhlIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBmdW5jdGlvbiBpbiBgbW0vc3dhcC5oYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBjaGFuZ2UsIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBmbGFnLiBUaGVuLCBsb29raW5nIGF0IGBtbS9zd2FwX3N0YXRlLmNgLCBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2Agbm93ICp1c2VzKiB0aGF0IHBhcmFtZXRlci4gQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggbW92ZXMgdGhlIGNhbGwgdG8gYF9fbWVtY2cxX3N3YXBvdXRgICppbnNpZGUqIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgYnV0ICpjb25kaXRpb25hbGx5KiBiYXNlZCBvbiB0aGUgYHN3YXBvdXRgIGZsYWcuIEl0IHNlZW1zIHRoYXQgd2hldGhlciBgX19tZW1jZzFfc3dhcG91dGAgaGFwcGVucyBvciBub3QsIGRlcGVuZHMgb24gd2hldGhlciB0aGUgYHN3YXBvdXRgIHBhcmFtZXRlciBpcyB0cnVlIG9yIGZhbHNlLiBJdCBhcHBlYXJzIHRoYXQgaXQgaGFwcGVucyBhZnRlciBzb21lIHN0YXRpc3RpY3MgYXJlIHVwZGF0ZWQsIGBub2RlX3N0YXRfbW9kX2ZvbGlvYCBhbmQgYGxydXZlY19zdGF0X21vZF9mb2xpb2AuIEJlZm9yZSwgaXQgd2FzIGNhbGxlZCBvdXQgb2YgdGhhdCBmdW5jdGlvbiBlbnRpcmVseS4KCkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMgaW4gYG1tL3Ztc2Nhbi5jYCwgdGhlIHBhdGNoIG1vZGlmaWVzIGNhbGxzIHRvIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYC4gT25lIGNhbGwgbm93IHBhc3NlcyBgdHJ1ZWAgZm9yIGBzd2Fwb3V0YCwgYW5kIGFub3RoZXIgbm93IHBhc3NlcyBgZmFsc2VgLiBTbywgY2xlYXJseSwgdGhpcyBmbGFnIGNvbnRyb2xzIHNvbWUgc3BlY2lmaWMgYmVoYXZpb3IgcmVsYXRlZCB0byBzd2FwcGluZyBvdXQuCgpUbyByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LCBJIG5lZWQgdG8ga25vdyB3aGF0IGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgYF9fbWVtY2cxX3N3YXBvdXRgLCBhbmQgdGhvc2Ugc3RhdCBtb2RpZmljYXRpb24gZnVuY3Rpb25zICpkbyouIEkgd2lsbCB1c2UgbXkgdG9vbHMgKGdyZXBwZXIsIHJlYWQtZmlsZSkgdG8gZmlndXJlIG91dCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgZmxhZy4gVGhhdCB3aWxsIGJlIHRoZSBrZXkgdG8gZGV0ZXJtaW5pbmcgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyB0aGF0IEtNU0FOIHdvdWxkIG5lZWQgdG8gZmxhZy4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgYSBLTVNBTiBjaGVjayBtaWdodCBiZSBuZWVkZWQgaWYgdGhlcmUgaXMgYSBwb3RlbnRpYWwgdG8gcmVhZCBvciB3cml0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciB0byB3cml0ZSBtZW1vcnkgdG8gYSBsb2NhdGlvbiB0aGF0IG1heSB0cmlnZ2VyIGEgcmFjZSBjb25kaXRpb24sIG9yIGEgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGlzIGJlaW5nIGNvbnRyb2xsZWQgdG8gbWFrZSB0aGUgY2FsbC4gT25jZSBJIHNlZSAqdGhhdCosIEkgY2FuIGRldGVybWluZSBpZiBgTmVlZHNLTVNBTmAgaXMgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21lbWNnMV9zd2Fwb3V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5NTM9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2MC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjE6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2Mi12b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2NS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjY6c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjctXHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NTMzPXZvaWQgZGVmZXJyZWRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBwYXJ0aWFsbHlfbWFwcGVkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU1MS1cdCAqIEV4Y2x1ZGUgc3dhcGNhY2hlOiBvcmlnaW5hbGx5IHRvIGF2b2lkIGEgY29ycnVwdCBkZWZlcnJlZCBzcGxpdFxubW0vaHVnZV9tZW1vcnkuYzo0NTUyOlx0ICogcXVldWUuIE5vd2FkYXlzIHRoYXQgaXMgZnVsbHkgcHJldmVudGVkIGJ5IF9fbWVtY2cxX3N3YXBvdXQoKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDU1My1cdCAqIGJ1dCBpZiBwYWdlIHJlY2xhaW0gaXMgYWxyZWFkeSBoYW5kbGluZyB0aGUgc2FtZSBmb2xpbywgaXQgaXNcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjQ3PXZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yNTgtLyoqXG5tbS9tZW1jb250cm9sLXYxLmM6MjU5OiAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXG5tbS9tZW1jb250cm9sLXYxLmMtMjYwLSAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtc3cgY2hhcmdlIHRvIHRyYW5zZmVyXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTI2OC0gKi9cbm1tL21lbWNvbnRyb2wtdjEuYzoyNjk6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG5tbS9tZW1jb250cm9sLXYxLmMtMjcwLXtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MzE5PXZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMjctXHRpZiAoc3dhcG91dClcbm1tL3N3YXBfc3RhdGUuYzozMjg6XHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbm1tL3N3YXBfc3RhdGUuYy0zMjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IGluIExpbnV4KioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYSBtZW1vcnktcmVsYXRlZCBpc3N1ZSwgYW5kIEkmIzM5O20gdGhpbmtpbmcgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyBhcm91bmQgdGhlIHN3YXAgYW5kIHNjYW5uaW5nIG1lY2hhbmlzbXMuIEkgbmVlZCB0byBnZXQgbXkgaGFuZHMgZGlydHksIHNvIGxldCYjMzk7cyBqdW1wIGludG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbW0vc3dhcF9zdGF0ZS5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHZpZXcgb2YgaG93IHN3YXBwaW5nIGlzIG1hbmFnZWQgYXQgdGhlIGNvcmUgbGV2ZWwuIFRoZW4sIHNpbmNlIHRoZSBzd2FwIHByb2Nlc3MgaXMgdHJpZ2dlcmVkIGJ5IHNvbWUgc29ydCBvZiBsb3cgbWVtb3J5IGlzc3VlLCBgbW0vdm1zY2FuLmNgIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwuIEkgbmVlZCB0byBleGFtaW5lIHRoZSB2bSBzY2FubmluZyBsb2dpYyB0byBzZWUgd2hlbiwgd2h5LCBhbmQgaG93IHRoZSBrZXJuZWwgZGVjaWRlcyBpdCYjMzk7cyB0aW1lIHRvIG9mZmxvYWQgbWVtb3J5IHRvIHN3YXAuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBhcmVhcyB3aGVyZSB0aGVzZSB0d28gZmlsZXMgaW50ZXJhY3QuIEkmIzM5O2xsIGZvY3VzIG9uIHRob3NlIHBhcnRzLCBiZWNhdXNlIHRoZXkgc2hvdWxkIHJldmVhbCBob3cgd2UgdHJpZ2dlciwgbWFuYWdlIGFuZCB1dGlsaXplIHN3YXAgc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc3dhcF9zdGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDA6XHRcdH1cbiAzMDE6XHR9XG4gMzAyOlx0XG4gMzAzOlx0LyoqXG4gMzA0Olx0ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxuIDMwNTpcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4gMzA2Olx0ICogQGZvbGlvOiBUaGUgZm9saW8uXG4gMzA3Olx0ICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cbiAzMDg6XHQgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxuIDMwOTpcdCAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgZm9saW8gaXMgYmVpbmcgcmVjbGFpbWVkIGFmdGVyIHN3YXBvdXQuXG4gMzEwOlx0ICpcbiAzMTE6XHQgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXG4gMzEyOlx0ICogVGhpcyB3b24mIzM5O3QgcHV0IHRoZSBmb2xpbyYjMzk7cyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cbiAzMTM6XHQgKlxuIDMxNDpcdCAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxuIDMxNTpcdCAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXG4gMzE2Olx0ICogSWYgQHN3YXBvdXQgaXMgc2V0LCB0aGUgZm9saW8gc2hvdWxkIGJlIGluIHJlY2xhaW0gcGF0aCBhbmQgSVJRc1xuIDMxNzpcdCAqIHNob3VsZCBiZSBkaXNhYmxlZC5cbiAzMTg6XHQgKi9cbiAzMTk6XHR2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiAzMjA6XHRcdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuIDMyMTpcdHtcbiAzMjI6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gMzIzOlx0XG4gMzI0Olx0XHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpO1xuIDMyNTpcdFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XG4gMzI2Olx0XG4gMzI3Olx0XHRpZiAoc3dhcG91dClcbiAzMjg6XHRcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuIDMyOTpcdFxuIDMzMDpcdFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIDMzMTpcdH1cbiAzMzI6XHRcbiAzMzM6XHQvKipcbiAzMzQ6XHQgKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxuIDMzNTpcdCAqIEBmb2xpbzogVGhlIGZvbGlvLlxuIDMzNjpcdCAqXG4gMzM3Olx0ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXG4gMzM4Olx0ICogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBlaXRoZXIgY2xlYW4gb3IgaGFzIGEgc3dhcCBjb3VudFxuIDMzOTpcdCAqIGVxdWFsIHRvIHplcm8sIG9yIGl0IG1heSBjYXVzZSBkYXRhIGxvc3MuXG4gMzQwOlx0ICpcbiAzNDE6XHQgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGUuXG4gMzQyOlx0ICovXG4gMzQzOlx0dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIDM0NDpcdHtcbiAzNDU6XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG4gMzQ2Olx0XHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gMzQ3Olx0XG4gMzQ4Olx0XHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xuIDM0OTpcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XG4gMzUwOlx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiAzNTE6XHRcbiAzNTI6XHRcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gMzUzOlx0fVxuIDM1NDpcdFxuIDM1NTpcdC8qKlxuIDM1NjpcdCAqIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvIC0gUmVwbGFjZSBhIGZvbGlvIGluIHRoZSBzd2FwIGNhY2hlLlxuIDM1NzpcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4gMzU4Olx0ICogQG9sZDogVGhlIG9sZCBmb2xpbyB0byBiZSByZXBsYWNlZC5cbiAzNTk6XHQgKiBAbmV3OiBUaGUgbmV3IGZvbGlvLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTM3CgkJCQkJCQlvdXRwdXQ6IDIyNgoJCQkJCQkJdGhvdWdodHM6IDQ2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN3YXAgQ2FjaGUgRGVsZXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBjb2RlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHNodWZmbGluZyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpbiB0aGUgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGZ1bmN0aW9uLiBQcmV2aW91c2x5LCBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpb2Agd2FzIGNhbGxlZCBiZWZvcmUgdGhlIHN0YXRzIG1vZGlmaWNhdGlvbnMgKGBub2RlX3N0YXRfbW9kX2ZvbGlvYCwgYGxydXZlY19zdGF0X21vZF9mb2xpb2ApLCBhbmQgaW4gYF9fcmVtb3ZlX21hcHBpbmdgLCBgX19tZW1jZzFfc3dhcG91dGAgaGFwcGVuZWQgYmVmb3JlIGNhbGxpbmcgdGhlIHN3YXAgY2FjaGUgZGVsZXRpb24gZnVuY3Rpb24uIE5vdywgYF9fbWVtY2cxX3N3YXBvdXRgIGhhcyBiZWVuIG1vdmVkICppbnRvKiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGFuZCBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpb2AgaXMgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHN0YXRzIHVwZGF0ZXMgYW5kIHRoZSBgX19tZW1jZzFfc3dhcG91dGAgY2FsbC4KCk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFNvLCBJIG5lZWQgdG8gdGhvcm91Z2hseSB2ZXQgdGhpcyBjaGFuZ2UuIExldCYjMzk7cyBydW4gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2U/KiogTm9wZS4gVGhpcyBpc24mIzM5O3QgdG91Y2hpbmcgYW55IGRhdGEgdGhhdCYjMzk7cyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSB0aHJvdWdoIGFueSBvZiB0aGUgdXN1YWwgY2hhbm5lbHMgbGlrZSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgaW9jdGxzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBObywgdGhlIGxvZ2ljIGhpbmdlcyBvbiBhIGJvb2xlYW4sIGBzd2Fwb3V0YCwgd2hpY2ggaXMgcGFzc2VkIGZyb20gdGhlIGNhbGxlci4gSXQmIzM5O3MgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCBpbiBgX19yZW1vdmVfbWFwcGluZ2Agb3IgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYC4KMy4gICoqTmV3IGRhdGEgc3RydWN0dXJlcyBvciBhbGxvY2F0aW9ucyB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBOby4gVGhpcyByZWZhY3RvciBpc24mIzM5O3QgaW50cm9kdWNpbmcgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgc28gd2UmIzM5O3JlIHNhZmUgdGhlcmUuCjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/KiogTm90IGhlcmUuIE5vIGNoYW5nZXMgdGhhdCBJIGNhbiBzZWUgdGhhdCB3b3VsZCBhbGxvdyB1cyB0byByZWFkIGJleW9uZCB0aGUgYm91bmRhcmllcyBvZiBleGlzdGluZyBidWZmZXJzLgoKVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGFuIGludGVybmFsIHJlZmFjdG9yIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBXZSYjMzk7cmUgcmVvcmRlcmluZyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBwcm9jZXNzIHdpdGggbWVtY2cgYWNjb3VudGluZywgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBhY2N1cmF0ZSBtZW1vcnkgdXNhZ2UgdHJhY2tpbmcuIFRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgcG90ZW50aWFsIGJ1Z3MgYXJlIHRoaW5ncyBsaWtlIHJhY2UgY29uZGl0aW9ucywgcmVmZXJlbmNlIGNvdW50aW5nIGVycm9ycywgb3IgaXNzdWVzIHdpdGggbG9ja2luZyBvciB1c2UtYWZ0ZXItZnJlZSwgYWxsIG9mIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IG91ciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAuIEFzIGZhciBhcyBJIGNhbiBzZWUsIHdlJiMzOTtyZSBub3QgcmVhZGluZywgY3JlYXRpbmcsIG9yIGV4cG9zaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLgoKVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IEtNU0FOIGlzc3Vlcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYWxsIHRoZSBkZXRhaWxzIGFnYWluIHRvIGVuc3VyZSBteSByZWFzb25pbmcgaXMgY29tcGxldGVseSBzb3VuZCBhbmQgSSBjYW4gcHJvdmlkZSBhIGNvbXByZWhlbnNpdmUgZXhwbGFuYXRpb24gZm9yIG15IGNvbmNsdXNpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGludGVybmFsIHN3YXAgY2FjaGUgYW5kIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBsb2dpYyAoX19zd2FwX2NhY2hlX2RlbF9mb2xpbywgc3dhcF9jYWNoZV9kZWxfZm9saW8sIGFuZCBfX3JlbW92ZV9tYXBwaW5nIGluIHZtc2Nhbi5jKSBieSBtb3ZpbmcgdGhlIGNhbGwgdG8gX19tZW1jZzFfc3dhcG91dCgpIGluc2lkZSBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgd2l0aCBhbiBleHBsaWNpdCBib29sZWFuIHBhcmFtZXRlciAmIzM5O3N3YXBvdXQmIzM5OywgYW5kIGFkanVzdGluZyB0aGUgb3JkZXJpbmcgcmVsYXRpdmUgdG8gX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbygpLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYW4gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgcmVmYWN0b3JpbmcgLyBvcmRlcmluZyBhZGp1c3RtZW50IGZvciBmb2xpbyBzdGF0aXN0aWNzIGFuZCBtZW1jZyBzd2Fwb3V0IGFjY291bnRpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyB0byB1c2Vyc3BhY2Ugb3Igb3RoZXIga2VybmVsIHN1YnN5c3RlbXMsIGFuZCBkb2VzIG5vdCBjcmVhdGUgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQW55IHBvdGVudGlhbCBidWdzIChlLmcuIGxvY2tpbmcsIHBhZ2UgcmVmY291bnRpbmcsIHJhY2UgY29uZGl0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3IgVk0gZGVidWcgY2hlY2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW50ZXJuYWwgc3dhcCBjYWNoZSBhbmQgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIGxvZ2ljIChfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBzd2FwX2NhY2hlX2RlbF9mb2xpbywgYW5kIF9fcmVtb3ZlX21hcHBpbmcgaW4gdm1zY2FuLmMpIGJ5IG1vdmluZyB0aGUgY2FsbCB0byBfX21lbWNnMV9zd2Fwb3V0KCkgaW5zaWRlIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oKSB3aXRoIGFuIGV4cGxpY2l0IGJvb2xlYW4gcGFyYW1ldGVyICYjMzk7c3dhcG91dCYjMzk7LCBhbmQgYWRqdXN0aW5nIHRoZSBvcmRlcmluZyByZWxhdGl2ZSB0byBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKCkuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCByZWZhY3RvcmluZyAvIG9yZGVyaW5nIGFkanVzdG1lbnQgZm9yIGZvbGlvIHN0YXRpc3RpY3MgYW5kIG1lbWNnIHN3YXBvdXQgYWNjb3VudGluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBidWZmZXJzIHRvIHVzZXJzcGFjZSBvciBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgYW5kIGRvZXMgbm90IGNyZWF0ZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKGUuZy4gbG9ja2luZywgcGFnZSByZWZjb3VudGluZywgcmFjZSBjb25kaXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBvciBWTSBkZWJ1ZyBjaGVja3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE3OjU0LjA5Njc5OTAwM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNjY3NzM4NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc3dhcF9jYWNoZV9kZWxfZm9saW9cIixcbiAgICBcInN3YXBfY2FjaGVfZGVsX2ZvbGlvXCIsXG4gICAgXCJfX21lbWNnMV9zd2Fwb3V0XCIsXG4gICAgXCJfX3JlbW92ZV9tYXBwaW5nXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbnRlcm5hbCBzd2FwIGNhY2hlIGFuZCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgbG9naWMgKF9fc3dhcF9jYWNoZV9kZWxfZm9saW8sIHN3YXBfY2FjaGVfZGVsX2ZvbGlvLCBhbmQgX19yZW1vdmVfbWFwcGluZyBpbiB2bXNjYW4uYykgYnkgbW92aW5nIHRoZSBjYWxsIHRvIF9fbWVtY2cxX3N3YXBvdXQoKSBpbnNpZGUgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpIHdpdGggYW4gZXhwbGljaXQgYm9vbGVhbiBwYXJhbWV0ZXIgJ3N3YXBvdXQnLCBhbmQgYWRqdXN0aW5nIHRoZSBvcmRlcmluZyByZWxhdGl2ZSB0byBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKCkuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFuIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IHJlZmFjdG9yaW5nIC8gb3JkZXJpbmcgYWRqdXN0bWVudCBmb3IgZm9saW8gc3RhdGlzdGljcyBhbmQgbWVtY2cgc3dhcG91dCBhY2NvdW50aW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgdG8gdXNlcnNwYWNlIG9yIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBhbmQgZG9lcyBub3QgY3JlYXRlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgYnVncyAoZS5nLiBsb2NraW5nLCBwYWdlIHJlZmNvdW50aW5nLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIFZNIGRlYnVnIGNoZWNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gKG1tL3N3YXBfc3RhdGUuYywgbW0vdm1zY2FuLmMsIG1tL3N3YXAuaCksIG1vdmluZyB0aGUgX19tZW1jZzFfc3dhcG91dCgpIGNhbGwgaW50byBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgYW5kIHVwZGF0aW5nIGNhbGxlcnMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgc3dhcCBvcGVyYXRpb25zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MTc6NTQuMDk2ODA0NzEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTQyOTE5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NDM0Yjc3YjEwZTJkMGFmMWRmZDYxMDc2Yjg3NmI4NDYwODQ5NWU3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDA0OjE3OjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxcbmluZGV4IDBiNWQ1MDc3MzliY2IuLmIzYjU0YzI4OTI5YTEgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcC5oXFxuKysrIGIvbW0vc3dhcC5oXFxuQEAgLTMxOSw3ICszMTksOCBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcXG4gdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XFxuIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi1cXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyk7XFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxcbitcXHRcXHRcXHQgICAgYm9vbCBzd2Fwb3V0KTtcXG4gdm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpO1xcbiBcXG5AQCAtNDUyLDcgKzQ1Myw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KVxcbitcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxcbitcXHRcXHRib29sIHN3YXBvdXQpXFxuIHtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXFxuaW5kZXggMzA1ODc3ZTFmNGQ3Yi4uNjI1YzE4NWExY2E0ZCAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcXG5AQCAtMzA2LDIxICszMDYsMjggQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbiAgKiBAZm9saW86IFRoZSBmb2xpby5cXG4gICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cXG4gICogQHNoYWRvdzogc2hhZG93IHZhbHVlIHRvIGJlIGZpbGxlZCBpbiB0aGUgc3dhcCBjYWNoZS5cXG4rICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBmb2xpbyBpcyBiZWluZyByZWNsYWltZWQgYWZ0ZXIgc3dhcG91dC5cXG4gICpcXG4gICogUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgYW5kIGZpbGxzIGEgc2hhZG93IGluIHBsYWNlLlxcbiAgKiBUaGlzIHdvbid0IHB1dCB0aGUgZm9saW8ncyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cXG4gICpcXG4gICogQ29udGV4dDogQ2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQgYW5kIGluIHRoZSBzd2FwIGNhY2hlXFxuICAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXFxuKyAqIElmIEBzd2Fwb3V0IGlzIHNldCwgdGhlIGZvbGlvIHNob3VsZCBiZSBpbiByZWNsYWltIHBhdGggYW5kIElSUXNcXG4rICogc2hvdWxkIGJlIGRpc2FibGVkLlxcbiAgKi9cXG4gdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLVxcdFxcdFxcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KVxcbitcXHRcXHRcXHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIFxcbi1cXHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XFxuIFxcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIC1ucl9wYWdlcyk7XFxuIFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpO1xcbitcXG4rXFx0aWYgKHN3YXBvdXQpXFxuK1xcdFxcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcXG4rXFxuK1xcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTMzOSw3ICszNDYsNyBAQCB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuIFxcbiBcXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xcbi1cXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwpO1xcbitcXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTtcXG4gXFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuIFxcbiBcXHRmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggMjQ1ZjY4Yzc1YjI4OS4uMjliY2VkNDNiMGNlNiAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTc1NSw4ICs3NTUsNyBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcbiBcXHRcXHRpZiAocmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpXFxuIFxcdFxcdFxcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XFxuLVxcdFxcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcXG4tXFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdyk7XFxuK1xcdFxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpO1xcbiBcXHRcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHZvaWQgKCpmcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE3OjU0LjY5MTY4MzI0M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjkxMTY2NTU2ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19zd2FwX2NhY2hlX2RlbF9mb2xpb1wiLFxuICAgIFwic3dhcF9jYWNoZV9kZWxfZm9saW9cIixcbiAgICBcIl9fbWVtY2cxX3N3YXBvdXRcIixcbiAgICBcIl9fcmVtb3ZlX21hcHBpbmdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gKG1tL3N3YXBfc3RhdGUuYywgbW0vdm1zY2FuLmMsIG1tL3N3YXAuaCksIG1vdmluZyB0aGUgX19tZW1jZzFfc3dhcG91dCgpIGNhbGwgaW50byBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgYW5kIHVwZGF0aW5nIGNhbGxlcnMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgc3dhcCBvcGVyYXRpb25zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NDM0Yjc3YjEwZTJkMGFmMWRmZDYxMDc2Yjg3NmI4NDYwODQ5NWU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDQ6MTc6NTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDBiNWQ1MDc3MzliY2IuLmIzYjU0YzI4OTI5YTEgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTMxOSw3ICszMTksOCBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiB2b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLVx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KTtcbitcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcbitcdFx0XHQgICAgYm9vbCBzd2Fwb3V0KTtcbiB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0XHRzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpO1xuIFxuQEAgLTQ1Miw3ICs0NTMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdylcbitcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcbitcdFx0Ym9vbCBzd2Fwb3V0KVxuIHtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCAzMDU4NzdlMWY0ZDdiLi42MjVjMTg1YTFjYTRkIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0zMDYsMjEgKzMwNiwyOCBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gICogQGZvbGlvOiBUaGUgZm9saW8uXG4gICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cbiAgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxuKyAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgZm9saW8gaXMgYmVpbmcgcmVjbGFpbWVkIGFmdGVyIHN3YXBvdXQuXG4gICpcbiAgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXG4gICogVGhpcyB3b24ndCBwdXQgdGhlIGZvbGlvJ3MgcmVmY291bnQuIFRoZSBjYWxsZXIgaGFzIHRvIGRvIHRoYXQuXG4gICpcbiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGVcbiAgKiB1c2luZyB0aGUgaW5kZXggb2YgQGVudHJ5LCBhbmQgbG9jayB0aGUgY2x1c3RlciB0aGF0IGhvbGRzIHRoZSBlbnRyaWVzLlxuKyAqIElmIEBzd2Fwb3V0IGlzIHNldCwgdGhlIGZvbGlvIHNob3VsZCBiZSBpbiByZWNsYWltIHBhdGggYW5kIElSUXNcbisgKiBzaG91bGQgYmUgZGlzYWJsZWQuXG4gICovXG4gdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpXG4rXHRcdFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFxuLVx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpO1xuK1xuK1x0aWYgKHN3YXBvdXQpXG4rXHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbitcbitcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcbiB9XG4gXG4gLyoqXG5AQCAtMzM5LDcgKzM0Niw3IEBAIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XG4tXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwpO1xuK1x0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiBcbiBcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMjQ1ZjY4Yzc1YjI4OS4uMjliY2VkNDNiMGNlNiAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTc1NSw4ICs3NTUsNyBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gXHRcdGlmIChyZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpXG4gXHRcdFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcbi1cdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuLVx0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTtcbitcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XG4gXHRcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHZvaWQgKCpmcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxNzo1NC42OTE2ODQ2NjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjQ0NTU2MzYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGlzIGRpZmYuIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgYmVlbiBhbHRlcmVkLiBJdCBsb29rcyBsaWtlIHdlJ3ZlIGdvdCBtb2RpZmljYXRpb25zIGFjcm9zcyB0aGUgc3dhcCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0b3VjaGluZyBgbW0vc3dhcC5oYCwgYG1tL3N3YXBfc3RhdGUuY2AsIGFuZCBgbW0vdm1zY2FuLmNgLiBUaGlzIHN1Z2dlc3RzIGl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gc3dhcCBtYW5hZ2VtZW50LCBwb3NzaWJseSB3aXRoIGNoYW5nZXMgaW4gdGhlIGRhdGEgc3RydWN0dXJlcywgc3RhdGUgdHJhY2tpbmcsIG9yIHRoZSBtZW1vcnkgc2Nhbm5pbmcgcHJvY2Vzcy5cblxuTm93LCBpbnN0ZWFkIG9mIGp1c3Qgc3RhcmluZyBhdCB0aGUgZGlmZiBvdXRwdXQsIEknbGwgbmVlZCB0byBnYWluIHNvbWUgY29udGV4dCBhcm91bmQgdGhlc2UgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IgcG9zc2libHkgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZSBibG9ja3MuIEknbGwgbG9vayBhdCB0aGUgY29kZSBpbW1lZGlhdGVseSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBjaGFuZ2UgaW4gZWFjaCBvZiB0aGVzZSBmaWxlcy4gVGhhdCB3YXkgSSBjYW4gZnVsbHkgdW5kZXJzdGFuZCAqd2h5KiB0aGUgY2hhbmdlcyB3ZXJlIGltcGxlbWVudGVkLiBXaXRoIHRoZXNlIHRvb2xzLCBJIGV4cGVjdCB0byBpZGVudGlmeSB0aGUga2V5IGFzcGVjdHMgb2YgdGhpcyB1cGRhdGUgYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE4OjA3LjEzNzI1MjE4NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zd2FwX3N0YXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk1LFxuICBcIkxpbmVDb3VudFwiOiA2NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjk1OlxcdFxcdFxcdGNpX29mZiA9IGNpX3N0YXJ0O1xcbiAyOTY6XFx0XFx0XFx0ZG8ge1xcbiAyOTc6XFx0XFx0XFx0XFx0aWYgKCFfX3N3cF90Yl9nZXRfY291bnQoX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKSkpXFxuIDI5ODpcXHRcXHRcXHRcXHRcXHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9vZmYsIDEpO1xcbiAyOTk6XFx0XFx0XFx0fSB3aGlsZSAoKytjaV9vZmYgXFx1MDAzYyBjaV9lbmQpO1xcbiAzMDA6XFx0XFx0fVxcbiAzMDE6XFx0fVxcbiAzMDI6XFx0XFxuIDMwMzpcXHQvKipcXG4gMzA0OlxcdCAqIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gLSBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZS5cXG4gMzA1OlxcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXFxuIDMwNjpcXHQgKiBAZm9saW86IFRoZSBmb2xpby5cXG4gMzA3OlxcdCAqIEBlbnRyeTogVGhlIGZpcnN0IHN3YXAgZW50cnkgdGhhdCB0aGUgZm9saW8gY29ycmVzcG9uZHMgdG8uXFxuIDMwODpcXHQgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxcbiAzMDk6XFx0ICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBmb2xpbyBpcyBiZWluZyByZWNsYWltZWQgYWZ0ZXIgc3dhcG91dC5cXG4gMzEwOlxcdCAqXFxuIDMxMTpcXHQgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXFxuIDMxMjpcXHQgKiBUaGlzIHdvbid0IHB1dCB0aGUgZm9saW8ncyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cXG4gMzEzOlxcdCAqXFxuIDMxNDpcXHQgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGVcXG4gMzE1OlxcdCAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXFxuIDMxNjpcXHQgKiBJZiBAc3dhcG91dCBpcyBzZXQsIHRoZSBmb2xpbyBzaG91bGQgYmUgaW4gcmVjbGFpbSBwYXRoIGFuZCBJUlFzXFxuIDMxNzpcXHQgKiBzaG91bGQgYmUgZGlzYWJsZWQuXFxuIDMxODpcXHQgKi9cXG4gMzE5OlxcdHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiAzMjA6XFx0XFx0XFx0XFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcXG4gMzIxOlxcdHtcXG4gMzIyOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIDMyMzpcXHRcXG4gMzI0OlxcdFxcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIC1ucl9wYWdlcyk7XFxuIDMyNTpcXHRcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgLW5yX3BhZ2VzKTtcXG4gMzI2OlxcdFxcbiAzMjc6XFx0XFx0aWYgKHN3YXBvdXQpXFxuIDMyODpcXHRcXHRcXHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XFxuIDMyOTpcXHRcXG4gMzMwOlxcdFxcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcXG4gMzMxOlxcdH1cXG4gMzMyOlxcdFxcbiAzMzM6XFx0LyoqXFxuIDMzNDpcXHQgKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxcbiAzMzU6XFx0ICogQGZvbGlvOiBUaGUgZm9saW8uXFxuIDMzNjpcXHQgKlxcbiAzMzc6XFx0ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXFxuIDMzODpcXHQgKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XFxuIDMzOTpcXHQgKiBlcXVhbCB0byB6ZXJvLCBvciBpdCBtYXkgY2F1c2UgZGF0YSBsb3NzLlxcbiAzNDA6XFx0ICpcXG4gMzQxOlxcdCAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZS5cXG4gMzQyOlxcdCAqL1xcbiAzNDM6XFx0dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAzNDQ6XFx0e1xcbiAzNDU6XFx0XFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcXG4gMzQ2OlxcdFxcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XFxuIDM0OTpcXHRcXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTtcXG4gMzUwOlxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xcbiAzNTE6XFx0XFxuIDM1MjpcXHRcXHRmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbiAzNTM6XFx0fVxcbiAzNTQ6XFx0XFxuIDM1NTpcXHQvKipcXG4gMzU2OlxcdCAqIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvIC0gUmVwbGFjZSBhIGZvbGlvIGluIHRoZSBzd2FwIGNhY2hlLlxcbiAzNTc6XFx0ICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cXG4gMzU4OlxcdCAqIEBvbGQ6IFRoZSBvbGQgZm9saW8gdG8gYmUgcmVwbGFjZWQuXFxuIDM1OTpcXHQgKiBAbmV3OiBUaGUgbmV3IGZvbGlvLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxODowNy4xMzczOTc1MDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzAyMDU1ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgVmlydHVhbCBNZW1vcnkgU2Nhbm5lcioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBUaGUgcHJvYmxlbSdzIGhpbnRpbmcgYXQgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aGluIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmVyLCBzbyBsZXQncyBzdGFydCB0aGVyZS4gTXkgZ3V0IHRlbGxzIG1lIHRvIGV4YW1pbmUgYG1tL3Ztc2Nhbi5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSA3NTUuIFRoaXMgcmVnaW9uIGxpa2VseSBpbnZvbHZlcyBzb21ldGhpbmcgY3J1Y2lhbCDigJMgcGVyaGFwcyBtZW1vcnkgcmVjbGFtYXRpb24gbG9naWMsIHBhZ2Ugc2VsZWN0aW9uLCBvciBhIHJlbGF0ZWQgb3B0aW1pemF0aW9uLiBUaGUgcmVhbCBrZXksIGFzIGFsd2F5cywgd2lsbCBiZSB1bmRlcnN0YW5kaW5nIHRoZSAqY2FsbGVyIGNvbnRleHQqLiBLbm93aW5nICp3aG8qIGlzIGNhbGxpbmcgdGhhdCBmdW5jdGlvbiBhcm91bmQgbGluZSA3NTUgaXMgYWJzb2x1dGVseSBjcml0aWNhbC4gVGhhdCB3aWxsIGNsdWUgbWUgaW50byB0aGUgc3BlY2lmaWMgc2NlbmFyaW8gdHJpZ2dlcmluZyB0aGUgcG90ZW50aWFsIGlzc3VlIGFuZCBwcm92aWRlIHRoZSBpbmZvcm1hdGlvbiB0byBpZGVudGlmeSB0aGUgcm9vdCBjYXVzZSBxdWlja2x5LiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzI5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxODoxMC40Mzk0NTc1NzVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjcwMjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczNSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDczNTpcXHRcXHQgKiBbb29wcywgb3VyIHdyaXRlX3RvIGRhdGEgaXMgbG9zdF1cXG4gNzM2OlxcdFxcdCAqXFxuIDczNzpcXHRcXHQgKiBSZXZlcnNpbmcgdGhlIG9yZGVyIG9mIHRoZSB0ZXN0cyBlbnN1cmVzIHN1Y2ggYSBzaXR1YXRpb24gY2Fubm90XFxuIDczODpcXHRcXHQgKiBlc2NhcGUgdW5ub3RpY2VkLiBUaGUgc21wX3JtYiBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoZSBmb2xpby1cXHUwMDNlZmxhZ3NcXG4gNzM5OlxcdFxcdCAqIGxvYWQgaXMgbm90IHNhdGlzZmllZCBiZWZvcmUgdGhhdCBvZiBmb2xpby1cXHUwMDNlX3JlZmNvdW50LlxcbiA3NDA6XFx0XFx0ICpcXG4gNzQxOlxcdFxcdCAqIE5vdGUgdGhhdCBpZiB0aGUgZGlydHkgZmxhZyBpcyBhbHdheXMgc2V0IHZpYSBmb2xpb19tYXJrX2RpcnR5LFxcbiA3NDI6XFx0XFx0ICogYW5kIHRodXMgdW5kZXIgdGhlIGlfcGFnZXMgbG9jaywgdGhlbiB0aGlzIG9yZGVyaW5nIGlzIG5vdCByZXF1aXJlZC5cXG4gNzQzOlxcdFxcdCAqL1xcbiA3NDQ6XFx0XFx0cmVmY291bnQgPSAxICsgZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbiA3NDU6XFx0XFx0aWYgKCFmb2xpb19yZWZfZnJlZXplKGZvbGlvLCByZWZjb3VudCkpXFxuIDc0NjpcXHRcXHRcXHRnb3RvIGNhbm5vdF9mcmVlO1xcbiA3NDc6XFx0XFx0Lyogbm90ZTogYXRvbWljX2NtcHhjaGcgaW4gZm9saW9fcmVmX2ZyZWV6ZSBwcm92aWRlcyB0aGUgc21wX3JtYiAqL1xcbiA3NDg6XFx0XFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSkge1xcbiA3NDk6XFx0XFx0XFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCByZWZjb3VudCk7XFxuIDc1MDpcXHRcXHRcXHRnb3RvIGNhbm5vdF9mcmVlO1xcbiA3NTE6XFx0XFx0fVxcbiA3NTI6XFx0XFxuIDc1MzpcXHRcXHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XFxuIDc1NDpcXHRcXHRcXHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuIDc1NTpcXHRcXG4gNzU2OlxcdFxcdFxcdGlmIChyZWNsYWltZWQgXFx1MDAyNlxcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcXG4gNzU3OlxcdFxcdFxcdFxcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XFxuIDc1ODpcXHRcXHRcXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcXG4gNzU5OlxcdFxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcXG4gNzYwOlxcdFxcdH0gZWxzZSB7XFxuIDc2MTpcXHRcXHRcXHR2b2lkICgqZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICopO1xcbiA3NjI6XFx0XFxuIDc2MzpcXHRcXHRcXHRmcmVlX2ZvbGlvID0gbWFwcGluZy1cXHUwMDNlYV9vcHMtXFx1MDAzZWZyZWVfZm9saW87XFxuIDc2NDpcXHRcXHRcXHQvKlxcbiA3NjU6XFx0XFx0XFx0ICogUmVtZW1iZXIgYSBzaGFkb3cgZW50cnkgZm9yIHJlY2xhaW1lZCBmaWxlIGNhY2hlIGluXFxuIDc2NjpcXHRcXHRcXHQgKiBvcmRlciB0byBkZXRlY3QgcmVmYXVsdHMsIHRodXMgdGhyYXNoaW5nLCBsYXRlciBvbi5cXG4gNzY3OlxcdFxcdFxcdCAqXFxuIDc2ODpcXHRcXHRcXHQgKiBCdXQgZG9uJ3Qgc3RvcmUgc2hhZG93cyBpbiBhbiBhZGRyZXNzIHNwYWNlIHRoYXQgaXNcXG4gNzY5OlxcdFxcdFxcdCAqIGFscmVhZHkgZXhpdGluZy4gIFRoaXMgaXMgbm90IGp1c3QgYW4gb3B0aW1pemF0aW9uLFxcbiA3NzA6XFx0XFx0XFx0ICogaW5vZGUgcmVjbGFpbSBuZWVkcyB0byBlbXB0eSBvdXQgdGhlIHJhZGl4IHRyZWUgb3JcXG4gNzcxOlxcdFxcdFxcdCAqIHRoZSBub2RlcyBhcmUgbG9zdC4gIERvbid0IHBsYW50IHNoYWRvd3MgYmVoaW5kIGl0c1xcbiA3NzI6XFx0XFx0XFx0ICogYmFjay5cXG4gNzczOlxcdFxcdFxcdCAqXFxuIDc3NDpcXHRcXHRcXHQgKiBXZSBhbHNvIGRvbid0IHN0b3JlIHNoYWRvd3MgZm9yIERBWCBtYXBwaW5ncyBiZWNhdXNlIHRoZVxcbiA3NzU6XFx0XFx0XFx0ICogb25seSBwYWdlIGNhY2hlIGZvbGlvcyBmb3VuZCBpbiB0aGVzZSBhcmUgemVybyBwYWdlc1xcbiA3NzY6XFx0XFx0XFx0ICogY292ZXJpbmcgaG9sZXMsIGFuZCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gbWl4IERBWFxcbiA3Nzc6XFx0XFx0XFx0ICogZXhjZXB0aW9uYWwgZW50cmllcyBhbmQgc2hhZG93IGV4Y2VwdGlvbmFsIGVudHJpZXMgaW4gdGhlXFxuIDc3ODpcXHRcXHRcXHQgKiBzYW1lIGFkZHJlc3Nfc3BhY2UuXFxuIDc3OTpcXHRcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MTg6MTAuNDQyMTMxMjQ4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA2NTc0MzAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY2hhbmdlIGludm9sdmluZyBgX19tZW1jZzFfc3dhcG91dGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gYW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aHkgdGhlIG1vZGlmaWNhdGlvbiB3YXMgZGVlbWVkIG5lY2Vzc2FyeS4gXG5cblRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAsIG9mIGNvdXJzZSwgaXMgYSBxdWljayBncmVwLiBMZXQncyBzZWUgaG93IGFuZCB3aGVyZSBgX19tZW1jZzFfc3dhcG91dGAgaXMgdXNlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGUgc3Vycm91bmRpbmcgY29udGV4dCB3aWxsIHRlbGwgdGhlIHN0b3J5LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNhbGxzLCBkZWZpbml0aW9ucywgYW5kIGFueSByZWxhdGVkIGNvbW1lbnRzIHRoYXQgc2hlZCBsaWdodCBvbiBpdHMgZnVuY3Rpb24gYW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBjaGFuZ2UuIFRoaXMgc2hvdWxkIHF1aWNrbHkgb3JpZW50IG1lIGFuZCBndWlkZSBtZSB0b3dhcmQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJ3MgbWVtb3J5IG1hbmFnZW1lbnQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMTEsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE4OjEzLjUwNzg3NjI3NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA2OTQ5MzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtY2cxX3N3YXBvdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTk1Mz1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjAtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk2MTp2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2Mi12b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTY1LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjY6c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTY3LVxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ1MzM9dm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1NTEtXFx0ICogRXhjbHVkZSBzd2FwY2FjaGU6IG9yaWdpbmFsbHkgdG8gYXZvaWQgYSBjb3JydXB0IGRlZmVycmVkIHNwbGl0XFxubW0vaHVnZV9tZW1vcnkuYzo0NTUyOlxcdCAqIHF1ZXVlLiBOb3dhZGF5cyB0aGF0IGlzIGZ1bGx5IHByZXZlbnRlZCBieSBfX21lbWNnMV9zd2Fwb3V0KCk7XFxubW0vaHVnZV9tZW1vcnkuYy00NTUzLVxcdCAqIGJ1dCBpZiBwYWdlIHJlY2xhaW0gaXMgYWxyZWFkeSBoYW5kbGluZyB0aGUgc2FtZSBmb2xpbywgaXQgaXNcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0yNDc9dm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjU4LS8qKlxcbm1tL21lbWNvbnRyb2wtdjEuYzoyNTk6ICogX19tZW1jZzFfc3dhcG91dCAtIHRyYW5zZmVyIGEgbWVtc3cgY2hhcmdlIHRvIHN3YXBcXG5tbS9tZW1jb250cm9sLXYxLmMtMjYwLSAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtc3cgY2hhcmdlIHRvIHRyYW5zZmVyXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjY4LSAqL1xcbm1tL21lbWNvbnRyb2wtdjEuYzoyNjk6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxubW0vbWVtY29udHJvbC12MS5jLTI3MC17XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MzE5PXZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMyNy1cXHRpZiAoc3dhcG91dClcXG5tbS9zd2FwX3N0YXRlLmM6MzI4OlxcdFxcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcXG5tbS9zd2FwX3N0YXRlLmMtMzI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxODoxNi4zMTQ4MzExNTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDA1NjAyMzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBfX21lbWNnMV9zd2Fwb3V0YCoqXG5cbk9rYXksIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIG1lbW9yeSBjb250cm9sIHYxIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc3dhcC1vdXQgaXMgaGFuZGxlZCBhdCB0aGUgbWVtY2cgbGV2ZWwsIHNvIEknbSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBgX19tZW1jZzFfc3dhcG91dGAgZnVuY3Rpb24gd2l0aGluIGBtbS9tZW1jb250cm9sLXYxLmNgLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgdGhhdCBvcmNoZXN0cmF0ZXMgcGFnZSBzZWxlY3Rpb24gYW5kIGV2aWN0aW9uIHNwZWNpZmljIHRvIGEgbWVtY2cgY29udGV4dC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBpcyBpbiB1bmRlcnN0YW5kaW5nIHRoZSBjcml0ZXJpYSB1c2VkIGZvciBjaG9vc2luZyBwYWdlcywgYW55IGFjY291bnRpbmcgbnVhbmNlcyB3aXRoaW4gdGhlIG1lbWNnIGhpZXJhcmNoeSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzd2FwcGluZyBpbmZyYXN0cnVjdHVyZS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byB0aGUgYmFsYW5jZSBvZiBkaXJlY3QgYW5kIGluZGlyZWN0IHJlY2xhaW0sIGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgaXQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTIwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MTg6MTguMzIwNDM2NDI4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNDU0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLXYxLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjU1OlxcdH1cXG4gMjU2OlxcdFxcbiAyNTc6XFx0I2lmZGVmIENPTkZJR19TV0FQXFxuIDI1ODpcXHQvKipcXG4gMjU5OlxcdCAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXFxuIDI2MDpcXHQgKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbXN3IGNoYXJnZSB0byB0cmFuc2ZlclxcbiAyNjE6XFx0ICogQGNpOiB0aGUgbG9ja2VkIHN3YXAgY2x1c3RlciBob2xkaW5nIHRoZSBzd2FwIGVudHJpZXNcXG4gMjYyOlxcdCAqXFxuIDI2MzpcXHQgKiBUcmFuc2ZlciB0aGUgbWVtc3cgY2hhcmdlIG9mIEBmb2xpbyB0byB0aGUgc3dhcCBlbnRyeSBzdG9yZWQgaW5cXG4gMjY0OlxcdCAqIGZvbGlvLVxcdTAwM2Vzd2FwLlxcbiAyNjU6XFx0ICpcXG4gMjY2OlxcdCAqIENvbnRleHQ6IGZvbGlvIG11c3QgYmUgaXNvbGF0ZWQsIHVubWFwcGVkLCBsb2NrZWQgYW5kIGlzIGp1c3QgYWJvdXQgdG9cXG4gMjY3OlxcdCAqIGJlIGZyZWVkLCBhbmQgY2FsbGVyIG11c3QgZGlzYWJsZSBJUlFzIGFuZCBob2xkIHRoZSBzd2FwIGNsdXN0ZXIgbG9jay5cXG4gMjY4OlxcdCAqL1xcbiAyNjk6XFx0dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuIDI3MDpcXHR7XFxuIDI3MTpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpzd2FwX21lbWNnO1xcbiAyNzI6XFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiAyNzM6XFx0XFx0dW5zaWduZWQgaW50IG5yX2VudHJpZXM7XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XFxuIDI3NjpcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xcbiAyNzc6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xcbiAyNzg6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcXG4gMjc5OlxcdFxcbiAyODA6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gMjgxOlxcdFxcdFxcdHJldHVybjtcXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkpXFxuIDI4NDpcXHRcXHRcXHRyZXR1cm47XFxuIDI4NTpcXHRcXG4gMjg2OlxcdFxcdG9iamNnID0gZm9saW9fb2JqY2coZm9saW8pO1xcbiAyODc6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFvYmpjZywgZm9saW8pO1xcbiAyODg6XFx0XFx0aWYgKCFvYmpjZylcXG4gMjg5OlxcdFxcdFxcdHJldHVybjtcXG4gMjkwOlxcdFxcbiAyOTE6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAyOTI6XFx0XFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcXG4gMjkzOlxcdFxcdC8qXFxuIDI5NDpcXHRcXHQgKiBJbiBjYXNlIHRoZSBtZW1jZyBvd25pbmcgdGhlc2UgcGFnZXMgaGFzIGJlZW4gb2ZmbGluZWQgYW5kIGRvZXNuJ3RcXG4gMjk1OlxcdFxcdCAqIGhhdmUgYW4gSUQgYWxsb2NhdGVkIHRvIGl0IGFueW1vcmUsIGNoYXJnZSB0aGUgY2xvc2VzdCBvbmxpbmVcXG4gMjk2OlxcdFxcdCAqIGFuY2VzdG9yIGZvciB0aGUgc3dhcCBpbnN0ZWFkIGFuZCB0cmFuc2ZlciB0aGUgbWVtb3J5K3N3YXAgY2hhcmdlLlxcbiAyOTc6XFx0XFx0ICovXFxuIDI5ODpcXHRcXHRucl9lbnRyaWVzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbiAyOTk6XFx0XFx0c3dhcF9tZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9lbnRyaWVzKTtcXG4gMzAwOlxcdFxcdG1vZF9tZW1jZ19zdGF0ZShzd2FwX21lbWNnLCBNRU1DR19TV0FQLCBucl9lbnRyaWVzKTtcXG4gMzAxOlxcdFxcbiAzMDI6XFx0XFx0X19zd2FwX2Nncm91cF9zZXQoY2ksIHN3cF9jbHVzdGVyX29mZnNldChmb2xpby1cXHUwMDNlc3dhcCksIG5yX2VudHJpZXMsXFxuIDMwMzpcXHRcXHRcXHRcXHQgIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzd2FwX21lbWNnKSk7XFxuIDMwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MTg6MTguMzIwNzQ0NTE5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNjg4ODMxOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVjZW50IEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBjaGFuZ2UgY29uY2VybmluZyBgX19tZW1jZzFfc3dhcG91dGAgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gc3dhcCBjYWNoZSBkZWxldGlvbi4gVGhlIGtleSBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoZSBjYWxsIHRvIGBfX21lbWNnMV9zd2Fwb3V0YCBoYXMgYmVlbiBtb3ZlZCB3aXRoaW4gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLCBzcGVjaWZpY2FsbHkgcmlnaHQgYmVmb3JlIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYC4gVGhpcyBtZWFucyB0aGUgbWVtY2cgc3dhcG91dCBvcGVyYXRpb24gbm93IGhhcHBlbnMgKmJlZm9yZSogdGhlIHN3YXBjYWNoZSBzdGF0dXMgaXMgY2xlYXJlZCwgd2hpY2ggaXMgYW4gaW1wb3J0YW50IGNoYW5nZSBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgY29uc2lzdGVuY3kuXG5cbkkgc2VlIHRoYXQgdGhpcyBpbnZvbHZlcyBjb2RlIHdpdGhpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWFzOiBzcGVjaWZpY2FsbHkgYG1tL3N3YXBfc3RhdGUuY2AsIGBtbS92bXNjYW4uY2AsIGFuZCBwb3RlbnRpYWxseSB0b3VjaGVkIHRocm91Z2ggYG1tL3N3YXAuaGAuIFRoZXNlIGFyZSBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBpbiBhbnkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQg4oCTIHRoZXNlIGFyZSBmdW5kYW1lbnRhbCBzd2FwIGFuZCByZWNsYWltIG9wZXJhdGlvbnMuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIGNyaXRlcmlhIGZvciBgV29ydGhGdXp6aW5nYCwgdGhpcyBpcyBhIGNsZWFyIFwieWVzLlwiIFRoaXMgcGF0Y2ggdG91Y2hlcyBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGluY2x1ZGVzIGxvZ2ljIG1vZGlmaWNhdGlvbnMuIE1vcmVvdmVyLCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYCBjaGVjayBpcyBhIGRpcmVjdCBhbHRlcmF0aW9uIG9mIHJ1bnRpbWUgYXNzZXJ0aW9ucy4gVGhlcmVmb3JlLCBpdCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSB0aGUgXCJGb2N1c1N5bWJvbHNcIi4gV2UgbmVlZCB0byB0YXJnZXQgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgaW1wbGVtZW50IG9yIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBjb2RlIGFuZCBhcmUgbm90IHViaXF1aXRvdXMuIFRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBJJ20gaW50ZXJlc3RlZCBpbiBhcmU6XG5cbiogICBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgKG1tL3N3YXBfc3RhdGUuYykgLSAqVGhpcyBpcyBhIGNvcmUgY2hhbmdlIHBvaW50Ki5cbiogICBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIChtbS9zd2FwX3N0YXRlLmMpIC0gKlRoaXMgYWxzbyBjaGFuZ2VzLipcbiogICBgX19yZW1vdmVfbWFwcGluZ2AgKG1tL3Ztc2Nhbi5jKSAtICpUaGlzIGNhbGxzIHRoZSBtb2RpZmllZCBmdW5jdGlvbi4qXG4qICAgYF9fbWVtY2cxX3N3YXBvdXRgIChtbS9tZW1jb250cm9sLXYxLmMpIC0gKlRoaXMgaXMgY29uZGl0aW9uYWxseSBjYWxsZWQgZnJvbSB0aGUgY29yZSBjaGFuZ2UuKlxuXG5XZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSB1bmRlcnN0YW5kIGFsbCBjYWxsIHBhdGhzIHRvIHRoZXNlIGNvcmUgZnVuY3Rpb25zLCB0byBzZWUgdGhlIGVudGlyZSBzdXJmYWNlLiBXZSBuZWVkIHRvIGJlIGF3YXJlIG9mIG90aGVyIGNhbGxlcnMgb2YgdGhlIHN3YXAgY2FjaGUgZGVsZXRlIGZ1bmN0aW9ucyEgVGltZSB0byBncmVwLlxuXG5Gcm9tIGhlcmUsIEknbGwgZGV0ZXJtaW5lIGBFbmFibGVDb25maWdzYCBiYXNlZCBvbiB3aGljaCBjb25maWd1cmF0aW9ucyBtYXhpbWl6ZSB0aGUgY2hhbmNlIG9mIGV4ZXJjaXNpbmcgdGhlIGNvZGUgcGF0aHMgb2YgaW50ZXJlc3QuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCBtZW1jZyBjb25maWd1cmF0aW9ucywgc3dhcCBlbmFibGVkLCBldGMuIFRoZSBwcmVjaXNlIGNvbmZpZ3Mgd2lsbCBkZXBlbmQgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgY2hhbmdlIGFuZCB0aGUgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIwNywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE4OjIzLjM4OTYzMDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTQzMTgwMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zd2FwX2NhY2hlX2RlbF9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwLmg9MzE5PXZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbm1tL3N3YXAuaC0zMjAtXFx0XFx0XFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcXG5tbS9zd2FwLmg6MzIxOnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbm1tL3N3YXAuaC0zMjItXFx0XFx0XFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXFxuLS1cXG5tbS9zd2FwLmg9NDUxPXN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc3dhcC5oLTQ1NC1cXG5tbS9zd2FwLmg6NDU1OnN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcC5oLTQ1Ni1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTI1Nz1zdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzAzLS8qKlxcbm1tL3N3YXBfc3RhdGUuYzozMDQ6ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxcbm1tL3N3YXBfc3RhdGUuYy0zMDUtICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMTgtICovXFxubW0vc3dhcF9zdGF0ZS5jOjMxOTp2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9zd2FwX3N0YXRlLmMtMzIwLVxcdFxcdFxcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzM2LSAqXFxubW0vc3dhcF9zdGF0ZS5jOjMzNzogKiBTYW1lIGFzIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8sIGJ1dCBoYW5kbGVzIGxvY2sgYW5kIHJlZmNvdW50LiBUaGVcXG5tbS9zd2FwX3N0YXRlLmMtMzM4LSAqIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgZWl0aGVyIGNsZWFuIG9yIGhhcyBhIHN3YXAgY291bnRcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0zNDM9dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTM0OC1cXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xcbm1tL3N3YXBfc3RhdGUuYzozNDk6XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XFxubW0vc3dhcF9zdGF0ZS5jLTM1MC1cXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTU4OD1zdGF0aWMgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xNjE4LVxcdFxcdCAqIHNsb3RzIHdpbGwgYmUgZnJlZWQgd2hlbiBmb2xpbyBpcyByZW1vdmVkIGZyb20gc3dhcCBjYWNoZVxcbm1tL3N3YXBmaWxlLmM6MTYxOTpcXHRcXHQgKiAoX19zd2FwX2NhY2hlX2RlbF9mb2xpbykuXFxubW0vc3dhcGZpbGUuYy0xNjIwLVxcdFxcdCAqL1xcbi0tXFxubW0vdm1zY2FuLmM9NzAyPXN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1Ny1cXHRcXHRcXHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xcbm1tL3Ztc2Nhbi5jOjc1ODpcXHRcXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcXG5tbS92bXNjYW4uYy03NTktXFx0XFx0c3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxODoyNS42NDM5NTY3NDhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkxNjY1Mjg2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBDYWxsZXJzIG9mIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJJ3ZlIGFscmVhZHkgZXhhbWluZWQgc29tZSBhcmVhcywgYnV0IG5vdyBJJ20gdGhpbmtpbmcgSSBzaG91bGQgZGVmaW5pdGVseSBleHBhbmQgbXkgc2NvcGUgYW5kIGludmVzdGlnYXRlIHRoZSBjYWxsZXJzIG9mIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AuIEl0J3MgYSBrZXkgZnVuY3Rpb24gaW4gdGhlIHN3YXAgY2FjaGUsIGFuZCB1bmRlcnN0YW5kaW5nICp3aG8qIGlzIGNhbGxpbmcgaXQgaXMgY3JpdGljYWwgdG8gZ2V0dGluZyBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgaXNzdWVzLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgZnVuY3Rpb24gdG8gc2VlIHRoZSBkaWZmZXJlbnQgcGF0aHMgdGhhdCBsZWFkIHRvIGl0cyBleGVjdXRpb24uIFRoaXMgaXMgZ29pbmcgdG8gZ2l2ZSBtZSBhIG1vcmUgcm91bmRlZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSB3aG9sZSBzeXN0ZW0ncyBpbnRlcmFjdGlvbnMgd2l0aCBzd2FwcGluZy4gSSdtIGhvcGluZyB0byBjYXRjaCBhIGdsaW1wc2Ugb2YgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGN1cnJlbnQgaXNzdWUuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMDcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxODoyNy41NjA2MTQyMDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzAxNDkxNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9jYWNoZV9kZWxfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0xMTI1PXN0YXRpYyBpbnQgbWVfc3dhcGNhY2hlX2NsZWFuKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTExMjktXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxMTMwOlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTExMzEtXFxuLS1cXG5tbS9tZW1vcnkuYz00ODQ0PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTA3Ni1cXHRcXHRpZiAoIVdBUk5fT05fT05DRShmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkpXFxubW0vbWVtb3J5LmM6NTA3NzpcXHRcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxubW0vbWVtb3J5LmMtNTA3OC1cXHRcXHRnb3RvIG91dF9ub21hcDtcXG4tLVxcbm1tL3NobWVtLmM9MTgwOD1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zaG1lbS5jLTE5NDEtXFx0XFx0LypcXG5tbS9zaG1lbS5jOjE5NDI6XFx0XFx0ICogVGhlIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgYmVsb3cgY291bGQgYmUgbGVmdCBmb3JcXG5tbS9zaG1lbS5jLTE5NDMtXFx0XFx0ICogc2hyaW5rX2ZvbGlvX2xpc3QoKSdzIGZvbGlvX2ZyZWVfc3dhcCgpIHRvIGRpc3Bvc2Ugb2Y7XFxuLS1cXG5tbS9zaG1lbS5jLTE5NDctXFx0XFx0ICovXFxubW0vc2htZW0uYzoxOTQ4OlxcdFxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zaG1lbS5jLTE5NDktXFx0XFx0Z290byByZWRpcnR5O1xcbi0tXFxubW0vc2htZW0uYz0yMzUxPXN0YXRpYyB2b2lkIHNobWVtX3NldF9mb2xpb19zd2FwaW5fZXJyb3Ioc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmMtMjM2OC1cXHRmb2xpb19wdXRfc3dhcChmb2xpbywgTlVMTCk7XFxubW0vc2htZW0uYzoyMzY5OlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zaG1lbS5jLTIzNzAtXFx0LypcXG4tLVxcbm1tL3NobWVtLmM9MjQ1Nj1zdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy0yNTk4LVxcdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBOVUxMKTtcXG5tbS9zaG1lbS5jOjI1OTk6XFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xcbm1tL3NobWVtLmMtMjYwMC1cXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4tLVxcbm1tL3N3YXAuaD0zMTM9dm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcXG5tbS9zd2FwLmg6MzE0OnZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vc3dhcC5oLTMxNS1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3N3YXAuaD0zMTk9dm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcC5oLTMyMC1cXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xcbm1tL3N3YXAuaDozMjE6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcC5oLTMyMi1cXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcXG4tLVxcbm1tL3N3YXAuaD00NDY9c3RhdGljIGlubGluZSB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpXFxuLS1cXG5tbS9zd2FwLmgtNDUwLVxcbm1tL3N3YXAuaDo0NTE6c3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vc3dhcC5oLTQ1Mi17XFxuLS1cXG5tbS9zd2FwLmgtNDU0LVxcbm1tL3N3YXAuaDo0NTU6c3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtNDU2LVxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MjU3PXN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMDMtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjMwNDogKiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXFxubW0vc3dhcF9zdGF0ZS5jLTMwNS0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMxOC0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6MzE5OnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3N3YXBfc3RhdGUuYy0zMjAtXFx0XFx0XFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMzMtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjMzNDogKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxcbm1tL3N3YXBfc3RhdGUuYy0zMzUtICogQGZvbGlvOiBUaGUgZm9saW8uXFxubW0vc3dhcF9zdGF0ZS5jLTMzNi0gKlxcbm1tL3N3YXBfc3RhdGUuYzozMzc6ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXFxubW0vc3dhcF9zdGF0ZS5jLTMzOC0gKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzQyLSAqL1xcbm1tL3N3YXBfc3RhdGUuYzozNDM6dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3N3YXBfc3RhdGUuYy0zNDQte1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTM0OC1cXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xcbm1tL3N3YXBfc3RhdGUuYzozNDk6XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XFxubW0vc3dhcF9zdGF0ZS5jLTM1MC1cXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTk4PXN0YXRpYyBpbnQgX190cnlfdG9fcmVjbGFpbV9zd2FwKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjUxLVxcbm1tL3N3YXBmaWxlLmM6MjUyOlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zd2FwZmlsZS5jLTI1My1cXHRmb2xpb19zZXRfZGlydHkoZm9saW8pO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xNTg4PXN0YXRpYyB2b2lkIHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE2MTgtXFx0XFx0ICogc2xvdHMgd2lsbCBiZSBmcmVlZCB3aGVuIGZvbGlvIGlzIHJlbW92ZWQgZnJvbSBzd2FwIGNhY2hlXFxubW0vc3dhcGZpbGUuYzoxNjE5OlxcdFxcdCAqIChfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKS5cXG5tbS9zd2FwZmlsZS5jLTE2MjAtXFx0XFx0ICovXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE3NDI9aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTc4MC1cXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSkge1xcbm1tL3N3YXBmaWxlLmM6MTc4MTpcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxubW0vc3dhcGZpbGUuYy0xNzgyLVxcdFxcdGdvdG8gZmFpbGVkO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0yMTE0PWJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIxMjAtXFxubW0vc3dhcGZpbGUuYzoyMTIxOlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zd2FwZmlsZS5jLTIxMjItXFx0Zm9saW9fc2V0X2RpcnR5KGZvbGlvKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTcwMj1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy03NTctXFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG5tbS92bXNjYW4uYzo3NTg6XFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XFxubW0vdm1zY2FuLmMtNzU5LVxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcXG4tLVxcbm1tL3pzd2FwLmM9OTc0PXN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuLS1cXG5tbS96c3dhcC5jLTEwNDQtXFx0aWYgKHJldCkge1xcbm1tL3pzd2FwLmM6MTA0NTpcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxubW0venN3YXAuYy0xMDQ2LVxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE4OjI5Ljc5MDc2NzU0MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTEzMzUzOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktjb25maWcgYW5kIE1ha2VmaWxlIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYG1tL3N3YXBfc3RhdGUuY2AgaXMgYmVpbmcgY29tcGlsZWQuIFRoaXMgaXNuJ3QgaW1tZWRpYXRlbHkgb2J2aW91cywgc28gbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdGhhdCBjb250cm9sIGl0cyBpbmNsdXNpb24uIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIHRoZXNlIGZ1bmN0aW9uYWxpdGllcy4gU28sIHRoZSBxdWVzdGlvbiBpczogd2hlcmUgYXJlIHRoZXNlIGZ1bmN0aW9uYWxpdGllcyBkZWZpbmVkLCBhbmQgaG93IGFyZSB0aGV5IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQ/IFRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBJZiBLY29uZmlnIGlzIG5vdCB0aGUgc291cmNlLCB0aGVuIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcHJlcHJvY2Vzc29yIGZsYWdzIGluIHRoZSByZWxldmFudCBzb3VyY2UgY29kZS5cblxuRmFpbGluZyB0aGF0LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBjb250cm9sIHBvaW50IGZvciBidWlsZGluZyBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgbW9kdWxlcywgYW5kIGl0IHNob3VsZCBjb250YWluIHRoZSBydWxlcyBmb3IgY29tcGlsaW5nIGBtbS9zd2FwX3N0YXRlLmNgLiBJdCB3aWxsIHJldmVhbCB0aGUgb2JqZWN0IGZpbGUgZGVwZW5kZW5jaWVzLCBpbmNsdWRlIHBhdGhzLCBhbmQgYW55IGNvbXBpbGVyIGZsYWdzIGJlaW5nIHVzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgZGV0ZXJtaW5lcyBpdHMgY29tcGlsYXRpb24gaW50byB0aGUgZmluYWwga2VybmVsIGltYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ3OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE4OjMxLjkwNDEyNDM3MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwOTY5NTY4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwX3N0YXRlXFxcXC5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTc3PWVuZGlmXFxubW0vTWFrZWZpbGUtNzgtXFxubW0vTWFrZWZpbGU6Nzk6b2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxubW0vTWFrZWZpbGUtODAtb2JqLSQoQ09ORklHX1pTV0FQKVxcdCs9IHpzd2FwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MTg6MzQuNDEzODI0NDg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzcxMDkyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBTd2FwIENvbXBpbGF0aW9uKipcblxuT2theSwgc28gYENPTkZJR19TV0FQYCBjbGVhcmx5IHRha2VzIGNhcmUgb2YgY29tcGlsaW5nIGBzd2FwX3N0YXRlLm9gLiBUaGF0IG11Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgbm93IEknbSBjdXJpb3VzIGFib3V0IHRoZSBpbnRlcmFjdGlvbiB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3VwcywgcGFydGljdWxhcmx5IGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX01FTUNHX1YxYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHN3YXAgYW5kIG1lbWNnIGFyZSBpbnRlZ3JhdGVkLCBvciBpZiB0aGV5IGFyZS4gSSdtIHRoaW5raW5nIEkgc2hvdWxkIGxvb2sgZm9yIHRoZSBtZW1jZyBzd2FwLW91dCBmdW5jdGlvbi4gTGV0J3Mgc3RhcnQgYnkgc2VhcmNoaW5nIGluIGBtbS9NYWtlZmlsZWAgb3IgcGVyaGFwcyBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBsb29rIGZvciByZWZlcmVuY2VzIHRvIHNvbWV0aGluZyBsaWtlIGBfX21lbWNnMV9zd2Fwb3V0YCBvciB0aGUgZmlsZSBgbWVtY29udHJvbC12MS5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGNsdWUgYWJvdXQgdGhlIGNvbm5lY3Rpb24gYW5kIGhvdyB0aGVzZSBjb21wb25lbnRzIHBsYXkgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODQzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MTg6MzYuMjkwOTM2MjI3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE0MTkzMzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNvbnRyb2wtdjFcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Mjg9S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjk6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXFxubW0vTWFrZWZpbGUtMzAtS0NPVl9JTlNUUlVNRU5UX21tem9uZS5vIDo9IG5cXG4tLVxcbm1tL01ha2VmaWxlPTEwND1vYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgKz0gbWVtZmRfbHVvLm9cXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5tbS9NYWtlZmlsZS0xMDYtb2JqLSQoQ09ORklHX01FTUNHKSArPSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE4OjM4LjYwNTEzNDY4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTg4NzUxMzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBwcm92aWRlZCB0ZXh0OlxuXG4qKkRpdmluZyBpbnRvIG1lbWNvbnRyb2wuaCBhbmQgX19tZW1jZzFfc3dhcG91dCoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgd2FudHMgbWUgdG8gYW5hbHl6ZSBzb21ldGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXJvdW5kIHRoZSBgX19tZW1jZzFfc3dhcG91dGAgZnVuY3Rpb24uIFJpZ2h0LCB0aGF0IGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGNlbnRyYWwgdG8gaG93IG1lbW9yeSBpcyBtYW5hZ2VkIGF0IHRoZSBjb250cm9sIGdyb3VwIGxldmVsIGFuZCBob3cgc3dhcHBpbmcgaGFwcGVucyB3aXRoIHJlc3BlY3QgdG8gdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIGhpZXJhcmNoeS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgdGhhdCBwYXJ0aWN1bGFyIG1hY3JvIGRvZXMgZXhhY3RseS4gSXQncyBsaWtlbHkgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIGltcGxlbWVudGluZyBzd2FwIGxpbWl0cywgZXZpY3Rpb24gcG9saWNpZXMsIGFuZCBnZW5lcmFsIHJlc291cmNlIG1hbmFnZW1lbnQgYXQgdGhlIG1lbWNnIGxldmVsLiBTbyBJIHNob3VsZCBzdGFydCBieSB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0LiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGludGVyZmFjZXMgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCBncm91cHMgYXJlIHNldCB1cC4gSSdsbCBuZWVkIHRvIHNlZSBob3cgbWVtY2dzIHRyYWNrIHBhZ2VzLCBob3cgc3dhcCBsaW1pdHMgYXJlIGVuZm9yY2VkLCBhbmQgaG93IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb3JlIHBhZ2UgY2FjaGUgYW5kIHN3YXAgc3Vic3lzdGVtcyB3b3Jrcy4gSSdtIHByb2JhYmx5IGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBnbG9iYWwgZmxhZ3MsIGFuZCByZWxhdGVkIGhlbHBlciBmdW5jdGlvbnMuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI3OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE4OjQyLjU5Mzg4Nzg3MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NDkxNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NRU1DR19WMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODk9c3RydWN0IG1lbV9jZ3JvdXAge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjc1LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjI3NjojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjc3LVxcdC8qIExlZ2FjeSBjb25zdW1lci1vcmllbnRlZCBjb3VudGVycyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzEwLVxcdGludCBzd2FwcGluZXNzO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjMxMTojZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzEyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTkwOD1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTE3LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5MTg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MTktYm9vbCBtZW1fY2dyb3VwX29vbV9zeW5jaHJvbml6ZShib29sIHdhaXQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTkzMj1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MzctXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTkzODojZWxzZSAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTM5LXN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2luX21lbWNnX29vbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xOTUzPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2V4aXRfdXNlcl9mYXVsdCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk1Ni1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTU3OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTU4LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NTk6I2lmIGRlZmluZWQoQ09ORklHX01FTUNHX1YxKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TV0FQKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE4OjQyLjcwMjM4NDE3OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjUwNjE5NTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIFF1YW5kYXJ5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZGVwZW5kZW5jaWVzIGFuZCBhIGZldyB0aGluZ3MgYXJlIGltbWVkaWF0ZWx5IGp1bXBpbmcgb3V0LiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgZW5hYmxpbmcgc3dhcCBmdW5jdGlvbmFsaXR5LCB3aGljaCBpcyBsaW5rZWQgdG8gYHN3YXBfc3RhdGUub2AgYW5kIGZ1bmN0aW9ucyBsaWtlIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgKmRlbWFuZHMqIHRoYXQgYENPTkZJR19TV0FQYCBiZSBlbmFibGVkLiBUaGF0J3MgYSBuby1icmFpbmVyLiBCdXQgdGhlbiwgSSdtIG5vdGljaW5nIHRoaXMgaW50ZXJwbGF5IHdpdGggYENPTkZJR19NRU1DR19WMWAsIHdoaWNoIHJlcXVpcmVzIGBDT05GSUdfTUVNQ0dgLCBhbmQgc2VlbXMgdG8gYmUgdGllZCB0byBgX19tZW1jZzFfc3dhcG91dGAuXG5cblRoaXMgc2lnbmFscyB0aGF0IHRoZXJlJ3MgYSBwb3NzaWJsZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIG1lbW9yeSBjb250cm9sIGdyb3VwcyBhbmQgdGhlIHN3YXBwaW5nIG1lY2hhbmlzbSwgc29tZXRoaW5nIHRoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZnVsbHkuIFRvIGNsYXJpZnkgdGhlIHByZWNpc2UgcmVsYXRpb25zaGlwcyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjb25maWd1cmF0aW9ucywgSSBuZWVkIHRvIGNvbnN1bHQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIE15IGludHVpdGlvbiBpcyB0byBzdGFydCB3aXRoIGVpdGhlciBgaW5pdC9LY29uZmlnYCBvciBgbW0vS2NvbmZpZ2AsIGFzIHRob3NlIGxvY2F0aW9ucyB1c3VhbGx5IGhvdXNlIHRoZSBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaW5pdGlhbGl6YXRpb24gb3B0aW9ucywgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gbWVtb3J5IGNvbnRyb2wgYW5kIHN3YXBwaW5nLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGBNRU1DR19WMWAgYW5kIGBTV0FQYCB0byBjbGFyaWZ5IHRoZSBwcmVjaXNlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA5NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxODo0OC4zNTMwMDcyNDdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzU5MTIxNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHX1YxXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMTAxPWNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbi0tXFxuaW5pdC9LY29uZmlnLTExMDctXFxuaW5pdC9LY29uZmlnOjExMDg6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDktXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MTg6NTAuNTI4OTQ2NDY4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MjE0MTA1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGNvbmZpZ3VyYXRpb24gcHV6emxlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBpbml0L0tjb25maWdgLiBJdCdzIHVzdWFsbHkgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBhIGxvdCBvZiBjb3JlIHN5c3RlbSBvcHRpb25zLiBBbmQgSSdtIHRoaW5raW5nLCBiYXNlZCBvbiB3aGF0IEknbSBkZWFsaW5nIHdpdGgsIGxpbmUgMTEwOCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgZGVlcCBkaXZlLiBJJ3ZlIGdvdCBhIGZlZWxpbmcgc29tZXRoaW5nIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJ20gd29ya2luZyBvbiBtaWdodCBiZSBkZWZpbmVkIG9yIHJlZmVyZW5jZWQgYXJvdW5kIHRoZXJlLiBUaW1lIHRvIHNlZSB3aGF0IHNlY3JldHMgdGhhdCBzZWN0aW9uIG9mIHRoZSBjb25maWcgZmlsZSBob2xkcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1NjIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxODo1Mi4xNTAzNTk4MDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjczODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTAwOlxcdFxcbjExMDE6XFx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuMTEwMjpcXHRcXHRib29sXFxuMTEwMzpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTEwNDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTEwNTpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMTA2OlxcdFxcdGRlZmF1bHQgeVxcbjExMDc6XFx0XFxuMTEwODpcXHRjb25maWcgTUVNQ0dfVjFcXG4xMTA5OlxcdFxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTExMDpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTExMTpcXHRcXHRkZWZhdWx0IG5cXG4xMTEyOlxcdFxcdGhlbHBcXG4xMTEzOlxcdFxcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XFxuMTExNDpcXHRcXHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXFxuMTExNTpcXHRcXHQgIHdoaWNoIGhhdmVuJ3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XFxuMTExNjpcXHRcXHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xcbjExMTc6XFx0XFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cXG4xMTE4OlxcdFxcbjExMTk6XFx0XFx0ICBQbGVhc2Ugbm90ZSB0aGF0IGZlYXR1cmUgc2V0IG9mIHRoZSBsZWdhY3kgbWVtb3J5IGNvbnRyb2xsZXIgaXMgbGlrZWx5XFxuMTEyMDpcXHRcXHQgIGdvaW5nIHRvIHNocmluayBkdWUgdG8gZGVwcmVjYXRpb24gcHJvY2Vzcy4gTmV3IGRlcGxveW1lbnRzIHdpdGggdjFcXG4xMTIxOlxcdFxcdCAgY29udHJvbGxlciBhcmUgaGlnaGx5IGRpc2NvdXJhZ2VkLlxcbjExMjI6XFx0XFxuMTEyMzpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMTI0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxODo1Mi4xNTA2MzcxNjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg5MDU1NTY2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFN3YXAgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBuYWlsIGRvd24gd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBzd2FwIGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gTXkgaW5zdGluY3Qgc2F5cyB0byBzdGFydCBsb29raW5nIGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMg4oCTIHRoZXkncmUgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciB0aGlzIGtpbmQgb2YgdGhpbmcuIFNwZWNpZmljYWxseSwgSSdsbCBkcmlsbCBkb3duIHRvIGVpdGhlciB0aGUgYGluaXQvS2NvbmZpZ2AgZGlyZWN0b3J5IG9yIHRoZSBgbW0vS2NvbmZpZ2AgZGlyZWN0b3J5LiBHaXZlbiB0aGF0IHN3YXAgaXMgZnVuZGFtZW50YWwgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN5c3RlbSBpbml0aWFsaXphdGlvbiwgYm90aCBzZWVtIGxpa2UgbG9naWNhbCBwbGFjZXMgdG8gZmluZCB0aGUgcmVsZXZhbnQgYENPTkZJR19TV0FQYCBvcHRpb24gKG9yIHJlbGF0ZWQgc2V0dGluZ3MpLiBJ4oCZbGwgc3RhcnQgd2l0aCB0aG9zZSB0d28gbG9jYXRpb25zIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJdCdzIHRoZSBtb3N0IGxpa2VseSBwYXRoIHRvIGxvY2F0aW5nIHRoZSBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMgSSBuZWVkIHRvIGluc3BlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTIxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxODo1NS4wNDExOTY1NDdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MDU3Mzc4NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNXQVAkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXFxuLS1cXG5tbS9LY29uZmlnLTExLVxcbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXFxubW0vS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE4OjU3LjU0Njk0MTYzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxNDI4MTU2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJpYWdlIEZpbmRpbmdzIGZvciBTd2FwIGFuZCBNZW1jZyBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIGBTV0FQYCwgYE1FTUNHYCwgYW5kIGBNRU1DR19WMWAuIE15IGZpcnN0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHN5bWJvbHMuIEkndmUgZ290IGEgbGlzdCBmcm9tIHRoZSBpbnN0cnVjdGlvbnM6IGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgYF9fcmVtb3ZlX21hcHBpbmdgLCBhbmQgYF9fbWVtY2cxX3N3YXBvdXRgLlxuXG5JJ20gZGlnZ2luZyBpbnRvIHRoZSBkaWZmIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEl0IGxvb2tzIGxpa2UgYG1tL3N3YXAuaGAgZGVmaW5lcyBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AuIFRoZW4sIGluIGBtbS9zd2FwX3N0YXRlLmNgLCB0aGVyZSdzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgYW5kIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AuIEFuZCBvdmVyIGluIGBtbS92bXNjYW4uY2AsIHdlIHNlZSBgX19yZW1vdmVfbWFwcGluZ2AuXG5cbk5vdywgYF9fcmVtb3ZlX21hcHBpbmdgIGlzIGEgY29tbW9uIGZ1bmN0aW9uLCB1c2VkIGR1cmluZyBwYWdlIHJlY2xhaW0uIEl0J3Mgbm90ICpzcGVjaWZpYyogdG8gdGhpcyBjaGFuZ2UuIEhvd2V2ZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uOiBgX19yZW1vdmVfbWFwcGluZ2AgaXMgdXNlZCB3aGVuIGV2aWN0aW5nIHBhZ2VzIGZyb20gYWRkcmVzcyBzcGFjZXMsIGluY2x1ZGluZyBzd2FwY2FjaGUuIFRoZSBvdGhlciB0d28gZnVuY3Rpb25zLCBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgYW5kIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGFyZSBzd2FwIGNhY2hlIGZ1bmN0aW9ucy4gVGhlIGBfX21lbWNnMV9zd2Fwb3V0YCBmdW5jdGlvbiBpcyBhIGNncm91cCB2MSBzd2Fwb3V0IGNoYXJnZSB0cmFuc2ZlciBmdW5jdGlvbiB3aGljaCBoYXMgaGFkIGl0cyBjYWxsIHNpdGUgYW5kIHByZXJlcXVpc2l0ZSBvcmRlcmluZyBtb3ZlZCBpbnRvIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYC5cblxuQmFjayB0byB0aGUgaW5zdHJ1Y3Rpb25zIG9uIEZvY3VzU3ltYm9sczogXCJmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzLlwiIFRoaXMgcmVhZmZpcm1zIG15IHNlbGVjdGlvbjogYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gLCBgX19tZW1jZzFfc3dhcG91dGAgYW5kIEknbSBpbmNsdWRpbmcgYF9fcmVtb3ZlX21hcHBpbmdgIGJlY2F1c2UgaXQncyBhIGtleSBmdW5jdGlvbiBpbiB0aGUgcHJvY2Vzcy5cblxuTm93IGZvciB0aGUgRW5hYmxlQ29uZmlnczogYFNXQVBgLCBgTUVNQ0dgLCBhbmQgYE1FTUNHX1YxYC4gWWVwLCB0aGF0IG1hdGNoZXMgdGhlIGNvZGUuXG5cbkZpbmFsbHksIGxldCdzIGFzc2VzcyB0aGUgdHJpYWdlIHBoaWxvc29waHkuIFJlYWNoYWJpbGl0eT8gU3RhbmRhcmQgUUVNVSB3aXRoIHN3YXAgYW5kIG1lbWNnIGVuYWJsZWQsIHRoaXMgaXMgZWFzaWx5IHJlYWNoYWJsZSB0aHJvdWdoIG1lbW9yeSBwcmVzc3VyZSwgcGFnZSByZWNsYWltLCBzd2Fwb3V0LCBhbmQgc3dhcCBjYWNoZS4gU3Vic3lzdGVtOiBkZWZpbml0ZWx5IG1tIChtZW1vcnkgbWFuYWdlbWVudCksIHNwZWNpZmljYWxseSBzd2FwIGFuZCBtZW1jZy4gRnV6emluZyB2YWx1ZT8gVGhpcyBpcyBkZWZpbml0ZWx5IFdvcnRoRnV6emluZyA9IHRydWUuXG5cbkFscmlnaHQsIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGVzZSBmaW5kaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MDMsIk91dHB1dFRva2VucyI6MTYzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE5OjAzLjY4OTc2MDYzOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODU3NDIwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19zd2FwX2NhY2hlX2RlbF9mb2xpb1wiLFxuICAgIFwic3dhcF9jYWNoZV9kZWxfZm9saW9cIixcbiAgICBcIl9fbWVtY2cxX3N3YXBvdXRcIixcbiAgICBcIl9fcmVtb3ZlX21hcHBpbmdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIGNvcmUgbW0gKG1tL3N3YXBfc3RhdGUuYywgbW0vdm1zY2FuLmMsIG1tL3N3YXAuaCksIG1vdmluZyB0aGUgX19tZW1jZzFfc3dhcG91dCgpIGNhbGwgaW50byBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgYW5kIHVwZGF0aW5nIGNhbGxlcnMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgc3dhcCBvcGVyYXRpb25zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvXCIsXG4gICAgXCJzd2FwX2NhY2hlX2RlbF9mb2xpb1wiLFxuICAgIFwiX19tZW1jZzFfc3dhcG91dFwiLFxuICAgIFwiX19yZW1vdmVfbWFwcGluZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGRlbGV0aW9uIGFuZCBwYWdlIHJlY2xhaW0gcGF0aHMgaW4gY29yZSBtbSAobW0vc3dhcF9zdGF0ZS5jLCBtbS92bXNjYW4uYywgbW0vc3dhcC5oKSwgbW92aW5nIHRoZSBfX21lbWNnMV9zd2Fwb3V0KCkgY2FsbCBpbnRvIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oKSBhbmQgdXBkYXRpbmcgY2FsbGVycy4gVGhlc2UgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCBzd2FwIG9wZXJhdGlvbnMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDoxOTowMy44MDgzNDMwMzRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzOTU2MTgyNTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MTk6MDMuODA4ODQ4OTU0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjM5NTU2NzIzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGludGVybmFsIHN3YXAgY2FjaGUgYW5kIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBsb2dpYyAoX19zd2FwX2NhY2hlX2RlbF9mb2xpbywgc3dhcF9jYWNoZV9kZWxfZm9saW8sIGFuZCBfX3JlbW92ZV9tYXBwaW5nIGluIHZtc2Nhbi5jKSBieSBtb3ZpbmcgdGhlIGNhbGwgdG8gX19tZW1jZzFfc3dhcG91dCgpIGluc2lkZSBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgd2l0aCBhbiBleHBsaWNpdCBib29sZWFuIHBhcmFtZXRlciAnc3dhcG91dCcsIGFuZCBhZGp1c3RpbmcgdGhlIG9yZGVyaW5nIHJlbGF0aXZlIHRvIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oKS5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYW4gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgcmVmYWN0b3JpbmcgLyBvcmRlcmluZyBhZGp1c3RtZW50IGZvciBmb2xpbyBzdGF0aXN0aWNzIGFuZCBtZW1jZyBzd2Fwb3V0IGFjY291bnRpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyB0byB1c2Vyc3BhY2Ugb3Igb3RoZXIga2VybmVsIHN1YnN5c3RlbXMsIGFuZCBkb2VzIG5vdCBjcmVhdGUgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQW55IHBvdGVudGlhbCBidWdzIChlLmcuIGxvY2tpbmcsIHBhZ2UgcmVmY291bnRpbmcsIHJhY2UgY29uZGl0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3IgVk0gZGVidWcgY2hlY2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ0MzRiNzdiMTBlMmQwYWYxZGZkNjEwNzZiODc2Yjg0NjA4NDk1ZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwNDoxNzo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxuaW5kZXggMGI1ZDUwNzczOWJjYi4uYjNiNTRjMjg5MjlhMSAxMDA2NDRcbi0tLSBhL21tL3N3YXAuaFxuKysrIGIvbW0vc3dhcC5oXG5AQCAtMzE5LDcgKzMxOSw4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpO1xuK1x0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuK1x0XHRcdCAgICBib29sIHN3YXBvdXQpO1xuIHZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdFx0XHRcdHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7XG4gXG5AQCAtNDUyLDcgKzQ1Myw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KVxuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuK1x0XHRib29sIHN3YXBvdXQpXG4ge1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDMwNTg3N2UxZjRkN2IuLjYyNWMxODVhMWNhNGQgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTMwNiwyMSArMzA2LDI4IEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKiBAZm9saW86IFRoZSBmb2xpby5cbiAgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLlxuICAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuXG4rICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBmb2xpbyBpcyBiZWluZyByZWNsYWltZWQgYWZ0ZXIgc3dhcG91dC5cbiAgKlxuICAqIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBmaWxscyBhIHNoYWRvdyBpbiBwbGFjZS5cbiAgKiBUaGlzIHdvbid0IHB1dCB0aGUgZm9saW8ncyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cbiAgKlxuICAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxuICAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXG4rICogSWYgQHN3YXBvdXQgaXMgc2V0LCB0aGUgZm9saW8gc2hvdWxkIGJlIGluIHJlY2xhaW0gcGF0aCBhbmQgSVJRc1xuKyAqIHNob3VsZCBiZSBkaXNhYmxlZC5cbiAgKi9cbiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdylcbitcdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG4tXHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XG4gXHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpO1xuIFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XG4rXG4rXHRpZiAoc3dhcG91dClcbitcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuK1xuK1x0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIH1cbiBcbiAvKipcbkBAIC0zMzksNyArMzQ2LDcgQEAgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIFxuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcbi1cdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCk7XG4rXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTtcbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFxuIFx0Zm9saW9fcmVmX3N1Yihmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAyNDVmNjhjNzViMjg5Li4yOWJjZWQ0M2IwY2U2IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNzU1LDggKzc1NSw3IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbiBcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuLVx0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4tXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xuK1x0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93LCB0cnVlKTtcbiBcdFx0c3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpO1xuIFx0fSBlbHNlIHtcbiBcdFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE5OjAzLjgwODg0OTg5NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDU4OTUzMzAyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExpbnV4IEtlcm5lbCBQYXRjaDogTmVlZHNLTVNBTiBEZXRlcm1pbmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQuIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGFuYWx5emUgdGhpcywgc28gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBUaGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBzd2FwLXJlbGF0ZWQgZmlsZXM6IGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIGBtbS92bXNjYW4uY2AuIFRoYXQgbmFycm93cyB0aGUgZm9jdXMgcmlnaHQgYXdheS5cblxuVGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHRoZSBhZGRpdGlvbiBvZiBhIGBib29sIHN3YXBvdXRgIHBhcmFtZXRlciB0byB0aGUgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGZ1bmN0aW9uIGluIGBtbS9zd2FwLmhgLiBUaGF0J3MgdGhlIGNvcmUgY2hhbmdlLCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgZmxhZy4gVGhlbiwgbG9va2luZyBhdCBgbW0vc3dhcF9zdGF0ZS5jYCwgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIG5vdyAqdXNlcyogdGhhdCBwYXJhbWV0ZXIuIENydWNpYWxseSwgdGhlIHBhdGNoIG1vdmVzIHRoZSBjYWxsIHRvIGBfX21lbWNnMV9zd2Fwb3V0YCAqaW5zaWRlKiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGJ1dCAqY29uZGl0aW9uYWxseSogYmFzZWQgb24gdGhlIGBzd2Fwb3V0YCBmbGFnLiBJdCBzZWVtcyB0aGF0IHdoZXRoZXIgYF9fbWVtY2cxX3N3YXBvdXRgIGhhcHBlbnMgb3Igbm90LCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIGBzd2Fwb3V0YCBwYXJhbWV0ZXIgaXMgdHJ1ZSBvciBmYWxzZS4gSXQgYXBwZWFycyB0aGF0IGl0IGhhcHBlbnMgYWZ0ZXIgc29tZSBzdGF0aXN0aWNzIGFyZSB1cGRhdGVkLCBgbm9kZV9zdGF0X21vZF9mb2xpb2AgYW5kIGBscnV2ZWNfc3RhdF9tb2RfZm9saW9gLiBCZWZvcmUsIGl0IHdhcyBjYWxsZWQgb3V0IG9mIHRoYXQgZnVuY3Rpb24gZW50aXJlbHkuXG5cbkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMgaW4gYG1tL3Ztc2Nhbi5jYCwgdGhlIHBhdGNoIG1vZGlmaWVzIGNhbGxzIHRvIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYC4gT25lIGNhbGwgbm93IHBhc3NlcyBgdHJ1ZWAgZm9yIGBzd2Fwb3V0YCwgYW5kIGFub3RoZXIgbm93IHBhc3NlcyBgZmFsc2VgLiBTbywgY2xlYXJseSwgdGhpcyBmbGFnIGNvbnRyb2xzIHNvbWUgc3BlY2lmaWMgYmVoYXZpb3IgcmVsYXRlZCB0byBzd2FwcGluZyBvdXQuXG5cblRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QsIEkgbmVlZCB0byBrbm93IHdoYXQgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLCBgX19tZW1jZzFfc3dhcG91dGAsIGFuZCB0aG9zZSBzdGF0IG1vZGlmaWNhdGlvbiBmdW5jdGlvbnMgKmRvKi4gSSB3aWxsIHVzZSBteSB0b29scyAoZ3JlcHBlciwgcmVhZC1maWxlKSB0byBmaWd1cmUgb3V0IHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhpcyBmbGFnLiBUaGF0IHdpbGwgYmUgdGhlIGtleSB0byBkZXRlcm1pbmluZyBpZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHRoYXQgS01TQU4gd291bGQgbmVlZCB0byBmbGFnLiBJdCdzIGxpa2VseSB0aGF0IGEgS01TQU4gY2hlY2sgbWlnaHQgYmUgbmVlZGVkIGlmIHRoZXJlIGlzIGEgcG90ZW50aWFsIHRvIHJlYWQgb3Igd3JpdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgdG8gd3JpdGUgbWVtb3J5IHRvIGEgbG9jYXRpb24gdGhhdCBtYXkgdHJpZ2dlciBhIHJhY2UgY29uZGl0aW9uLCBvciBhIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBiZWluZyBjb250cm9sbGVkIHRvIG1ha2UgdGhlIGNhbGwuIE9uY2UgSSBzZWUgKnRoYXQqLCBJIGNhbiBkZXRlcm1pbmUgaWYgYE5lZWRzS01TQU5gIGlzIG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEyMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE5OjE0LjM5ODM4NjE1OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMzM4NTI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21lbWNnMV9zd2Fwb3V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5NTM9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTYwLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjE6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjItdm9pZCBtZW1jZzFfc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2NS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTY2OnN0YXRpYyBpbmxpbmUgdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2Ny1cXHRcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NTMzPXZvaWQgZGVmZXJyZWRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBwYXJ0aWFsbHlfbWFwcGVkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTUxLVxcdCAqIEV4Y2x1ZGUgc3dhcGNhY2hlOiBvcmlnaW5hbGx5IHRvIGF2b2lkIGEgY29ycnVwdCBkZWZlcnJlZCBzcGxpdFxcbm1tL2h1Z2VfbWVtb3J5LmM6NDU1MjpcXHQgKiBxdWV1ZS4gTm93YWRheXMgdGhhdCBpcyBmdWxseSBwcmV2ZW50ZWQgYnkgX19tZW1jZzFfc3dhcG91dCgpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDU1My1cXHQgKiBidXQgaWYgcGFnZSByZWNsYWltIGlzIGFscmVhZHkgaGFuZGxpbmcgdGhlIHNhbWUgZm9saW8sIGl0IGlzXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MjQ3PXZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTI1OC0vKipcXG5tbS9tZW1jb250cm9sLXYxLmM6MjU5OiAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXFxubW0vbWVtY29udHJvbC12MS5jLTI2MC0gKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbXN3IGNoYXJnZSB0byB0cmFuc2Zlclxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTI2OC0gKi9cXG5tbS9tZW1jb250cm9sLXYxLmM6MjY5OnZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yNzAte1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTMxOT12b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMjctXFx0aWYgKHN3YXBvdXQpXFxubW0vc3dhcF9zdGF0ZS5jOjMyODpcXHRcXHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XFxubW0vc3dhcF9zdGF0ZS5jLTMyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MTk6MTYuNTExNzc2NTg4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzM3NTk3MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBpbiBMaW51eCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIG1lbW9yeS1yZWxhdGVkIGlzc3VlLCBhbmQgSSdtIHRoaW5raW5nIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgYXJvdW5kIHRoZSBzd2FwIGFuZCBzY2FubmluZyBtZWNoYW5pc21zLiBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LCBzbyBsZXQncyBqdW1wIGludG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBtbS9zd2FwX3N0YXRlLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdmlldyBvZiBob3cgc3dhcHBpbmcgaXMgbWFuYWdlZCBhdCB0aGUgY29yZSBsZXZlbC4gVGhlbiwgc2luY2UgdGhlIHN3YXAgcHJvY2VzcyBpcyB0cmlnZ2VyZWQgYnkgc29tZSBzb3J0IG9mIGxvdyBtZW1vcnkgaXNzdWUsIGBtbS92bXNjYW4uY2AgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbC4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIHZtIHNjYW5uaW5nIGxvZ2ljIHRvIHNlZSB3aGVuLCB3aHksIGFuZCBob3cgdGhlIGtlcm5lbCBkZWNpZGVzIGl0J3MgdGltZSB0byBvZmZsb2FkIG1lbW9yeSB0byBzd2FwLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBhcmVhcyB3aGVyZSB0aGVzZSB0d28gZmlsZXMgaW50ZXJhY3QuIEknbGwgZm9jdXMgb24gdGhvc2UgcGFydHMsIGJlY2F1c2UgdGhleSBzaG91bGQgcmV2ZWFsIGhvdyB3ZSB0cmlnZ2VyLCBtYW5hZ2UgYW5kIHV0aWxpemUgc3dhcCBzcGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY3OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE5OjE4LjU0NTUzOTAzMVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc3dhcF9zdGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRcXHR9XFxuIDMwMTpcXHR9XFxuIDMwMjpcXHRcXG4gMzAzOlxcdC8qKlxcbiAzMDQ6XFx0ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxcbiAzMDU6XFx0ICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cXG4gMzA2OlxcdCAqIEBmb2xpbzogVGhlIGZvbGlvLlxcbiAzMDc6XFx0ICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cXG4gMzA4OlxcdCAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuXFxuIDMwOTpcXHQgKiBAc3dhcG91dDogd2hldGhlciB0aGlzIGZvbGlvIGlzIGJlaW5nIHJlY2xhaW1lZCBhZnRlciBzd2Fwb3V0LlxcbiAzMTA6XFx0ICpcXG4gMzExOlxcdCAqIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBmaWxscyBhIHNoYWRvdyBpbiBwbGFjZS5cXG4gMzEyOlxcdCAqIFRoaXMgd29uJ3QgcHV0IHRoZSBmb2xpbydzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LlxcbiAzMTM6XFx0ICpcXG4gMzE0OlxcdCAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxcbiAzMTU6XFx0ICogdXNpbmcgdGhlIGluZGV4IG9mIEBlbnRyeSwgYW5kIGxvY2sgdGhlIGNsdXN0ZXIgdGhhdCBob2xkcyB0aGUgZW50cmllcy5cXG4gMzE2OlxcdCAqIElmIEBzd2Fwb3V0IGlzIHNldCwgdGhlIGZvbGlvIHNob3VsZCBiZSBpbiByZWNsYWltIHBhdGggYW5kIElSUXNcXG4gMzE3OlxcdCAqIHNob3VsZCBiZSBkaXNhYmxlZC5cXG4gMzE4OlxcdCAqL1xcbiAzMTk6XFx0dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIDMyMDpcXHRcXHRcXHRcXHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxcbiAzMjE6XFx0e1xcbiAzMjI6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gMzIzOlxcdFxcbiAzMjQ6XFx0XFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcXG4gMzI1OlxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpO1xcbiAzMjY6XFx0XFxuIDMyNzpcXHRcXHRpZiAoc3dhcG91dClcXG4gMzI4OlxcdFxcdFxcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcXG4gMzI5OlxcdFxcbiAzMzA6XFx0XFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xcbiAzMzE6XFx0fVxcbiAzMzI6XFx0XFxuIDMzMzpcXHQvKipcXG4gMzM0OlxcdCAqIHN3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXFxuIDMzNTpcXHQgKiBAZm9saW86IFRoZSBmb2xpby5cXG4gMzM2OlxcdCAqXFxuIDMzNzpcXHQgKiBTYW1lIGFzIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8sIGJ1dCBoYW5kbGVzIGxvY2sgYW5kIHJlZmNvdW50LiBUaGVcXG4gMzM4OlxcdCAqIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgZWl0aGVyIGNsZWFuIG9yIGhhcyBhIHN3YXAgY291bnRcXG4gMzM5OlxcdCAqIGVxdWFsIHRvIHplcm8sIG9yIGl0IG1heSBjYXVzZSBkYXRhIGxvc3MuXFxuIDM0MDpcXHQgKlxcbiAzNDE6XFx0ICogQ29udGV4dDogQ2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQgYW5kIGluIHRoZSBzd2FwIGNhY2hlLlxcbiAzNDI6XFx0ICovXFxuIDM0MzpcXHR2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIDM0NDpcXHR7XFxuIDM0NTpcXHRcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xcbiAzNDY6XFx0XFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cXHUwMDNlc3dhcDtcXG4gMzQ3OlxcdFxcbiAzNDg6XFx0XFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcXG4gMzQ5OlxcdFxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xcbiAzNTA6XFx0XFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuIDM1MzpcXHR9XFxuIDM1NDpcXHRcXG4gMzU1OlxcdC8qKlxcbiAzNTY6XFx0ICogX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8gLSBSZXBsYWNlIGEgZm9saW8gaW4gdGhlIHN3YXAgY2FjaGUuXFxuIDM1NzpcXHQgKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxcbiAzNTg6XFx0ICogQG9sZDogVGhlIG9sZCBmb2xpbyB0byBiZSByZXBsYWNlZC5cXG4gMzU5OlxcdCAqIEBuZXc6IFRoZSBuZXcgZm9saW8uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjE5OjE4LjU0NTcyNTAyMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MjE4NzcyODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3dhcCBDYWNoZSBEZWxldGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBjb2RlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2Ugd2UncmUgc2h1ZmZsaW5nIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGluIHRoZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgZnVuY3Rpb24uIFByZXZpb3VzbHksIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCB3YXMgY2FsbGVkIGJlZm9yZSB0aGUgc3RhdHMgbW9kaWZpY2F0aW9ucyAoYG5vZGVfc3RhdF9tb2RfZm9saW9gLCBgbHJ1dmVjX3N0YXRfbW9kX2ZvbGlvYCksIGFuZCBpbiBgX19yZW1vdmVfbWFwcGluZ2AsIGBfX21lbWNnMV9zd2Fwb3V0YCBoYXBwZW5lZCBiZWZvcmUgY2FsbGluZyB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBmdW5jdGlvbi4gTm93LCBgX19tZW1jZzFfc3dhcG91dGAgaGFzIGJlZW4gbW92ZWQgKmludG8qIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgYW5kIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCBpcyBleGVjdXRlZCBhZnRlciB0aGUgc3RhdHMgdXBkYXRlcyBhbmQgdGhlIGBfX21lbWNnMV9zd2Fwb3V0YCBjYWxsLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBTbywgSSBuZWVkIHRvIHRob3JvdWdobHkgdmV0IHRoaXMgY2hhbmdlLiBMZXQncyBydW4gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXJzcGFjZT8qKiBOb3BlLiBUaGlzIGlzbid0IHRvdWNoaW5nIGFueSBkYXRhIHRoYXQncyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSB0aHJvdWdoIGFueSBvZiB0aGUgdXN1YWwgY2hhbm5lbHMgbGlrZSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgaW9jdGxzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGE/KiogTm8sIHRoZSBsb2dpYyBoaW5nZXMgb24gYSBib29sZWFuLCBgc3dhcG91dGAsIHdoaWNoIGlzIHBhc3NlZCBmcm9tIHRoZSBjYWxsZXIuIEl0J3MgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCBpbiBgX19yZW1vdmVfbWFwcGluZ2Agb3IgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYC5cbjMuICAqKk5ldyBkYXRhIHN0cnVjdHVyZXMgb3IgYWxsb2NhdGlvbnMgd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm8uIFRoaXMgcmVmYWN0b3IgaXNuJ3QgaW50cm9kdWNpbmcgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgc28gd2UncmUgc2FmZSB0aGVyZS5cbjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/KiogTm90IGhlcmUuIE5vIGNoYW5nZXMgdGhhdCBJIGNhbiBzZWUgdGhhdCB3b3VsZCBhbGxvdyB1cyB0byByZWFkIGJleW9uZCB0aGUgYm91bmRhcmllcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5UaGlzIGlzIGZ1bmRhbWVudGFsbHkgYW4gaW50ZXJuYWwgcmVmYWN0b3Igd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFdlJ3JlIHJlb3JkZXJpbmcgdGhlIHN3YXAgY2FjaGUgZGVsZXRpb24gcHJvY2VzcyB3aXRoIG1lbWNnIGFjY291bnRpbmcsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgYWNjdXJhdGUgbWVtb3J5IHVzYWdlIHRyYWNraW5nLiBUaGUgdXN1YWwgc3VzcGVjdHMgZm9yIHBvdGVudGlhbCBidWdzIGFyZSB0aGluZ3MgbGlrZSByYWNlIGNvbmRpdGlvbnMsIHJlZmVyZW5jZSBjb3VudGluZyBlcnJvcnMsIG9yIGlzc3VlcyB3aXRoIGxvY2tpbmcgb3IgdXNlLWFmdGVyLWZyZWUsIGFsbCBvZiB3aGljaCBhcmUgY292ZXJlZCBieSBvdXIgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQLiBBcyBmYXIgYXMgSSBjYW4gc2VlLCB3ZSdyZSBub3QgcmVhZGluZywgY3JlYXRpbmcsIG9yIGV4cG9zaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLlxuXG5UaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBLTVNBTiBpc3N1ZXMuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYWxsIHRoZSBkZXRhaWxzIGFnYWluIHRvIGVuc3VyZSBteSByZWFzb25pbmcgaXMgY29tcGxldGVseSBzb3VuZCBhbmQgSSBjYW4gcHJvdmlkZSBhIGNvbXByZWhlbnNpdmUgZXhwbGFuYXRpb24gZm9yIG15IGNvbmNsdXNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MzcsIk91dHB1dFRva2VucyI6MjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MTk6MjcuNzY0NTAwNDM5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbnRlcm5hbCBzd2FwIGNhY2hlIGFuZCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgbG9naWMgKF9fc3dhcF9jYWNoZV9kZWxfZm9saW8sIHN3YXBfY2FjaGVfZGVsX2ZvbGlvLCBhbmQgX19yZW1vdmVfbWFwcGluZyBpbiB2bXNjYW4uYykgYnkgbW92aW5nIHRoZSBjYWxsIHRvIF9fbWVtY2cxX3N3YXBvdXQoKSBpbnNpZGUgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpIHdpdGggYW4gZXhwbGljaXQgYm9vbGVhbiBwYXJhbWV0ZXIgJ3N3YXBvdXQnLCBhbmQgYWRqdXN0aW5nIHRoZSBvcmRlcmluZyByZWxhdGl2ZSB0byBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKCkuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFuIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IHJlZmFjdG9yaW5nIC8gb3JkZXJpbmcgYWRqdXN0bWVudCBmb3IgZm9saW8gc3RhdGlzdGljcyBhbmQgbWVtY2cgc3dhcG91dCBhY2NvdW50aW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgdG8gdXNlcnNwYWNlIG9yIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBhbmQgZG9lcyBub3QgY3JlYXRlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgYnVncyAoZS5nLiBsb2NraW5nLCBwYWdlIHJlZmNvdW50aW5nLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIFZNIGRlYnVnIGNoZWNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbnRlcm5hbCBzd2FwIGNhY2hlIGFuZCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgbG9naWMgKF9fc3dhcF9jYWNoZV9kZWxfZm9saW8sIHN3YXBfY2FjaGVfZGVsX2ZvbGlvLCBhbmQgX19yZW1vdmVfbWFwcGluZyBpbiB2bXNjYW4uYykgYnkgbW92aW5nIHRoZSBjYWxsIHRvIF9fbWVtY2cxX3N3YXBvdXQoKSBpbnNpZGUgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpIHdpdGggYW4gZXhwbGljaXQgYm9vbGVhbiBwYXJhbWV0ZXIgJ3N3YXBvdXQnLCBhbmQgYWRqdXN0aW5nIHRoZSBvcmRlcmluZyByZWxhdGl2ZSB0byBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKCkuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFuIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IHJlZmFjdG9yaW5nIC8gb3JkZXJpbmcgYWRqdXN0bWVudCBmb3IgZm9saW8gc3RhdGlzdGljcyBhbmQgbWVtY2cgc3dhcG91dCBhY2NvdW50aW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgdG8gdXNlcnNwYWNlIG9yIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBhbmQgZG9lcyBub3QgY3JlYXRlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBwb3RlbnRpYWwgYnVncyAoZS5nLiBsb2NraW5nLCBwYWdlIHJlZmNvdW50aW5nLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIFZNIGRlYnVnIGNoZWNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowqdcnb[1] Phase: Succeeded StartedAt: 2026-09-10 04:19:39 +0000 UTC FinishedAt: 2026-09-10 04:19:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 04:19:39 +0000 UTC FinishedAt: 2026-09-10 04:19:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[2] Phase: Succeeded StartedAt: 2026-09-10 04:19:39 +0000 UTC FinishedAt: 2026-09-10 08:02:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-10 04:19:39 +0000 UTC FinishedAt: 2026-09-10 08:02:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-10 04:19:39 +0000 UTC FinishedAt: 2026-09-10 04:20:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-10 04:19:39 +0000 UTC FinishedAt: 2026-09-10 04:19:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowqdcnb/series-workflowqdcnb-convert-artifact-1946096062/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-10 04:20:03 +0000 UTC FinishedAt: 2026-09-10 04:35:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-10 04:20:03 +0000 UTC FinishedAt: 2026-09-10 04:35:59 +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:*9b19e91f-ac6a-45fc-96d5-cfa81fdb135a,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-workflowqdcnb/series-workflowqdcnb-convert-artifact-1946096062/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": "df686447-f63e-4580-bc3e-3facad5bf531", "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-workflowqdcnb/series-workflowqdcnb-build-action-2507598500/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-10 04:20:03 +0000 UTC FinishedAt: 2026-09-10 04:35:49 +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:*9b19e91f-ac6a-45fc-96d5-cfa81fdb135a,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-workflowqdcnb/series-workflowqdcnb-convert-artifact-1946096062/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": "df686447-f63e-4580-bc3e-3facad5bf531", "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-workflowqdcnb/series-workflowqdcnb-build-action-2507598500/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-10 04:35:59 +0000 UTC FinishedAt: 2026-09-10 04:35:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-10 04:35:59 +0000 UTC FinishedAt: 2026-09-10 04:35:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-10 04:35:59 +0000 UTC FinishedAt: 2026-09-10 04:36:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-10 04:35:59 +0000 UTC FinishedAt: 2026-09-10 04:36:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowqdcnb/series-workflowqdcnb-convert-artifact-2041240305/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-10 04:36:09 +0000 UTC FinishedAt: 2026-09-10 04:38:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-10 04:36:09 +0000 UTC FinishedAt: 2026-09-10 04:38:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*df686447-f63e-4580-bc3e-3facad5bf531,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-workflowqdcnb/series-workflowqdcnb-build-action-2507598500/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-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-10 04:38:11 +0000 UTC FinishedAt: 2026-09-10 04:38:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-10 04:38:11 +0000 UTC FinishedAt: 2026-09-10 04:38:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-10 04:38:11 +0000 UTC FinishedAt: 2026-09-10 04:54:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-10 04:38:11 +0000 UTC FinishedAt: 2026-09-10 04:54:44 +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:*9b19e91f-ac6a-45fc-96d5-cfa81fdb135a,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-workflowqdcnb/series-workflowqdcnb-convert-artifact-2041240305/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": "012119b2-a7c7-43f6-b41a-dbc373154169", "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-workflowqdcnb/series-workflowqdcnb-build-action-3892345021/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-10 04:38:11 +0000 UTC FinishedAt: 2026-09-10 04:54:34 +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:*9b19e91f-ac6a-45fc-96d5-cfa81fdb135a,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-workflowqdcnb/series-workflowqdcnb-convert-artifact-2041240305/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": "012119b2-a7c7-43f6-b41a-dbc373154169", "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-workflowqdcnb/series-workflowqdcnb-build-action-3892345021/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-10 04:54:44 +0000 UTC FinishedAt: 2026-09-10 04:54:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-10 04:54:44 +0000 UTC FinishedAt: 2026-09-10 04:54:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-10 04:54:44 +0000 UTC FinishedAt: 2026-09-10 04:56:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-10 04:54:44 +0000 UTC FinishedAt: 2026-09-10 04:56:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*012119b2-a7c7-43f6-b41a-dbc373154169,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqdcnb/series-workflowqdcnb-build-action-3892345021/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-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-10 04:56:45 +0000 UTC FinishedAt: 2026-09-10 08:02:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-10 04:56:45 +0000 UTC FinishedAt: 2026-09-10 08:02:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*df686447-f63e-4580-bc3e-3facad5bf531,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*012119b2-a7c7-43f6-b41a-dbc373154169,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqdcnb/series-workflowqdcnb-build-action-2507598500/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqdcnb/series-workflowqdcnb-build-action-3892345021/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-10 04:56:45 +0000 UTC FinishedAt: 2026-09-10 04:56:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-10 04:56:45 +0000 UTC FinishedAt: 2026-09-10 04:56:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqdcnb/series-workflowqdcnb-convert-artifact-3516091814/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-10 04:56:45 +0000 UTC FinishedAt: 2026-09-10 04:56:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-10 04:56:45 +0000 UTC FinishedAt: 2026-09-10 04:56:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-10 04:56:46 +0000 UTC FinishedAt: 2026-09-10 04:56:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-10 04:56:56 +0000 UTC FinishedAt: 2026-09-10 08:02:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdcnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio","__memcg1_swapout","__remove_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c74cc17fcf422576c5327ac11c74073d5deff4a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"bc46f6e9-d378-459a-a08b-e9690e113576","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-10 04:56:56 +0000 UTC FinishedAt: 2026-09-10 08:02:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*df686447-f63e-4580-bc3e-3facad5bf531,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*012119b2-a7c7-43f6-b41a-dbc373154169,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqdcnb/series-workflowqdcnb-build-action-2507598500/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqdcnb/series-workflowqdcnb-build-action-3892345021/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqdcnb/series-workflowqdcnb-convert-artifact-3516091814/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,}