Name: series-workflowz2sfx Phase: Succeeded StartedAt: 2026-09-09 14:56:45 +0000 UTC FinishedAt: 2026-09-09 18:48:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[0] Phase: Succeeded StartedAt: 2026-09-09 14:56:45 +0000 UTC FinishedAt: 2026-09-09 15:01:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 14:56:45 +0000 UTC FinishedAt: 2026-09-09 15:01:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRACING", "FTRACE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRACING", "FTRACE" ], "series_id": "60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "ring_buffer_map_get_reader", "tracing_buffers_ioctl", "rb_get_reader_page" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQUNJTkcmIzM0OywKICAgICYjMzQ7RlRSQUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXImIzM0OywKICAgICYjMzQ7dHJhY2luZ19idWZmZXJzX2lvY3RsJiMzNDssCiAgICAmIzM0O3JiX2dldF9yZWFkZXJfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgcmVtb3ZlcyBhIFdBUk5fT04oKSBtYWNybyBhcm91bmQgYSBOVUxMIGNoZWNrIChjaGFuZ2luZyAmIzM5O2lmIChXQVJOX09OKCFyZWFkZXIpKSYjMzk7IHRvICYjMzk7aWYgKCFyZWFkZXIpJiMzOTspIGluIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgZmllbGRzLCBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBkYXRhIHBhdGhzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWFkZXIgYWNxdWlzaXRpb24gbG9naWMgaW4gdGhlIHJpbmcgYnVmZmVyIHN1YnN5c3RlbSBieSByZW1vdmluZyBhIFdBUk5fT04gYXNzZXJ0aW9uIHdoZW4gcmJfZ2V0X3JlYWRlcl9wYWdlKCkgcmV0dXJucyBOVUxMIGluIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKCkuIFRoaXMgcGF0aCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGlvY3RsKFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUikgb24gdHJhY2UgYnVmZmVyIGZpbGVzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIHZlcmlmeSBtZW1vcnktbWFwcGVkIHJlYWRlciBzeW5jaHJvbml6YXRpb24gYW5kIGVycm9yIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2IwM2M0M2VmODE3OTMzYjgzMzJiNWNhOGM5ZTM1NTExYTRjNGNkMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTU6MDA6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1xuaW5kZXggOWMwM2E1NTVhNmJhMi4uMWE0ZGEzZDQ3NTE0NCAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1xuQEAgLTc5OTUsNyAmIzQzOzc5OTUsNyBAQCBpbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdHJlYWRlciA9IHJiX2dldF9yZWFkZXJfcGFnZShjcHVfYnVmZmVyKTtcbi1cdGlmIChXQVJOX09OKCFyZWFkZXIpKVxuJiM0MztcdGlmICghcmVhZGVyKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdC8qIENoZWNrIGlmIGFueSBldmVudHMgd2VyZSBkcm9wcGVkICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBQ0lORyYjMzQ7LAogICAgJiMzNDtGVFJBQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlciYjMzQ7LAogICAgJiMzNDt0cmFjaW5nX2J1ZmZlcnNfaW9jdGwmIzM0OywKICAgICYjMzQ7cmJfZ2V0X3JlYWRlcl9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWFkZXIgYWNxdWlzaXRpb24gbG9naWMgaW4gdGhlIHJpbmcgYnVmZmVyIHN1YnN5c3RlbSBieSByZW1vdmluZyBhIFdBUk5fT04gYXNzZXJ0aW9uIHdoZW4gcmJfZ2V0X3JlYWRlcl9wYWdlKCkgcmV0dXJucyBOVUxMIGluIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKCkuIFRoaXMgcGF0aCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGlvY3RsKFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUikgb24gdHJhY2UgYnVmZmVyIGZpbGVzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIHZlcmlmeSBtZW1vcnktbWFwcGVkIHJlYWRlciBzeW5jaHJvbml6YXRpb24gYW5kIGVycm9yIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2IwM2M0M2VmODE3OTMzYjgzMzJiNWNhOGM5ZTM1NTExYTRjNGNkMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTU6MDA6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCmluZGV4IDljMDNhNTU1YTZiYTIuLjFhNGRhM2Q0NzUxNDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCkBAIC03OTk1LDcgJiM0Mzs3OTk1LDcgQEAgaW50IHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSkKIAkJZ290byBvdXQ7CiAKIAlyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7Ci0JaWYgKFdBUk5fT04oIXJlYWRlcikpCiYjNDM7CWlmICghcmVhZGVyKQogCQlnb3RvIG91dDsKIAogCS8qIENoZWNrIGlmIGFueSBldmVudHMgd2VyZSBkcm9wcGVkICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NDcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBUaGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCByZXF1ZXN0IGZvciBhIHBhdGNoIHJldmlldyB0byBkZXRlcm1pbmUgaWYgaXQmIzM5O3Mgd29ydGggZnV6emluZyB3aXRoIHN5emthbGxlci4gVHlwaWNhbCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciB0cmlhZ2UuIE15IGpvYiBpcyB0byBldmFsdWF0ZSB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIHByZXNlbnRzIGFuIG9wcG9ydHVuaXR5IGZvciBmdXp6aW5nLCBhbmQgaWYgc28sIGhvdyB0byBiZXN0IGVuYWJsZSBpdC4gSSBuZWVkIHRvIG1ha2UgYSBqdWRnbWVudCBjYWxsIG9uICYjMzQ7V29ydGhGdXp6aW5nLCYjMzQ7IGV4dHJhY3QgcmVsZXZhbnQgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBhbmQgJiMzNDtFbmFibGVDb25maWdzLCYjMzQ7IGFuZCBwcm92aWRlIHJlYXNvbmluZyBmb3IgbXkgZGVjaXNpb24gYmVmb3JlIGNhbGxpbmcgYHNldC1yZXN1bHRzYC4KCkZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgcGF0Y2ggZGlmZi4gSG1tLCBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgc21hbGwgY2hhbmdlIHdpdGhpbiBga2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNgLiAgTGV0IG1lIHNlZS4uLiBMaW5lIDc5OTUuIEl0IGFwcGVhcnMgdGhhdCBhIGBXQVJOX09OYCBjaGVjayBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGEgbW9yZSBiYXNpYyBudWxsIGNoZWNrIG9uIHRoZSByZWFkZXIgcG9pbnRlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IHRoaXMgKmNvdWxkKiBiZSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYXMgaXQgbWlnaHQgZXhwb3NlIHNvbWUgcHJldmlvdXNseSBtYXNrZWQgZXJyb3IgY29uZGl0aW9ucy4gQSBudWxsIHJlYWRlciBzdWdnZXN0cyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBpbiBhIGNyaXRpY2FsIHBhdGguIEl0JiMzOTtzIGEga2VybmVsIHRyYWNlIGJ1ZmZlciwgc28gdGhpcyBjb3VsZCBhZmZlY3QgZGVidWdnaW5nIG9yIG90aGVyIHRyYWNlIGZ1bmN0aW9uYWxpdHkgaWYgYSByZWFkZXIgaXMgbnVsbC4KCk5leHQsIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgb24gYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYCBhcm91bmQgbGluZSA3OTk1IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGFzc2VzcyB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlIGFuZCBpZiBzeXprYWxsZXIgaXMgbGlrZWx5IHRvIHVuY292ZXIgYW55IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzk4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3OTgwOlx0XHRyZWFkZXJfc2l6ZSA9IHJiX3BhZ2Vfc2l6ZShjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlKTtcbjc5ODE6XHRcbjc5ODI6XHRcdC8qXG43OTgzOlx0XHQgKiBUaGVyZSBhcmUgZGF0YSB0byBiZSByZWFkIG9uIHRoZSBjdXJyZW50IHJlYWRlciBwYWdlLCB3ZSBjYW5cbjc5ODQ6XHRcdCAqIHJldHVybiB0byB0aGUgY2FsbGVyLiBCdXQgYmVmb3JlIHRoYXQsIHdlIGFzc3VtZSB0aGUgbGF0dGVyIHdpbGwgcmVhZFxuNzk4NTpcdFx0ICogZXZlcnl0aGluZy4gTGV0JiMzOTtzIHVwZGF0ZSB0aGUga2VybmVsIHJlYWRlciBhY2NvcmRpbmdseS5cbjc5ODY6XHRcdCAqL1xuNzk4NzpcdFx0aWYgKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UtXHUwMDNlcmVhZCBcdTAwM2MgcmVhZGVyX3NpemUpIHtcbjc5ODg6XHRcdFx0d2hpbGUgKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UtXHUwMDNlcmVhZCBcdTAwM2MgcmVhZGVyX3NpemUpXG43OTg5Olx0XHRcdFx0cmJfYWR2YW5jZV9yZWFkZXIoY3B1X2J1ZmZlcik7XG43OTkwOlx0XHRcdGdvdG8gb3V0O1xuNzk5MTpcdFx0fVxuNzk5MjpcdFxuNzk5MzpcdFx0LyogRGlkIHRoZSByZWFkZXIgY2F0Y2ggdXAgd2l0aCB0aGUgd3JpdGVyPyAqL1xuNzk5NDpcdFx0aWYgKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UgPT0gY3B1X2J1ZmZlci1cdTAwM2Vjb21taXRfcGFnZSlcbjc5OTU6XHRcdFx0Z290byBvdXQ7XG43OTk2Olx0XG43OTk3Olx0XHRyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7XG43OTk4Olx0XHRpZiAoIXJlYWRlcilcbjc5OTk6XHRcdFx0Z290byBvdXQ7XG44MDAwOlx0XG44MDAxOlx0XHQvKiBDaGVjayBpZiBhbnkgZXZlbnRzIHdlcmUgZHJvcHBlZCAqL1xuODAwMjpcdFx0bWlzc2VkX2V2ZW50cyA9IGNwdV9idWZmZXItXHUwMDNlbG9zdF9ldmVudHM7XG44MDAzOlx0XG44MDA0Olx0XHRpZiAobWlzc2VkX2V2ZW50cykge1xuODAwNTpcdFx0XHRpZiAoY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVx1MDAzZWNvbW1pdF9wYWdlKSB7XG44MDA2Olx0XHRcdFx0c3RydWN0IGJ1ZmZlcl9kYXRhX3BhZ2UgKmRwYWdlID0gcmVhZGVyLVx1MDAzZXBhZ2U7XG44MDA3Olx0XHRcdFx0dW5zaWduZWQgaW50IGNvbW1pdDtcbjgwMDg6XHRcdFx0XHQvKlxuODAwOTpcdFx0XHRcdCAqIFVzZSB0aGUgcmVhbF9lbmQgZm9yIHRoZSBkYXRhIHNpemUsXG44MDEwOlx0XHRcdFx0ICogVGhpcyBnaXZlcyB1cyBhIGNoYW5jZSB0byBzdG9yZSB0aGUgbG9zdCBldmVudHNcbjgwMTE6XHRcdFx0XHQgKiBvbiB0aGUgcGFnZS5cbjgwMTI6XHRcdFx0XHQgKi9cbjgwMTM6XHRcdFx0XHRpZiAocmVhZGVyLVx1MDAzZXJlYWxfZW5kKVxuODAxNDpcdFx0XHRcdFx0bG9jYWxfc2V0KFx1MDAyNmRwYWdlLVx1MDAzZWNvbW1pdCwgcmVhZGVyLVx1MDAzZXJlYWxfZW5kKTtcbjgwMTU6XHRcdFx0XHQvKlxuODAxNjpcdFx0XHRcdCAqIElmIHRoZXJlIGlzIHJvb20gYXQgdGhlIGVuZCBvZiB0aGUgcGFnZSB0byBzYXZlIHRoZVxuODAxNzpcdFx0XHRcdCAqIG1pc3NlZCBldmVudHMsIHRoZW4gcmVjb3JkIGl0IHRoZXJlLlxuODAxODpcdFx0XHRcdCAqL1xuODAxOTpcdFx0XHRcdGNvbW1pdCA9IHJiX3BhZ2Vfc2l6ZShyZWFkZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxODIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBEZWVwIGludG8gYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAuIEl0JiMzOTtzIGNydWNpYWwsIGFuZCB0aGUgbmFtZSBzdWdnZXN0cyBhIGtleSBmdW5jdGlvbiByZWxhdGVkIHRvIHJlYWRpbmcgZGF0YSBmcm9tIGEgcmluZyBidWZmZXIgbWFwLiBUbyB0cnVseSBncmFzcCBpdHMgcm9sZSBhbmQgcG90ZW50aWFsIGltcGFjdCwgSSBuZWVkIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBTaW1wbHkgdW5kZXJzdGFuZGluZyB0aGUgbmFtZSBpc24mIzM5O3QgZW5vdWdoOyBJIG5lZWQgdG8gc2VlICpob3cqIGl0JiMzOTtzIGludm9rZWQsIHdoYXQgaXRzIGlucHV0cyBhbmQgb3V0cHV0cyBhcmUsIGFuZCB0aGUgb3ZlcmFsbCBwYXR0ZXJuIG9mIGl0cyB1c2FnZS4KCk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGl0cyBjb2RlYmFzZSBhcHBlYXJhbmNlcy4gVGhpcyBjYWxscyBmb3IgYSBxdWljayBhbmQgcHJlY2lzZSBjb2RlIHNlYXJjaC4gSSYjMzk7bGwgbGF1bmNoIGBncmVwcGVyYCAob3IgbXkgcHJlZmVycmVkIGNvZGUgc2VhcmNoIHRvb2wsIHdoYXRldmVyIEkmIzM5O20gbW9zdCBjb21mb3J0YWJsZSB3aXRoIGFuZCBoYXMgdGhlIGJlc3QgaW5kZXhpbmcgb2YgdGhpcyBwYXJ0aWN1bGFyIGNvZGViYXNlKSBhbmQgemVybyBpbiBvbiBldmVyeSBpbnN0YW5jZSBvZiBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLiBJJiMzOTtsbCBhbmFseXplIGVhY2ggY2FsbCBzaXRlIHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBzeXN0ZW0gbG9naWMsIGVzcGVjaWFsbHkgdGhlIHN1cnJvdW5kaW5nIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgYnJlYWR0aCBvZiBrbm93bGVkZ2UgbmVlZGVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGluIGl0cyBlbnRpcmV0eS4gVGhpcyBpcyBhIHN0YW5kYXJkIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yaW5nX2J1ZmZlci5oPTI1ND1pbnQgcmluZ19idWZmZXJfdW5tYXAoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KTtcbmluY2x1ZGUvbGludXgvcmluZ19idWZmZXIuaDoyNTU6aW50IHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSk7XG5pbmNsdWRlL2xpbnV4L3JpbmdfYnVmZmVyLmgtMjU2LVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc5Mjc9aW50IHJpbmdfYnVmZmVyX3VubWFwKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTYxLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6Nzk2MjppbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzk2My17XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzM2NT1zdGF0aWMgbG9uZyB0cmFjaW5nX2J1ZmZlcnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jLTczODAtXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3MzgxOlx0XHRyZXR1cm4gcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoaXRlci1cdTAwM2VhcnJheV9idWZmZXItXHUwMDNlYnVmZmVyLFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzM4Mi1cdFx0XHRcdFx0XHQgIGl0ZXItXHUwMDNlY3B1X2ZpbGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NDAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQga2VybmVsIGNvZGUgc25pcHBldCwgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgdHJhY2UuY2AgYW5kIFJpbmcgQnVmZmVyIE1hcHBpbmcqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgdHJhY2luZ19idWZmZXJzX2lvY3RsYCBmdW5jdGlvbiBpbiBga2VybmVsL3RyYWNlL3RyYWNlLmNgIGludGVyYWN0cyB3aXRoIHRoZSByaW5nIGJ1ZmZlci4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gc2VlICpob3cqIGl0JiMzOTtzIGdldHRpbmcgYSByZWFkZXIgaGFuZGxlLCB3aGljaCBJJiMzOTttIHByZXR0eSBzdXJlIGlzIGhhbmRsZWQgdGhyb3VnaCBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLiBMZXQmIzM5O3MgZ2V0IHRvIGxpbmUgNzM2NSBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBJIGV4cGVjdCB0byBzZWUgdGhlIGNhbGwsIGJ1dCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIC0gYXJlIHRoZXJlIGVycm9yIGNoZWNrcz8gV2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQ/IElzIHRoZXJlIGFueSBzcGVjaWZpYyBjb250ZXh0IHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gaG93IGB0cmFjaW5nX2J1ZmZlcnNfaW9jdGxgIHV0aWxpemVzIHRoZSByaW5nIGJ1ZmZlcj8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhpcyBjYWxsIHByb2JhYmx5IHJldHVybnMgYSBtYXBwaW5nIG9yIGEgcG9pbnRlciBvZiBzb21lIHNvcnQuIEl0JiMzOTtsbCBiZSBrZXkgdG8gdGhlbiBmaWd1cmUgb3V0IGhvdyB0aGF0IHJlYWRlciBoYW5kbGUgaXMgdGhlbiB1c2VkIGZvciB0aGUgZXZlbnR1YWwgcmVhZHMsIGFuZCBwb3RlbnRpYWxseSBmb3IgbWFuYWdpbmcgdGhlIGRhdGEgd2l0aGluIHRoZSBidWZmZXIuIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUga2VybmVsIGludGVyZmFjZSBwcm92aWRlcyB0aGUgdHJhY2UgZGF0YSB0byB0aGUgdXNlcnNwYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzczNjU6XHRzdGF0aWMgbG9uZyB0cmFjaW5nX2J1ZmZlcnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuNzM2NjpcdHtcbjczNjc6XHRcdHN0cnVjdCBmdHJhY2VfYnVmZmVyX2luZm8gKmluZm8gPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbjczNjg6XHRcdHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciA9IFx1MDAyNmluZm8tXHUwMDNlaXRlcjtcbjczNjk6XHRcdGludCBlcnI7XG43MzcwOlx0XG43MzcxOlx0XHRpZiAoY21kID09IFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUikge1xuNzM3MjpcdFx0XHRpZiAoIShmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fTk9OQkxPQ0spKSB7XG43MzczOlx0XHRcdFx0ZXJyID0gcmluZ19idWZmZXJfd2FpdChpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIsXG43Mzc0Olx0XHRcdFx0XHRcdCAgICAgICBpdGVyLVx1MDAzZWNwdV9maWxlLFxuNzM3NTpcdFx0XHRcdFx0XHQgICAgICAgaXRlci1cdTAwM2V0ci1cdTAwM2VidWZmZXJfcGVyY2VudCxcbjczNzY6XHRcdFx0XHRcdFx0ICAgICAgIE5VTEwsIE5VTEwpO1xuNzM3NzpcdFx0XHRcdGlmIChlcnIpXG43Mzc4Olx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuNzM3OTpcdFx0XHR9XG43MzgwOlx0XG43MzgxOlx0XHRcdHJldHVybiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIsXG43MzgyOlx0XHRcdFx0XHRcdFx0ICBpdGVyLVx1MDAzZWNwdV9maWxlKTtcbjczODM6XHRcdH0gZWxzZSBpZiAoY21kKSB7XG43Mzg0Olx0XHRcdHJldHVybiAtRU5PVFRZO1xuNzM4NTpcdFx0fVxuNzM4NjpcdFxuNzM4NzpcdFx0LypcbjczODg6XHRcdCAqIEFuIGlvY3RsIGNhbGwgd2l0aCBjbWQgMCB0byB0aGUgcmluZyBidWZmZXIgZmlsZSB3aWxsIHdha2UgdXAgYWxsXG43Mzg5Olx0XHQgKiB3YWl0ZXJzXG43MzkwOlx0XHQgKi9cbjczOTE6XHRcdGd1YXJkKG11dGV4KShcdTAwMjZ0cmFjZV90eXBlc19sb2NrKTtcbjczOTI6XHRcbjczOTM6XHRcdC8qIE1ha2Ugc3VyZSB0aGUgd2FpdGVycyBzZWUgdGhlIG5ldyB3YWl0X2luZGV4ICovXG43Mzk0Olx0XHQodm9pZClhdG9taWNfZmV0Y2hfaW5jX3JlbGVhc2UoXHUwMDI2aXRlci1cdTAwM2V3YWl0X2luZGV4KTtcbjczOTU6XHRcbjczOTY6XHRcdHJpbmdfYnVmZmVyX3dha2Vfd2FpdGVycyhpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIsIGl0ZXItXHUwMDNlY3B1X2ZpbGUpO1xuNzM5NzpcdFxuNzM5ODpcdFx0cmV0dXJuIDA7XG43Mzk5Olx0fVxuNzQwMDpcdFxuNzQwMTpcdC8qXG43NDAyOlx0ICogVGhpcyBpcyBjYWxsZWQgd2hlbiBhIFZNQSBpcyBkdXBsaWNhdGVkIChlLmcuLCBvbiBmb3JrKCkpIHRvIGluY3JlbWVudFxuNzQwMzpcdCAqIHRoZSB1c2VyX21hcHBlZCBjb3VudGVyIHdpdGhvdXQgcmVtYXBwaW5nIHBhZ2VzLlxuNzQwNDpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NjEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSaW5nIEJ1ZmZlciBSZWFkZXIgQWNxdWlzaXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoaXMgcGF0Y2guIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCBmdW5jdGlvbiB3aXRoaW4gYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYC4gSSBuZWVkIHRvIGVuc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UuCgpJdCYjMzk7cyBzdHJhaWdodGZvcndhcmQ7IHRoZSBwcmltYXJ5IG1vZGlmaWNhdGlvbiBjZW50ZXJzIGFyb3VuZCB0aGlzIGNvbmRpdGlvbmFsIGNoZWNrOgoKYGBgYwoJcmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpOwotCWlmIChXQVJOX09OKCFyZWFkZXIpKQomIzQzOwlpZiAoIXJlYWRlcikKIAkJZ290byBvdXQ7CmBgYAoKUHJldmlvdXNseSwgYFdBUk5fT05gIHdhcyB1c2VkLiBOb3cgaXQmIzM5O3MgYSBzaW1wbGUgYGlmYCBjb25kaXRpb24uIFRoZSBgV0FSTl9PTmAgbWFjcm8gc2VlbXMgZXhjZXNzaXZlIGhlcmUuIEEgbnVsbCBgcmVhZGVyYCBwb2ludGVyIHN1Z2dlc3RzIGEgZnVuZGFtZW50YWwgaXNzdWUsIGFuZCBhIHNpbXBsZSBjaGVjayBiZWZvcmUgY29udGludWluZyBpcyBhIHBlcmZlY3RseSByZWFzb25hYmxlIGFwcHJvYWNoLiBJdCYjMzk7cyBhIG1hdHRlciBvZiBlbnN1cmluZyB3ZSBncmFjZWZ1bGx5IGhhbmRsZSB0aGUgc2NlbmFyaW8gd2hlcmUgYHJiX2dldF9yZWFkZXJfcGFnZWAgZmFpbHMgdG8gcmV0dXJuIGEgdmFsaWQgcmVhZGVyIHBhZ2UuIFRoaXMgY291bGQgYmUgZHVlIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlcyBvciBvdGhlciBsb3ctbGV2ZWwgcHJvYmxlbXMgd2l0aGluIHRoZSByaW5nIGJ1ZmZlciBpdHNlbGYuIFdlIGNoZWNrIGZvciBhIE5VTEwgYHJlYWRlcmAgcG9pbnRlciByZXR1cm5lZCBieSBgcmJfZ2V0X3JlYWRlcl9wYWdlYC4gVGhlICYjMzQ7Z290byBvdXQmIzM0OyBzdWdnZXN0cyB0aGF0IHdlIGhhbmRsZSBhIGBOVUxMYCBgcmVhZGVyYCBieSByZXR1cm5pbmcsIGxpa2VseSBwcm9wYWdhdGluZyBhbiBlcnJvciBjb2RlIHVwIHRoZSBjYWxsIHN0YWNrIHNvIHRoYXQgaXQgY2FuIGJlIGhhbmRsZWQgYXBwcm9wcmlhdGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzk2MDpcdH1cbjc5NjE6XHRcbjc5NjI6XHRpbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxuNzk2MzpcdHtcbjc5NjQ6XHRcdHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyO1xuNzk2NTpcdFx0c3RydWN0IGJ1ZmZlcl9wYWdlICpyZWFkZXI7XG43OTY2Olx0XHR1bnNpZ25lZCBsb25nIG1pc3NlZF9ldmVudHM7XG43OTY3Olx0XHR1bnNpZ25lZCBsb25nIHJlYWRlcl9zaXplO1xuNzk2ODpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjc5Njk6XHRcbjc5NzA6XHRcdGNwdV9idWZmZXIgPSByYl9nZXRfbWFwcGVkX2J1ZmZlcihidWZmZXIsIGNwdSk7XG43OTcxOlx0XHRpZiAoSVNfRVJSKGNwdV9idWZmZXIpKVxuNzk3MjpcdFx0XHRyZXR1cm4gKGludClQVFJfRVJSKGNwdV9idWZmZXIpO1xuNzk3MzpcdFxuNzk3NDpcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmNwdV9idWZmZXItXHUwMDNlcmVhZGVyX2xvY2ssIGZsYWdzKTtcbjc5NzU6XHRcbjc5NzY6XHRjb25zdW1lOlxuNzk3NzpcdFx0aWYgKHJiX3Blcl9jcHVfZW1wdHkoY3B1X2J1ZmZlcikpXG43OTc4Olx0XHRcdGdvdG8gb3V0O1xuNzk3OTpcdFxuNzk4MDpcdFx0cmVhZGVyX3NpemUgPSByYl9wYWdlX3NpemUoY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSk7XG43OTgxOlx0XG43OTgyOlx0XHQvKlxuNzk4MzpcdFx0ICogVGhlcmUgYXJlIGRhdGEgdG8gYmUgcmVhZCBvbiB0aGUgY3VycmVudCByZWFkZXIgcGFnZSwgd2UgY2FuXG43OTg0Olx0XHQgKiByZXR1cm4gdG8gdGhlIGNhbGxlci4gQnV0IGJlZm9yZSB0aGF0LCB3ZSBhc3N1bWUgdGhlIGxhdHRlciB3aWxsIHJlYWRcbjc5ODU6XHRcdCAqIGV2ZXJ5dGhpbmcuIExldCYjMzk7cyB1cGRhdGUgdGhlIGtlcm5lbCByZWFkZXIgYWNjb3JkaW5nbHkuXG43OTg2Olx0XHQgKi9cbjc5ODc6XHRcdGlmIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlLVx1MDAzZXJlYWQgXHUwMDNjIHJlYWRlcl9zaXplKSB7XG43OTg4Olx0XHRcdHdoaWxlIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlLVx1MDAzZXJlYWQgXHUwMDNjIHJlYWRlcl9zaXplKVxuNzk4OTpcdFx0XHRcdHJiX2FkdmFuY2VfcmVhZGVyKGNwdV9idWZmZXIpO1xuNzk5MDpcdFx0XHRnb3RvIG91dDtcbjc5OTE6XHRcdH1cbjc5OTI6XHRcbjc5OTM6XHRcdC8qIERpZCB0aGUgcmVhZGVyIGNhdGNoIHVwIHdpdGggdGhlIHdyaXRlcj8gKi9cbjc5OTQ6XHRcdGlmIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlID09IGNwdV9idWZmZXItXHUwMDNlY29tbWl0X3BhZ2UpXG43OTk1Olx0XHRcdGdvdG8gb3V0O1xuNzk5NjpcdFxuNzk5NzpcdFx0cmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpO1xuNzk5ODpcdFx0aWYgKCFyZWFkZXIpXG43OTk5Olx0XHRcdGdvdG8gb3V0O1xuODAwMDpcdFxuODAwMTpcdFx0LyogQ2hlY2sgaWYgYW55IGV2ZW50cyB3ZXJlIGRyb3BwZWQgKi9cbjgwMDI6XHRcdG1pc3NlZF9ldmVudHMgPSBjcHVfYnVmZmVyLVx1MDAzZWxvc3RfZXZlbnRzO1xuODAwMzpcdFxuODAwNDpcdFx0aWYgKG1pc3NlZF9ldmVudHMpIHtcbjgwMDU6XHRcdFx0aWYgKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci1cdTAwM2Vjb21taXRfcGFnZSkge1xuODAwNjpcdFx0XHRcdHN0cnVjdCBidWZmZXJfZGF0YV9wYWdlICpkcGFnZSA9IHJlYWRlci1cdTAwM2VwYWdlO1xuODAwNzpcdFx0XHRcdHVuc2lnbmVkIGludCBjb21taXQ7XG44MDA4Olx0XHRcdFx0LypcbjgwMDk6XHRcdFx0XHQgKiBVc2UgdGhlIHJlYWxfZW5kIGZvciB0aGUgZGF0YSBzaXplLFxuODAxMDpcdFx0XHRcdCAqIFRoaXMgZ2l2ZXMgdXMgYSBjaGFuY2UgdG8gc3RvcmUgdGhlIGxvc3QgZXZlbnRzXG44MDExOlx0XHRcdFx0ICogb24gdGhlIHBhZ2UuXG44MDEyOlx0XHRcdFx0ICovXG44MDEzOlx0XHRcdFx0aWYgKHJlYWRlci1cdTAwM2VyZWFsX2VuZClcbjgwMTQ6XHRcdFx0XHRcdGxvY2FsX3NldChcdTAwMjZkcGFnZS1cdTAwM2Vjb21taXQsIHJlYWRlci1cdTAwM2VyZWFsX2VuZCk7XG44MDE1Olx0XHRcdFx0LypcbjgwMTY6XHRcdFx0XHQgKiBJZiB0aGVyZSBpcyByb29tIGF0IHRoZSBlbmQgb2YgdGhlIHBhZ2UgdG8gc2F2ZSB0aGVcbjgwMTc6XHRcdFx0XHQgKiBtaXNzZWQgZXZlbnRzLCB0aGVuIHJlY29yZCBpdCB0aGVyZS5cbjgwMTg6XHRcdFx0XHQgKi9cbjgwMTk6XHRcdFx0XHRjb21taXQgPSByYl9wYWdlX3NpemUocmVhZGVyKTtcbjgwMjA6XHRcdFx0XHRpZiAocmJfcGFnZV9jYXBhY2l0eShyZWFkZXIpIC0gY29tbWl0IFx1MDAzZT0gc2l6ZW9mKG1pc3NlZF9ldmVudHMpKSB7XG44MDIxOlx0XHRcdFx0XHRtZW1jcHkoXHUwMDI2ZHBhZ2UtXHUwMDNlZGF0YVtjb21taXRdLCBcdTAwMjZtaXNzZWRfZXZlbnRzLFxuODAyMjpcdFx0XHRcdFx0ICAgICAgIHNpemVvZihtaXNzZWRfZXZlbnRzKSk7XG44MDIzOlx0XHRcdFx0XHRsb2NhbF9hZGQoUkJfTUlTU0VEX1NUT1JFRCwgXHUwMDI2ZHBhZ2UtXHUwMDNlY29tbWl0KTtcbjgwMjQ6XHRcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyOTkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogRnV6emluZyBBcHBsaWNhYmlsaXR5IG9mIHRoZSBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNoYW5nZSB0byBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgIG1lcml0cyBmdXp6aW5nIGJhc2VkIG9uIHRob3NlIHN0cmljdCBjcml0ZXJpYS4gSXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBpcyBhY2Nlc3NlZCB0aHJvdWdoIGB0cmFjaW5nX2J1ZmZlcnNfaW9jdGxgIGFuZCBleHBvc2VkIHRocm91Z2ggYHRyYWNlZnMvZnRyYWNlYCByaW5nIGJ1ZmZlciBmaWxlcy4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpGaXJzdCwgdGhlIGNvcmUgcHJpbmNpcGxlOiAqcmVhY2hhYmlsaXR5Ki4gQ2FuIHRoaXMgY29kZSBhY3R1YWxseSAqcnVuKiBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBZZXMsIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYHRyYWNlZnMvZnRyYWNlYCBpbnRlcmZhY2UuIEkgdGhpbmsgd2UgYXJlIGdvb2QgdGhlcmUuCgpOb3cgZm9yIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBmcm9tIFNlY3Rpb24gMi4gSXMgdGhpczoKCiogICBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZT8gTm8sIGl0JiMzOTtzIGtlcm5lbCBjb2RlLgoqICAgU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlPyBObywgdGhpcyBpbnRlcmZhY2VzIHdpdGggcmluZyBidWZmZXIuCiogICBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM/IEFsc28gbm8sIGlmIGl0IGlzIHJlYWNoYWJsZSB2aWEgaW9jdGwgY2FsbHMuCgpPa2F5LCB0aGF0JiMzOTtzIGVuY291cmFnaW5nLiBMZXQmIzM5O3MgbW92ZSB0byB0aGUgKnBvc2l0aXZlKiBjcml0ZXJpYSBpbiBTZWN0aW9uIDMuIERvZXMgaXQgdG91Y2ggYW55IG9mIHRob3NlIHNwZWNpZmljIGFyZWFzPwoKVGhlIGNoYW5nZSB0byBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoKWAgaW52b2x2ZXMgYW4gKmFsdGVyYXRpb24qIG9mIGFuIGFzc2VydGlvbiwgc3BlY2lmaWNhbGx5IGEgYFdBUk5fT05gIGNoZWNrLiBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYFdBUk5fT04oIXJlYWRlcilgLCBidXQgdGhpcyB3YXMgcmVtb3ZlZCB0byBqdXN0IGAhcmVhZGVyYC4gVGhpcyBhbHRlcmF0aW9uIGRpcmVjdGx5IHJlbGF0ZXMgdG8gKlJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrcyogd2l0aGluIHJlYWNoYWJsZSBjb2RlLiBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCB0aGUgYHJiX2dldF9yZWFkZXJfcGFnZSgpYCBmdW5jdGlvbiBjYW4gcmV0dXJuIGEgTlVMTCB2YWx1ZSBmb3IgbGVnaXRpbWF0ZSByZWFzb25zIChlLmcuLCBub3RoaW5nIHRvIHJlYWQgb3IgY29uY3VycmVudCBzd2FwKS4KClRoaXMgKmFwcGVhcnMqIHRvIGJlIGEgY2xlYXIgY2FzZSBmb3IgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdyB0byBkb3VibGUtY2hlY2s6IEkgc2hvdWxkIGNoZWNrIHRvIHNlZSB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyB0byBiZSBzdXJlLiBJJiMzOTtsbCBuZWVkIHRvIHNlYXJjaCB0aGUgYGtlcm5lbC90cmFjZS9LY29uZmlnYCBhbmQgYGtlcm5lbC90cmFjZS9NYWtlZmlsZWAgZmlsZXMgZm9yIGBDT05GSUdfUklOR19CVUZGRVJgLCBgQ09ORklHX1RSQUNJTkdgLCBgQ09ORklHX0ZUUkFDRWAsIG9yIGFueSByaW5nIGJ1ZmZlciByZWxhdGVkIG9wdGlvbnMsIGp1c3QgdG8gY29uZmlybSB0aGUgcGF0aCB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyaW5nX2J1ZmZlci5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9NYWtlZmlsZT02Mz1vYmotJChDT05GSUdfRlVOQ1RJT05fVFJBQ0VSKSAmIzQzOz0gbGliZnRyYWNlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfUklOR19CVUZGRVIpICYjNDM7PSByaW5nX2J1ZmZlci5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSykgJiM0Mzs9IHJpbmdfYnVmZmVyX2JlbmNobWFyay5vXG4tLVxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEzMz1vYmotJChDT05GSUdfVFJBQ0VfUkVNT1RFKSAmIzQzOz0gdHJhY2VfcmVtb3RlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxMzQ6b2JqLSQoQ09ORklHX1NJTVBMRV9SSU5HX0JVRkZFUikgJiM0Mzs9IHNpbXBsZV9yaW5nX2J1ZmZlci5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTM1LW9iai0kKENPTkZJR19UUkFDRV9SRU1PVEVfVEVTVCkgJiM0Mzs9IHJlbW90ZV90ZXN0Lm9cbi0tXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9MTYxPSQob2JqKS8lLm8uY2hlY2tlZDogJChvYmopLyUubyAkKG9iaikvdW5kZWZzeW1zX2Jhc2UubyBGT1JDRVxuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xNjMtXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTY0OmFsd2F5cy0kKENPTkZJR19TSU1QTEVfUklOR19CVUZGRVIpICYjNDM7PSBzaW1wbGVfcmluZ19idWZmZXIuby5jaGVja2VkXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTY1LVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTExMTc9X19wb2xsX3QgcmluZ19idWZmZXJfcG9sbF93YWl0KHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSxcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy0xMTc5LVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6MTE4MDovKiBidWZmZXIgbWF5IGJlIGVpdGhlciByaW5nX2J1ZmZlciBvciByaW5nX2J1ZmZlcl9wZXJfY3B1ICovXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy0xMTgxLSNkZWZpbmUgUkJfV0FSTl9PTihiLCBjb25kKVx0XHRcdFx0XHRcdFxcXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM9NTQxND1FWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9yZWNvcmRfZW5hYmxlX2NwdSk7XG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQxNi0vKipcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU0MTc6ICogcmluZ19idWZmZXJfb2xkZXN0X2V2ZW50X3RzIC0gZ2V0IHRoZSBvbGRlc3QgZXZlbnQgdGltZXN0YW1wIGZyb20gdGhlIGJ1ZmZlclxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQxOC0gKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXJcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDIwLSAqL1xua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTQyMTp1NjQgcmluZ19idWZmZXJfb2xkZXN0X2V2ZW50X3RzKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU0MjIte1xuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU0NDYtfVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTQ0NzpFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9vbGRlc3RfZXZlbnRfdHMpO1xua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQ0OC1cbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYz01NDg1PUVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX2VudHJpZXNfY3B1KTtcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDg3LS8qKlxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTQ4ODogKiByaW5nX2J1ZmZlcl9vdmVycnVuX2NwdSAtIGdldCB0aGUgbnVtYmVyIG9mIG92ZXJydW5zIGNhdXNlZCBieSB0aGUgcmluZ1xua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQ4OS0gKiBidWZmZXIgd3JhcHBpbmcgYXJvdW5kIChvbmx5IGlmIFJCX0ZMX09WRVJXUklURSBpcyBvbikuXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQ5Mi0gKi9cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU0OTM6dW5zaWduZWQgbG9uZyByaW5nX2J1ZmZlcl9vdmVycnVuX2NwdShzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDk0LXtcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NTA1LX1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU1MDY6RVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUpO1xua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTUwNy1cbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYz01NTkyPUVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX2VudHJpZXMpO1xuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU1OTQtLyoqXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NTk1OiAqIHJpbmdfYnVmZmVyX292ZXJydW5zIC0gZ2V0IHRoZSBudW1iZXIgb2Ygb3ZlcnJ1bnMgaW4gYnVmZmVyXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NTk2LSAqIEBidWZmZXI6IFRoZSByaW5nIGJ1ZmZlclxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU2MDAtICovXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NjAxOnVuc2lnbmVkIGxvbmcgcmluZ19idWZmZXJfb3ZlcnJ1bnMoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyKVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTYwMi17XG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTYxNC19XG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NjE1OkVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX292ZXJydW5zKTtcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU2MTYtXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyX2JlbmNobWFyay5jPTIzMj1zdGF0aWMgdm9pZCByaW5nX2J1ZmZlcl9wcm9kdWNlcih2b2lkKVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlcl9iZW5jaG1hcmsuYy0zMDEtXHRlbnRyaWVzID0gcmluZ19idWZmZXJfZW50cmllcyhidWZmZXIpO1xua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyX2JlbmNobWFyay5jOjMwMjpcdG92ZXJydW5zID0gcmluZ19idWZmZXJfb3ZlcnJ1bnMoYnVmZmVyKTtcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlcl9iZW5jaG1hcmsuYy0zMDMtXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmM9MjgyMj1nZXRfdG90YWxfZW50cmllc19jcHUoc3RydWN0IGFycmF5X2J1ZmZlciAqYnVmLCB1bnNpZ25lZCBsb25nICp0b3RhbCxcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy0yODM4LVx0XHQqdG90YWwgPSBjb3VudCAmIzQzO1xua2VybmVsL3RyYWNlL3RyYWNlLmM6MjgzOTpcdFx0XHRyaW5nX2J1ZmZlcl9vdmVycnVuX2NwdShidWYtXHUwMDNlYnVmZmVyLCBjcHUpO1xua2VybmVsL3RyYWNlL3RyYWNlLmMtMjg0MC1cdCplbnRyaWVzID0gY291bnQ7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmM9MzM2Nz1fX3RyYWNpbmdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgYm9vbCBzbmFwc2hvdClcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy0zNDMwLVx0LyogQW5ub3RhdGUgc3RhcnQgb2YgYnVmZmVycyBpZiB3ZSBoYWQgb3ZlcnJ1bnMgKi9cbmtlcm5lbC90cmFjZS90cmFjZS5jOjM0MzE6XHRpZiAocmluZ19idWZmZXJfb3ZlcnJ1bnMoaXRlci1cdTAwM2VhcnJheV9idWZmZXItXHUwMDNlYnVmZmVyKSlcbmtlcm5lbC90cmFjZS90cmFjZS5jLTM0MzItXHRcdGl0ZXItXHUwMDNlaXRlcl9mbGFncyB8PSBUUkFDRV9GSUxFX0FOTk9UQVRFO1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jPTc0NzI9dHJhY2luZ19zdGF0c19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1Zixcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDkyLVxua2VybmVsL3RyYWNlL3RyYWNlLmM6NzQ5MzpcdGNudCA9IHJpbmdfYnVmZmVyX292ZXJydW5fY3B1KHRyYWNlX2J1Zi1cdTAwM2VidWZmZXIsIGNwdSk7XG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDk0LVx0dHJhY2Vfc2VxX3ByaW50ZihzLCBcJiMzNDtvdmVycnVuOiAlbGRcXG5cJiMzNDssIGNudCk7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzUwMy1cdFx0LyogbG9jYWwgb3IgZ2xvYmFsIGZvciB0cmFjZV9jbG9jayAqL1xua2VybmVsL3RyYWNlL3RyYWNlLmM6NzUwNDpcdFx0dCA9IG5zMnVzZWNzKHJpbmdfYnVmZmVyX29sZGVzdF9ldmVudF90cyh0cmFjZV9idWYtXHUwMDNlYnVmZmVyLCBjcHUpKTtcbmtlcm5lbC90cmFjZS90cmFjZS5jLTc1MDUtXHRcdHVzZWNfcmVtID0gZG9fZGl2KHQsIFVTRUNfUEVSX1NFQyk7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzUxNC1cdFx0dHJhY2Vfc2VxX3ByaW50ZihzLCBcJiMzNDtvbGRlc3QgZXZlbnQgdHM6ICVsbHVcXG5cJiMzNDssXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3NTE1Olx0XHRcdFx0cmluZ19idWZmZXJfb2xkZXN0X2V2ZW50X3RzKHRyYWNlX2J1Zi1cdTAwM2VidWZmZXIsIGNwdSkpO1xua2VybmVsL3RyYWNlL3RyYWNlLmMtNzUxNi1cbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYz05Mzc4PXN0YXRpYyB2b2lkIHRyYWNlX2luaXRfaXRlcihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmMtOTM4OC1cdC8qIEFubm90YXRlIHN0YXJ0IG9mIGJ1ZmZlcnMgaWYgd2UgaGFkIG92ZXJydW5zICovXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo5Mzg5Olx0aWYgKHJpbmdfYnVmZmVyX292ZXJydW5zKGl0ZXItXHUwMDNlYXJyYXlfYnVmZmVyLVx1MDAzZWJ1ZmZlcikpXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy05MzkwLVx0XHRpdGVyLVx1MDAzZWl0ZXJfZmxhZ3MgfD0gVFJBQ0VfRklMRV9BTk5PVEFURTtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfbW1pb3RyYWNlLmM9MTIwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X292ZXJydW5zKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcilcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfbW1pb3RyYWNlLmMtMTIyLVx0dW5zaWduZWQgbG9uZyBjbnQgPSBhdG9taWNfeGNoZyhcdTAwMjZkcm9wcGVkX2NvdW50LCAwKTtcbmtlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYzoxMjM6XHR1bnNpZ25lZCBsb25nIG92ZXIgPSByaW5nX2J1ZmZlcl9vdmVycnVucyhpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIpO1xua2VybmVsL3RyYWNlL3RyYWNlX21taW90cmFjZS5jLTEyNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzOTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgdGhlIEtlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGEgZmV3IGtleSB0cmFjaW5nIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgbW9zdCBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGUgcmluZyBidWZmZXIgaW1wbGVtZW50YXRpb24gYW5kIHRoZSBjb3JlIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGVuc3VyaW5nIHRoYXQgYFJJTkdfQlVGRkVSYCBhbmQgYFRSQUNJTkdgIGFyZSBib3RoIGVuYWJsZWQsIG9yIGF0IGxlYXN0IGNvbmZpZ3VyZWQgaW4gYSB3YXkgdGhhdCBhbGxvd3MgdGhlbSB0byBiZSBwcm9wZXJseSB1dGlsaXplZCwgb3IgYXQgbGVhc3Qgbm90IGluYWR2ZXJ0ZW50bHkgZGlzYWJsZWQsIHNpbmNlIHRoYXQgd291bGQgYmUgYSB2ZXJ5IGZydXN0cmF0aW5nIG92ZXJzaWdodC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoZWlyIHN0YXR1cyBhbmQgYW55IHJlbGV2YW50IGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCBzZXR0aW5ncyB0byBlbnN1cmUgdGhlIGZ1bmN0aW9uYWxpdHkgSSBleHBlY3QgaXMgcHJlc2VudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJJTkdfQlVGRkVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTE0MT1jb25maWcgVFJBQ0VfQ0xPQ0tcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xNDMtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxNDQ6Y29uZmlnIFJJTkdfQlVGRkVSXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xNDUtXHRib29sXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9MTU0PWNvbmZpZyBDT05URVhUX1NXSVRDSF9UUkFDRVJcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xNTYtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxNTc6Y29uZmlnIFJJTkdfQlVGRkVSX0FMTE9XX1NXQVBcbmtlcm5lbC90cmFjZS9LY29uZmlnLTE1OC1cdGJvb2xcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz05ODc9Y29uZmlnIFRSQUNFUE9JTlRfQkVOQ0hNQVJLXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTAxNi1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwMTc6Y29uZmlnIFJJTkdfQlVGRkVSX0JFTkNITUFSS1xua2VybmVsL3RyYWNlL0tjb25maWctMTAxOC1cdHRyaXN0YXRlIFwmIzM0O1JpbmcgYnVmZmVyIGJlbmNobWFyayBzdHJlc3MgdGVzdGVyXCYjMzQ7XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9MTA4Nj1jb25maWcgRlRSQUNFX1ZBTElEQVRFX1JDVV9JU19XQVRDSElOR1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwOTgtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDk5OmNvbmZpZyBSSU5HX0JVRkZFUl9SRUNPUkRfUkVDVVJTSU9OXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTAwLVx0Ym9vbCBcJiMzNDtSZWNvcmQgZnVuY3Rpb25zIHRoYXQgcmVjdXJzZSBpbiB0aGUgcmluZyBidWZmZXJcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTYwPWNvbmZpZyBGVFJBQ0VfU09SVF9TVEFSVFVQX1RFU1Rcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTczLVxua2VybmVsL3RyYWNlL0tjb25maWc6MTE3NDpjb25maWcgUklOR19CVUZGRVJfU1RBUlRVUF9URVNUXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTc1LSAgICAgICBib29sIFwmIzM0O1JpbmcgYnVmZmVyIHN0YXJ0dXAgc2VsZiB0ZXN0XCYjMzQ7XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTE5Ni1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjExOTc6Y29uZmlnIFJJTkdfQlVGRkVSX1ZBTElEQVRFX1RJTUVfREVMVEFTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTk4LVx0Ym9vbCBcJiMzNDtWZXJpZnkgcmluZyBidWZmZXIgdGltZSBzdGFtcCBkZWx0YXNcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMjE2LVxua2VybmVsL3RyYWNlL0tjb25maWc6MTIxNzpjb25maWcgUklOR19CVUZGRVJfUEVSU0lTVEVOVF9JTkpFQ1Rcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEyMTgtXHRib29sIFwmIzM0O0VuYWJsZSBwZXJzaXN0ZW50IHJpbmcgYnVmZmVyIGVycm9yIGluamVjdGlvbiB0ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTMyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyBgUklOR19CVUZGRVJgIGFuZCBgVFJBQ0lOR2AgaW4gYGtlcm5lbC90cmFjZS9LY29uZmlnYDoKCioqSW52ZXN0aWdhdGluZyBLZXJuZWwgVHJhY2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYFJJTkdfQlVGRkVSYCBhbmQgYFRSQUNJTkdgIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIHRyYWNpbmcgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGluc2lkZSBga2VybmVsL3RyYWNlL0tjb25maWdgLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIEtjb25maWcgZmlsZSBpdHNlbGYuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGFueSByZWxhdGlvbnNoaXBzIHRoZXkmIzM5O3ZlIGRlZmluZWQgd2l0aCBvdGhlciBrZXJuZWwgZmVhdHVyZXMuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGVzZSBzZXR0aW5ncyB3aWxsIGRldGVybWluZSB3aGV0aGVyIHRoZSBrZXJuZWwmIzM5O3MgdHJhY2luZyBpbmZyYXN0cnVjdHVyZSBsZXZlcmFnZXMgYSByaW5nIGJ1ZmZlciBmb3IgZGF0YSBzdG9yYWdlLCBhbmQgaG93IHRoZSBvdmVyYWxsIHRyYWNpbmcgc3lzdGVtIGlzIGVuYWJsZWQuIEkmIzM5O20gZXhwZWN0aW5nIGBUUkFDSU5HYCB0byBiZSBhIGJyb2FkZXIgZW5hYmxpbmcgb3B0aW9uLCBwb3NzaWJseSB3aXRoIGBSSU5HX0JVRkZFUmAgYXMgYSBzdXBwb3J0aW5nIGRldGFpbCB3aXRoaW4gdGhhdCBtb3JlIGNvbXByZWhlbnNpdmUgZmVhdHVyZSBzZXQuIEtub3dpbmcgdGhpcyBpbnRlcnBsYXkgaXMgZXNzZW50aWFsIGZvciBjdXN0b21pemluZyB0aGUgdHJhY2luZyBzZXR1cCBmb3Igc3BlY2lmaWMgcGVyZm9ybWFuY2Ugb3IgZGVidWdnaW5nIG5lZWRzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0aGUgS2NvbmZpZyBhY3R1YWxseSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHRjb25maWcgQlVJTERUSU1FX01DT1VOVF9TT1JUXG4gMTMxOlx0ICAgICAgIGJvb2xcbiAxMzI6XHQgICAgICAgZGVmYXVsdCB5XG4gMTMzOlx0ICAgICAgIGRlcGVuZHMgb24gSEFWRV9CVUlMRFRJTUVfTUNPVU5UX1NPUlQgXHUwMDI2XHUwMDI2IERZTkFNSUNfRlRSQUNFXG4gMTM0Olx0ICAgICAgIGhlbHBcbiAxMzU6XHQgICAgICAgICBTb3J0IHRoZSBtY291bnRfbG9jIHNlY3Rpb24gYXQgYnVpbGQgdGltZS5cbiAxMzY6XHRcbiAxMzc6XHRjb25maWcgVFJBQ0VSX01BWF9UUkFDRVxuIDEzODpcdFx0Ym9vbFxuIDEzOTpcdFx0c2VsZWN0IFRSQUNFUl9TTkFQU0hPVFxuIDE0MDpcdFxuIDE0MTpcdGNvbmZpZyBUUkFDRV9DTE9DS1xuIDE0MjpcdFx0Ym9vbFxuIDE0MzpcdFxuIDE0NDpcdGNvbmZpZyBSSU5HX0JVRkZFUlxuIDE0NTpcdFx0Ym9vbFxuIDE0NjpcdFx0c2VsZWN0IFRSQUNFX0NMT0NLXG4gMTQ3Olx0XHRzZWxlY3QgSVJRX1dPUktcbiAxNDg6XHRcbiAxNDk6XHRjb25maWcgRVZFTlRfVFJBQ0lOR1xuIDE1MDpcdFx0c2VsZWN0IENPTlRFWFRfU1dJVENIX1RSQUNFUlxuIDE1MTpcdFx0c2VsZWN0IEdMT0JcbiAxNTI6XHRcdGJvb2xcbiAxNTM6XHRcbiAxNTQ6XHRjb25maWcgQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSXG4gMTU1Olx0XHRib29sXG4gMTU2Olx0XG4gMTU3Olx0Y29uZmlnIFJJTkdfQlVGRkVSX0FMTE9XX1NXQVBcbiAxNTg6XHRcdGJvb2xcbiAxNTk6XHRcdGhlbHBcbiAxNjA6XHRcdCBBbGxvdyB0aGUgdXNlIG9mIHJpbmdfYnVmZmVyX3N3YXBfY3B1LlxuIDE2MTpcdFx0IEFkZHMgYSB2ZXJ5IHNsaWdodCBvdmVyaGVhZCB0byB0cmFjaW5nIHdoZW4gZW5hYmxlZC5cbiAxNjI6XHRcbiAxNjM6XHRjb25maWcgUFJFRU1QVElSUV9UUkFDRVBPSU5UU1xuIDE2NDpcdFx0Ym9vbFxuIDE2NTpcdFx0ZGVwZW5kcyBvbiBUUkFDRV9QUkVFTVBUX1RPR0dMRSB8fCBUUkFDRV9JUlFGTEFHU1xuIDE2NjpcdFx0c2VsZWN0IFRSQUNJTkdcbiAxNjc6XHRcdGRlZmF1bHQgeVxuIDE2ODpcdFx0aGVscFxuIDE2OTpcdFx0ICBDcmVhdGUgcHJlZW1wdC9pcnEgdG9nZ2xlIHRyYWNlcG9pbnRzIGlmIG5lZWRlZCwgc28gdGhhdCBvdGhlciBwYXJ0c1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg3NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgYFJJTkdfQlVGRkVSYCBhbmQgYFRSQUNJTkdgIENvZGUgUGF0aHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIGNvZGUgdGhhdCYjMzk7cyBzZWxlY3Rpbmcgb3IgZW5hYmxpbmcgKmJvdGgqIGBSSU5HX0JVRkZFUmAgYW5kIGBUUkFDSU5HYD8mIzM0OyBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIHByb2plY3QsIHplcm9pbmcgaW4gb24gYW55IGNvbmRpdGlvbmFsIGxvZ2ljLCBjb25maWd1cmF0aW9uIGZpbGVzLCBvciBidWlsZCBzY3JpcHRzIHRoYXQgbWlnaHQgYmUgcmVzcG9uc2libGUgZm9yIHRoaXMgY291cGxpbmcuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHJvb3QgY2F1c2UsIHRoZSB0cmlnZ2VyIHRoYXQmIzM5O3MgbGVhZGluZyB0aGVzZSB0d28gZmVhdHVyZXMgdG8gYmUgYWN0aXZhdGVkIHRvZ2V0aGVyLiBJcyBpdCBhbiBpbnRlbmRlZCBmZWF0dXJlIGludGVyYWN0aW9uPyBBIGJ1Zz8gQSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXkmIzM5O3JlIGxpbmtlZCBpbiB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhlcmUgYXJlIGEgZmV3IGxpa2VseSBhcmVhcyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGZpcnN0LCBidXQgSSBuZWVkIHRvIHN0YXJ0IHNvbWV3aGVyZS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBLY29uZmlnIHNldHRpbmdzLCBhbmQgYW55IGN1c3RvbSBidWlsZCBzeXN0ZW1zIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBwaW5wb2ludCB0aGUgbWVjaGFuaXNtIHRoYXQgY29udHJvbHMgdGhpcyBkdWFsIGFjdGl2YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBSSU5HX0JVRkZFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz0xNzk9Y29uZmlnIFRSQUNJTkdcbmtlcm5lbC90cmFjZS9LY29uZmlnLTE4MC1cdGJvb2xcbmtlcm5lbC90cmFjZS9LY29uZmlnOjE4MTpcdHNlbGVjdCBSSU5HX0JVRkZFUlxua2VybmVsL3RyYWNlL0tjb25maWctMTgyLVx0c2VsZWN0IFNUQUNLVFJBQ0UgaWYgU1RBQ0tUUkFDRV9TVVBQT1JUXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9NDIxPWNvbmZpZyBJUlFTT0ZGX1RSQUNFUlxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTQyNy1cdHNlbGVjdCBUUkFDRVJfTUFYX1RSQUNFXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo0Mjg6XHRzZWxlY3QgUklOR19CVUZGRVJfQUxMT1dfU1dBUFxua2VybmVsL3RyYWNlL0tjb25maWctNDI5LVx0c2VsZWN0IFRSQUNFUl9TTkFQU0hPVF9QRVJfQ1BVX1NXQVBcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz00NDQ9Y29uZmlnIFBSRUVNUFRfVFJBQ0VSXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctNDQ5LVx0c2VsZWN0IFRSQUNFUl9NQVhfVFJBQ0Vcbmtlcm5lbC90cmFjZS9LY29uZmlnOjQ1MDpcdHNlbGVjdCBSSU5HX0JVRkZFUl9BTExPV19TV0FQXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy00NTEtXHRzZWxlY3QgVFJBQ0VSX1NOQVBTSE9UX1BFUl9DUFVfU1dBUFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTYzMT1jb25maWcgVFJBQ0VSX1NOQVBTSE9UX1BFUl9DUFVfU1dBUFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTYzMy1cdGRlcGVuZHMgb24gVFJBQ0VSX1NOQVBTSE9UXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo2MzQ6XHRzZWxlY3QgUklOR19CVUZGRVJfQUxMT1dfU1dBUFxua2VybmVsL3RyYWNlL0tjb25maWctNjM1LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUwMwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8ga2VybmVsIHRyYWNpbmcuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGxvb2sgYXQgYENPTkZJR19GVFJBQ0VgLCBgQ09ORklHX1RSQUNJTkdgLCBhbmQgYENPTkZJR19SSU5HX0JVRkZFUmAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgcHJpbWFyeSBzdXNwZWN0cy4gTm93LCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBkZWx2ZSBpbnRvIHRoZSBga2VybmVsL3RyYWNlL0tjb25maWdgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIHVzZXItZmFjaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRyYWNpbmcgYXJlIHVzdWFsbHkgZGVmaW5lZC4gSSYjMzk7bSBzZWFyY2hpbmcgZm9yIHRoZSBzcGVjaWZpYyB1c2VyLXZpc2libGUgY29uZmlnIHRoYXQgaW4gdHVybiBlbmFibGVzIHRoZSBicm9hZCBmdW5jdGlvbmFsaXR5IHRoYXQgJiMzNDtUUkFDSU5HJiMzNDsgcmVwcmVzZW50cywgYW5kIGl0IHNob3VsZCBiZSBpbiB0aGlzIEtjb25maWcgZmlsZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUga2V5IHRvIHVubG9jayB0aGUgdHJhY2luZyBmdW5jdGlvbmFsaXR5IEkmIzM5O20gaW50ZXJlc3RlZCBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZUUkFDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz0xOTg9Y29uZmlnIFRSQUNJTkdfU1VQUE9SVFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTIwMy1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjIwNDptZW51Y29uZmlnIEZUUkFDRVxua2VybmVsL3RyYWNlL0tjb25maWctMjA1LVx0Ym9vbCBcJiMzNDtUcmFjZXJzXCYjMzQ7XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9NTg4PWNvbmZpZyBFTkFCTEVfREVGQVVMVF9UUkFDRVJTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctNTk2LVxua2VybmVsL3RyYWNlL0tjb25maWc6NTk3OmNvbmZpZyBGVFJBQ0VfU1lTQ0FMTFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTU5OC1cdGJvb2wgXCYjMzQ7VHJhY2Ugc3lzY2FsbHNcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz04ODA9Y29uZmlnIEJQRl9LUFJPQkVfT1ZFUlJJREVcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04ODgtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4ODk6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX1BBVENIQUJMRV9GVU5DVElPTl9FTlRSWVxua2VybmVsL3RyYWNlL0tjb25maWctODkwLVx0Ym9vbFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg5Mi1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg5Mzpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfQ0Ncbmtlcm5lbC90cmFjZS9LY29uZmlnLTg5NC1cdGRlZl9ib29sIHlcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04OTgtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4OTk6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX09CSlRPT0xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTkwMC1cdGRlZl9ib29sIHlcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy05MDYtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo5MDc6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX1JFQ09SRE1DT1VOVFxua2VybmVsL3RyYWNlL0tjb25maWctOTA4LVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTEwMzM9Y29uZmlnIFRSQUNFX0VWQUxfTUFQX0ZJTEVcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDYwLVxua2VybmVsL3RyYWNlL0tjb25maWc6MTA2MTpjb25maWcgRlRSQUNFX1JFQ09SRF9SRUNVUlNJT05cbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNjItXHRib29sIFwmIzM0O1JlY29yZCBmdW5jdGlvbnMgdGhhdCByZWN1cnNlIGluIGZ1bmN0aW9uIHRyYWNpbmdcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDc0LVxua2VybmVsL3RyYWNlL0tjb25maWc6MTA3NTpjb25maWcgRlRSQUNFX1JFQ09SRF9SRUNVUlNJT05fU0laRVxua2VybmVsL3RyYWNlL0tjb25maWctMTA3Ni1cdGludCBcJiMzNDtNYXggbnVtYmVyIG9mIHJlY3Vyc2VkIGZ1bmN0aW9ucyB0byByZWNvcmRcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDg1LVxua2VybmVsL3RyYWNlL0tjb25maWc6MTA4Njpjb25maWcgRlRSQUNFX1ZBTElEQVRFX1JDVV9JU19XQVRDSElOR1xua2VybmVsL3RyYWNlL0tjb25maWctMTA4Ny1cdGJvb2wgXCYjMzQ7VmFsaWRhdGUgUkNVIGlzIG9uIGR1cmluZyBmdHJhY2UgZXhlY3V0aW9uXCYjMzQ7XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9MTExMz1jb25maWcgR0NPVl9QUk9GSUxFX0ZUUkFDRVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMjQtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMTI1OmNvbmZpZyBGVFJBQ0VfU0VMRlRFU1Rcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMjYtXHRib29sXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTI3LVxua2VybmVsL3RyYWNlL0tjb25maWc6MTEyODpjb25maWcgRlRSQUNFX1NUQVJUVVBfVEVTVFxua2VybmVsL3RyYWNlL0tjb25maWctMTEyOS1cdGJvb2wgXCYjMzQ7UGVyZm9ybSBhIHN0YXJ0dXAgdGVzdCBvbiBmdHJhY2VcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTQ4PWNvbmZpZyBFVkVOVF9UUkFDRV9URVNUX1NZU0NBTExTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTE1OS1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjExNjA6Y29uZmlnIEZUUkFDRV9TT1JUX1NUQVJUVVBfVEVTVFxua2VybmVsL3RyYWNlL0tjb25maWctMTE2MS0gICAgICAgYm9vbCBcJiMzNDtWZXJpZnkgY29tcGlsZSB0aW1lIHNvcnRpbmcgb2YgZnRyYWNlIGZ1bmN0aW9uc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU3OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipUcmFjaW5nIEtlcm5lbCBDb25maWd1cmF0aW9uczogQSBRdWljayBMb29rKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGUgYGZ0cmFjZWAgb3B0aW9uIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHNlZS4uLkkmIzM5O2xsIGp1bXAgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgc28gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCB3YW50IHRvIGNoZWNrIGBtZW51Y29uZmlnIEZUUkFDRWAgaW4gdGhlIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbW9zdCBkaXJlY3Qgcm91dGUgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0cyByZWxhdGVkIHRvIGBmdHJhY2VgLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBnZXQgbWUgYSBjbGVhciB2aWV3IG9mIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgZmVhdHVyZXMuIEkmIzM5O20gYWZ0ZXIgYSBxdWljaywgZm9jdXNlZCBvdmVydmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjAwOlx0XHRkZXBlbmRzIG9uIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlRcbiAyMDE6XHRcdGRlcGVuZHMgb24gU1RBQ0tUUkFDRV9TVVBQT1JUXG4gMjAyOlx0XHRkZWZhdWx0IHlcbiAyMDM6XHRcbiAyMDQ6XHRtZW51Y29uZmlnIEZUUkFDRVxuIDIwNTpcdFx0Ym9vbCBcJiMzNDtUcmFjZXJzXCYjMzQ7XG4gMjA2Olx0XHRkZXBlbmRzIG9uIFRSQUNJTkdfU1VQUE9SVFxuIDIwNzpcdFx0ZGVmYXVsdCB5IGlmIERFQlVHX0tFUk5FTFxuIDIwODpcdFx0aGVscFxuIDIwOTpcdFx0ICBFbmFibGUgdGhlIGtlcm5lbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxuIDIxMDpcdFxuIDIxMTpcdGlmIEZUUkFDRVxuIDIxMjpcdFxuIDIxMzpcdGNvbmZpZyBUUkFDRUZTX0FVVE9NT1VOVF9ERVBSRUNBVEVEXG4gMjE0Olx0XHRib29sIFwmIzM0O0F1dG9tb3VudCB0cmFjZWZzIG9uIGRlYnVnZnMgW0RFUFJFQ0FURURdXCYjMzQ7XG4gMjE1Olx0XHRkZXBlbmRzIG9uIFRSQUNJTkdcbiAyMTY6XHRcdGRlZmF1bHQgeVxuIDIxNzpcdFx0aGVscFxuIDIxODpcdFx0ICBUaGUgdHJhY2luZyBpbnRlcmZhY2Ugd2FzIG1vdmVkIGZyb20gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZ1xuIDIxOTpcdFx0ICB0byAvc3lzL2tlcm5lbC90cmFjaW5nIGluIDIwMTUsIGJ1dCB0aGUgdHJhY2luZyBmaWxlIHN5c3RlbVxuIDIyMDpcdFx0ICB3YXMgc3RpbGwgYXV0b21vdW50ZWQgaW4gL3N5cy9rZXJuZWwvZGVidWcgZm9yIGJhY2t3YXJkXG4gMjIxOlx0XHQgIGNvbXBhdGliaWxpdHkgd2l0aCB0b29saW5nLlxuIDIyMjpcdFxuIDIyMzpcdFx0ICBUaGUgbmV3IGludGVyZmFjZSBoYXMgYmVlbiBhcm91bmQgZm9yIG1vcmUgdGhhbiAxMCB5ZWFycyBhbmRcbiAyMjQ6XHRcdCAgdGhlIG9sZCBkZWJ1ZyBtb3VudCB3aWxsIHNvb24gYmUgcmVtb3ZlZC5cbiAyMjU6XHRcbiAyMjY6XHRjb25maWcgQk9PVFRJTUVfVFJBQ0lOR1xuIDIyNzpcdFx0Ym9vbCBcJiMzNDtCb290LXRpbWUgVHJhY2luZyBzdXBwb3J0XCYjMzQ7XG4gMjI4Olx0XHRkZXBlbmRzIG9uIFRSQUNJTkdcbiAyMjk6XHRcdHNlbGVjdCBCT09UX0NPTkZJR1xuIDIzMDpcdFx0aGVscFxuIDIzMTpcdFx0ICBFbmFibGUgZGV2ZWxvcGVyIHRvIHNldHVwIGZ0cmFjZSBzdWJzeXN0ZW0gdmlhIHN1cHBsZW1lbnRhbFxuIDIzMjpcdFx0ICBrZXJuZWwgY21kbGluZSBhdCBib290IHRpbWUgZm9yIGRlYnVnZ2luZyAodHJhY2luZykgZHJpdmVyXG4gMjMzOlx0XHQgIGluaXRpYWxpemF0aW9uIGFuZCBib290IHByb2Nlc3MuXG4gMjM0Olx0XG4gMjM1Olx0Y29uZmlnIEZVTkNUSU9OX1RSQUNFUlxuIDIzNjpcdFx0Ym9vbCBcJiMzNDtLZXJuZWwgRnVuY3Rpb24gVHJhY2VyXCYjMzQ7XG4gMjM3Olx0XHRkZXBlbmRzIG9uIEhBVkVfRlVOQ1RJT05fVFJBQ0VSXG4gMjM4Olx0XHRzZWxlY3QgS0FMTFNZTVNcbiAyMzk6XHRcdHNlbGVjdCBHRU5FUklDX1RSQUNFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMyMQoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiA0NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBWZXJkaWN0OiBUcmFjZSBSaW5nIEJ1ZmZlciBSZWFkZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgZW5hYmxpbmcgYENPTkZJR19GVFJBQ0VgIG9yIGBDT05GSUdfVFJBQ0lOR2AgYXV0b21hdGljYWxseSBpbmNsdWRlcyBgQ09ORklHX1JJTkdfQlVGRkVSYCwgc28gdGhvc2UgYXJlIHRoZSBrZXkgb25lcyB0byBhZGQgdG8gYEVuYWJsZUNvbmZpZ3NgLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGdvIHdpdGggYFRSQUNJTkdgIGFuZCBgRlRSQUNFYC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBUaGUgZGlmZiBtb2RpZmllcyBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgY2FsbGVycyBhbmQgcmVsYXRlZCBmdW5jdGlvbnMsIHNvIGxldCYjMzk7cyBzZWUuLi4gYHRyYWNpbmdfYnVmZmVyc19pb2N0bGAgY2FsbHMgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCwgYW5kIGByYl9nZXRfcmVhZGVyX3BhZ2VgIGlzIGNhbGxlZCB3aXRoaW4gYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYC4KClRoZSBuZXh0IGltcG9ydGFudCBwb2ludCBpcyB0byBlc3RhYmxpc2ggaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgZmVhdHVyZS4gR29vZCBuZXdzISBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLCBgcmJfZ2V0X3JlYWRlcl9wYWdlYCwgYW5kIGB0cmFjaW5nX2J1ZmZlcnNfaW9jdGxgIGFyZSAqZGVmaW5pdGVseSogc3BlY2lmaWMgdG8gdGhlIHJpbmcgYnVmZmVyIHRyYWNpbmcgbW1hcCByZWFkZXIgZmVhdHVyZS4gVGhpcyBpbmNyZWFzZXMgdGhlIGxpa2VsaWhvb2QgdGhhdCBhIGZ1enppbmcgY2FtcGFpZ24gd2lsbCB1bmVhcnRoIHZ1bG5lcmFiaWxpdGllcy4KCkFscmlnaHQsIHdoYXQmIzM5O3MgdGhlIHZlcmRpY3Qgb24gYFdvcnRoRnV6emluZ2A/IFRoaXMgaXMgYSBuby1icmFpbmVyOiBBYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggY2hhbmdlcyBleGVjdXRhYmxlIGNvZGUgaW4gYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYC4gU3BlY2lmaWNhbGx5LCBpdCByZW1vdmVzIGEgYFdBUk5fT05gIGFzc2VydGlvbi4gVGhpcyBhc3NlcnRpb24gaGFuZGxlZCB0aGUgY2FzZSB3aGVyZSBhIHJlYWRlciBpcyBvYnRhaW5lZC9hYnNlbnQgd2hlbiBtbWFwcGluZy9yZWFkaW5nIHRoZSB0cmFjZSByaW5nIGJ1ZmZlciwgd2hpY2ggc291bmRzIGxpa2Ugc29tZXRoaW5nIHdlIHNob3VsZCBzY3J1dGluaXplLiBDcnVjaWFsbHksIHRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgVFJBQ0VfTU1BUF9JT0NUTF9HRVRfUkVBREVSYCBpb2N0bCBvbiB0cmFjZWZzIGJ1ZmZlciBmaWxlcy4gSXQmIzM5O3MgbW9kaWZ5aW5nIGEga2VybmVsIHJ1bnRpbWUgYXNzZXJ0aW9uLCBhIGRlZmVuc2l2ZSBjaGVjaywgaW4gYSBjb3JlIHRyYWNpbmcgc3Vic3lzdGVtLiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIHVuZXF1aXZvY2FsbHkgYHRydWVgLgoKSSYjMzk7dmUgZ290IHRvIG1ha2Ugc3VyZSB0aGlzIGFsaWducyB3aXRoIHRoZSBjcml0ZXJpYS4gVGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSAoY2hlY2shKSwgaW5jbHVkaW5nIGEgY29yZSBzdWJzeXN0ZW0gKHRyYWNpbmcpIGFuZCBtb2RpZmllcyBhIHJ1bnRpbWUgYXNzZXJ0aW9uLiBDaGVjayBhZ2FpbiEKClNvLCB0aGUgZXNzZW50aWFsczoKCiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgCiogICBgRm9jdXNTeW1ib2xzYDogYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCwgYHRyYWNpbmdfYnVmZmVyc19pb2N0bGAsIGByYl9nZXRfcmVhZGVyX3BhZ2VgCiogICBgRW5hYmxlQ29uZmlnc2A6IGBUUkFDSU5HYCwgYEZUUkFDRWAKKiAgIFJlYXNvbmluZzogQ29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgdmVyZGljdC4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBQ0lORyYjMzQ7LAogICAgJiMzNDtGVFJBQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlciYjMzQ7LAogICAgJiMzNDt0cmFjaW5nX2J1ZmZlcnNfaW9jdGwmIzM0OywKICAgICYjMzQ7cmJfZ2V0X3JlYWRlcl9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWFkZXIgYWNxdWlzaXRpb24gbG9naWMgaW4gdGhlIHJpbmcgYnVmZmVyIHN1YnN5c3RlbSBieSByZW1vdmluZyBhIFdBUk5fT04gYXNzZXJ0aW9uIHdoZW4gcmJfZ2V0X3JlYWRlcl9wYWdlKCkgcmV0dXJucyBOVUxMIGluIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKCkuIFRoaXMgcGF0aCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGlvY3RsKFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUikgb24gdHJhY2UgYnVmZmVyIGZpbGVzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIHZlcmlmeSBtZW1vcnktbWFwcGVkIHJlYWRlciBzeW5jaHJvbml6YXRpb24gYW5kIGVycm9yIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFDSU5HJiMzNDssCiAgICAmIzM0O0ZUUkFDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyJiMzNDssCiAgICAmIzM0O3RyYWNpbmdfYnVmZmVyc19pb2N0bCYjMzQ7LAogICAgJiMzNDtyYl9nZXRfcmVhZGVyX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlYWRlciBhY3F1aXNpdGlvbiBsb2dpYyBpbiB0aGUgcmluZyBidWZmZXIgc3Vic3lzdGVtIGJ5IHJlbW92aW5nIGEgV0FSTl9PTiBhc3NlcnRpb24gd2hlbiByYl9nZXRfcmVhZGVyX3BhZ2UoKSByZXR1cm5zIE5VTEwgaW4gcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoKS4gVGhpcyBwYXRoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaW9jdGwoVFJBQ0VfTU1BUF9JT0NUTF9HRVRfUkVBREVSKSBvbiB0cmFjZSBidWZmZXIgZmlsZXMgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gdmVyaWZ5IG1lbW9yeS1tYXBwZWQgcmVhZGVyIHN5bmNocm9uaXphdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IHJlbW92ZXMgYSBXQVJOX09OKCkgbWFjcm8gYXJvdW5kIGEgTlVMTCBjaGVjayAoY2hhbmdpbmcgJiMzOTtpZiAoV0FSTl9PTighcmVhZGVyKSkmIzM5OyB0byAmIzM5O2lmICghcmVhZGVyKSYjMzk7KSBpbiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0IGZpZWxkcywgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgZGF0YSBwYXRocy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2IwM2M0M2VmODE3OTMzYjgzMzJiNWNhOGM5ZTM1NTExYTRjNGNkMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTU6MDA6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCmluZGV4IDljMDNhNTU1YTZiYTIuLjFhNGRhM2Q0NzUxNDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCkBAIC03OTk1LDcgJiM0Mzs3OTk1LDcgQEAgaW50IHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSkKIAkJZ290byBvdXQ7CiAKIAlyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7Ci0JaWYgKFdBUk5fT04oIXJlYWRlcikpCiYjNDM7CWlmICghcmVhZGVyKQogCQlnb3RvIG91dDsKIAogCS8qIENoZWNrIGlmIGFueSBldmVudHMgd2VyZSBkcm9wcGVkICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmluZyBCdWZmZXIgUmVhZGVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzLiBUaGUgZGlmZiBwb2ludHMgdXMgZGlyZWN0bHkgdG8gYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDc5OTUgd2hlcmUgdGhlIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgZnVuY3Rpb24gaXMuIEl0JiMzOTtzIGNsZWFyIGZyb20gdGhlIHBhdGNoIHRoYXQgYSBjaGFuZ2UgaXMgYmVpbmcgbWFkZSB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gVGhlIGNvbnRleHQgaXMgdml0YWwgaGVyZTogaXQgc2VlbXMgdGhhdCBgcmJfZ2V0X3JlYWRlcl9wYWdlYCBjb3VsZCByZXR1cm4gYSBudWxsIHBvaW50ZXIuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYFdBUk5fT05gLCB3aGljaCwgd2hpbGUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgYW5kIGRldGVjdGluZyBpc3N1ZXMsIG1pZ2h0IG5vdCBiZSB0aGUgbW9zdCBhcHByb3ByaWF0ZSBhcHByb2FjaCBpbiB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uIFRoZSBwYXRjaCByZW1vdmVzIHRoZSBgV0FSTl9PTmAgY2hlY2sgYW5kIGp1c3QgY2hlY2tzIGlmIGByZWFkZXJgIGlzIG51bGwuIEl04oCZcyBsaWtlbHkgYSBjaGFuZ2UgdG8gaW1wcm92ZSByb2J1c3RuZXNzIG9yIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgd2FybmluZyBmcm9tIHVubmVjZXNzYXJpbHkgaGFsdGluZyBleGVjdXRpb24gaW4gY2VydGFpbiBzaXR1YXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY2FsbCBzaXRlcyBvZiBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGEgYE5VTExgIHJldHVybiB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgY2hhbmdlIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gVGhlIGNvbW1lbnQgcmVnYXJkaW5nIGV2ZW50IGRyb3BzIHByb3ZpZGVzIHNvbWUgY29udGV4dCwgYnV0IHVuZGVyc3RhbmRpbmcgKndoeSogYHJiX2dldF9yZWFkZXJfcGFnZWAgbWlnaHQgcmV0dXJuIGBOVUxMYCBpcyBrZXkgdG8gYXNzZXNzaW5nIHRoZSBwYXRjaCYjMzk7cyBjb3JyZWN0bmVzcyBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiBzeXN0ZW0gYmVoYXZpb3IsIGVzcGVjaWFsbHkgaW4gaGlnaC1wcmVzc3VyZSB0cmFjaW5nIGVudmlyb25tZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzk4MDpcdFx0cmVhZGVyX3NpemUgPSByYl9wYWdlX3NpemUoY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSk7XG43OTgxOlx0XG43OTgyOlx0XHQvKlxuNzk4MzpcdFx0ICogVGhlcmUgYXJlIGRhdGEgdG8gYmUgcmVhZCBvbiB0aGUgY3VycmVudCByZWFkZXIgcGFnZSwgd2UgY2FuXG43OTg0Olx0XHQgKiByZXR1cm4gdG8gdGhlIGNhbGxlci4gQnV0IGJlZm9yZSB0aGF0LCB3ZSBhc3N1bWUgdGhlIGxhdHRlciB3aWxsIHJlYWRcbjc5ODU6XHRcdCAqIGV2ZXJ5dGhpbmcuIExldCYjMzk7cyB1cGRhdGUgdGhlIGtlcm5lbCByZWFkZXIgYWNjb3JkaW5nbHkuXG43OTg2Olx0XHQgKi9cbjc5ODc6XHRcdGlmIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlLVx1MDAzZXJlYWQgXHUwMDNjIHJlYWRlcl9zaXplKSB7XG43OTg4Olx0XHRcdHdoaWxlIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlLVx1MDAzZXJlYWQgXHUwMDNjIHJlYWRlcl9zaXplKVxuNzk4OTpcdFx0XHRcdHJiX2FkdmFuY2VfcmVhZGVyKGNwdV9idWZmZXIpO1xuNzk5MDpcdFx0XHRnb3RvIG91dDtcbjc5OTE6XHRcdH1cbjc5OTI6XHRcbjc5OTM6XHRcdC8qIERpZCB0aGUgcmVhZGVyIGNhdGNoIHVwIHdpdGggdGhlIHdyaXRlcj8gKi9cbjc5OTQ6XHRcdGlmIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlID09IGNwdV9idWZmZXItXHUwMDNlY29tbWl0X3BhZ2UpXG43OTk1Olx0XHRcdGdvdG8gb3V0O1xuNzk5NjpcdFxuNzk5NzpcdFx0cmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpO1xuNzk5ODpcdFx0aWYgKCFyZWFkZXIpXG43OTk5Olx0XHRcdGdvdG8gb3V0O1xuODAwMDpcdFxuODAwMTpcdFx0LyogQ2hlY2sgaWYgYW55IGV2ZW50cyB3ZXJlIGRyb3BwZWQgKi9cbjgwMDI6XHRcdG1pc3NlZF9ldmVudHMgPSBjcHVfYnVmZmVyLVx1MDAzZWxvc3RfZXZlbnRzO1xuODAwMzpcdFxuODAwNDpcdFx0aWYgKG1pc3NlZF9ldmVudHMpIHtcbjgwMDU6XHRcdFx0aWYgKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci1cdTAwM2Vjb21taXRfcGFnZSkge1xuODAwNjpcdFx0XHRcdHN0cnVjdCBidWZmZXJfZGF0YV9wYWdlICpkcGFnZSA9IHJlYWRlci1cdTAwM2VwYWdlO1xuODAwNzpcdFx0XHRcdHVuc2lnbmVkIGludCBjb21taXQ7XG44MDA4Olx0XHRcdFx0LypcbjgwMDk6XHRcdFx0XHQgKiBVc2UgdGhlIHJlYWxfZW5kIGZvciB0aGUgZGF0YSBzaXplLFxuODAxMDpcdFx0XHRcdCAqIFRoaXMgZ2l2ZXMgdXMgYSBjaGFuY2UgdG8gc3RvcmUgdGhlIGxvc3QgZXZlbnRzXG44MDExOlx0XHRcdFx0ICogb24gdGhlIHBhZ2UuXG44MDEyOlx0XHRcdFx0ICovXG44MDEzOlx0XHRcdFx0aWYgKHJlYWRlci1cdTAwM2VyZWFsX2VuZClcbjgwMTQ6XHRcdFx0XHRcdGxvY2FsX3NldChcdTAwMjZkcGFnZS1cdTAwM2Vjb21taXQsIHJlYWRlci1cdTAwM2VyZWFsX2VuZCk7XG44MDE1Olx0XHRcdFx0LypcbjgwMTY6XHRcdFx0XHQgKiBJZiB0aGVyZSBpcyByb29tIGF0IHRoZSBlbmQgb2YgdGhlIHBhZ2UgdG8gc2F2ZSB0aGVcbjgwMTc6XHRcdFx0XHQgKiBtaXNzZWQgZXZlbnRzLCB0aGVuIHJlY29yZCBpdCB0aGVyZS5cbjgwMTg6XHRcdFx0XHQgKi9cbjgwMTk6XHRcdFx0XHRjb21taXQgPSByYl9wYWdlX3NpemUocmVhZGVyKTtcbjgwMjA6XHRcdFx0XHRpZiAocmJfcGFnZV9jYXBhY2l0eShyZWFkZXIpIC0gY29tbWl0IFx1MDAzZT0gc2l6ZW9mKG1pc3NlZF9ldmVudHMpKSB7XG44MDIxOlx0XHRcdFx0XHRtZW1jcHkoXHUwMDI2ZHBhZ2UtXHUwMDNlZGF0YVtjb21taXRdLCBcdTAwMjZtaXNzZWRfZXZlbnRzLFxuODAyMjpcdFx0XHRcdFx0ICAgICAgIHNpemVvZihtaXNzZWRfZXZlbnRzKSk7XG44MDIzOlx0XHRcdFx0XHRsb2NhbF9hZGQoUkJfTUlTU0VEX1NUT1JFRCwgXHUwMDI2ZHBhZ2UtXHUwMDNlY29tbWl0KTtcbjgwMjQ6XHRcdFx0XHR9XG44MDI1Olx0XHRcdFx0bG9jYWxfYWRkKFJCX01JU1NFRF9FVkVOVFMsIFx1MDAyNmRwYWdlLVx1MDAzZWNvbW1pdCk7XG44MDI2Olx0XHRcdH0gZWxzZSBpZiAoIVdBUk5fT05DRShjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlID09IGNwdV9idWZmZXItXHUwMDNldGFpbF9wYWdlLFxuODAyNzpcdFx0XHRcdFx0ICAgICAgXCYjMzQ7UmVhZGVyIG9uIGNvbW1pdCB3aXRoICVsZCBtaXNzZWQgZXZlbnRzXCYjMzQ7LFxuODAyODpcdFx0XHRcdFx0ICAgICAgbWlzc2VkX2V2ZW50cykpIHtcbjgwMjk6XHRcdFx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDI4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2Ygc29tZSBjb2RlLCBwcm9iYWJseSByZWxhdGVkIHRvIGNvbmN1cnJlbnQgZGF0YSBzdHJ1Y3R1cmVzOgoKKipEZWNvbnN0cnVjdGluZyBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgKioKCkFscmlnaHQsIHNvIEkmIzM5O20ga25lZS1kZWVwIGluIHRoaXMgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCBmdW5jdGlvbi4gVGhhdCBuYW1lIGFsb25lIHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHBhcnQgb2YgYSBzeXN0ZW0gZm9yIGVmZmljaWVudGx5IG1hbmFnaW5nIGRhdGEsIHBlcmhhcHMgd2l0aGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4gVGhlICYjMzQ7cmluZyBidWZmZXImIzM0OyBzdWdnZXN0cyBhIGNpcmN1bGFyIHF1ZXVlLCBsaWtlbHkgb3B0aW1pemVkIGZvciBmYXN0LCBzZXF1ZW50aWFsIGFjY2Vzcy4gVGhlICYjMzQ7bWFwJiMzNDsgY29tcG9uZW50IGltcGxpZXMgc29tZSBraW5kIG9mIGtleS12YWx1ZSBsb29rdXAgKndpdGhpbiogdGhhdCByaW5nIGJ1ZmZlciwgcG90ZW50aWFsbHkgZm9yIHJhbmRvbSBhY2Nlc3Mgb3Igc3BlY2lmaWMgZGF0YSByZXRyaWV2YWwuIEFuZCB0aGVuIHRoZXJlJiMzOTtzIHRoZSBgZ2V0X3JlYWRlcmAgcGFydC4gT2theSwgc28gdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgZGVzaWduZWQgdG8gYWNxdWlyZSBhIHJlYWQgaGFuZGxlLCBvciBhbiBpdGVyYXRvciwgaW50byB0aGUgYnVmZmVyLCBwcmVzdW1hYmx5IHdpdGggdGhyZWFkIHNhZmV0eSBjb25zaWRlcmF0aW9ucy4gSSYjMzk7bSBwcm9iYWJseSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgbG9ja2luZyBzdHJhdGVnaWVzIHVzZWQgKGlmIGFueSksIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBOb3csIGxldCYjMzk7cyBzZWUgd2hhdCB0aGUgcmVzdCBvZiB0aGlzIHRoaW5nIGlzIGFjdHVhbGx5IGRvaW5nLi4uIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzk2MDpcdH1cbjc5NjE6XHRcbjc5NjI6XHRpbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxuNzk2MzpcdHtcbjc5NjQ6XHRcdHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyO1xuNzk2NTpcdFx0c3RydWN0IGJ1ZmZlcl9wYWdlICpyZWFkZXI7XG43OTY2Olx0XHR1bnNpZ25lZCBsb25nIG1pc3NlZF9ldmVudHM7XG43OTY3Olx0XHR1bnNpZ25lZCBsb25nIHJlYWRlcl9zaXplO1xuNzk2ODpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjc5Njk6XHRcbjc5NzA6XHRcdGNwdV9idWZmZXIgPSByYl9nZXRfbWFwcGVkX2J1ZmZlcihidWZmZXIsIGNwdSk7XG43OTcxOlx0XHRpZiAoSVNfRVJSKGNwdV9idWZmZXIpKVxuNzk3MjpcdFx0XHRyZXR1cm4gKGludClQVFJfRVJSKGNwdV9idWZmZXIpO1xuNzk3MzpcdFxuNzk3NDpcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmNwdV9idWZmZXItXHUwMDNlcmVhZGVyX2xvY2ssIGZsYWdzKTtcbjc5NzU6XHRcbjc5NzY6XHRjb25zdW1lOlxuNzk3NzpcdFx0aWYgKHJiX3Blcl9jcHVfZW1wdHkoY3B1X2J1ZmZlcikpXG43OTc4Olx0XHRcdGdvdG8gb3V0O1xuNzk3OTpcdFxuNzk4MDpcdFx0cmVhZGVyX3NpemUgPSByYl9wYWdlX3NpemUoY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSk7XG43OTgxOlx0XG43OTgyOlx0XHQvKlxuNzk4MzpcdFx0ICogVGhlcmUgYXJlIGRhdGEgdG8gYmUgcmVhZCBvbiB0aGUgY3VycmVudCByZWFkZXIgcGFnZSwgd2UgY2FuXG43OTg0Olx0XHQgKiByZXR1cm4gdG8gdGhlIGNhbGxlci4gQnV0IGJlZm9yZSB0aGF0LCB3ZSBhc3N1bWUgdGhlIGxhdHRlciB3aWxsIHJlYWRcbjc5ODU6XHRcdCAqIGV2ZXJ5dGhpbmcuIExldCYjMzk7cyB1cGRhdGUgdGhlIGtlcm5lbCByZWFkZXIgYWNjb3JkaW5nbHkuXG43OTg2Olx0XHQgKi9cbjc5ODc6XHRcdGlmIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlLVx1MDAzZXJlYWQgXHUwMDNjIHJlYWRlcl9zaXplKSB7XG43OTg4Olx0XHRcdHdoaWxlIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlLVx1MDAzZXJlYWQgXHUwMDNjIHJlYWRlcl9zaXplKVxuNzk4OTpcdFx0XHRcdHJiX2FkdmFuY2VfcmVhZGVyKGNwdV9idWZmZXIpO1xuNzk5MDpcdFx0XHRnb3RvIG91dDtcbjc5OTE6XHRcdH1cbjc5OTI6XHRcbjc5OTM6XHRcdC8qIERpZCB0aGUgcmVhZGVyIGNhdGNoIHVwIHdpdGggdGhlIHdyaXRlcj8gKi9cbjc5OTQ6XHRcdGlmIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlID09IGNwdV9idWZmZXItXHUwMDNlY29tbWl0X3BhZ2UpXG43OTk1Olx0XHRcdGdvdG8gb3V0O1xuNzk5NjpcdFxuNzk5NzpcdFx0cmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpO1xuNzk5ODpcdFx0aWYgKCFyZWFkZXIpXG43OTk5Olx0XHRcdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzIwCgkJCQkJCQlvdXRwdXQ6IDExMAoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBBIFF1aWNrIFJldmlldyoqCgpPa2F5LCBzbyB0aGUgZGlmZiBpcyBzdHJhaWdodGZvcndhcmQuIFdlJiMzOTtyZSBlc3NlbnRpYWxseSBkcm9wcGluZyB0aGUgYFdBUk5fT05gIG1hY3JvIGFyb3VuZCBhIG51bGwgY2hlY2sgZm9yIHRoZSBgcmVhZGVyYCB2YXJpYWJsZS4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzOiBgaWYgKFdBUk5fT04oIXJlYWRlcikpYCBhbmQgaXQmIzM5O3MgYmVpbmcgY2hhbmdlZCB0byBgaWYgKCFyZWFkZXIpYC4gVGhhdCBgcmVhZGVyYCBjYW4gbGVnaXRpbWF0ZWx5IGJlIG51bGwgaW4gY29uY3VycmVudCBidWZmZXIgb3BlcmF0aW9ucyBvciB3aGVuIG5vIHJlYWRlciBwYWdlIGlzIGF2YWlsYWJsZS4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZT8gSSYjMzk7dmUgZ29uZSBvdmVyIGl0LCBhbmQgbm8uIFRoaXMgZG9lc24mIzM5O3QgYWxsb2NhdGUgbWVtb3J5LCBpdCBkb2VzbiYjMzk7dCBjb3B5IGFueXRoaW5nIHRvIHVzZXJzcGFjZSwgaXQgZG9lc24mIzM5O3QgKnJlYWQqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgaXQgZG9lc24mIzM5O3QgYWZmZWN0IGFueSBzdHJ1Y3Qgc2l6ZXMgb3IgZGF0YSBmbG93cy4gSXQmIzM5O3MganVzdCByZW1vdmluZyBhIHdhcm5pbmcgYWJvdXQgYW4gZXJyb3IgY29uZGl0aW9uLgoKQWxyaWdodCwgc28gdGhlIGNvbmNsdXNpb24gaXMgcHJldHR5IGNsZWFyLiBTaW5jZSBpdCBtZWV0cyB0aGUgY3JpdGVyaWEgb2Ygbm90IGludHJvZHVjaW5nIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgaXQgc2ltcGx5IHJlbW92ZXMgYSBgV0FSTl9PTmAgbWFjcm8gc3Vycm91bmRpbmcgYSBudWxsIGNoZWNrIGZvciBgcmVhZGVyYCwgYE5lZWRzS01TQU5gIGhhcyB0byBiZSBgZmFsc2VgLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIHByb3ZpZGUgdGhlIGFwcHJvcHJpYXRlIHJlc3BvbnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IHJlbW92ZXMgYSBXQVJOX09OKCkgbWFjcm8gYXJvdW5kIGEgTlVMTCBjaGVjayAoY2hhbmdpbmcgJiMzOTtpZiAoV0FSTl9PTighcmVhZGVyKSkmIzM5OyB0byAmIzM5O2lmICghcmVhZGVyKSYjMzk7KSBpbiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0IGZpZWxkcywgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgZGF0YSBwYXRocy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSByZW1vdmVzIGEgV0FSTl9PTigpIG1hY3JvIGFyb3VuZCBhIE5VTEwgY2hlY2sgKGNoYW5naW5nICYjMzk7aWYgKFdBUk5fT04oIXJlYWRlcikpJiMzOTsgdG8gJiMzOTtpZiAoIXJlYWRlcikmIzM5OykgaW4gcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBmaWVsZHMsIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGRhdGEgcGF0aHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDA6MjEuNDExMTc0NDgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMyMTU1NTUzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBQ0lOR1wiLFxuICAgIFwiRlRSQUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJcIixcbiAgICBcInRyYWNpbmdfYnVmZmVyc19pb2N0bFwiLFxuICAgIFwicmJfZ2V0X3JlYWRlcl9wYWdlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IHJlbW92ZXMgYSBXQVJOX09OKCkgbWFjcm8gYXJvdW5kIGEgTlVMTCBjaGVjayAoY2hhbmdpbmcgJ2lmIChXQVJOX09OKCFyZWFkZXIpKScgdG8gJ2lmICghcmVhZGVyKScpIGluIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgZmllbGRzLCBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBkYXRhIHBhdGhzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlYWRlciBhY3F1aXNpdGlvbiBsb2dpYyBpbiB0aGUgcmluZyBidWZmZXIgc3Vic3lzdGVtIGJ5IHJlbW92aW5nIGEgV0FSTl9PTiBhc3NlcnRpb24gd2hlbiByYl9nZXRfcmVhZGVyX3BhZ2UoKSByZXR1cm5zIE5VTEwgaW4gcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoKS4gVGhpcyBwYXRoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaW9jdGwoVFJBQ0VfTU1BUF9JT0NUTF9HRVRfUkVBREVSKSBvbiB0cmFjZSBidWZmZXIgZmlsZXMgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gdmVyaWZ5IG1lbW9yeS1tYXBwZWQgcmVhZGVyIHN5bmNocm9uaXphdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAwOjIxLjQxMTE4MDYxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYwNzIyNTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2IwM2M0M2VmODE3OTMzYjgzMzJiNWNhOGM5ZTM1NTExYTRjNGNkMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDE1OjAwOjE5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcXG5pbmRleCA5YzAzYTU1NWE2YmEyLi4xYTRkYTNkNDc1MTQ0IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jXFxuKysrIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcXG5AQCAtNzk5NSw3ICs3OTk1LDcgQEAgaW50IHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7XFxuLVxcdGlmIChXQVJOX09OKCFyZWFkZXIpKVxcbitcXHRpZiAoIXJlYWRlcilcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHQvKiBDaGVjayBpZiBhbnkgZXZlbnRzIHdlcmUgZHJvcHBlZCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTowMDoyMi44NzI2ODI4MTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUxNzQ2NzI0MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQUNJTkdcIixcbiAgICBcIkZUUkFDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyXCIsXG4gICAgXCJ0cmFjaW5nX2J1ZmZlcnNfaW9jdGxcIixcbiAgICBcInJiX2dldF9yZWFkZXJfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWFkZXIgYWNxdWlzaXRpb24gbG9naWMgaW4gdGhlIHJpbmcgYnVmZmVyIHN1YnN5c3RlbSBieSByZW1vdmluZyBhIFdBUk5fT04gYXNzZXJ0aW9uIHdoZW4gcmJfZ2V0X3JlYWRlcl9wYWdlKCkgcmV0dXJucyBOVUxMIGluIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKCkuIFRoaXMgcGF0aCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGlvY3RsKFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUikgb24gdHJhY2UgYnVmZmVyIGZpbGVzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIHZlcmlmeSBtZW1vcnktbWFwcGVkIHJlYWRlciBzeW5jaHJvbml6YXRpb24gYW5kIGVycm9yIGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNiMDNjNDNlZjgxNzkzM2I4MzMyYjVjYThjOWUzNTUxMWE0YzRjZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE1OjAwOjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1xuaW5kZXggOWMwM2E1NTVhNmJhMi4uMWE0ZGEzZDQ3NTE0NCAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jXG4rKysgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1xuQEAgLTc5OTUsNyArNzk5NSw3IEBAIGludCByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0cmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpO1xuLVx0aWYgKFdBUk5fT04oIXJlYWRlcikpXG4rXHRpZiAoIXJlYWRlcilcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHQvKiBDaGVjayBpZiBhbnkgZXZlbnRzIHdlcmUgZHJvcHBlZCAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDA6MjIuODcyNjg0MTI3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAyMzk0Nzc2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCByZXF1ZXN0IGZvciBhIHBhdGNoIHJldmlldyB0byBkZXRlcm1pbmUgaWYgaXQncyB3b3J0aCBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUeXBpY2FsIExpbnV4IGtlcm5lbCBtYWludGFpbmVyIHRyaWFnZS4gTXkgam9iIGlzIHRvIGV2YWx1YXRlIHdoZXRoZXIgdGhpcyBwYXRjaCBzZXJpZXMgcHJlc2VudHMgYW4gb3Bwb3J0dW5pdHkgZm9yIGZ1enppbmcsIGFuZCBpZiBzbywgaG93IHRvIGJlc3QgZW5hYmxlIGl0LiBJIG5lZWQgdG8gbWFrZSBhIGp1ZGdtZW50IGNhbGwgb24gXCJXb3J0aEZ1enppbmcsXCIgZXh0cmFjdCByZWxldmFudCBcIkZvY3VzU3ltYm9sc1wiIGFuZCBcIkVuYWJsZUNvbmZpZ3MsXCIgYW5kIHByb3ZpZGUgcmVhc29uaW5nIGZvciBteSBkZWNpc2lvbiBiZWZvcmUgY2FsbGluZyBgc2V0LXJlc3VsdHNgLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgcGF0Y2ggZGlmZi4gSG1tLCBpdCdzIGEgcmVsYXRpdmVseSBzbWFsbCBjaGFuZ2Ugd2l0aGluIGBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY2AuICBMZXQgbWUgc2VlLi4uIExpbmUgNzk5NS4gSXQgYXBwZWFycyB0aGF0IGEgYFdBUk5fT05gIGNoZWNrIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBtb3JlIGJhc2ljIG51bGwgY2hlY2sgb24gdGhlIHJlYWRlciBwb2ludGVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgdGhpcyAqY291bGQqIGJlIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhcyBpdCBtaWdodCBleHBvc2Ugc29tZSBwcmV2aW91c2x5IG1hc2tlZCBlcnJvciBjb25kaXRpb25zLiBBIG51bGwgcmVhZGVyIHN1Z2dlc3RzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGluIGEgY3JpdGljYWwgcGF0aC4gSXQncyBhIGtlcm5lbCB0cmFjZSBidWZmZXIsIHNvIHRoaXMgY291bGQgYWZmZWN0IGRlYnVnZ2luZyBvciBvdGhlciB0cmFjZSBmdW5jdGlvbmFsaXR5IGlmIGEgcmVhZGVyIGlzIG51bGwuXG5cbk5leHQsIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBzbyBJJ2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBvbiBga2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNgIGFyb3VuZCBsaW5lIDc5OTUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gRnJvbSB0aGVyZSwgSSdsbCBhc3Nlc3MgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZSBhbmQgaWYgc3l6a2FsbGVyIGlzIGxpa2VseSB0byB1bmNvdmVyIGFueSBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTowMDozMy4xMTIxNjM5OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Njc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3OTgwOlxcdFxcdHJlYWRlcl9zaXplID0gcmJfcGFnZV9zaXplKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlKTtcXG43OTgxOlxcdFxcbjc5ODI6XFx0XFx0LypcXG43OTgzOlxcdFxcdCAqIFRoZXJlIGFyZSBkYXRhIHRvIGJlIHJlYWQgb24gdGhlIGN1cnJlbnQgcmVhZGVyIHBhZ2UsIHdlIGNhblxcbjc5ODQ6XFx0XFx0ICogcmV0dXJuIHRvIHRoZSBjYWxsZXIuIEJ1dCBiZWZvcmUgdGhhdCwgd2UgYXNzdW1lIHRoZSBsYXR0ZXIgd2lsbCByZWFkXFxuNzk4NTpcXHRcXHQgKiBldmVyeXRoaW5nLiBMZXQncyB1cGRhdGUgdGhlIGtlcm5lbCByZWFkZXIgYWNjb3JkaW5nbHkuXFxuNzk4NjpcXHRcXHQgKi9cXG43OTg3OlxcdFxcdGlmIChjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZS1cXHUwMDNlcmVhZCBcXHUwMDNjIHJlYWRlcl9zaXplKSB7XFxuNzk4ODpcXHRcXHRcXHR3aGlsZSAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UtXFx1MDAzZXJlYWQgXFx1MDAzYyByZWFkZXJfc2l6ZSlcXG43OTg5OlxcdFxcdFxcdFxcdHJiX2FkdmFuY2VfcmVhZGVyKGNwdV9idWZmZXIpO1xcbjc5OTA6XFx0XFx0XFx0Z290byBvdXQ7XFxuNzk5MTpcXHRcXHR9XFxuNzk5MjpcXHRcXG43OTkzOlxcdFxcdC8qIERpZCB0aGUgcmVhZGVyIGNhdGNoIHVwIHdpdGggdGhlIHdyaXRlcj8gKi9cXG43OTk0OlxcdFxcdGlmIChjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZSA9PSBjcHVfYnVmZmVyLVxcdTAwM2Vjb21taXRfcGFnZSlcXG43OTk1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjc5OTY6XFx0XFxuNzk5NzpcXHRcXHRyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7XFxuNzk5ODpcXHRcXHRpZiAoIXJlYWRlcilcXG43OTk5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjgwMDA6XFx0XFxuODAwMTpcXHRcXHQvKiBDaGVjayBpZiBhbnkgZXZlbnRzIHdlcmUgZHJvcHBlZCAqL1xcbjgwMDI6XFx0XFx0bWlzc2VkX2V2ZW50cyA9IGNwdV9idWZmZXItXFx1MDAzZWxvc3RfZXZlbnRzO1xcbjgwMDM6XFx0XFxuODAwNDpcXHRcXHRpZiAobWlzc2VkX2V2ZW50cykge1xcbjgwMDU6XFx0XFx0XFx0aWYgKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXFx1MDAzZWNvbW1pdF9wYWdlKSB7XFxuODAwNjpcXHRcXHRcXHRcXHRzdHJ1Y3QgYnVmZmVyX2RhdGFfcGFnZSAqZHBhZ2UgPSByZWFkZXItXFx1MDAzZXBhZ2U7XFxuODAwNzpcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY29tbWl0O1xcbjgwMDg6XFx0XFx0XFx0XFx0LypcXG44MDA5OlxcdFxcdFxcdFxcdCAqIFVzZSB0aGUgcmVhbF9lbmQgZm9yIHRoZSBkYXRhIHNpemUsXFxuODAxMDpcXHRcXHRcXHRcXHQgKiBUaGlzIGdpdmVzIHVzIGEgY2hhbmNlIHRvIHN0b3JlIHRoZSBsb3N0IGV2ZW50c1xcbjgwMTE6XFx0XFx0XFx0XFx0ICogb24gdGhlIHBhZ2UuXFxuODAxMjpcXHRcXHRcXHRcXHQgKi9cXG44MDEzOlxcdFxcdFxcdFxcdGlmIChyZWFkZXItXFx1MDAzZXJlYWxfZW5kKVxcbjgwMTQ6XFx0XFx0XFx0XFx0XFx0bG9jYWxfc2V0KFxcdTAwMjZkcGFnZS1cXHUwMDNlY29tbWl0LCByZWFkZXItXFx1MDAzZXJlYWxfZW5kKTtcXG44MDE1OlxcdFxcdFxcdFxcdC8qXFxuODAxNjpcXHRcXHRcXHRcXHQgKiBJZiB0aGVyZSBpcyByb29tIGF0IHRoZSBlbmQgb2YgdGhlIHBhZ2UgdG8gc2F2ZSB0aGVcXG44MDE3OlxcdFxcdFxcdFxcdCAqIG1pc3NlZCBldmVudHMsIHRoZW4gcmVjb3JkIGl0IHRoZXJlLlxcbjgwMTg6XFx0XFx0XFx0XFx0ICovXFxuODAxOTpcXHRcXHRcXHRcXHRjb21taXQgPSByYl9wYWdlX3NpemUocmVhZGVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDA6MzMuMTEyNDMzMTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjQ5MTk5NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLiBJdCdzIGNydWNpYWwsIGFuZCB0aGUgbmFtZSBzdWdnZXN0cyBhIGtleSBmdW5jdGlvbiByZWxhdGVkIHRvIHJlYWRpbmcgZGF0YSBmcm9tIGEgcmluZyBidWZmZXIgbWFwLiBUbyB0cnVseSBncmFzcCBpdHMgcm9sZSBhbmQgcG90ZW50aWFsIGltcGFjdCwgSSBuZWVkIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBTaW1wbHkgdW5kZXJzdGFuZGluZyB0aGUgbmFtZSBpc24ndCBlbm91Z2g7IEkgbmVlZCB0byBzZWUgKmhvdyogaXQncyBpbnZva2VkLCB3aGF0IGl0cyBpbnB1dHMgYW5kIG91dHB1dHMgYXJlLCBhbmQgdGhlIG92ZXJhbGwgcGF0dGVybiBvZiBpdHMgdXNhZ2UuXG5cbk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGl0cyBjb2RlYmFzZSBhcHBlYXJhbmNlcy4gVGhpcyBjYWxscyBmb3IgYSBxdWljayBhbmQgcHJlY2lzZSBjb2RlIHNlYXJjaC4gSSdsbCBsYXVuY2ggYGdyZXBwZXJgIChvciBteSBwcmVmZXJyZWQgY29kZSBzZWFyY2ggdG9vbCwgd2hhdGV2ZXIgSSdtIG1vc3QgY29tZm9ydGFibGUgd2l0aCBhbmQgaGFzIHRoZSBiZXN0IGluZGV4aW5nIG9mIHRoaXMgcGFydGljdWxhciBjb2RlYmFzZSkgYW5kIHplcm8gaW4gb24gZXZlcnkgaW5zdGFuY2Ugb2YgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYC4gSSdsbCBhbmFseXplIGVhY2ggY2FsbCBzaXRlIHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBzeXN0ZW0gbG9naWMsIGVzcGVjaWFsbHkgdGhlIHN1cnJvdW5kaW5nIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgYnJlYWR0aCBvZiBrbm93bGVkZ2UgbmVlZGVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGluIGl0cyBlbnRpcmV0eS4gVGhpcyBpcyBhIHN0YW5kYXJkIGZpcnN0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxODIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAwOjM2LjM2MTYzNTcwOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAzMTAyMTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcmluZ19idWZmZXIuaD0yNTQ9aW50IHJpbmdfYnVmZmVyX3VubWFwKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSk7XFxuaW5jbHVkZS9saW51eC9yaW5nX2J1ZmZlci5oOjI1NTppbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KTtcXG5pbmNsdWRlL2xpbnV4L3JpbmdfYnVmZmVyLmgtMjU2LVxcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM9NzkyNz1pbnQgcmluZ19idWZmZXJfdW5tYXAoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzk2MS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo3OTYyOmludCByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzk2My17XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYz03MzY1PXN0YXRpYyBsb25nIHRyYWNpbmdfYnVmZmVyc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03MzgwLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jOjczODE6XFx0XFx0cmV0dXJuIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKGl0ZXItXFx1MDAzZWFycmF5X2J1ZmZlci1cXHUwMDNlYnVmZmVyLFxcbmtlcm5lbC90cmFjZS90cmFjZS5jLTczODItXFx0XFx0XFx0XFx0XFx0XFx0ICBpdGVyLVxcdTAwM2VjcHVfZmlsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAwOjM3Ljk2NDc0MjcxM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1Mjg2OTEzMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb2RlIHNuaXBwZXQsIGFzIGlmIGl0IHdlcmUgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgdHJhY2UuY2AgYW5kIFJpbmcgQnVmZmVyIE1hcHBpbmcqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGB0cmFjaW5nX2J1ZmZlcnNfaW9jdGxgIGZ1bmN0aW9uIGluIGBrZXJuZWwvdHJhY2UvdHJhY2UuY2AgaW50ZXJhY3RzIHdpdGggdGhlIHJpbmcgYnVmZmVyLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgKmhvdyogaXQncyBnZXR0aW5nIGEgcmVhZGVyIGhhbmRsZSwgd2hpY2ggSSdtIHByZXR0eSBzdXJlIGlzIGhhbmRsZWQgdGhyb3VnaCBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLiBMZXQncyBnZXQgdG8gbGluZSA3MzY1IGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZy4gSSBleHBlY3QgdG8gc2VlIHRoZSBjYWxsLCBidXQgSSdtIGludGVyZXN0ZWQgaW4gdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIC0gYXJlIHRoZXJlIGVycm9yIGNoZWNrcz8gV2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQ/IElzIHRoZXJlIGFueSBzcGVjaWZpYyBjb250ZXh0IHRoYXQncyByZWxldmFudCB0byBob3cgYHRyYWNpbmdfYnVmZmVyc19pb2N0bGAgdXRpbGl6ZXMgdGhlIHJpbmcgYnVmZmVyPyBJJ20gYW50aWNpcGF0aW5nIHRoaXMgY2FsbCBwcm9iYWJseSByZXR1cm5zIGEgbWFwcGluZyBvciBhIHBvaW50ZXIgb2Ygc29tZSBzb3J0LiBJdCdsbCBiZSBrZXkgdG8gdGhlbiBmaWd1cmUgb3V0IGhvdyB0aGF0IHJlYWRlciBoYW5kbGUgaXMgdGhlbiB1c2VkIGZvciB0aGUgZXZlbnR1YWwgcmVhZHMsIGFuZCBwb3RlbnRpYWxseSBmb3IgbWFuYWdpbmcgdGhlIGRhdGEgd2l0aGluIHRoZSBidWZmZXIuIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUga2VybmVsIGludGVyZmFjZSBwcm92aWRlcyB0aGUgdHJhY2UgZGF0YSB0byB0aGUgdXNlcnNwYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODQwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDA6NDAuNDkzNDM2MzQ5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQwMTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS90cmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczNjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjczNjU6XFx0c3RhdGljIGxvbmcgdHJhY2luZ19idWZmZXJzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG43MzY2OlxcdHtcXG43MzY3OlxcdFxcdHN0cnVjdCBmdHJhY2VfYnVmZmVyX2luZm8gKmluZm8gPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuNzM2ODpcXHRcXHRzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIgPSBcXHUwMDI2aW5mby1cXHUwMDNlaXRlcjtcXG43MzY5OlxcdFxcdGludCBlcnI7XFxuNzM3MDpcXHRcXG43MzcxOlxcdFxcdGlmIChjbWQgPT0gVFJBQ0VfTU1BUF9JT0NUTF9HRVRfUkVBREVSKSB7XFxuNzM3MjpcXHRcXHRcXHRpZiAoIShmaWxlLVxcdTAwM2VmX2ZsYWdzIFxcdTAwMjYgT19OT05CTE9DSykpIHtcXG43MzczOlxcdFxcdFxcdFxcdGVyciA9IHJpbmdfYnVmZmVyX3dhaXQoaXRlci1cXHUwMDNlYXJyYXlfYnVmZmVyLVxcdTAwM2VidWZmZXIsXFxuNzM3NDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgaXRlci1cXHUwMDNlY3B1X2ZpbGUsXFxuNzM3NTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgaXRlci1cXHUwMDNldHItXFx1MDAzZWJ1ZmZlcl9wZXJjZW50LFxcbjczNzY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIE5VTEwsIE5VTEwpO1xcbjczNzc6XFx0XFx0XFx0XFx0aWYgKGVycilcXG43Mzc4OlxcdFxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuNzM3OTpcXHRcXHRcXHR9XFxuNzM4MDpcXHRcXG43MzgxOlxcdFxcdFxcdHJldHVybiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihpdGVyLVxcdTAwM2VhcnJheV9idWZmZXItXFx1MDAzZWJ1ZmZlcixcXG43MzgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgaXRlci1cXHUwMDNlY3B1X2ZpbGUpO1xcbjczODM6XFx0XFx0fSBlbHNlIGlmIChjbWQpIHtcXG43Mzg0OlxcdFxcdFxcdHJldHVybiAtRU5PVFRZO1xcbjczODU6XFx0XFx0fVxcbjczODY6XFx0XFxuNzM4NzpcXHRcXHQvKlxcbjczODg6XFx0XFx0ICogQW4gaW9jdGwgY2FsbCB3aXRoIGNtZCAwIHRvIHRoZSByaW5nIGJ1ZmZlciBmaWxlIHdpbGwgd2FrZSB1cCBhbGxcXG43Mzg5OlxcdFxcdCAqIHdhaXRlcnNcXG43MzkwOlxcdFxcdCAqL1xcbjczOTE6XFx0XFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ0cmFjZV90eXBlc19sb2NrKTtcXG43MzkyOlxcdFxcbjczOTM6XFx0XFx0LyogTWFrZSBzdXJlIHRoZSB3YWl0ZXJzIHNlZSB0aGUgbmV3IHdhaXRfaW5kZXggKi9cXG43Mzk0OlxcdFxcdCh2b2lkKWF0b21pY19mZXRjaF9pbmNfcmVsZWFzZShcXHUwMDI2aXRlci1cXHUwMDNld2FpdF9pbmRleCk7XFxuNzM5NTpcXHRcXG43Mzk2OlxcdFxcdHJpbmdfYnVmZmVyX3dha2Vfd2FpdGVycyhpdGVyLVxcdTAwM2VhcnJheV9idWZmZXItXFx1MDAzZWJ1ZmZlciwgaXRlci1cXHUwMDNlY3B1X2ZpbGUpO1xcbjczOTc6XFx0XFxuNzM5ODpcXHRcXHRyZXR1cm4gMDtcXG43Mzk5OlxcdH1cXG43NDAwOlxcdFxcbjc0MDE6XFx0LypcXG43NDAyOlxcdCAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSBWTUEgaXMgZHVwbGljYXRlZCAoZS5nLiwgb24gZm9yaygpKSB0byBpbmNyZW1lbnRcXG43NDAzOlxcdCAqIHRoZSB1c2VyX21hcHBlZCBjb3VudGVyIHdpdGhvdXQgcmVtYXBwaW5nIHBhZ2VzLlxcbjc0MDQ6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAwOjQwLjQ5Mzc3Nzk0OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMzE1NDIyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSaW5nIEJ1ZmZlciBSZWFkZXIgQWNxdWlzaXRpb24qKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGlzIHBhdGNoLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGUgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCBmdW5jdGlvbiB3aXRoaW4gYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYC4gSSBuZWVkIHRvIGVuc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UuXG5cbkl0J3Mgc3RyYWlnaHRmb3J3YXJkOyB0aGUgcHJpbWFyeSBtb2RpZmljYXRpb24gY2VudGVycyBhcm91bmQgdGhpcyBjb25kaXRpb25hbCBjaGVjazpcblxuYGBgY1xuXHRyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7XG4tXHRpZiAoV0FSTl9PTighcmVhZGVyKSlcbitcdGlmICghcmVhZGVyKVxuIFx0XHRnb3RvIG91dDtcbmBgYFxuXG5QcmV2aW91c2x5LCBgV0FSTl9PTmAgd2FzIHVzZWQuIE5vdyBpdCdzIGEgc2ltcGxlIGBpZmAgY29uZGl0aW9uLiBUaGUgYFdBUk5fT05gIG1hY3JvIHNlZW1zIGV4Y2Vzc2l2ZSBoZXJlLiBBIG51bGwgYHJlYWRlcmAgcG9pbnRlciBzdWdnZXN0cyBhIGZ1bmRhbWVudGFsIGlzc3VlLCBhbmQgYSBzaW1wbGUgY2hlY2sgYmVmb3JlIGNvbnRpbnVpbmcgaXMgYSBwZXJmZWN0bHkgcmVhc29uYWJsZSBhcHByb2FjaC4gSXQncyBhIG1hdHRlciBvZiBlbnN1cmluZyB3ZSBncmFjZWZ1bGx5IGhhbmRsZSB0aGUgc2NlbmFyaW8gd2hlcmUgYHJiX2dldF9yZWFkZXJfcGFnZWAgZmFpbHMgdG8gcmV0dXJuIGEgdmFsaWQgcmVhZGVyIHBhZ2UuIFRoaXMgY291bGQgYmUgZHVlIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlcyBvciBvdGhlciBsb3ctbGV2ZWwgcHJvYmxlbXMgd2l0aGluIHRoZSByaW5nIGJ1ZmZlciBpdHNlbGYuIFdlIGNoZWNrIGZvciBhIE5VTEwgYHJlYWRlcmAgcG9pbnRlciByZXR1cm5lZCBieSBgcmJfZ2V0X3JlYWRlcl9wYWdlYC4gVGhlIFwiZ290byBvdXRcIiBzdWdnZXN0cyB0aGF0IHdlIGhhbmRsZSBhIGBOVUxMYCBgcmVhZGVyYCBieSByZXR1cm5pbmcsIGxpa2VseSBwcm9wYWdhdGluZyBhbiBlcnJvciBjb2RlIHVwIHRoZSBjYWxsIHN0YWNrIHNvIHRoYXQgaXQgY2FuIGJlIGhhbmRsZWQgYXBwcm9wcmlhdGVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc2MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAwOjQzLjUyNTMyMTg5M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzc1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzk2MCxcbiAgXCJMaW5lQ291bnRcIjogNjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzk2MDpcXHR9XFxuNzk2MTpcXHRcXG43OTYyOlxcdGludCByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpXFxuNzk2MzpcXHR7XFxuNzk2NDpcXHRcXHRzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcjtcXG43OTY1OlxcdFxcdHN0cnVjdCBidWZmZXJfcGFnZSAqcmVhZGVyO1xcbjc5NjY6XFx0XFx0dW5zaWduZWQgbG9uZyBtaXNzZWRfZXZlbnRzO1xcbjc5Njc6XFx0XFx0dW5zaWduZWQgbG9uZyByZWFkZXJfc2l6ZTtcXG43OTY4OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuNzk2OTpcXHRcXG43OTcwOlxcdFxcdGNwdV9idWZmZXIgPSByYl9nZXRfbWFwcGVkX2J1ZmZlcihidWZmZXIsIGNwdSk7XFxuNzk3MTpcXHRcXHRpZiAoSVNfRVJSKGNwdV9idWZmZXIpKVxcbjc5NzI6XFx0XFx0XFx0cmV0dXJuIChpbnQpUFRSX0VSUihjcHVfYnVmZmVyKTtcXG43OTczOlxcdFxcbjc5NzQ6XFx0XFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfbG9jaywgZmxhZ3MpO1xcbjc5NzU6XFx0XFxuNzk3NjpcXHRjb25zdW1lOlxcbjc5Nzc6XFx0XFx0aWYgKHJiX3Blcl9jcHVfZW1wdHkoY3B1X2J1ZmZlcikpXFxuNzk3ODpcXHRcXHRcXHRnb3RvIG91dDtcXG43OTc5OlxcdFxcbjc5ODA6XFx0XFx0cmVhZGVyX3NpemUgPSByYl9wYWdlX3NpemUoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UpO1xcbjc5ODE6XFx0XFxuNzk4MjpcXHRcXHQvKlxcbjc5ODM6XFx0XFx0ICogVGhlcmUgYXJlIGRhdGEgdG8gYmUgcmVhZCBvbiB0aGUgY3VycmVudCByZWFkZXIgcGFnZSwgd2UgY2FuXFxuNzk4NDpcXHRcXHQgKiByZXR1cm4gdG8gdGhlIGNhbGxlci4gQnV0IGJlZm9yZSB0aGF0LCB3ZSBhc3N1bWUgdGhlIGxhdHRlciB3aWxsIHJlYWRcXG43OTg1OlxcdFxcdCAqIGV2ZXJ5dGhpbmcuIExldCdzIHVwZGF0ZSB0aGUga2VybmVsIHJlYWRlciBhY2NvcmRpbmdseS5cXG43OTg2OlxcdFxcdCAqL1xcbjc5ODc6XFx0XFx0aWYgKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlLVxcdTAwM2VyZWFkIFxcdTAwM2MgcmVhZGVyX3NpemUpIHtcXG43OTg4OlxcdFxcdFxcdHdoaWxlIChjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZS1cXHUwMDNlcmVhZCBcXHUwMDNjIHJlYWRlcl9zaXplKVxcbjc5ODk6XFx0XFx0XFx0XFx0cmJfYWR2YW5jZV9yZWFkZXIoY3B1X2J1ZmZlcik7XFxuNzk5MDpcXHRcXHRcXHRnb3RvIG91dDtcXG43OTkxOlxcdFxcdH1cXG43OTkyOlxcdFxcbjc5OTM6XFx0XFx0LyogRGlkIHRoZSByZWFkZXIgY2F0Y2ggdXAgd2l0aCB0aGUgd3JpdGVyPyAqL1xcbjc5OTQ6XFx0XFx0aWYgKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlID09IGNwdV9idWZmZXItXFx1MDAzZWNvbW1pdF9wYWdlKVxcbjc5OTU6XFx0XFx0XFx0Z290byBvdXQ7XFxuNzk5NjpcXHRcXG43OTk3OlxcdFxcdHJlYWRlciA9IHJiX2dldF9yZWFkZXJfcGFnZShjcHVfYnVmZmVyKTtcXG43OTk4OlxcdFxcdGlmICghcmVhZGVyKVxcbjc5OTk6XFx0XFx0XFx0Z290byBvdXQ7XFxuODAwMDpcXHRcXG44MDAxOlxcdFxcdC8qIENoZWNrIGlmIGFueSBldmVudHMgd2VyZSBkcm9wcGVkICovXFxuODAwMjpcXHRcXHRtaXNzZWRfZXZlbnRzID0gY3B1X2J1ZmZlci1cXHUwMDNlbG9zdF9ldmVudHM7XFxuODAwMzpcXHRcXG44MDA0OlxcdFxcdGlmIChtaXNzZWRfZXZlbnRzKSB7XFxuODAwNTpcXHRcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci1cXHUwMDNlY29tbWl0X3BhZ2UpIHtcXG44MDA2OlxcdFxcdFxcdFxcdHN0cnVjdCBidWZmZXJfZGF0YV9wYWdlICpkcGFnZSA9IHJlYWRlci1cXHUwMDNlcGFnZTtcXG44MDA3OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBjb21taXQ7XFxuODAwODpcXHRcXHRcXHRcXHQvKlxcbjgwMDk6XFx0XFx0XFx0XFx0ICogVXNlIHRoZSByZWFsX2VuZCBmb3IgdGhlIGRhdGEgc2l6ZSxcXG44MDEwOlxcdFxcdFxcdFxcdCAqIFRoaXMgZ2l2ZXMgdXMgYSBjaGFuY2UgdG8gc3RvcmUgdGhlIGxvc3QgZXZlbnRzXFxuODAxMTpcXHRcXHRcXHRcXHQgKiBvbiB0aGUgcGFnZS5cXG44MDEyOlxcdFxcdFxcdFxcdCAqL1xcbjgwMTM6XFx0XFx0XFx0XFx0aWYgKHJlYWRlci1cXHUwMDNlcmVhbF9lbmQpXFxuODAxNDpcXHRcXHRcXHRcXHRcXHRsb2NhbF9zZXQoXFx1MDAyNmRwYWdlLVxcdTAwM2Vjb21taXQsIHJlYWRlci1cXHUwMDNlcmVhbF9lbmQpO1xcbjgwMTU6XFx0XFx0XFx0XFx0LypcXG44MDE2OlxcdFxcdFxcdFxcdCAqIElmIHRoZXJlIGlzIHJvb20gYXQgdGhlIGVuZCBvZiB0aGUgcGFnZSB0byBzYXZlIHRoZVxcbjgwMTc6XFx0XFx0XFx0XFx0ICogbWlzc2VkIGV2ZW50cywgdGhlbiByZWNvcmQgaXQgdGhlcmUuXFxuODAxODpcXHRcXHRcXHRcXHQgKi9cXG44MDE5OlxcdFxcdFxcdFxcdGNvbW1pdCA9IHJiX3BhZ2Vfc2l6ZShyZWFkZXIpO1xcbjgwMjA6XFx0XFx0XFx0XFx0aWYgKHJiX3BhZ2VfY2FwYWNpdHkocmVhZGVyKSAtIGNvbW1pdCBcXHUwMDNlPSBzaXplb2YobWlzc2VkX2V2ZW50cykpIHtcXG44MDIxOlxcdFxcdFxcdFxcdFxcdG1lbWNweShcXHUwMDI2ZHBhZ2UtXFx1MDAzZWRhdGFbY29tbWl0XSwgXFx1MDAyNm1pc3NlZF9ldmVudHMsXFxuODAyMjpcXHRcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKG1pc3NlZF9ldmVudHMpKTtcXG44MDIzOlxcdFxcdFxcdFxcdFxcdGxvY2FsX2FkZChSQl9NSVNTRURfU1RPUkVELCBcXHUwMDI2ZHBhZ2UtXFx1MDAzZWNvbW1pdCk7XFxuODAyNDpcXHRcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAwOjQzLjUyNTY2MTczM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjE3MzU1MDYyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBGdXp6aW5nIEFwcGxpY2FiaWxpdHkgb2YgdGhlIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgTW9kaWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNoYW5nZSB0byBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgIG1lcml0cyBmdXp6aW5nIGJhc2VkIG9uIHRob3NlIHN0cmljdCBjcml0ZXJpYS4gSXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBpcyBhY2Nlc3NlZCB0aHJvdWdoIGB0cmFjaW5nX2J1ZmZlcnNfaW9jdGxgIGFuZCBleHBvc2VkIHRocm91Z2ggYHRyYWNlZnMvZnRyYWNlYCByaW5nIGJ1ZmZlciBmaWxlcy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuRmlyc3QsIHRoZSBjb3JlIHByaW5jaXBsZTogKnJlYWNoYWJpbGl0eSouIENhbiB0aGlzIGNvZGUgYWN0dWFsbHkgKnJ1biogaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gWWVzLCBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGB0cmFjZWZzL2Z0cmFjZWAgaW50ZXJmYWNlLiBJIHRoaW5rIHdlIGFyZSBnb29kIHRoZXJlLlxuXG5Ob3cgZm9yIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBmcm9tIFNlY3Rpb24gMi4gSXMgdGhpczpcblxuKiAgIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlPyBObywgaXQncyBrZXJuZWwgY29kZS5cbiogICBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU/IE5vLCB0aGlzIGludGVyZmFjZXMgd2l0aCByaW5nIGJ1ZmZlci5cbiogICBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM/IEFsc28gbm8sIGlmIGl0IGlzIHJlYWNoYWJsZSB2aWEgaW9jdGwgY2FsbHMuXG5cbk9rYXksIHRoYXQncyBlbmNvdXJhZ2luZy4gTGV0J3MgbW92ZSB0byB0aGUgKnBvc2l0aXZlKiBjcml0ZXJpYSBpbiBTZWN0aW9uIDMuIERvZXMgaXQgdG91Y2ggYW55IG9mIHRob3NlIHNwZWNpZmljIGFyZWFzP1xuXG5UaGUgY2hhbmdlIHRvIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpYCBpbnZvbHZlcyBhbiAqYWx0ZXJhdGlvbiogb2YgYW4gYXNzZXJ0aW9uLCBzcGVjaWZpY2FsbHkgYSBgV0FSTl9PTmAgY2hlY2suIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBgV0FSTl9PTighcmVhZGVyKWAsIGJ1dCB0aGlzIHdhcyByZW1vdmVkIHRvIGp1c3QgYCFyZWFkZXJgLiBUaGlzIGFsdGVyYXRpb24gZGlyZWN0bHkgcmVsYXRlcyB0byAqUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzKiB3aXRoaW4gcmVhY2hhYmxlIGNvZGUuIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIHRoZSBgcmJfZ2V0X3JlYWRlcl9wYWdlKClgIGZ1bmN0aW9uIGNhbiByZXR1cm4gYSBOVUxMIHZhbHVlIGZvciBsZWdpdGltYXRlIHJlYXNvbnMgKGUuZy4sIG5vdGhpbmcgdG8gcmVhZCBvciBjb25jdXJyZW50IHN3YXApLlxuXG5UaGlzICphcHBlYXJzKiB0byBiZSBhIGNsZWFyIGNhc2UgZm9yIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdyB0byBkb3VibGUtY2hlY2s6IEkgc2hvdWxkIGNoZWNrIHRvIHNlZSB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyB0byBiZSBzdXJlLiBJJ2xsIG5lZWQgdG8gc2VhcmNoIHRoZSBga2VybmVsL3RyYWNlL0tjb25maWdgIGFuZCBga2VybmVsL3RyYWNlL01ha2VmaWxlYCBmaWxlcyBmb3IgYENPTkZJR19SSU5HX0JVRkZFUmAsIGBDT05GSUdfVFJBQ0lOR2AsIGBDT05GSUdfRlRSQUNFYCwgb3IgYW55IHJpbmcgYnVmZmVyIHJlbGF0ZWQgb3B0aW9ucywganVzdCB0byBjb25maXJtIHRoZSBwYXRoIHRocm91Z2ggdGhlIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyOTksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTowMDo1NS42OTkyMTUyNzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NzM2ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJpbmdfYnVmZmVyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9NYWtlZmlsZT02Mz1vYmotJChDT05GSUdfRlVOQ1RJT05fVFJBQ0VSKSArPSBsaWJmdHJhY2Uub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfUklOR19CVUZGRVIpICs9IHJpbmdfYnVmZmVyLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSykgKz0gcmluZ19idWZmZXJfYmVuY2htYXJrLm9cXG4tLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xMzM9b2JqLSQoQ09ORklHX1RSQUNFX1JFTU9URSkgKz0gdHJhY2VfcmVtb3RlLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTM0Om9iai0kKENPTkZJR19TSU1QTEVfUklOR19CVUZGRVIpICs9IHNpbXBsZV9yaW5nX2J1ZmZlci5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTEzNS1vYmotJChDT05GSUdfVFJBQ0VfUkVNT1RFX1RFU1QpICs9IHJlbW90ZV90ZXN0Lm9cXG4tLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xNjE9JChvYmopLyUuby5jaGVja2VkOiAkKG9iaikvJS5vICQob2JqKS91bmRlZnN5bXNfYmFzZS5vIEZPUkNFXFxuLS1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTYzLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxNjQ6YWx3YXlzLSQoQ09ORklHX1NJTVBMRV9SSU5HX0JVRkZFUikgKz0gc2ltcGxlX3JpbmdfYnVmZmVyLm8uY2hlY2tlZFxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xNjUtXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYz0xMTE3PV9fcG9sbF90IHJpbmdfYnVmZmVyX3BvbGxfd2FpdChzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUsXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy0xMTc5LVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjExODA6LyogYnVmZmVyIG1heSBiZSBlaXRoZXIgcmluZ19idWZmZXIgb3IgcmluZ19idWZmZXJfcGVyX2NwdSAqL1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTExODEtI2RlZmluZSBSQl9XQVJOX09OKGIsIGNvbmQpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM9NTQxND1FWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9yZWNvcmRfZW5hYmxlX2NwdSk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDE2LS8qKlxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU0MTc6ICogcmluZ19idWZmZXJfb2xkZXN0X2V2ZW50X3RzIC0gZ2V0IHRoZSBvbGRlc3QgZXZlbnQgdGltZXN0YW1wIGZyb20gdGhlIGJ1ZmZlclxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU0MTgtICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDIwLSAqL1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU0MjE6dTY0IHJpbmdfYnVmZmVyX29sZGVzdF9ldmVudF90cyhzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQyMi17XFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDQ2LX1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NDQ3OkVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX29sZGVzdF9ldmVudF90cyk7XFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQ0OC1cXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTU0ODU9RVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfZW50cmllc19jcHUpO1xcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQ4Ny0vKipcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NDg4OiAqIHJpbmdfYnVmZmVyX292ZXJydW5fY3B1IC0gZ2V0IHRoZSBudW1iZXIgb2Ygb3ZlcnJ1bnMgY2F1c2VkIGJ5IHRoZSByaW5nXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQ4OS0gKiBidWZmZXIgd3JhcHBpbmcgYXJvdW5kIChvbmx5IGlmIFJCX0ZMX09WRVJXUklURSBpcyBvbikuXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDkyLSAqL1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU0OTM6dW5zaWduZWQgbG9uZyByaW5nX2J1ZmZlcl9vdmVycnVuX2NwdShzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQ5NC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NTA1LX1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NTA2OkVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX292ZXJydW5fY3B1KTtcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NTA3LVxcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM9NTU5Mj1FWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9lbnRyaWVzKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU1OTQtLyoqXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTU5NTogKiByaW5nX2J1ZmZlcl9vdmVycnVucyAtIGdldCB0aGUgbnVtYmVyIG9mIG92ZXJydW5zIGluIGJ1ZmZlclxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU1OTYtICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NjAwLSAqL1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU2MDE6dW5zaWduZWQgbG9uZyByaW5nX2J1ZmZlcl9vdmVycnVucyhzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIpXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTYwMi17XFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NjE0LX1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NjE1OkVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX292ZXJydW5zKTtcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NjE2LVxcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyX2JlbmNobWFyay5jPTIzMj1zdGF0aWMgdm9pZCByaW5nX2J1ZmZlcl9wcm9kdWNlcih2b2lkKVxcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyX2JlbmNobWFyay5jLTMwMS1cXHRlbnRyaWVzID0gcmluZ19idWZmZXJfZW50cmllcyhidWZmZXIpO1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlcl9iZW5jaG1hcmsuYzozMDI6XFx0b3ZlcnJ1bnMgPSByaW5nX2J1ZmZlcl9vdmVycnVucyhidWZmZXIpO1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlcl9iZW5jaG1hcmsuYy0zMDMtXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYz0yODIyPWdldF90b3RhbF9lbnRyaWVzX2NwdShzdHJ1Y3QgYXJyYXlfYnVmZmVyICpidWYsIHVuc2lnbmVkIGxvbmcgKnRvdGFsLFxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtMjgzOC1cXHRcXHQqdG90YWwgPSBjb3VudCArXFxua2VybmVsL3RyYWNlL3RyYWNlLmM6MjgzOTpcXHRcXHRcXHRyaW5nX2J1ZmZlcl9vdmVycnVuX2NwdShidWYtXFx1MDAzZWJ1ZmZlciwgY3B1KTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy0yODQwLVxcdCplbnRyaWVzID0gY291bnQ7XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYz0zMzY3PV9fdHJhY2luZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCBib29sIHNuYXBzaG90KVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtMzQzMC1cXHQvKiBBbm5vdGF0ZSBzdGFydCBvZiBidWZmZXJzIGlmIHdlIGhhZCBvdmVycnVucyAqL1xcbmtlcm5lbC90cmFjZS90cmFjZS5jOjM0MzE6XFx0aWYgKHJpbmdfYnVmZmVyX292ZXJydW5zKGl0ZXItXFx1MDAzZWFycmF5X2J1ZmZlci1cXHUwMDNlYnVmZmVyKSlcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy0zNDMyLVxcdFxcdGl0ZXItXFx1MDAzZWl0ZXJfZmxhZ3MgfD0gVFJBQ0VfRklMRV9BTk5PVEFURTtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jPTc0NzI9dHJhY2luZ19zdGF0c19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1ZixcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jLTc0OTItXFxua2VybmVsL3RyYWNlL3RyYWNlLmM6NzQ5MzpcXHRjbnQgPSByaW5nX2J1ZmZlcl9vdmVycnVuX2NwdSh0cmFjZV9idWYtXFx1MDAzZWJ1ZmZlciwgY3B1KTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDk0LVxcdHRyYWNlX3NlcV9wcmludGYocywgXFxcIm92ZXJydW46ICVsZFxcXFxuXFxcIiwgY250KTtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jLTc1MDMtXFx0XFx0LyogbG9jYWwgb3IgZ2xvYmFsIGZvciB0cmFjZV9jbG9jayAqL1xcbmtlcm5lbC90cmFjZS90cmFjZS5jOjc1MDQ6XFx0XFx0dCA9IG5zMnVzZWNzKHJpbmdfYnVmZmVyX29sZGVzdF9ldmVudF90cyh0cmFjZV9idWYtXFx1MDAzZWJ1ZmZlciwgY3B1KSk7XFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzUwNS1cXHRcXHR1c2VjX3JlbSA9IGRvX2Rpdih0LCBVU0VDX1BFUl9TRUMpO1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzUxNC1cXHRcXHR0cmFjZV9zZXFfcHJpbnRmKHMsIFxcXCJvbGRlc3QgZXZlbnQgdHM6ICVsbHVcXFxcblxcXCIsXFxua2VybmVsL3RyYWNlL3RyYWNlLmM6NzUxNTpcXHRcXHRcXHRcXHRyaW5nX2J1ZmZlcl9vbGRlc3RfZXZlbnRfdHModHJhY2VfYnVmLVxcdTAwM2VidWZmZXIsIGNwdSkpO1xcbmtlcm5lbC90cmFjZS90cmFjZS5jLTc1MTYtXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYz05Mzc4PXN0YXRpYyB2b2lkIHRyYWNlX2luaXRfaXRlcihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy05Mzg4LVxcdC8qIEFubm90YXRlIHN0YXJ0IG9mIGJ1ZmZlcnMgaWYgd2UgaGFkIG92ZXJydW5zICovXFxua2VybmVsL3RyYWNlL3RyYWNlLmM6OTM4OTpcXHRpZiAocmluZ19idWZmZXJfb3ZlcnJ1bnMoaXRlci1cXHUwMDNlYXJyYXlfYnVmZmVyLVxcdTAwM2VidWZmZXIpKVxcbmtlcm5lbC90cmFjZS90cmFjZS5jLTkzOTAtXFx0XFx0aXRlci1cXHUwMDNlaXRlcl9mbGFncyB8PSBUUkFDRV9GSUxFX0FOTk9UQVRFO1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX21taW90cmFjZS5jPTEyMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9vdmVycnVucyhzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfbW1pb3RyYWNlLmMtMTIyLVxcdHVuc2lnbmVkIGxvbmcgY250ID0gYXRvbWljX3hjaGcoXFx1MDAyNmRyb3BwZWRfY291bnQsIDApO1xcbmtlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYzoxMjM6XFx0dW5zaWduZWQgbG9uZyBvdmVyID0gcmluZ19idWZmZXJfb3ZlcnJ1bnMoaXRlci1cXHUwMDNlYXJyYXlfYnVmZmVyLVxcdTAwM2VidWZmZXIpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYy0xMjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAwOjU1Ljc1ODk1NzYwNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjE4NjgzMjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgdGhlIEtlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgYSBmZXcga2V5IHRyYWNpbmcgb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUuLi4gdGhlIG1vc3Qgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyBga2VybmVsL3RyYWNlL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGUgcmluZyBidWZmZXIgaW1wbGVtZW50YXRpb24gYW5kIHRoZSBjb3JlIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGVuc3VyaW5nIHRoYXQgYFJJTkdfQlVGRkVSYCBhbmQgYFRSQUNJTkdgIGFyZSBib3RoIGVuYWJsZWQsIG9yIGF0IGxlYXN0IGNvbmZpZ3VyZWQgaW4gYSB3YXkgdGhhdCBhbGxvd3MgdGhlbSB0byBiZSBwcm9wZXJseSB1dGlsaXplZCwgb3IgYXQgbGVhc3Qgbm90IGluYWR2ZXJ0ZW50bHkgZGlzYWJsZWQsIHNpbmNlIHRoYXQgd291bGQgYmUgYSB2ZXJ5IGZydXN0cmF0aW5nIG92ZXJzaWdodC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlaXIgc3RhdHVzIGFuZCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFsIHNldHRpbmdzIHRvIGVuc3VyZSB0aGUgZnVuY3Rpb25hbGl0eSBJIGV4cGVjdCBpcyBwcmVzZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM5MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAwOjU3LjM3NzY0Mzg0N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwMTA5ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJJTkdfQlVGRkVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz0xNDE9Y29uZmlnIFRSQUNFX0NMT0NLXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xNDMtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTQ0OmNvbmZpZyBSSU5HX0JVRkZFUlxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTE0NS1cXHRib29sXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xNTQ9Y29uZmlnIENPTlRFWFRfU1dJVENIX1RSQUNFUlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTU2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjE1Nzpjb25maWcgUklOR19CVUZGRVJfQUxMT1dfU1dBUFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTE1OC1cXHRib29sXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz05ODc9Y29uZmlnIFRSQUNFUE9JTlRfQkVOQ0hNQVJLXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDE2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwMTc6Y29uZmlnIFJJTkdfQlVGRkVSX0JFTkNITUFSS1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwMTgtXFx0dHJpc3RhdGUgXFxcIlJpbmcgYnVmZmVyIGJlbmNobWFyayBzdHJlc3MgdGVzdGVyXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9MTA4Nj1jb25maWcgRlRSQUNFX1ZBTElEQVRFX1JDVV9JU19XQVRDSElOR1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA5OC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDk5OmNvbmZpZyBSSU5HX0JVRkZFUl9SRUNPUkRfUkVDVVJTSU9OXFxua2VybmVsL3RyYWNlL0tjb25maWctMTEwMC1cXHRib29sIFxcXCJSZWNvcmQgZnVuY3Rpb25zIHRoYXQgcmVjdXJzZSBpbiB0aGUgcmluZyBidWZmZXJcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTYwPWNvbmZpZyBGVFJBQ0VfU09SVF9TVEFSVFVQX1RFU1RcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExNzMtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTE3NDpjb25maWcgUklOR19CVUZGRVJfU1RBUlRVUF9URVNUXFxua2VybmVsL3RyYWNlL0tjb25maWctMTE3NS0gICAgICAgYm9vbCBcXFwiUmluZyBidWZmZXIgc3RhcnR1cCBzZWxmIHRlc3RcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTk2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjExOTc6Y29uZmlnIFJJTkdfQlVGRkVSX1ZBTElEQVRFX1RJTUVfREVMVEFTXFxua2VybmVsL3RyYWNlL0tjb25maWctMTE5OC1cXHRib29sIFxcXCJWZXJpZnkgcmluZyBidWZmZXIgdGltZSBzdGFtcCBkZWx0YXNcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMjE2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjEyMTc6Y29uZmlnIFJJTkdfQlVGRkVSX1BFUlNJU1RFTlRfSU5KRUNUXFxua2VybmVsL3RyYWNlL0tjb25maWctMTIxOC1cXHRib29sIFxcXCJFbmFibGUgcGVyc2lzdGVudCByaW5nIGJ1ZmZlciBlcnJvciBpbmplY3Rpb24gdGVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDA6NTcuNDI3NjYxMDE5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMjUwMTM3NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIGBSSU5HX0JVRkZFUmAgYW5kIGBUUkFDSU5HYCBpbiBga2VybmVsL3RyYWNlL0tjb25maWdgOlxuXG4qKkludmVzdGlnYXRpbmcgS2VybmVsIFRyYWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYFJJTkdfQlVGRkVSYCBhbmQgYFRSQUNJTkdgIHdpdGhpbiB0aGUga2VybmVsJ3MgdHJhY2luZyBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgaW5zaWRlIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlIGl0c2VsZi4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgcmVsYXRpb25zaGlwcyB0aGV5J3ZlIGRlZmluZWQgd2l0aCBvdGhlciBrZXJuZWwgZmVhdHVyZXMuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGVzZSBzZXR0aW5ncyB3aWxsIGRldGVybWluZSB3aGV0aGVyIHRoZSBrZXJuZWwncyB0cmFjaW5nIGluZnJhc3RydWN0dXJlIGxldmVyYWdlcyBhIHJpbmcgYnVmZmVyIGZvciBkYXRhIHN0b3JhZ2UsIGFuZCBob3cgdGhlIG92ZXJhbGwgdHJhY2luZyBzeXN0ZW0gaXMgZW5hYmxlZC4gSSdtIGV4cGVjdGluZyBgVFJBQ0lOR2AgdG8gYmUgYSBicm9hZGVyIGVuYWJsaW5nIG9wdGlvbiwgcG9zc2libHkgd2l0aCBgUklOR19CVUZGRVJgIGFzIGEgc3VwcG9ydGluZyBkZXRhaWwgd2l0aGluIHRoYXQgbW9yZSBjb21wcmVoZW5zaXZlIGZlYXR1cmUgc2V0LiBLbm93aW5nIHRoaXMgaW50ZXJwbGF5IGlzIGVzc2VudGlhbCBmb3IgY3VzdG9taXppbmcgdGhlIHRyYWNpbmcgc2V0dXAgZm9yIHNwZWNpZmljIHBlcmZvcm1hbmNlIG9yIGRlYnVnZ2luZyBuZWVkcy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0aGUgS2NvbmZpZyBhY3R1YWxseSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEzMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAxOjAwLjQ1MjY3ODE5NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTMwOlxcdGNvbmZpZyBCVUlMRFRJTUVfTUNPVU5UX1NPUlRcXG4gMTMxOlxcdCAgICAgICBib29sXFxuIDEzMjpcXHQgICAgICAgZGVmYXVsdCB5XFxuIDEzMzpcXHQgICAgICAgZGVwZW5kcyBvbiBIQVZFX0JVSUxEVElNRV9NQ09VTlRfU09SVCBcXHUwMDI2XFx1MDAyNiBEWU5BTUlDX0ZUUkFDRVxcbiAxMzQ6XFx0ICAgICAgIGhlbHBcXG4gMTM1OlxcdCAgICAgICAgIFNvcnQgdGhlIG1jb3VudF9sb2Mgc2VjdGlvbiBhdCBidWlsZCB0aW1lLlxcbiAxMzY6XFx0XFxuIDEzNzpcXHRjb25maWcgVFJBQ0VSX01BWF9UUkFDRVxcbiAxMzg6XFx0XFx0Ym9vbFxcbiAxMzk6XFx0XFx0c2VsZWN0IFRSQUNFUl9TTkFQU0hPVFxcbiAxNDA6XFx0XFxuIDE0MTpcXHRjb25maWcgVFJBQ0VfQ0xPQ0tcXG4gMTQyOlxcdFxcdGJvb2xcXG4gMTQzOlxcdFxcbiAxNDQ6XFx0Y29uZmlnIFJJTkdfQlVGRkVSXFxuIDE0NTpcXHRcXHRib29sXFxuIDE0NjpcXHRcXHRzZWxlY3QgVFJBQ0VfQ0xPQ0tcXG4gMTQ3OlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAxNDg6XFx0XFxuIDE0OTpcXHRjb25maWcgRVZFTlRfVFJBQ0lOR1xcbiAxNTA6XFx0XFx0c2VsZWN0IENPTlRFWFRfU1dJVENIX1RSQUNFUlxcbiAxNTE6XFx0XFx0c2VsZWN0IEdMT0JcXG4gMTUyOlxcdFxcdGJvb2xcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0Y29uZmlnIENPTlRFWFRfU1dJVENIX1RSQUNFUlxcbiAxNTU6XFx0XFx0Ym9vbFxcbiAxNTY6XFx0XFxuIDE1NzpcXHRjb25maWcgUklOR19CVUZGRVJfQUxMT1dfU1dBUFxcbiAxNTg6XFx0XFx0Ym9vbFxcbiAxNTk6XFx0XFx0aGVscFxcbiAxNjA6XFx0XFx0IEFsbG93IHRoZSB1c2Ugb2YgcmluZ19idWZmZXJfc3dhcF9jcHUuXFxuIDE2MTpcXHRcXHQgQWRkcyBhIHZlcnkgc2xpZ2h0IG92ZXJoZWFkIHRvIHRyYWNpbmcgd2hlbiBlbmFibGVkLlxcbiAxNjI6XFx0XFxuIDE2MzpcXHRjb25maWcgUFJFRU1QVElSUV9UUkFDRVBPSU5UU1xcbiAxNjQ6XFx0XFx0Ym9vbFxcbiAxNjU6XFx0XFx0ZGVwZW5kcyBvbiBUUkFDRV9QUkVFTVBUX1RPR0dMRSB8fCBUUkFDRV9JUlFGTEFHU1xcbiAxNjY6XFx0XFx0c2VsZWN0IFRSQUNJTkdcXG4gMTY3OlxcdFxcdGRlZmF1bHQgeVxcbiAxNjg6XFx0XFx0aGVscFxcbiAxNjk6XFx0XFx0ICBDcmVhdGUgcHJlZW1wdC9pcnEgdG9nZ2xlIHRyYWNlcG9pbnRzIGlmIG5lZWRlZCwgc28gdGhhdCBvdGhlciBwYXJ0c1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTowMTowMC40NTI3ODM4MjRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2NTc2NzIyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBSSU5HX0JVRkZFUmAgYW5kIGBUUkFDSU5HYCBDb2RlIFBhdGhzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCdzIHRoZSBjb2RlIHRoYXQncyBzZWxlY3Rpbmcgb3IgZW5hYmxpbmcgKmJvdGgqIGBSSU5HX0JVRkZFUmAgYW5kIGBUUkFDSU5HYD9cIiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgcHJvamVjdCwgemVyb2luZyBpbiBvbiBhbnkgY29uZGl0aW9uYWwgbG9naWMsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIG9yIGJ1aWxkIHNjcmlwdHMgdGhhdCBtaWdodCBiZSByZXNwb25zaWJsZSBmb3IgdGhpcyBjb3VwbGluZy4gSSdtIGxvb2tpbmcgZm9yIHRoZSByb290IGNhdXNlLCB0aGUgdHJpZ2dlciB0aGF0J3MgbGVhZGluZyB0aGVzZSB0d28gZmVhdHVyZXMgdG8gYmUgYWN0aXZhdGVkIHRvZ2V0aGVyLiBJcyBpdCBhbiBpbnRlbmRlZCBmZWF0dXJlIGludGVyYWN0aW9uPyBBIGJ1Zz8gQSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXkncmUgbGlua2VkIGluIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVyZSBhcmUgYSBmZXcgbGlrZWx5IGFyZWFzIEknbGwgbmVlZCB0byBjaGVjayBmaXJzdCwgYnV0IEkgbmVlZCB0byBzdGFydCBzb21ld2hlcmUuIEknbGwgbmVlZCB0byBsb29rIGF0IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBLY29uZmlnIHNldHRpbmdzLCBhbmQgYW55IGN1c3RvbSBidWlsZCBzeXN0ZW1zIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBwaW5wb2ludCB0aGUgbWVjaGFuaXNtIHRoYXQgY29udHJvbHMgdGhpcyBkdWFsIGFjdGl2YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODc3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTowMTowMi44MTg1NTMxNTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NDI2NDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBSSU5HX0JVRkZFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9MTc5PWNvbmZpZyBUUkFDSU5HXFxua2VybmVsL3RyYWNlL0tjb25maWctMTgwLVxcdGJvb2xcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxODE6XFx0c2VsZWN0IFJJTkdfQlVGRkVSXFxua2VybmVsL3RyYWNlL0tjb25maWctMTgyLVxcdHNlbGVjdCBTVEFDS1RSQUNFIGlmIFNUQUNLVFJBQ0VfU1VQUE9SVFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9NDIxPWNvbmZpZyBJUlFTT0ZGX1RSQUNFUlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctNDI3LVxcdHNlbGVjdCBUUkFDRVJfTUFYX1RSQUNFXFxua2VybmVsL3RyYWNlL0tjb25maWc6NDI4OlxcdHNlbGVjdCBSSU5HX0JVRkZFUl9BTExPV19TV0FQXFxua2VybmVsL3RyYWNlL0tjb25maWctNDI5LVxcdHNlbGVjdCBUUkFDRVJfU05BUFNIT1RfUEVSX0NQVV9TV0FQXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz00NDQ9Y29uZmlnIFBSRUVNUFRfVFJBQ0VSXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy00NDktXFx0c2VsZWN0IFRSQUNFUl9NQVhfVFJBQ0VcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo0NTA6XFx0c2VsZWN0IFJJTkdfQlVGRkVSX0FMTE9XX1NXQVBcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy00NTEtXFx0c2VsZWN0IFRSQUNFUl9TTkFQU0hPVF9QRVJfQ1BVX1NXQVBcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTYzMT1jb25maWcgVFJBQ0VSX1NOQVBTSE9UX1BFUl9DUFVfU1dBUFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctNjMzLVxcdGRlcGVuZHMgb24gVFJBQ0VSX1NOQVBTSE9UXFxua2VybmVsL3RyYWNlL0tjb25maWc6NjM0OlxcdHNlbGVjdCBSSU5HX0JVRkZFUl9BTExPV19TV0FQXFxua2VybmVsL3RyYWNlL0tjb25maWctNjM1LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDE6MDIuODczOTgzODY2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NDE4MzIxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBrZXJuZWwgdHJhY2luZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gbG9vayBhdCBgQ09ORklHX0ZUUkFDRWAsIGBDT05GSUdfVFJBQ0lOR2AsIGFuZCBgQ09ORklHX1JJTkdfQlVGRkVSYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBwcmltYXJ5IHN1c3BlY3RzLiBOb3csIHRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gZGVsdmUgaW50byB0aGUgYGtlcm5lbC90cmFjZS9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSB1c2VyLWZhY2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0cmFjaW5nIGFyZSB1c3VhbGx5IGRlZmluZWQuIEknbSBzZWFyY2hpbmcgZm9yIHRoZSBzcGVjaWZpYyB1c2VyLXZpc2libGUgY29uZmlnIHRoYXQgaW4gdHVybiBlbmFibGVzIHRoZSBicm9hZCBmdW5jdGlvbmFsaXR5IHRoYXQgXCJUUkFDSU5HXCIgcmVwcmVzZW50cywgYW5kIGl0IHNob3VsZCBiZSBpbiB0aGlzIEtjb25maWcgZmlsZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBrZXkgdG8gdW5sb2NrIHRoZSB0cmFjaW5nIGZ1bmN0aW9uYWxpdHkgSSdtIGludGVyZXN0ZWQgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTAzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDE6MDUuNTE1ODE3OTQzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTYzNzUxNDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVFJBQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTE5OD1jb25maWcgVFJBQ0lOR19TVVBQT1JUXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yMDMtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MjA0Om1lbnVjb25maWcgRlRSQUNFXFxua2VybmVsL3RyYWNlL0tjb25maWctMjA1LVxcdGJvb2wgXFxcIlRyYWNlcnNcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz01ODg9Y29uZmlnIEVOQUJMRV9ERUZBVUxUX1RSQUNFUlNcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTU5Ni1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo1OTc6Y29uZmlnIEZUUkFDRV9TWVNDQUxMU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTU5OC1cXHRib29sIFxcXCJUcmFjZSBzeXNjYWxsc1xcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTg4MD1jb25maWcgQlBGX0tQUk9CRV9PVkVSUklERVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODg4LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg4OTpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfUEFUQ0hBQkxFX0ZVTkNUSU9OX0VOVFJZXFxua2VybmVsL3RyYWNlL0tjb25maWctODkwLVxcdGJvb2xcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg5Mi1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4OTM6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX0NDXFxua2VybmVsL3RyYWNlL0tjb25maWctODk0LVxcdGRlZl9ib29sIHlcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg5OC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4OTk6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX09CSlRPT0xcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy05MDAtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctOTA2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjkwNzpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfUkVDT1JETUNPVU5UXFxua2VybmVsL3RyYWNlL0tjb25maWctOTA4LVxcdGRlZl9ib29sIHlcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTEwMzM9Y29uZmlnIFRSQUNFX0VWQUxfTUFQX0ZJTEVcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNjAtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTA2MTpjb25maWcgRlRSQUNFX1JFQ09SRF9SRUNVUlNJT05cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDYyLVxcdGJvb2wgXFxcIlJlY29yZCBmdW5jdGlvbnMgdGhhdCByZWN1cnNlIGluIGZ1bmN0aW9uIHRyYWNpbmdcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDc0LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwNzU6Y29uZmlnIEZUUkFDRV9SRUNPUkRfUkVDVVJTSU9OX1NJWkVcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDc2LVxcdGludCBcXFwiTWF4IG51bWJlciBvZiByZWN1cnNlZCBmdW5jdGlvbnMgdG8gcmVjb3JkXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA4NS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDg2OmNvbmZpZyBGVFJBQ0VfVkFMSURBVEVfUkNVX0lTX1dBVENISU5HXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA4Ny1cXHRib29sIFxcXCJWYWxpZGF0ZSBSQ1UgaXMgb24gZHVyaW5nIGZ0cmFjZSBleGVjdXRpb25cXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTEzPWNvbmZpZyBHQ09WX1BST0ZJTEVfRlRSQUNFXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTI0LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjExMjU6Y29uZmlnIEZUUkFDRV9TRUxGVEVTVFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMjYtXFx0Ym9vbFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMjctXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTEyODpjb25maWcgRlRSQUNFX1NUQVJUVVBfVEVTVFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMjktXFx0Ym9vbCBcXFwiUGVyZm9ybSBhIHN0YXJ0dXAgdGVzdCBvbiBmdHJhY2VcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTQ4PWNvbmZpZyBFVkVOVF9UUkFDRV9URVNUX1NZU0NBTExTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTU5LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjExNjA6Y29uZmlnIEZUUkFDRV9TT1JUX1NUQVJUVVBfVEVTVFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExNjEtICAgICAgIGJvb2wgXFxcIlZlcmlmeSBjb21waWxlIHRpbWUgc29ydGluZyBvZiBmdHJhY2UgZnVuY3Rpb25zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTowMTowNi42Nzk1NzM4MTdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTYwNzk3MTQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqVHJhY2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbnM6IEEgUXVpY2sgTG9vayoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGUgYGZ0cmFjZWAgb3B0aW9uIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc2VlLi4uSSdsbCBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIHNvIEknbSB0aGlua2luZyBJJ2xsIHdhbnQgdG8gY2hlY2sgYG1lbnVjb25maWcgRlRSQUNFYCBpbiB0aGUgYGtlcm5lbC90cmFjZS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIG1vc3QgZGlyZWN0IHJvdXRlIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdHMgcmVsYXRlZCB0byBgZnRyYWNlYC4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgZ2V0IG1lIGEgY2xlYXIgdmlldyBvZiB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGZlYXR1cmVzLiBJJ20gYWZ0ZXIgYSBxdWljaywgZm9jdXNlZCBvdmVydmlldy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTowMTowOC4yODc1NDc3NDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMDpcXHRcXHRkZXBlbmRzIG9uIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlRcXG4gMjAxOlxcdFxcdGRlcGVuZHMgb24gU1RBQ0tUUkFDRV9TVVBQT1JUXFxuIDIwMjpcXHRcXHRkZWZhdWx0IHlcXG4gMjAzOlxcdFxcbiAyMDQ6XFx0bWVudWNvbmZpZyBGVFJBQ0VcXG4gMjA1OlxcdFxcdGJvb2wgXFxcIlRyYWNlcnNcXFwiXFxuIDIwNjpcXHRcXHRkZXBlbmRzIG9uIFRSQUNJTkdfU1VQUE9SVFxcbiAyMDc6XFx0XFx0ZGVmYXVsdCB5IGlmIERFQlVHX0tFUk5FTFxcbiAyMDg6XFx0XFx0aGVscFxcbiAyMDk6XFx0XFx0ICBFbmFibGUgdGhlIGtlcm5lbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxcbiAyMTA6XFx0XFxuIDIxMTpcXHRpZiBGVFJBQ0VcXG4gMjEyOlxcdFxcbiAyMTM6XFx0Y29uZmlnIFRSQUNFRlNfQVVUT01PVU5UX0RFUFJFQ0FURURcXG4gMjE0OlxcdFxcdGJvb2wgXFxcIkF1dG9tb3VudCB0cmFjZWZzIG9uIGRlYnVnZnMgW0RFUFJFQ0FURURdXFxcIlxcbiAyMTU6XFx0XFx0ZGVwZW5kcyBvbiBUUkFDSU5HXFxuIDIxNjpcXHRcXHRkZWZhdWx0IHlcXG4gMjE3OlxcdFxcdGhlbHBcXG4gMjE4OlxcdFxcdCAgVGhlIHRyYWNpbmcgaW50ZXJmYWNlIHdhcyBtb3ZlZCBmcm9tIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmdcXG4gMjE5OlxcdFxcdCAgdG8gL3N5cy9rZXJuZWwvdHJhY2luZyBpbiAyMDE1LCBidXQgdGhlIHRyYWNpbmcgZmlsZSBzeXN0ZW1cXG4gMjIwOlxcdFxcdCAgd2FzIHN0aWxsIGF1dG9tb3VudGVkIGluIC9zeXMva2VybmVsL2RlYnVnIGZvciBiYWNrd2FyZFxcbiAyMjE6XFx0XFx0ICBjb21wYXRpYmlsaXR5IHdpdGggdG9vbGluZy5cXG4gMjIyOlxcdFxcbiAyMjM6XFx0XFx0ICBUaGUgbmV3IGludGVyZmFjZSBoYXMgYmVlbiBhcm91bmQgZm9yIG1vcmUgdGhhbiAxMCB5ZWFycyBhbmRcXG4gMjI0OlxcdFxcdCAgdGhlIG9sZCBkZWJ1ZyBtb3VudCB3aWxsIHNvb24gYmUgcmVtb3ZlZC5cXG4gMjI1OlxcdFxcbiAyMjY6XFx0Y29uZmlnIEJPT1RUSU1FX1RSQUNJTkdcXG4gMjI3OlxcdFxcdGJvb2wgXFxcIkJvb3QtdGltZSBUcmFjaW5nIHN1cHBvcnRcXFwiXFxuIDIyODpcXHRcXHRkZXBlbmRzIG9uIFRSQUNJTkdcXG4gMjI5OlxcdFxcdHNlbGVjdCBCT09UX0NPTkZJR1xcbiAyMzA6XFx0XFx0aGVscFxcbiAyMzE6XFx0XFx0ICBFbmFibGUgZGV2ZWxvcGVyIHRvIHNldHVwIGZ0cmFjZSBzdWJzeXN0ZW0gdmlhIHN1cHBsZW1lbnRhbFxcbiAyMzI6XFx0XFx0ICBrZXJuZWwgY21kbGluZSBhdCBib290IHRpbWUgZm9yIGRlYnVnZ2luZyAodHJhY2luZykgZHJpdmVyXFxuIDIzMzpcXHRcXHQgIGluaXRpYWxpemF0aW9uIGFuZCBib290IHByb2Nlc3MuXFxuIDIzNDpcXHRcXG4gMjM1OlxcdGNvbmZpZyBGVU5DVElPTl9UUkFDRVJcXG4gMjM2OlxcdFxcdGJvb2wgXFxcIktlcm5lbCBGdW5jdGlvbiBUcmFjZXJcXFwiXFxuIDIzNzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfRlVOQ1RJT05fVFJBQ0VSXFxuIDIzODpcXHRcXHRzZWxlY3QgS0FMTFNZTVNcXG4gMjM5OlxcdFxcdHNlbGVjdCBHRU5FUklDX1RSQUNFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTowMTowOC4yODc2ODc0NDlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI2MDMzNjMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFZlcmRpY3Q6IFRyYWNlIFJpbmcgQnVmZmVyIFJlYWRlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgZW5hYmxpbmcgYENPTkZJR19GVFJBQ0VgIG9yIGBDT05GSUdfVFJBQ0lOR2AgYXV0b21hdGljYWxseSBpbmNsdWRlcyBgQ09ORklHX1JJTkdfQlVGRkVSYCwgc28gdGhvc2UgYXJlIHRoZSBrZXkgb25lcyB0byBhZGQgdG8gYEVuYWJsZUNvbmZpZ3NgLiBTcGVjaWZpY2FsbHksIEknbGwgZ28gd2l0aCBgVFJBQ0lOR2AgYW5kIGBGVFJBQ0VgLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBUaGUgZGlmZiBtb2RpZmllcyBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgY2FsbGVycyBhbmQgcmVsYXRlZCBmdW5jdGlvbnMsIHNvIGxldCdzIHNlZS4uLiBgdHJhY2luZ19idWZmZXJzX2lvY3RsYCBjYWxscyBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLCBhbmQgYHJiX2dldF9yZWFkZXJfcGFnZWAgaXMgY2FsbGVkIHdpdGhpbiBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLlxuXG5UaGUgbmV4dCBpbXBvcnRhbnQgcG9pbnQgaXMgdG8gZXN0YWJsaXNoIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIGZlYXR1cmUuIEdvb2QgbmV3cyEgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCwgYHJiX2dldF9yZWFkZXJfcGFnZWAsIGFuZCBgdHJhY2luZ19idWZmZXJzX2lvY3RsYCBhcmUgKmRlZmluaXRlbHkqIHNwZWNpZmljIHRvIHRoZSByaW5nIGJ1ZmZlciB0cmFjaW5nIG1tYXAgcmVhZGVyIGZlYXR1cmUuIFRoaXMgaW5jcmVhc2VzIHRoZSBsaWtlbGlob29kIHRoYXQgYSBmdXp6aW5nIGNhbXBhaWduIHdpbGwgdW5lYXJ0aCB2dWxuZXJhYmlsaXRpZXMuXG5cbkFscmlnaHQsIHdoYXQncyB0aGUgdmVyZGljdCBvbiBgV29ydGhGdXp6aW5nYD8gVGhpcyBpcyBhIG5vLWJyYWluZXI6IEFic29sdXRlbHkuIFRoZSBwYXRjaCBjaGFuZ2VzIGV4ZWN1dGFibGUgY29kZSBpbiBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLiBTcGVjaWZpY2FsbHksIGl0IHJlbW92ZXMgYSBgV0FSTl9PTmAgYXNzZXJ0aW9uLiBUaGlzIGFzc2VydGlvbiBoYW5kbGVkIHRoZSBjYXNlIHdoZXJlIGEgcmVhZGVyIGlzIG9idGFpbmVkL2Fic2VudCB3aGVuIG1tYXBwaW5nL3JlYWRpbmcgdGhlIHRyYWNlIHJpbmcgYnVmZmVyLCB3aGljaCBzb3VuZHMgbGlrZSBzb21ldGhpbmcgd2Ugc2hvdWxkIHNjcnV0aW5pemUuIENydWNpYWxseSwgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBUUkFDRV9NTUFQX0lPQ1RMX0dFVF9SRUFERVJgIGlvY3RsIG9uIHRyYWNlZnMgYnVmZmVyIGZpbGVzLiBJdCdzIG1vZGlmeWluZyBhIGtlcm5lbCBydW50aW1lIGFzc2VydGlvbiwgYSBkZWZlbnNpdmUgY2hlY2ssIGluIGEgY29yZSB0cmFjaW5nIHN1YnN5c3RlbS4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyB1bmVxdWl2b2NhbGx5IGB0cnVlYC5cblxuSSd2ZSBnb3QgdG8gbWFrZSBzdXJlIHRoaXMgYWxpZ25zIHdpdGggdGhlIGNyaXRlcmlhLiBUaGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIChjaGVjayEpLCBpbmNsdWRpbmcgYSBjb3JlIHN1YnN5c3RlbSAodHJhY2luZykgYW5kIG1vZGlmaWVzIGEgcnVudGltZSBhc3NlcnRpb24uIENoZWNrIGFnYWluIVxuXG5TbywgdGhlIGVzc2VudGlhbHM6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgXG4qICAgYEZvY3VzU3ltYm9sc2A6IGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAsIGB0cmFjaW5nX2J1ZmZlcnNfaW9jdGxgLCBgcmJfZ2V0X3JlYWRlcl9wYWdlYFxuKiAgIGBFbmFibGVDb25maWdzYDogYFRSQUNJTkdgLCBgRlRSQUNFYFxuKiAgIFJlYXNvbmluZzogQ29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgdmVyZGljdC5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzIxLCJPdXRwdXRUb2tlbnMiOjE1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAxOjE0LjU0ODAyNTQ5N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMzc5MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFDSU5HXCIsXG4gICAgXCJGVFJBQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlclwiLFxuICAgIFwidHJhY2luZ19idWZmZXJzX2lvY3RsXCIsXG4gICAgXCJyYl9nZXRfcmVhZGVyX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVhZGVyIGFjcXVpc2l0aW9uIGxvZ2ljIGluIHRoZSByaW5nIGJ1ZmZlciBzdWJzeXN0ZW0gYnkgcmVtb3ZpbmcgYSBXQVJOX09OIGFzc2VydGlvbiB3aGVuIHJiX2dldF9yZWFkZXJfcGFnZSgpIHJldHVybnMgTlVMTCBpbiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpLiBUaGlzIHBhdGggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBpb2N0bChUUkFDRV9NTUFQX0lPQ1RMX0dFVF9SRUFERVIpIG9uIHRyYWNlIGJ1ZmZlciBmaWxlcyBhbmQgd2FycmFudHMgZnV6emluZyB0byB2ZXJpZnkgbWVtb3J5LW1hcHBlZCByZWFkZXIgc3luY2hyb25pemF0aW9uIGFuZCBlcnJvciBoYW5kbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFDSU5HXCIsXG4gICAgXCJGVFJBQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlclwiLFxuICAgIFwidHJhY2luZ19idWZmZXJzX2lvY3RsXCIsXG4gICAgXCJyYl9nZXRfcmVhZGVyX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVhZGVyIGFjcXVpc2l0aW9uIGxvZ2ljIGluIHRoZSByaW5nIGJ1ZmZlciBzdWJzeXN0ZW0gYnkgcmVtb3ZpbmcgYSBXQVJOX09OIGFzc2VydGlvbiB3aGVuIHJiX2dldF9yZWFkZXJfcGFnZSgpIHJldHVybnMgTlVMTCBpbiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpLiBUaGlzIHBhdGggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBpb2N0bChUUkFDRV9NTUFQX0lPQ1RMX0dFVF9SRUFERVIpIG9uIHRyYWNlIGJ1ZmZlciBmaWxlcyBhbmQgd2FycmFudHMgZnV6emluZyB0byB2ZXJpZnkgbWVtb3J5LW1hcHBlZCByZWFkZXIgc3luY2hyb25pemF0aW9uIGFuZCBlcnJvciBoYW5kbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDE6MTQuNjE5NDEwMzU1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDAwNzMwNzg2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAxOjE0LjYxOTgzNzAyNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwMDA2ODc1NzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IHJlbW92ZXMgYSBXQVJOX09OKCkgbWFjcm8gYXJvdW5kIGEgTlVMTCBjaGVjayAoY2hhbmdpbmcgJ2lmIChXQVJOX09OKCFyZWFkZXIpKScgdG8gJ2lmICghcmVhZGVyKScpIGluIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgZmllbGRzLCBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBkYXRhIHBhdGhzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2IwM2M0M2VmODE3OTMzYjgzMzJiNWNhOGM5ZTM1NTExYTRjNGNkMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTU6MDA6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jXG5pbmRleCA5YzAzYTU1NWE2YmEyLi4xYTRkYTNkNDc1MTQ0IDEwMDY0NFxuLS0tIGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcbisrKyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jXG5AQCAtNzk5NSw3ICs3OTk1LDcgQEAgaW50IHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7XG4tXHRpZiAoV0FSTl9PTighcmVhZGVyKSlcbitcdGlmICghcmVhZGVyKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdC8qIENoZWNrIGlmIGFueSBldmVudHMgd2VyZSBkcm9wcGVkICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTowMToxNC42MTk4MzgwMDVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEwMzYyMDI3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSaW5nIEJ1ZmZlciBSZWFkZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzLiBUaGUgZGlmZiBwb2ludHMgdXMgZGlyZWN0bHkgdG8gYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDc5OTUgd2hlcmUgdGhlIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgZnVuY3Rpb24gaXMuIEl0J3MgY2xlYXIgZnJvbSB0aGUgcGF0Y2ggdGhhdCBhIGNoYW5nZSBpcyBiZWluZyBtYWRlIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBUaGUgY29udGV4dCBpcyB2aXRhbCBoZXJlOiBpdCBzZWVtcyB0aGF0IGByYl9nZXRfcmVhZGVyX3BhZ2VgIGNvdWxkIHJldHVybiBhIG51bGwgcG9pbnRlci4gVGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBgV0FSTl9PTmAsIHdoaWNoLCB3aGlsZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBhbmQgZGV0ZWN0aW5nIGlzc3VlcywgbWlnaHQgbm90IGJlIHRoZSBtb3N0IGFwcHJvcHJpYXRlIGFwcHJvYWNoIGluIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby4gVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBXQVJOX09OYCBjaGVjayBhbmQganVzdCBjaGVja3MgaWYgYHJlYWRlcmAgaXMgbnVsbC4gSXTigJlzIGxpa2VseSBhIGNoYW5nZSB0byBpbXByb3ZlIHJvYnVzdG5lc3Mgb3IgdG8gcHJldmVudCBhIHBvdGVudGlhbCB3YXJuaW5nIGZyb20gdW5uZWNlc3NhcmlseSBoYWx0aW5nIGV4ZWN1dGlvbiBpbiBjZXJ0YWluIHNpdHVhdGlvbnMuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNhbGwgc2l0ZXMgb2YgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhIGBOVUxMYCByZXR1cm4gdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGNoYW5nZSBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIFRoZSBjb21tZW50IHJlZ2FyZGluZyBldmVudCBkcm9wcyBwcm92aWRlcyBzb21lIGNvbnRleHQsIGJ1dCB1bmRlcnN0YW5kaW5nICp3aHkqIGByYl9nZXRfcmVhZGVyX3BhZ2VgIG1pZ2h0IHJldHVybiBgTlVMTGAgaXMga2V5IHRvIGFzc2Vzc2luZyB0aGUgcGF0Y2gncyBjb3JyZWN0bmVzcyBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiBzeXN0ZW0gYmVoYXZpb3IsIGVzcGVjaWFsbHkgaW4gaGlnaC1wcmVzc3VyZSB0cmFjaW5nIGVudmlyb25tZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAxOjI1LjY1NjA0MzY3N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzk4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzk4MDpcXHRcXHRyZWFkZXJfc2l6ZSA9IHJiX3BhZ2Vfc2l6ZShjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZSk7XFxuNzk4MTpcXHRcXG43OTgyOlxcdFxcdC8qXFxuNzk4MzpcXHRcXHQgKiBUaGVyZSBhcmUgZGF0YSB0byBiZSByZWFkIG9uIHRoZSBjdXJyZW50IHJlYWRlciBwYWdlLCB3ZSBjYW5cXG43OTg0OlxcdFxcdCAqIHJldHVybiB0byB0aGUgY2FsbGVyLiBCdXQgYmVmb3JlIHRoYXQsIHdlIGFzc3VtZSB0aGUgbGF0dGVyIHdpbGwgcmVhZFxcbjc5ODU6XFx0XFx0ICogZXZlcnl0aGluZy4gTGV0J3MgdXBkYXRlIHRoZSBrZXJuZWwgcmVhZGVyIGFjY29yZGluZ2x5Llxcbjc5ODY6XFx0XFx0ICovXFxuNzk4NzpcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UtXFx1MDAzZXJlYWQgXFx1MDAzYyByZWFkZXJfc2l6ZSkge1xcbjc5ODg6XFx0XFx0XFx0d2hpbGUgKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlLVxcdTAwM2VyZWFkIFxcdTAwM2MgcmVhZGVyX3NpemUpXFxuNzk4OTpcXHRcXHRcXHRcXHRyYl9hZHZhbmNlX3JlYWRlcihjcHVfYnVmZmVyKTtcXG43OTkwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjc5OTE6XFx0XFx0fVxcbjc5OTI6XFx0XFxuNzk5MzpcXHRcXHQvKiBEaWQgdGhlIHJlYWRlciBjYXRjaCB1cCB3aXRoIHRoZSB3cml0ZXI/ICovXFxuNzk5NDpcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgPT0gY3B1X2J1ZmZlci1cXHUwMDNlY29tbWl0X3BhZ2UpXFxuNzk5NTpcXHRcXHRcXHRnb3RvIG91dDtcXG43OTk2OlxcdFxcbjc5OTc6XFx0XFx0cmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpO1xcbjc5OTg6XFx0XFx0aWYgKCFyZWFkZXIpXFxuNzk5OTpcXHRcXHRcXHRnb3RvIG91dDtcXG44MDAwOlxcdFxcbjgwMDE6XFx0XFx0LyogQ2hlY2sgaWYgYW55IGV2ZW50cyB3ZXJlIGRyb3BwZWQgKi9cXG44MDAyOlxcdFxcdG1pc3NlZF9ldmVudHMgPSBjcHVfYnVmZmVyLVxcdTAwM2Vsb3N0X2V2ZW50cztcXG44MDAzOlxcdFxcbjgwMDQ6XFx0XFx0aWYgKG1pc3NlZF9ldmVudHMpIHtcXG44MDA1OlxcdFxcdFxcdGlmIChjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVxcdTAwM2Vjb21taXRfcGFnZSkge1xcbjgwMDY6XFx0XFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9kYXRhX3BhZ2UgKmRwYWdlID0gcmVhZGVyLVxcdTAwM2VwYWdlO1xcbjgwMDc6XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGNvbW1pdDtcXG44MDA4OlxcdFxcdFxcdFxcdC8qXFxuODAwOTpcXHRcXHRcXHRcXHQgKiBVc2UgdGhlIHJlYWxfZW5kIGZvciB0aGUgZGF0YSBzaXplLFxcbjgwMTA6XFx0XFx0XFx0XFx0ICogVGhpcyBnaXZlcyB1cyBhIGNoYW5jZSB0byBzdG9yZSB0aGUgbG9zdCBldmVudHNcXG44MDExOlxcdFxcdFxcdFxcdCAqIG9uIHRoZSBwYWdlLlxcbjgwMTI6XFx0XFx0XFx0XFx0ICovXFxuODAxMzpcXHRcXHRcXHRcXHRpZiAocmVhZGVyLVxcdTAwM2VyZWFsX2VuZClcXG44MDE0OlxcdFxcdFxcdFxcdFxcdGxvY2FsX3NldChcXHUwMDI2ZHBhZ2UtXFx1MDAzZWNvbW1pdCwgcmVhZGVyLVxcdTAwM2VyZWFsX2VuZCk7XFxuODAxNTpcXHRcXHRcXHRcXHQvKlxcbjgwMTY6XFx0XFx0XFx0XFx0ICogSWYgdGhlcmUgaXMgcm9vbSBhdCB0aGUgZW5kIG9mIHRoZSBwYWdlIHRvIHNhdmUgdGhlXFxuODAxNzpcXHRcXHRcXHRcXHQgKiBtaXNzZWQgZXZlbnRzLCB0aGVuIHJlY29yZCBpdCB0aGVyZS5cXG44MDE4OlxcdFxcdFxcdFxcdCAqL1xcbjgwMTk6XFx0XFx0XFx0XFx0Y29tbWl0ID0gcmJfcGFnZV9zaXplKHJlYWRlcik7XFxuODAyMDpcXHRcXHRcXHRcXHRpZiAocmJfcGFnZV9jYXBhY2l0eShyZWFkZXIpIC0gY29tbWl0IFxcdTAwM2U9IHNpemVvZihtaXNzZWRfZXZlbnRzKSkge1xcbjgwMjE6XFx0XFx0XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZkcGFnZS1cXHUwMDNlZGF0YVtjb21taXRdLCBcXHUwMDI2bWlzc2VkX2V2ZW50cyxcXG44MDIyOlxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplb2YobWlzc2VkX2V2ZW50cykpO1xcbjgwMjM6XFx0XFx0XFx0XFx0XFx0bG9jYWxfYWRkKFJCX01JU1NFRF9TVE9SRUQsIFxcdTAwMjZkcGFnZS1cXHUwMDNlY29tbWl0KTtcXG44MDI0OlxcdFxcdFxcdFxcdH1cXG44MDI1OlxcdFxcdFxcdFxcdGxvY2FsX2FkZChSQl9NSVNTRURfRVZFTlRTLCBcXHUwMDI2ZHBhZ2UtXFx1MDAzZWNvbW1pdCk7XFxuODAyNjpcXHRcXHRcXHR9IGVsc2UgaWYgKCFXQVJOX09OQ0UoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgPT0gY3B1X2J1ZmZlci1cXHUwMDNldGFpbF9wYWdlLFxcbjgwMjc6XFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcIlJlYWRlciBvbiBjb21taXQgd2l0aCAlbGQgbWlzc2VkIGV2ZW50c1xcXCIsXFxuODAyODpcXHRcXHRcXHRcXHRcXHQgICAgICBtaXNzZWRfZXZlbnRzKSkge1xcbjgwMjk6XFx0XFx0XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDE6MjUuNjU2NTMzOTU3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMzE2NzExMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIHNvbWUgY29kZSwgcHJvYmFibHkgcmVsYXRlZCB0byBjb25jdXJyZW50IGRhdGEgc3RydWN0dXJlczpcblxuKipEZWNvbnN0cnVjdGluZyBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgKipcblxuQWxyaWdodCwgc28gSSdtIGtuZWUtZGVlcCBpbiB0aGlzIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgZnVuY3Rpb24uIFRoYXQgbmFtZSBhbG9uZSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBwYXJ0IG9mIGEgc3lzdGVtIGZvciBlZmZpY2llbnRseSBtYW5hZ2luZyBkYXRhLCBwZXJoYXBzIHdpdGhpbiBhIG11bHRpdGhyZWFkZWQgZW52aXJvbm1lbnQuIFRoZSBcInJpbmcgYnVmZmVyXCIgc3VnZ2VzdHMgYSBjaXJjdWxhciBxdWV1ZSwgbGlrZWx5IG9wdGltaXplZCBmb3IgZmFzdCwgc2VxdWVudGlhbCBhY2Nlc3MuIFRoZSBcIm1hcFwiIGNvbXBvbmVudCBpbXBsaWVzIHNvbWUga2luZCBvZiBrZXktdmFsdWUgbG9va3VwICp3aXRoaW4qIHRoYXQgcmluZyBidWZmZXIsIHBvdGVudGlhbGx5IGZvciByYW5kb20gYWNjZXNzIG9yIHNwZWNpZmljIGRhdGEgcmV0cmlldmFsLiBBbmQgdGhlbiB0aGVyZSdzIHRoZSBgZ2V0X3JlYWRlcmAgcGFydC4gT2theSwgc28gdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgZGVzaWduZWQgdG8gYWNxdWlyZSBhIHJlYWQgaGFuZGxlLCBvciBhbiBpdGVyYXRvciwgaW50byB0aGUgYnVmZmVyLCBwcmVzdW1hYmx5IHdpdGggdGhyZWFkIHNhZmV0eSBjb25zaWRlcmF0aW9ucy4gSSdtIHByb2JhYmx5IHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBsb2NraW5nIHN0cmF0ZWdpZXMgdXNlZCAoaWYgYW55KSwgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIE5vdywgbGV0J3Mgc2VlIHdoYXQgdGhlIHJlc3Qgb2YgdGhpcyB0aGluZyBpcyBhY3R1YWxseSBkb2luZy4uLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDE6MjcuODg4MjA2OTM4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3OTYwOlxcdH1cXG43OTYxOlxcdFxcbjc5NjI6XFx0aW50IHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG43OTYzOlxcdHtcXG43OTY0OlxcdFxcdHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyO1xcbjc5NjU6XFx0XFx0c3RydWN0IGJ1ZmZlcl9wYWdlICpyZWFkZXI7XFxuNzk2NjpcXHRcXHR1bnNpZ25lZCBsb25nIG1pc3NlZF9ldmVudHM7XFxuNzk2NzpcXHRcXHR1bnNpZ25lZCBsb25nIHJlYWRlcl9zaXplO1xcbjc5Njg6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG43OTY5OlxcdFxcbjc5NzA6XFx0XFx0Y3B1X2J1ZmZlciA9IHJiX2dldF9tYXBwZWRfYnVmZmVyKGJ1ZmZlciwgY3B1KTtcXG43OTcxOlxcdFxcdGlmIChJU19FUlIoY3B1X2J1ZmZlcikpXFxuNzk3MjpcXHRcXHRcXHRyZXR1cm4gKGludClQVFJfRVJSKGNwdV9idWZmZXIpO1xcbjc5NzM6XFx0XFxuNzk3NDpcXHRcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9sb2NrLCBmbGFncyk7XFxuNzk3NTpcXHRcXG43OTc2OlxcdGNvbnN1bWU6XFxuNzk3NzpcXHRcXHRpZiAocmJfcGVyX2NwdV9lbXB0eShjcHVfYnVmZmVyKSlcXG43OTc4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjc5Nzk6XFx0XFxuNzk4MDpcXHRcXHRyZWFkZXJfc2l6ZSA9IHJiX3BhZ2Vfc2l6ZShjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZSk7XFxuNzk4MTpcXHRcXG43OTgyOlxcdFxcdC8qXFxuNzk4MzpcXHRcXHQgKiBUaGVyZSBhcmUgZGF0YSB0byBiZSByZWFkIG9uIHRoZSBjdXJyZW50IHJlYWRlciBwYWdlLCB3ZSBjYW5cXG43OTg0OlxcdFxcdCAqIHJldHVybiB0byB0aGUgY2FsbGVyLiBCdXQgYmVmb3JlIHRoYXQsIHdlIGFzc3VtZSB0aGUgbGF0dGVyIHdpbGwgcmVhZFxcbjc5ODU6XFx0XFx0ICogZXZlcnl0aGluZy4gTGV0J3MgdXBkYXRlIHRoZSBrZXJuZWwgcmVhZGVyIGFjY29yZGluZ2x5Llxcbjc5ODY6XFx0XFx0ICovXFxuNzk4NzpcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UtXFx1MDAzZXJlYWQgXFx1MDAzYyByZWFkZXJfc2l6ZSkge1xcbjc5ODg6XFx0XFx0XFx0d2hpbGUgKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlLVxcdTAwM2VyZWFkIFxcdTAwM2MgcmVhZGVyX3NpemUpXFxuNzk4OTpcXHRcXHRcXHRcXHRyYl9hZHZhbmNlX3JlYWRlcihjcHVfYnVmZmVyKTtcXG43OTkwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjc5OTE6XFx0XFx0fVxcbjc5OTI6XFx0XFxuNzk5MzpcXHRcXHQvKiBEaWQgdGhlIHJlYWRlciBjYXRjaCB1cCB3aXRoIHRoZSB3cml0ZXI/ICovXFxuNzk5NDpcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgPT0gY3B1X2J1ZmZlci1cXHUwMDNlY29tbWl0X3BhZ2UpXFxuNzk5NTpcXHRcXHRcXHRnb3RvIG91dDtcXG43OTk2OlxcdFxcbjc5OTc6XFx0XFx0cmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpO1xcbjc5OTg6XFx0XFx0aWYgKCFyZWFkZXIpXFxuNzk5OTpcXHRcXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDE6MjcuODg4NjY3MDA4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY3MzgwMjU2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogQSBRdWljayBSZXZpZXcqKlxuXG5Pa2F5LCBzbyB0aGUgZGlmZiBpcyBzdHJhaWdodGZvcndhcmQuIFdlJ3JlIGVzc2VudGlhbGx5IGRyb3BwaW5nIHRoZSBgV0FSTl9PTmAgbWFjcm8gYXJvdW5kIGEgbnVsbCBjaGVjayBmb3IgdGhlIGByZWFkZXJgIHZhcmlhYmxlLiBUaGUgb3JpZ2luYWwgY29kZSB3YXM6IGBpZiAoV0FSTl9PTighcmVhZGVyKSlgIGFuZCBpdCdzIGJlaW5nIGNoYW5nZWQgdG8gYGlmICghcmVhZGVyKWAuIFRoYXQgYHJlYWRlcmAgY2FuIGxlZ2l0aW1hdGVseSBiZSBudWxsIGluIGNvbmN1cnJlbnQgYnVmZmVyIG9wZXJhdGlvbnMgb3Igd2hlbiBubyByZWFkZXIgcGFnZSBpcyBhdmFpbGFibGUuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZT8gSSd2ZSBnb25lIG92ZXIgaXQsIGFuZCBuby4gVGhpcyBkb2Vzbid0IGFsbG9jYXRlIG1lbW9yeSwgaXQgZG9lc24ndCBjb3B5IGFueXRoaW5nIHRvIHVzZXJzcGFjZSwgaXQgZG9lc24ndCAqcmVhZCogdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBpdCBkb2Vzbid0IGFmZmVjdCBhbnkgc3RydWN0IHNpemVzIG9yIGRhdGEgZmxvd3MuIEl0J3MganVzdCByZW1vdmluZyBhIHdhcm5pbmcgYWJvdXQgYW4gZXJyb3IgY29uZGl0aW9uLlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29uY2x1c2lvbiBpcyBwcmV0dHkgY2xlYXIuIFNpbmNlIGl0IG1lZXRzIHRoZSBjcml0ZXJpYSBvZiBub3QgaW50cm9kdWNpbmcgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBpdCBzaW1wbHkgcmVtb3ZlcyBhIGBXQVJOX09OYCBtYWNybyBzdXJyb3VuZGluZyBhIG51bGwgY2hlY2sgZm9yIGByZWFkZXJgLCBgTmVlZHNLTVNBTmAgaGFzIHRvIGJlIGBmYWxzZWAuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBwcm92aWRlIHRoZSBhcHByb3ByaWF0ZSByZXNwb25zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMyMCwiT3V0cHV0VG9rZW5zIjoxMTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTowMTozNC42MjY2OTU1MDdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgcmVtb3ZlcyBhIFdBUk5fT04oKSBtYWNybyBhcm91bmQgYSBOVUxMIGNoZWNrIChjaGFuZ2luZyAnaWYgKFdBUk5fT04oIXJlYWRlcikpJyB0byAnaWYgKCFyZWFkZXIpJykgaW4gcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBmaWVsZHMsIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGRhdGEgcGF0aHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IHJlbW92ZXMgYSBXQVJOX09OKCkgbWFjcm8gYXJvdW5kIGEgTlVMTCBjaGVjayAoY2hhbmdpbmcgJ2lmIChXQVJOX09OKCFyZWFkZXIpKScgdG8gJ2lmICghcmVhZGVyKScpIGluIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgZmllbGRzLCBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBkYXRhIHBhdGhzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz2sfx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 14:56:45 +0000 UTC FinishedAt: 2026-09-09 15:01:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRACING", "FTRACE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRACING", "FTRACE" ], "series_id": "60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "ring_buffer_map_get_reader", "tracing_buffers_ioctl", "rb_get_reader_page" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQUNJTkcmIzM0OywKICAgICYjMzQ7RlRSQUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXImIzM0OywKICAgICYjMzQ7dHJhY2luZ19idWZmZXJzX2lvY3RsJiMzNDssCiAgICAmIzM0O3JiX2dldF9yZWFkZXJfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgcmVtb3ZlcyBhIFdBUk5fT04oKSBtYWNybyBhcm91bmQgYSBOVUxMIGNoZWNrIChjaGFuZ2luZyAmIzM5O2lmIChXQVJOX09OKCFyZWFkZXIpKSYjMzk7IHRvICYjMzk7aWYgKCFyZWFkZXIpJiMzOTspIGluIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgZmllbGRzLCBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBkYXRhIHBhdGhzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWFkZXIgYWNxdWlzaXRpb24gbG9naWMgaW4gdGhlIHJpbmcgYnVmZmVyIHN1YnN5c3RlbSBieSByZW1vdmluZyBhIFdBUk5fT04gYXNzZXJ0aW9uIHdoZW4gcmJfZ2V0X3JlYWRlcl9wYWdlKCkgcmV0dXJucyBOVUxMIGluIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKCkuIFRoaXMgcGF0aCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGlvY3RsKFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUikgb24gdHJhY2UgYnVmZmVyIGZpbGVzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIHZlcmlmeSBtZW1vcnktbWFwcGVkIHJlYWRlciBzeW5jaHJvbml6YXRpb24gYW5kIGVycm9yIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2IwM2M0M2VmODE3OTMzYjgzMzJiNWNhOGM5ZTM1NTExYTRjNGNkMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTU6MDA6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1xuaW5kZXggOWMwM2E1NTVhNmJhMi4uMWE0ZGEzZDQ3NTE0NCAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1xuQEAgLTc5OTUsNyAmIzQzOzc5OTUsNyBAQCBpbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdHJlYWRlciA9IHJiX2dldF9yZWFkZXJfcGFnZShjcHVfYnVmZmVyKTtcbi1cdGlmIChXQVJOX09OKCFyZWFkZXIpKVxuJiM0MztcdGlmICghcmVhZGVyKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdC8qIENoZWNrIGlmIGFueSBldmVudHMgd2VyZSBkcm9wcGVkICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBQ0lORyYjMzQ7LAogICAgJiMzNDtGVFJBQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlciYjMzQ7LAogICAgJiMzNDt0cmFjaW5nX2J1ZmZlcnNfaW9jdGwmIzM0OywKICAgICYjMzQ7cmJfZ2V0X3JlYWRlcl9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWFkZXIgYWNxdWlzaXRpb24gbG9naWMgaW4gdGhlIHJpbmcgYnVmZmVyIHN1YnN5c3RlbSBieSByZW1vdmluZyBhIFdBUk5fT04gYXNzZXJ0aW9uIHdoZW4gcmJfZ2V0X3JlYWRlcl9wYWdlKCkgcmV0dXJucyBOVUxMIGluIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKCkuIFRoaXMgcGF0aCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGlvY3RsKFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUikgb24gdHJhY2UgYnVmZmVyIGZpbGVzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIHZlcmlmeSBtZW1vcnktbWFwcGVkIHJlYWRlciBzeW5jaHJvbml6YXRpb24gYW5kIGVycm9yIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2IwM2M0M2VmODE3OTMzYjgzMzJiNWNhOGM5ZTM1NTExYTRjNGNkMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTU6MDA6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCmluZGV4IDljMDNhNTU1YTZiYTIuLjFhNGRhM2Q0NzUxNDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCkBAIC03OTk1LDcgJiM0Mzs3OTk1LDcgQEAgaW50IHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSkKIAkJZ290byBvdXQ7CiAKIAlyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7Ci0JaWYgKFdBUk5fT04oIXJlYWRlcikpCiYjNDM7CWlmICghcmVhZGVyKQogCQlnb3RvIG91dDsKIAogCS8qIENoZWNrIGlmIGFueSBldmVudHMgd2VyZSBkcm9wcGVkICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NDcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBUaGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCByZXF1ZXN0IGZvciBhIHBhdGNoIHJldmlldyB0byBkZXRlcm1pbmUgaWYgaXQmIzM5O3Mgd29ydGggZnV6emluZyB3aXRoIHN5emthbGxlci4gVHlwaWNhbCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciB0cmlhZ2UuIE15IGpvYiBpcyB0byBldmFsdWF0ZSB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIHByZXNlbnRzIGFuIG9wcG9ydHVuaXR5IGZvciBmdXp6aW5nLCBhbmQgaWYgc28sIGhvdyB0byBiZXN0IGVuYWJsZSBpdC4gSSBuZWVkIHRvIG1ha2UgYSBqdWRnbWVudCBjYWxsIG9uICYjMzQ7V29ydGhGdXp6aW5nLCYjMzQ7IGV4dHJhY3QgcmVsZXZhbnQgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBhbmQgJiMzNDtFbmFibGVDb25maWdzLCYjMzQ7IGFuZCBwcm92aWRlIHJlYXNvbmluZyBmb3IgbXkgZGVjaXNpb24gYmVmb3JlIGNhbGxpbmcgYHNldC1yZXN1bHRzYC4KCkZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgcGF0Y2ggZGlmZi4gSG1tLCBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgc21hbGwgY2hhbmdlIHdpdGhpbiBga2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNgLiAgTGV0IG1lIHNlZS4uLiBMaW5lIDc5OTUuIEl0IGFwcGVhcnMgdGhhdCBhIGBXQVJOX09OYCBjaGVjayBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGEgbW9yZSBiYXNpYyBudWxsIGNoZWNrIG9uIHRoZSByZWFkZXIgcG9pbnRlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IHRoaXMgKmNvdWxkKiBiZSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYXMgaXQgbWlnaHQgZXhwb3NlIHNvbWUgcHJldmlvdXNseSBtYXNrZWQgZXJyb3IgY29uZGl0aW9ucy4gQSBudWxsIHJlYWRlciBzdWdnZXN0cyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBpbiBhIGNyaXRpY2FsIHBhdGguIEl0JiMzOTtzIGEga2VybmVsIHRyYWNlIGJ1ZmZlciwgc28gdGhpcyBjb3VsZCBhZmZlY3QgZGVidWdnaW5nIG9yIG90aGVyIHRyYWNlIGZ1bmN0aW9uYWxpdHkgaWYgYSByZWFkZXIgaXMgbnVsbC4KCk5leHQsIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgb24gYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYCBhcm91bmQgbGluZSA3OTk1IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGFzc2VzcyB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlIGFuZCBpZiBzeXprYWxsZXIgaXMgbGlrZWx5IHRvIHVuY292ZXIgYW55IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzk4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3OTgwOlx0XHRyZWFkZXJfc2l6ZSA9IHJiX3BhZ2Vfc2l6ZShjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlKTtcbjc5ODE6XHRcbjc5ODI6XHRcdC8qXG43OTgzOlx0XHQgKiBUaGVyZSBhcmUgZGF0YSB0byBiZSByZWFkIG9uIHRoZSBjdXJyZW50IHJlYWRlciBwYWdlLCB3ZSBjYW5cbjc5ODQ6XHRcdCAqIHJldHVybiB0byB0aGUgY2FsbGVyLiBCdXQgYmVmb3JlIHRoYXQsIHdlIGFzc3VtZSB0aGUgbGF0dGVyIHdpbGwgcmVhZFxuNzk4NTpcdFx0ICogZXZlcnl0aGluZy4gTGV0JiMzOTtzIHVwZGF0ZSB0aGUga2VybmVsIHJlYWRlciBhY2NvcmRpbmdseS5cbjc5ODY6XHRcdCAqL1xuNzk4NzpcdFx0aWYgKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UtXHUwMDNlcmVhZCBcdTAwM2MgcmVhZGVyX3NpemUpIHtcbjc5ODg6XHRcdFx0d2hpbGUgKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UtXHUwMDNlcmVhZCBcdTAwM2MgcmVhZGVyX3NpemUpXG43OTg5Olx0XHRcdFx0cmJfYWR2YW5jZV9yZWFkZXIoY3B1X2J1ZmZlcik7XG43OTkwOlx0XHRcdGdvdG8gb3V0O1xuNzk5MTpcdFx0fVxuNzk5MjpcdFxuNzk5MzpcdFx0LyogRGlkIHRoZSByZWFkZXIgY2F0Y2ggdXAgd2l0aCB0aGUgd3JpdGVyPyAqL1xuNzk5NDpcdFx0aWYgKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UgPT0gY3B1X2J1ZmZlci1cdTAwM2Vjb21taXRfcGFnZSlcbjc5OTU6XHRcdFx0Z290byBvdXQ7XG43OTk2Olx0XG43OTk3Olx0XHRyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7XG43OTk4Olx0XHRpZiAoIXJlYWRlcilcbjc5OTk6XHRcdFx0Z290byBvdXQ7XG44MDAwOlx0XG44MDAxOlx0XHQvKiBDaGVjayBpZiBhbnkgZXZlbnRzIHdlcmUgZHJvcHBlZCAqL1xuODAwMjpcdFx0bWlzc2VkX2V2ZW50cyA9IGNwdV9idWZmZXItXHUwMDNlbG9zdF9ldmVudHM7XG44MDAzOlx0XG44MDA0Olx0XHRpZiAobWlzc2VkX2V2ZW50cykge1xuODAwNTpcdFx0XHRpZiAoY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVx1MDAzZWNvbW1pdF9wYWdlKSB7XG44MDA2Olx0XHRcdFx0c3RydWN0IGJ1ZmZlcl9kYXRhX3BhZ2UgKmRwYWdlID0gcmVhZGVyLVx1MDAzZXBhZ2U7XG44MDA3Olx0XHRcdFx0dW5zaWduZWQgaW50IGNvbW1pdDtcbjgwMDg6XHRcdFx0XHQvKlxuODAwOTpcdFx0XHRcdCAqIFVzZSB0aGUgcmVhbF9lbmQgZm9yIHRoZSBkYXRhIHNpemUsXG44MDEwOlx0XHRcdFx0ICogVGhpcyBnaXZlcyB1cyBhIGNoYW5jZSB0byBzdG9yZSB0aGUgbG9zdCBldmVudHNcbjgwMTE6XHRcdFx0XHQgKiBvbiB0aGUgcGFnZS5cbjgwMTI6XHRcdFx0XHQgKi9cbjgwMTM6XHRcdFx0XHRpZiAocmVhZGVyLVx1MDAzZXJlYWxfZW5kKVxuODAxNDpcdFx0XHRcdFx0bG9jYWxfc2V0KFx1MDAyNmRwYWdlLVx1MDAzZWNvbW1pdCwgcmVhZGVyLVx1MDAzZXJlYWxfZW5kKTtcbjgwMTU6XHRcdFx0XHQvKlxuODAxNjpcdFx0XHRcdCAqIElmIHRoZXJlIGlzIHJvb20gYXQgdGhlIGVuZCBvZiB0aGUgcGFnZSB0byBzYXZlIHRoZVxuODAxNzpcdFx0XHRcdCAqIG1pc3NlZCBldmVudHMsIHRoZW4gcmVjb3JkIGl0IHRoZXJlLlxuODAxODpcdFx0XHRcdCAqL1xuODAxOTpcdFx0XHRcdGNvbW1pdCA9IHJiX3BhZ2Vfc2l6ZShyZWFkZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxODIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBEZWVwIGludG8gYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAuIEl0JiMzOTtzIGNydWNpYWwsIGFuZCB0aGUgbmFtZSBzdWdnZXN0cyBhIGtleSBmdW5jdGlvbiByZWxhdGVkIHRvIHJlYWRpbmcgZGF0YSBmcm9tIGEgcmluZyBidWZmZXIgbWFwLiBUbyB0cnVseSBncmFzcCBpdHMgcm9sZSBhbmQgcG90ZW50aWFsIGltcGFjdCwgSSBuZWVkIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBTaW1wbHkgdW5kZXJzdGFuZGluZyB0aGUgbmFtZSBpc24mIzM5O3QgZW5vdWdoOyBJIG5lZWQgdG8gc2VlICpob3cqIGl0JiMzOTtzIGludm9rZWQsIHdoYXQgaXRzIGlucHV0cyBhbmQgb3V0cHV0cyBhcmUsIGFuZCB0aGUgb3ZlcmFsbCBwYXR0ZXJuIG9mIGl0cyB1c2FnZS4KCk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGl0cyBjb2RlYmFzZSBhcHBlYXJhbmNlcy4gVGhpcyBjYWxscyBmb3IgYSBxdWljayBhbmQgcHJlY2lzZSBjb2RlIHNlYXJjaC4gSSYjMzk7bGwgbGF1bmNoIGBncmVwcGVyYCAob3IgbXkgcHJlZmVycmVkIGNvZGUgc2VhcmNoIHRvb2wsIHdoYXRldmVyIEkmIzM5O20gbW9zdCBjb21mb3J0YWJsZSB3aXRoIGFuZCBoYXMgdGhlIGJlc3QgaW5kZXhpbmcgb2YgdGhpcyBwYXJ0aWN1bGFyIGNvZGViYXNlKSBhbmQgemVybyBpbiBvbiBldmVyeSBpbnN0YW5jZSBvZiBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLiBJJiMzOTtsbCBhbmFseXplIGVhY2ggY2FsbCBzaXRlIHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBzeXN0ZW0gbG9naWMsIGVzcGVjaWFsbHkgdGhlIHN1cnJvdW5kaW5nIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgYnJlYWR0aCBvZiBrbm93bGVkZ2UgbmVlZGVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGluIGl0cyBlbnRpcmV0eS4gVGhpcyBpcyBhIHN0YW5kYXJkIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yaW5nX2J1ZmZlci5oPTI1ND1pbnQgcmluZ19idWZmZXJfdW5tYXAoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KTtcbmluY2x1ZGUvbGludXgvcmluZ19idWZmZXIuaDoyNTU6aW50IHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSk7XG5pbmNsdWRlL2xpbnV4L3JpbmdfYnVmZmVyLmgtMjU2LVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc5Mjc9aW50IHJpbmdfYnVmZmVyX3VubWFwKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03OTYxLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6Nzk2MjppbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzk2My17XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmM9NzM2NT1zdGF0aWMgbG9uZyB0cmFjaW5nX2J1ZmZlcnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jLTczODAtXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3MzgxOlx0XHRyZXR1cm4gcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoaXRlci1cdTAwM2VhcnJheV9idWZmZXItXHUwMDNlYnVmZmVyLFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzM4Mi1cdFx0XHRcdFx0XHQgIGl0ZXItXHUwMDNlY3B1X2ZpbGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NDAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQga2VybmVsIGNvZGUgc25pcHBldCwgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgdHJhY2UuY2AgYW5kIFJpbmcgQnVmZmVyIE1hcHBpbmcqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgdHJhY2luZ19idWZmZXJzX2lvY3RsYCBmdW5jdGlvbiBpbiBga2VybmVsL3RyYWNlL3RyYWNlLmNgIGludGVyYWN0cyB3aXRoIHRoZSByaW5nIGJ1ZmZlci4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gc2VlICpob3cqIGl0JiMzOTtzIGdldHRpbmcgYSByZWFkZXIgaGFuZGxlLCB3aGljaCBJJiMzOTttIHByZXR0eSBzdXJlIGlzIGhhbmRsZWQgdGhyb3VnaCBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLiBMZXQmIzM5O3MgZ2V0IHRvIGxpbmUgNzM2NSBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBJIGV4cGVjdCB0byBzZWUgdGhlIGNhbGwsIGJ1dCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIC0gYXJlIHRoZXJlIGVycm9yIGNoZWNrcz8gV2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQ/IElzIHRoZXJlIGFueSBzcGVjaWZpYyBjb250ZXh0IHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gaG93IGB0cmFjaW5nX2J1ZmZlcnNfaW9jdGxgIHV0aWxpemVzIHRoZSByaW5nIGJ1ZmZlcj8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhpcyBjYWxsIHByb2JhYmx5IHJldHVybnMgYSBtYXBwaW5nIG9yIGEgcG9pbnRlciBvZiBzb21lIHNvcnQuIEl0JiMzOTtsbCBiZSBrZXkgdG8gdGhlbiBmaWd1cmUgb3V0IGhvdyB0aGF0IHJlYWRlciBoYW5kbGUgaXMgdGhlbiB1c2VkIGZvciB0aGUgZXZlbnR1YWwgcmVhZHMsIGFuZCBwb3RlbnRpYWxseSBmb3IgbWFuYWdpbmcgdGhlIGRhdGEgd2l0aGluIHRoZSBidWZmZXIuIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUga2VybmVsIGludGVyZmFjZSBwcm92aWRlcyB0aGUgdHJhY2UgZGF0YSB0byB0aGUgdXNlcnNwYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzczNjU6XHRzdGF0aWMgbG9uZyB0cmFjaW5nX2J1ZmZlcnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuNzM2NjpcdHtcbjczNjc6XHRcdHN0cnVjdCBmdHJhY2VfYnVmZmVyX2luZm8gKmluZm8gPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbjczNjg6XHRcdHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciA9IFx1MDAyNmluZm8tXHUwMDNlaXRlcjtcbjczNjk6XHRcdGludCBlcnI7XG43MzcwOlx0XG43MzcxOlx0XHRpZiAoY21kID09IFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUikge1xuNzM3MjpcdFx0XHRpZiAoIShmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fTk9OQkxPQ0spKSB7XG43MzczOlx0XHRcdFx0ZXJyID0gcmluZ19idWZmZXJfd2FpdChpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIsXG43Mzc0Olx0XHRcdFx0XHRcdCAgICAgICBpdGVyLVx1MDAzZWNwdV9maWxlLFxuNzM3NTpcdFx0XHRcdFx0XHQgICAgICAgaXRlci1cdTAwM2V0ci1cdTAwM2VidWZmZXJfcGVyY2VudCxcbjczNzY6XHRcdFx0XHRcdFx0ICAgICAgIE5VTEwsIE5VTEwpO1xuNzM3NzpcdFx0XHRcdGlmIChlcnIpXG43Mzc4Olx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuNzM3OTpcdFx0XHR9XG43MzgwOlx0XG43MzgxOlx0XHRcdHJldHVybiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIsXG43MzgyOlx0XHRcdFx0XHRcdFx0ICBpdGVyLVx1MDAzZWNwdV9maWxlKTtcbjczODM6XHRcdH0gZWxzZSBpZiAoY21kKSB7XG43Mzg0Olx0XHRcdHJldHVybiAtRU5PVFRZO1xuNzM4NTpcdFx0fVxuNzM4NjpcdFxuNzM4NzpcdFx0LypcbjczODg6XHRcdCAqIEFuIGlvY3RsIGNhbGwgd2l0aCBjbWQgMCB0byB0aGUgcmluZyBidWZmZXIgZmlsZSB3aWxsIHdha2UgdXAgYWxsXG43Mzg5Olx0XHQgKiB3YWl0ZXJzXG43MzkwOlx0XHQgKi9cbjczOTE6XHRcdGd1YXJkKG11dGV4KShcdTAwMjZ0cmFjZV90eXBlc19sb2NrKTtcbjczOTI6XHRcbjczOTM6XHRcdC8qIE1ha2Ugc3VyZSB0aGUgd2FpdGVycyBzZWUgdGhlIG5ldyB3YWl0X2luZGV4ICovXG43Mzk0Olx0XHQodm9pZClhdG9taWNfZmV0Y2hfaW5jX3JlbGVhc2UoXHUwMDI2aXRlci1cdTAwM2V3YWl0X2luZGV4KTtcbjczOTU6XHRcbjczOTY6XHRcdHJpbmdfYnVmZmVyX3dha2Vfd2FpdGVycyhpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIsIGl0ZXItXHUwMDNlY3B1X2ZpbGUpO1xuNzM5NzpcdFxuNzM5ODpcdFx0cmV0dXJuIDA7XG43Mzk5Olx0fVxuNzQwMDpcdFxuNzQwMTpcdC8qXG43NDAyOlx0ICogVGhpcyBpcyBjYWxsZWQgd2hlbiBhIFZNQSBpcyBkdXBsaWNhdGVkIChlLmcuLCBvbiBmb3JrKCkpIHRvIGluY3JlbWVudFxuNzQwMzpcdCAqIHRoZSB1c2VyX21hcHBlZCBjb3VudGVyIHdpdGhvdXQgcmVtYXBwaW5nIHBhZ2VzLlxuNzQwNDpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NjEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSaW5nIEJ1ZmZlciBSZWFkZXIgQWNxdWlzaXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoaXMgcGF0Y2guIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCBmdW5jdGlvbiB3aXRoaW4gYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYC4gSSBuZWVkIHRvIGVuc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UuCgpJdCYjMzk7cyBzdHJhaWdodGZvcndhcmQ7IHRoZSBwcmltYXJ5IG1vZGlmaWNhdGlvbiBjZW50ZXJzIGFyb3VuZCB0aGlzIGNvbmRpdGlvbmFsIGNoZWNrOgoKYGBgYwoJcmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpOwotCWlmIChXQVJOX09OKCFyZWFkZXIpKQomIzQzOwlpZiAoIXJlYWRlcikKIAkJZ290byBvdXQ7CmBgYAoKUHJldmlvdXNseSwgYFdBUk5fT05gIHdhcyB1c2VkLiBOb3cgaXQmIzM5O3MgYSBzaW1wbGUgYGlmYCBjb25kaXRpb24uIFRoZSBgV0FSTl9PTmAgbWFjcm8gc2VlbXMgZXhjZXNzaXZlIGhlcmUuIEEgbnVsbCBgcmVhZGVyYCBwb2ludGVyIHN1Z2dlc3RzIGEgZnVuZGFtZW50YWwgaXNzdWUsIGFuZCBhIHNpbXBsZSBjaGVjayBiZWZvcmUgY29udGludWluZyBpcyBhIHBlcmZlY3RseSByZWFzb25hYmxlIGFwcHJvYWNoLiBJdCYjMzk7cyBhIG1hdHRlciBvZiBlbnN1cmluZyB3ZSBncmFjZWZ1bGx5IGhhbmRsZSB0aGUgc2NlbmFyaW8gd2hlcmUgYHJiX2dldF9yZWFkZXJfcGFnZWAgZmFpbHMgdG8gcmV0dXJuIGEgdmFsaWQgcmVhZGVyIHBhZ2UuIFRoaXMgY291bGQgYmUgZHVlIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlcyBvciBvdGhlciBsb3ctbGV2ZWwgcHJvYmxlbXMgd2l0aGluIHRoZSByaW5nIGJ1ZmZlciBpdHNlbGYuIFdlIGNoZWNrIGZvciBhIE5VTEwgYHJlYWRlcmAgcG9pbnRlciByZXR1cm5lZCBieSBgcmJfZ2V0X3JlYWRlcl9wYWdlYC4gVGhlICYjMzQ7Z290byBvdXQmIzM0OyBzdWdnZXN0cyB0aGF0IHdlIGhhbmRsZSBhIGBOVUxMYCBgcmVhZGVyYCBieSByZXR1cm5pbmcsIGxpa2VseSBwcm9wYWdhdGluZyBhbiBlcnJvciBjb2RlIHVwIHRoZSBjYWxsIHN0YWNrIHNvIHRoYXQgaXQgY2FuIGJlIGhhbmRsZWQgYXBwcm9wcmlhdGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzk2MDpcdH1cbjc5NjE6XHRcbjc5NjI6XHRpbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxuNzk2MzpcdHtcbjc5NjQ6XHRcdHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyO1xuNzk2NTpcdFx0c3RydWN0IGJ1ZmZlcl9wYWdlICpyZWFkZXI7XG43OTY2Olx0XHR1bnNpZ25lZCBsb25nIG1pc3NlZF9ldmVudHM7XG43OTY3Olx0XHR1bnNpZ25lZCBsb25nIHJlYWRlcl9zaXplO1xuNzk2ODpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjc5Njk6XHRcbjc5NzA6XHRcdGNwdV9idWZmZXIgPSByYl9nZXRfbWFwcGVkX2J1ZmZlcihidWZmZXIsIGNwdSk7XG43OTcxOlx0XHRpZiAoSVNfRVJSKGNwdV9idWZmZXIpKVxuNzk3MjpcdFx0XHRyZXR1cm4gKGludClQVFJfRVJSKGNwdV9idWZmZXIpO1xuNzk3MzpcdFxuNzk3NDpcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmNwdV9idWZmZXItXHUwMDNlcmVhZGVyX2xvY2ssIGZsYWdzKTtcbjc5NzU6XHRcbjc5NzY6XHRjb25zdW1lOlxuNzk3NzpcdFx0aWYgKHJiX3Blcl9jcHVfZW1wdHkoY3B1X2J1ZmZlcikpXG43OTc4Olx0XHRcdGdvdG8gb3V0O1xuNzk3OTpcdFxuNzk4MDpcdFx0cmVhZGVyX3NpemUgPSByYl9wYWdlX3NpemUoY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSk7XG43OTgxOlx0XG43OTgyOlx0XHQvKlxuNzk4MzpcdFx0ICogVGhlcmUgYXJlIGRhdGEgdG8gYmUgcmVhZCBvbiB0aGUgY3VycmVudCByZWFkZXIgcGFnZSwgd2UgY2FuXG43OTg0Olx0XHQgKiByZXR1cm4gdG8gdGhlIGNhbGxlci4gQnV0IGJlZm9yZSB0aGF0LCB3ZSBhc3N1bWUgdGhlIGxhdHRlciB3aWxsIHJlYWRcbjc5ODU6XHRcdCAqIGV2ZXJ5dGhpbmcuIExldCYjMzk7cyB1cGRhdGUgdGhlIGtlcm5lbCByZWFkZXIgYWNjb3JkaW5nbHkuXG43OTg2Olx0XHQgKi9cbjc5ODc6XHRcdGlmIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlLVx1MDAzZXJlYWQgXHUwMDNjIHJlYWRlcl9zaXplKSB7XG43OTg4Olx0XHRcdHdoaWxlIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlLVx1MDAzZXJlYWQgXHUwMDNjIHJlYWRlcl9zaXplKVxuNzk4OTpcdFx0XHRcdHJiX2FkdmFuY2VfcmVhZGVyKGNwdV9idWZmZXIpO1xuNzk5MDpcdFx0XHRnb3RvIG91dDtcbjc5OTE6XHRcdH1cbjc5OTI6XHRcbjc5OTM6XHRcdC8qIERpZCB0aGUgcmVhZGVyIGNhdGNoIHVwIHdpdGggdGhlIHdyaXRlcj8gKi9cbjc5OTQ6XHRcdGlmIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlID09IGNwdV9idWZmZXItXHUwMDNlY29tbWl0X3BhZ2UpXG43OTk1Olx0XHRcdGdvdG8gb3V0O1xuNzk5NjpcdFxuNzk5NzpcdFx0cmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpO1xuNzk5ODpcdFx0aWYgKCFyZWFkZXIpXG43OTk5Olx0XHRcdGdvdG8gb3V0O1xuODAwMDpcdFxuODAwMTpcdFx0LyogQ2hlY2sgaWYgYW55IGV2ZW50cyB3ZXJlIGRyb3BwZWQgKi9cbjgwMDI6XHRcdG1pc3NlZF9ldmVudHMgPSBjcHVfYnVmZmVyLVx1MDAzZWxvc3RfZXZlbnRzO1xuODAwMzpcdFxuODAwNDpcdFx0aWYgKG1pc3NlZF9ldmVudHMpIHtcbjgwMDU6XHRcdFx0aWYgKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci1cdTAwM2Vjb21taXRfcGFnZSkge1xuODAwNjpcdFx0XHRcdHN0cnVjdCBidWZmZXJfZGF0YV9wYWdlICpkcGFnZSA9IHJlYWRlci1cdTAwM2VwYWdlO1xuODAwNzpcdFx0XHRcdHVuc2lnbmVkIGludCBjb21taXQ7XG44MDA4Olx0XHRcdFx0LypcbjgwMDk6XHRcdFx0XHQgKiBVc2UgdGhlIHJlYWxfZW5kIGZvciB0aGUgZGF0YSBzaXplLFxuODAxMDpcdFx0XHRcdCAqIFRoaXMgZ2l2ZXMgdXMgYSBjaGFuY2UgdG8gc3RvcmUgdGhlIGxvc3QgZXZlbnRzXG44MDExOlx0XHRcdFx0ICogb24gdGhlIHBhZ2UuXG44MDEyOlx0XHRcdFx0ICovXG44MDEzOlx0XHRcdFx0aWYgKHJlYWRlci1cdTAwM2VyZWFsX2VuZClcbjgwMTQ6XHRcdFx0XHRcdGxvY2FsX3NldChcdTAwMjZkcGFnZS1cdTAwM2Vjb21taXQsIHJlYWRlci1cdTAwM2VyZWFsX2VuZCk7XG44MDE1Olx0XHRcdFx0LypcbjgwMTY6XHRcdFx0XHQgKiBJZiB0aGVyZSBpcyByb29tIGF0IHRoZSBlbmQgb2YgdGhlIHBhZ2UgdG8gc2F2ZSB0aGVcbjgwMTc6XHRcdFx0XHQgKiBtaXNzZWQgZXZlbnRzLCB0aGVuIHJlY29yZCBpdCB0aGVyZS5cbjgwMTg6XHRcdFx0XHQgKi9cbjgwMTk6XHRcdFx0XHRjb21taXQgPSByYl9wYWdlX3NpemUocmVhZGVyKTtcbjgwMjA6XHRcdFx0XHRpZiAocmJfcGFnZV9jYXBhY2l0eShyZWFkZXIpIC0gY29tbWl0IFx1MDAzZT0gc2l6ZW9mKG1pc3NlZF9ldmVudHMpKSB7XG44MDIxOlx0XHRcdFx0XHRtZW1jcHkoXHUwMDI2ZHBhZ2UtXHUwMDNlZGF0YVtjb21taXRdLCBcdTAwMjZtaXNzZWRfZXZlbnRzLFxuODAyMjpcdFx0XHRcdFx0ICAgICAgIHNpemVvZihtaXNzZWRfZXZlbnRzKSk7XG44MDIzOlx0XHRcdFx0XHRsb2NhbF9hZGQoUkJfTUlTU0VEX1NUT1JFRCwgXHUwMDI2ZHBhZ2UtXHUwMDNlY29tbWl0KTtcbjgwMjQ6XHRcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyOTkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogRnV6emluZyBBcHBsaWNhYmlsaXR5IG9mIHRoZSBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNoYW5nZSB0byBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgIG1lcml0cyBmdXp6aW5nIGJhc2VkIG9uIHRob3NlIHN0cmljdCBjcml0ZXJpYS4gSXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBpcyBhY2Nlc3NlZCB0aHJvdWdoIGB0cmFjaW5nX2J1ZmZlcnNfaW9jdGxgIGFuZCBleHBvc2VkIHRocm91Z2ggYHRyYWNlZnMvZnRyYWNlYCByaW5nIGJ1ZmZlciBmaWxlcy4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpGaXJzdCwgdGhlIGNvcmUgcHJpbmNpcGxlOiAqcmVhY2hhYmlsaXR5Ki4gQ2FuIHRoaXMgY29kZSBhY3R1YWxseSAqcnVuKiBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBZZXMsIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYHRyYWNlZnMvZnRyYWNlYCBpbnRlcmZhY2UuIEkgdGhpbmsgd2UgYXJlIGdvb2QgdGhlcmUuCgpOb3cgZm9yIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBmcm9tIFNlY3Rpb24gMi4gSXMgdGhpczoKCiogICBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZT8gTm8sIGl0JiMzOTtzIGtlcm5lbCBjb2RlLgoqICAgU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlPyBObywgdGhpcyBpbnRlcmZhY2VzIHdpdGggcmluZyBidWZmZXIuCiogICBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM/IEFsc28gbm8sIGlmIGl0IGlzIHJlYWNoYWJsZSB2aWEgaW9jdGwgY2FsbHMuCgpPa2F5LCB0aGF0JiMzOTtzIGVuY291cmFnaW5nLiBMZXQmIzM5O3MgbW92ZSB0byB0aGUgKnBvc2l0aXZlKiBjcml0ZXJpYSBpbiBTZWN0aW9uIDMuIERvZXMgaXQgdG91Y2ggYW55IG9mIHRob3NlIHNwZWNpZmljIGFyZWFzPwoKVGhlIGNoYW5nZSB0byBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoKWAgaW52b2x2ZXMgYW4gKmFsdGVyYXRpb24qIG9mIGFuIGFzc2VydGlvbiwgc3BlY2lmaWNhbGx5IGEgYFdBUk5fT05gIGNoZWNrLiBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYFdBUk5fT04oIXJlYWRlcilgLCBidXQgdGhpcyB3YXMgcmVtb3ZlZCB0byBqdXN0IGAhcmVhZGVyYC4gVGhpcyBhbHRlcmF0aW9uIGRpcmVjdGx5IHJlbGF0ZXMgdG8gKlJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrcyogd2l0aGluIHJlYWNoYWJsZSBjb2RlLiBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCB0aGUgYHJiX2dldF9yZWFkZXJfcGFnZSgpYCBmdW5jdGlvbiBjYW4gcmV0dXJuIGEgTlVMTCB2YWx1ZSBmb3IgbGVnaXRpbWF0ZSByZWFzb25zIChlLmcuLCBub3RoaW5nIHRvIHJlYWQgb3IgY29uY3VycmVudCBzd2FwKS4KClRoaXMgKmFwcGVhcnMqIHRvIGJlIGEgY2xlYXIgY2FzZSBmb3IgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdyB0byBkb3VibGUtY2hlY2s6IEkgc2hvdWxkIGNoZWNrIHRvIHNlZSB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyB0byBiZSBzdXJlLiBJJiMzOTtsbCBuZWVkIHRvIHNlYXJjaCB0aGUgYGtlcm5lbC90cmFjZS9LY29uZmlnYCBhbmQgYGtlcm5lbC90cmFjZS9NYWtlZmlsZWAgZmlsZXMgZm9yIGBDT05GSUdfUklOR19CVUZGRVJgLCBgQ09ORklHX1RSQUNJTkdgLCBgQ09ORklHX0ZUUkFDRWAsIG9yIGFueSByaW5nIGJ1ZmZlciByZWxhdGVkIG9wdGlvbnMsIGp1c3QgdG8gY29uZmlybSB0aGUgcGF0aCB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyaW5nX2J1ZmZlci5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9NYWtlZmlsZT02Mz1vYmotJChDT05GSUdfRlVOQ1RJT05fVFJBQ0VSKSAmIzQzOz0gbGliZnRyYWNlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfUklOR19CVUZGRVIpICYjNDM7PSByaW5nX2J1ZmZlci5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSykgJiM0Mzs9IHJpbmdfYnVmZmVyX2JlbmNobWFyay5vXG4tLVxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEzMz1vYmotJChDT05GSUdfVFJBQ0VfUkVNT1RFKSAmIzQzOz0gdHJhY2VfcmVtb3RlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxMzQ6b2JqLSQoQ09ORklHX1NJTVBMRV9SSU5HX0JVRkZFUikgJiM0Mzs9IHNpbXBsZV9yaW5nX2J1ZmZlci5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTM1LW9iai0kKENPTkZJR19UUkFDRV9SRU1PVEVfVEVTVCkgJiM0Mzs9IHJlbW90ZV90ZXN0Lm9cbi0tXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9MTYxPSQob2JqKS8lLm8uY2hlY2tlZDogJChvYmopLyUubyAkKG9iaikvdW5kZWZzeW1zX2Jhc2UubyBGT1JDRVxuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xNjMtXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTY0OmFsd2F5cy0kKENPTkZJR19TSU1QTEVfUklOR19CVUZGRVIpICYjNDM7PSBzaW1wbGVfcmluZ19idWZmZXIuby5jaGVja2VkXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTY1LVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTExMTc9X19wb2xsX3QgcmluZ19idWZmZXJfcG9sbF93YWl0KHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSxcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy0xMTc5LVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6MTE4MDovKiBidWZmZXIgbWF5IGJlIGVpdGhlciByaW5nX2J1ZmZlciBvciByaW5nX2J1ZmZlcl9wZXJfY3B1ICovXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy0xMTgxLSNkZWZpbmUgUkJfV0FSTl9PTihiLCBjb25kKVx0XHRcdFx0XHRcdFxcXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM9NTQxND1FWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9yZWNvcmRfZW5hYmxlX2NwdSk7XG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQxNi0vKipcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU0MTc6ICogcmluZ19idWZmZXJfb2xkZXN0X2V2ZW50X3RzIC0gZ2V0IHRoZSBvbGRlc3QgZXZlbnQgdGltZXN0YW1wIGZyb20gdGhlIGJ1ZmZlclxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQxOC0gKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXJcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDIwLSAqL1xua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTQyMTp1NjQgcmluZ19idWZmZXJfb2xkZXN0X2V2ZW50X3RzKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU0MjIte1xuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU0NDYtfVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTQ0NzpFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9vbGRlc3RfZXZlbnRfdHMpO1xua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQ0OC1cbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYz01NDg1PUVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX2VudHJpZXNfY3B1KTtcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDg3LS8qKlxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTQ4ODogKiByaW5nX2J1ZmZlcl9vdmVycnVuX2NwdSAtIGdldCB0aGUgbnVtYmVyIG9mIG92ZXJydW5zIGNhdXNlZCBieSB0aGUgcmluZ1xua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQ4OS0gKiBidWZmZXIgd3JhcHBpbmcgYXJvdW5kIChvbmx5IGlmIFJCX0ZMX09WRVJXUklURSBpcyBvbikuXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQ5Mi0gKi9cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU0OTM6dW5zaWduZWQgbG9uZyByaW5nX2J1ZmZlcl9vdmVycnVuX2NwdShzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDk0LXtcbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NTA1LX1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU1MDY6RVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUpO1xua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTUwNy1cbi0tXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYz01NTkyPUVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX2VudHJpZXMpO1xuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU1OTQtLyoqXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NTk1OiAqIHJpbmdfYnVmZmVyX292ZXJydW5zIC0gZ2V0IHRoZSBudW1iZXIgb2Ygb3ZlcnJ1bnMgaW4gYnVmZmVyXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NTk2LSAqIEBidWZmZXI6IFRoZSByaW5nIGJ1ZmZlclxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU2MDAtICovXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NjAxOnVuc2lnbmVkIGxvbmcgcmluZ19idWZmZXJfb3ZlcnJ1bnMoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyKVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTYwMi17XG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTYxNC19XG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NjE1OkVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX292ZXJydW5zKTtcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU2MTYtXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyX2JlbmNobWFyay5jPTIzMj1zdGF0aWMgdm9pZCByaW5nX2J1ZmZlcl9wcm9kdWNlcih2b2lkKVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlcl9iZW5jaG1hcmsuYy0zMDEtXHRlbnRyaWVzID0gcmluZ19idWZmZXJfZW50cmllcyhidWZmZXIpO1xua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyX2JlbmNobWFyay5jOjMwMjpcdG92ZXJydW5zID0gcmluZ19idWZmZXJfb3ZlcnJ1bnMoYnVmZmVyKTtcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlcl9iZW5jaG1hcmsuYy0zMDMtXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmM9MjgyMj1nZXRfdG90YWxfZW50cmllc19jcHUoc3RydWN0IGFycmF5X2J1ZmZlciAqYnVmLCB1bnNpZ25lZCBsb25nICp0b3RhbCxcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy0yODM4LVx0XHQqdG90YWwgPSBjb3VudCAmIzQzO1xua2VybmVsL3RyYWNlL3RyYWNlLmM6MjgzOTpcdFx0XHRyaW5nX2J1ZmZlcl9vdmVycnVuX2NwdShidWYtXHUwMDNlYnVmZmVyLCBjcHUpO1xua2VybmVsL3RyYWNlL3RyYWNlLmMtMjg0MC1cdCplbnRyaWVzID0gY291bnQ7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmM9MzM2Nz1fX3RyYWNpbmdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgYm9vbCBzbmFwc2hvdClcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy0zNDMwLVx0LyogQW5ub3RhdGUgc3RhcnQgb2YgYnVmZmVycyBpZiB3ZSBoYWQgb3ZlcnJ1bnMgKi9cbmtlcm5lbC90cmFjZS90cmFjZS5jOjM0MzE6XHRpZiAocmluZ19idWZmZXJfb3ZlcnJ1bnMoaXRlci1cdTAwM2VhcnJheV9idWZmZXItXHUwMDNlYnVmZmVyKSlcbmtlcm5lbC90cmFjZS90cmFjZS5jLTM0MzItXHRcdGl0ZXItXHUwMDNlaXRlcl9mbGFncyB8PSBUUkFDRV9GSUxFX0FOTk9UQVRFO1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5jPTc0NzI9dHJhY2luZ19zdGF0c19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1Zixcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDkyLVxua2VybmVsL3RyYWNlL3RyYWNlLmM6NzQ5MzpcdGNudCA9IHJpbmdfYnVmZmVyX292ZXJydW5fY3B1KHRyYWNlX2J1Zi1cdTAwM2VidWZmZXIsIGNwdSk7XG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDk0LVx0dHJhY2Vfc2VxX3ByaW50ZihzLCBcJiMzNDtvdmVycnVuOiAlbGRcXG5cJiMzNDssIGNudCk7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzUwMy1cdFx0LyogbG9jYWwgb3IgZ2xvYmFsIGZvciB0cmFjZV9jbG9jayAqL1xua2VybmVsL3RyYWNlL3RyYWNlLmM6NzUwNDpcdFx0dCA9IG5zMnVzZWNzKHJpbmdfYnVmZmVyX29sZGVzdF9ldmVudF90cyh0cmFjZV9idWYtXHUwMDNlYnVmZmVyLCBjcHUpKTtcbmtlcm5lbC90cmFjZS90cmFjZS5jLTc1MDUtXHRcdHVzZWNfcmVtID0gZG9fZGl2KHQsIFVTRUNfUEVSX1NFQyk7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzUxNC1cdFx0dHJhY2Vfc2VxX3ByaW50ZihzLCBcJiMzNDtvbGRlc3QgZXZlbnQgdHM6ICVsbHVcXG5cJiMzNDssXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo3NTE1Olx0XHRcdFx0cmluZ19idWZmZXJfb2xkZXN0X2V2ZW50X3RzKHRyYWNlX2J1Zi1cdTAwM2VidWZmZXIsIGNwdSkpO1xua2VybmVsL3RyYWNlL3RyYWNlLmMtNzUxNi1cbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2UuYz05Mzc4PXN0YXRpYyB2b2lkIHRyYWNlX2luaXRfaXRlcihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpXG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmMtOTM4OC1cdC8qIEFubm90YXRlIHN0YXJ0IG9mIGJ1ZmZlcnMgaWYgd2UgaGFkIG92ZXJydW5zICovXG5rZXJuZWwvdHJhY2UvdHJhY2UuYzo5Mzg5Olx0aWYgKHJpbmdfYnVmZmVyX292ZXJydW5zKGl0ZXItXHUwMDNlYXJyYXlfYnVmZmVyLVx1MDAzZWJ1ZmZlcikpXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy05MzkwLVx0XHRpdGVyLVx1MDAzZWl0ZXJfZmxhZ3MgfD0gVFJBQ0VfRklMRV9BTk5PVEFURTtcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfbW1pb3RyYWNlLmM9MTIwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X292ZXJydW5zKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcilcbi0tXG5rZXJuZWwvdHJhY2UvdHJhY2VfbW1pb3RyYWNlLmMtMTIyLVx0dW5zaWduZWQgbG9uZyBjbnQgPSBhdG9taWNfeGNoZyhcdTAwMjZkcm9wcGVkX2NvdW50LCAwKTtcbmtlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYzoxMjM6XHR1bnNpZ25lZCBsb25nIG92ZXIgPSByaW5nX2J1ZmZlcl9vdmVycnVucyhpdGVyLVx1MDAzZWFycmF5X2J1ZmZlci1cdTAwM2VidWZmZXIpO1xua2VybmVsL3RyYWNlL3RyYWNlX21taW90cmFjZS5jLTEyNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzOTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgdGhlIEtlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGEgZmV3IGtleSB0cmFjaW5nIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgbW9zdCBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGUgcmluZyBidWZmZXIgaW1wbGVtZW50YXRpb24gYW5kIHRoZSBjb3JlIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGVuc3VyaW5nIHRoYXQgYFJJTkdfQlVGRkVSYCBhbmQgYFRSQUNJTkdgIGFyZSBib3RoIGVuYWJsZWQsIG9yIGF0IGxlYXN0IGNvbmZpZ3VyZWQgaW4gYSB3YXkgdGhhdCBhbGxvd3MgdGhlbSB0byBiZSBwcm9wZXJseSB1dGlsaXplZCwgb3IgYXQgbGVhc3Qgbm90IGluYWR2ZXJ0ZW50bHkgZGlzYWJsZWQsIHNpbmNlIHRoYXQgd291bGQgYmUgYSB2ZXJ5IGZydXN0cmF0aW5nIG92ZXJzaWdodC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoZWlyIHN0YXR1cyBhbmQgYW55IHJlbGV2YW50IGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCBzZXR0aW5ncyB0byBlbnN1cmUgdGhlIGZ1bmN0aW9uYWxpdHkgSSBleHBlY3QgaXMgcHJlc2VudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJJTkdfQlVGRkVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTE0MT1jb25maWcgVFJBQ0VfQ0xPQ0tcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xNDMtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxNDQ6Y29uZmlnIFJJTkdfQlVGRkVSXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xNDUtXHRib29sXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9MTU0PWNvbmZpZyBDT05URVhUX1NXSVRDSF9UUkFDRVJcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xNTYtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxNTc6Y29uZmlnIFJJTkdfQlVGRkVSX0FMTE9XX1NXQVBcbmtlcm5lbC90cmFjZS9LY29uZmlnLTE1OC1cdGJvb2xcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz05ODc9Y29uZmlnIFRSQUNFUE9JTlRfQkVOQ0hNQVJLXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTAxNi1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwMTc6Y29uZmlnIFJJTkdfQlVGRkVSX0JFTkNITUFSS1xua2VybmVsL3RyYWNlL0tjb25maWctMTAxOC1cdHRyaXN0YXRlIFwmIzM0O1JpbmcgYnVmZmVyIGJlbmNobWFyayBzdHJlc3MgdGVzdGVyXCYjMzQ7XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9MTA4Nj1jb25maWcgRlRSQUNFX1ZBTElEQVRFX1JDVV9JU19XQVRDSElOR1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwOTgtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDk5OmNvbmZpZyBSSU5HX0JVRkZFUl9SRUNPUkRfUkVDVVJTSU9OXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTAwLVx0Ym9vbCBcJiMzNDtSZWNvcmQgZnVuY3Rpb25zIHRoYXQgcmVjdXJzZSBpbiB0aGUgcmluZyBidWZmZXJcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTYwPWNvbmZpZyBGVFJBQ0VfU09SVF9TVEFSVFVQX1RFU1Rcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTczLVxua2VybmVsL3RyYWNlL0tjb25maWc6MTE3NDpjb25maWcgUklOR19CVUZGRVJfU1RBUlRVUF9URVNUXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTc1LSAgICAgICBib29sIFwmIzM0O1JpbmcgYnVmZmVyIHN0YXJ0dXAgc2VsZiB0ZXN0XCYjMzQ7XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTE5Ni1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjExOTc6Y29uZmlnIFJJTkdfQlVGRkVSX1ZBTElEQVRFX1RJTUVfREVMVEFTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTk4LVx0Ym9vbCBcJiMzNDtWZXJpZnkgcmluZyBidWZmZXIgdGltZSBzdGFtcCBkZWx0YXNcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMjE2LVxua2VybmVsL3RyYWNlL0tjb25maWc6MTIxNzpjb25maWcgUklOR19CVUZGRVJfUEVSU0lTVEVOVF9JTkpFQ1Rcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEyMTgtXHRib29sIFwmIzM0O0VuYWJsZSBwZXJzaXN0ZW50IHJpbmcgYnVmZmVyIGVycm9yIGluamVjdGlvbiB0ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTMyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyBgUklOR19CVUZGRVJgIGFuZCBgVFJBQ0lOR2AgaW4gYGtlcm5lbC90cmFjZS9LY29uZmlnYDoKCioqSW52ZXN0aWdhdGluZyBLZXJuZWwgVHJhY2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYFJJTkdfQlVGRkVSYCBhbmQgYFRSQUNJTkdgIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIHRyYWNpbmcgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGluc2lkZSBga2VybmVsL3RyYWNlL0tjb25maWdgLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIEtjb25maWcgZmlsZSBpdHNlbGYuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGFueSByZWxhdGlvbnNoaXBzIHRoZXkmIzM5O3ZlIGRlZmluZWQgd2l0aCBvdGhlciBrZXJuZWwgZmVhdHVyZXMuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGVzZSBzZXR0aW5ncyB3aWxsIGRldGVybWluZSB3aGV0aGVyIHRoZSBrZXJuZWwmIzM5O3MgdHJhY2luZyBpbmZyYXN0cnVjdHVyZSBsZXZlcmFnZXMgYSByaW5nIGJ1ZmZlciBmb3IgZGF0YSBzdG9yYWdlLCBhbmQgaG93IHRoZSBvdmVyYWxsIHRyYWNpbmcgc3lzdGVtIGlzIGVuYWJsZWQuIEkmIzM5O20gZXhwZWN0aW5nIGBUUkFDSU5HYCB0byBiZSBhIGJyb2FkZXIgZW5hYmxpbmcgb3B0aW9uLCBwb3NzaWJseSB3aXRoIGBSSU5HX0JVRkZFUmAgYXMgYSBzdXBwb3J0aW5nIGRldGFpbCB3aXRoaW4gdGhhdCBtb3JlIGNvbXByZWhlbnNpdmUgZmVhdHVyZSBzZXQuIEtub3dpbmcgdGhpcyBpbnRlcnBsYXkgaXMgZXNzZW50aWFsIGZvciBjdXN0b21pemluZyB0aGUgdHJhY2luZyBzZXR1cCBmb3Igc3BlY2lmaWMgcGVyZm9ybWFuY2Ugb3IgZGVidWdnaW5nIG5lZWRzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0aGUgS2NvbmZpZyBhY3R1YWxseSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHRjb25maWcgQlVJTERUSU1FX01DT1VOVF9TT1JUXG4gMTMxOlx0ICAgICAgIGJvb2xcbiAxMzI6XHQgICAgICAgZGVmYXVsdCB5XG4gMTMzOlx0ICAgICAgIGRlcGVuZHMgb24gSEFWRV9CVUlMRFRJTUVfTUNPVU5UX1NPUlQgXHUwMDI2XHUwMDI2IERZTkFNSUNfRlRSQUNFXG4gMTM0Olx0ICAgICAgIGhlbHBcbiAxMzU6XHQgICAgICAgICBTb3J0IHRoZSBtY291bnRfbG9jIHNlY3Rpb24gYXQgYnVpbGQgdGltZS5cbiAxMzY6XHRcbiAxMzc6XHRjb25maWcgVFJBQ0VSX01BWF9UUkFDRVxuIDEzODpcdFx0Ym9vbFxuIDEzOTpcdFx0c2VsZWN0IFRSQUNFUl9TTkFQU0hPVFxuIDE0MDpcdFxuIDE0MTpcdGNvbmZpZyBUUkFDRV9DTE9DS1xuIDE0MjpcdFx0Ym9vbFxuIDE0MzpcdFxuIDE0NDpcdGNvbmZpZyBSSU5HX0JVRkZFUlxuIDE0NTpcdFx0Ym9vbFxuIDE0NjpcdFx0c2VsZWN0IFRSQUNFX0NMT0NLXG4gMTQ3Olx0XHRzZWxlY3QgSVJRX1dPUktcbiAxNDg6XHRcbiAxNDk6XHRjb25maWcgRVZFTlRfVFJBQ0lOR1xuIDE1MDpcdFx0c2VsZWN0IENPTlRFWFRfU1dJVENIX1RSQUNFUlxuIDE1MTpcdFx0c2VsZWN0IEdMT0JcbiAxNTI6XHRcdGJvb2xcbiAxNTM6XHRcbiAxNTQ6XHRjb25maWcgQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSXG4gMTU1Olx0XHRib29sXG4gMTU2Olx0XG4gMTU3Olx0Y29uZmlnIFJJTkdfQlVGRkVSX0FMTE9XX1NXQVBcbiAxNTg6XHRcdGJvb2xcbiAxNTk6XHRcdGhlbHBcbiAxNjA6XHRcdCBBbGxvdyB0aGUgdXNlIG9mIHJpbmdfYnVmZmVyX3N3YXBfY3B1LlxuIDE2MTpcdFx0IEFkZHMgYSB2ZXJ5IHNsaWdodCBvdmVyaGVhZCB0byB0cmFjaW5nIHdoZW4gZW5hYmxlZC5cbiAxNjI6XHRcbiAxNjM6XHRjb25maWcgUFJFRU1QVElSUV9UUkFDRVBPSU5UU1xuIDE2NDpcdFx0Ym9vbFxuIDE2NTpcdFx0ZGVwZW5kcyBvbiBUUkFDRV9QUkVFTVBUX1RPR0dMRSB8fCBUUkFDRV9JUlFGTEFHU1xuIDE2NjpcdFx0c2VsZWN0IFRSQUNJTkdcbiAxNjc6XHRcdGRlZmF1bHQgeVxuIDE2ODpcdFx0aGVscFxuIDE2OTpcdFx0ICBDcmVhdGUgcHJlZW1wdC9pcnEgdG9nZ2xlIHRyYWNlcG9pbnRzIGlmIG5lZWRlZCwgc28gdGhhdCBvdGhlciBwYXJ0c1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg3NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgYFJJTkdfQlVGRkVSYCBhbmQgYFRSQUNJTkdgIENvZGUgUGF0aHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIGNvZGUgdGhhdCYjMzk7cyBzZWxlY3Rpbmcgb3IgZW5hYmxpbmcgKmJvdGgqIGBSSU5HX0JVRkZFUmAgYW5kIGBUUkFDSU5HYD8mIzM0OyBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIHByb2plY3QsIHplcm9pbmcgaW4gb24gYW55IGNvbmRpdGlvbmFsIGxvZ2ljLCBjb25maWd1cmF0aW9uIGZpbGVzLCBvciBidWlsZCBzY3JpcHRzIHRoYXQgbWlnaHQgYmUgcmVzcG9uc2libGUgZm9yIHRoaXMgY291cGxpbmcuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHJvb3QgY2F1c2UsIHRoZSB0cmlnZ2VyIHRoYXQmIzM5O3MgbGVhZGluZyB0aGVzZSB0d28gZmVhdHVyZXMgdG8gYmUgYWN0aXZhdGVkIHRvZ2V0aGVyLiBJcyBpdCBhbiBpbnRlbmRlZCBmZWF0dXJlIGludGVyYWN0aW9uPyBBIGJ1Zz8gQSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXkmIzM5O3JlIGxpbmtlZCBpbiB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhlcmUgYXJlIGEgZmV3IGxpa2VseSBhcmVhcyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGZpcnN0LCBidXQgSSBuZWVkIHRvIHN0YXJ0IHNvbWV3aGVyZS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBLY29uZmlnIHNldHRpbmdzLCBhbmQgYW55IGN1c3RvbSBidWlsZCBzeXN0ZW1zIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBwaW5wb2ludCB0aGUgbWVjaGFuaXNtIHRoYXQgY29udHJvbHMgdGhpcyBkdWFsIGFjdGl2YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBSSU5HX0JVRkZFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz0xNzk9Y29uZmlnIFRSQUNJTkdcbmtlcm5lbC90cmFjZS9LY29uZmlnLTE4MC1cdGJvb2xcbmtlcm5lbC90cmFjZS9LY29uZmlnOjE4MTpcdHNlbGVjdCBSSU5HX0JVRkZFUlxua2VybmVsL3RyYWNlL0tjb25maWctMTgyLVx0c2VsZWN0IFNUQUNLVFJBQ0UgaWYgU1RBQ0tUUkFDRV9TVVBQT1JUXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9NDIxPWNvbmZpZyBJUlFTT0ZGX1RSQUNFUlxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTQyNy1cdHNlbGVjdCBUUkFDRVJfTUFYX1RSQUNFXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo0Mjg6XHRzZWxlY3QgUklOR19CVUZGRVJfQUxMT1dfU1dBUFxua2VybmVsL3RyYWNlL0tjb25maWctNDI5LVx0c2VsZWN0IFRSQUNFUl9TTkFQU0hPVF9QRVJfQ1BVX1NXQVBcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz00NDQ9Y29uZmlnIFBSRUVNUFRfVFJBQ0VSXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctNDQ5LVx0c2VsZWN0IFRSQUNFUl9NQVhfVFJBQ0Vcbmtlcm5lbC90cmFjZS9LY29uZmlnOjQ1MDpcdHNlbGVjdCBSSU5HX0JVRkZFUl9BTExPV19TV0FQXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy00NTEtXHRzZWxlY3QgVFJBQ0VSX1NOQVBTSE9UX1BFUl9DUFVfU1dBUFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTYzMT1jb25maWcgVFJBQ0VSX1NOQVBTSE9UX1BFUl9DUFVfU1dBUFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTYzMy1cdGRlcGVuZHMgb24gVFJBQ0VSX1NOQVBTSE9UXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo2MzQ6XHRzZWxlY3QgUklOR19CVUZGRVJfQUxMT1dfU1dBUFxua2VybmVsL3RyYWNlL0tjb25maWctNjM1LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUwMwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8ga2VybmVsIHRyYWNpbmcuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGxvb2sgYXQgYENPTkZJR19GVFJBQ0VgLCBgQ09ORklHX1RSQUNJTkdgLCBhbmQgYENPTkZJR19SSU5HX0JVRkZFUmAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgcHJpbWFyeSBzdXNwZWN0cy4gTm93LCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBkZWx2ZSBpbnRvIHRoZSBga2VybmVsL3RyYWNlL0tjb25maWdgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIHVzZXItZmFjaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRyYWNpbmcgYXJlIHVzdWFsbHkgZGVmaW5lZC4gSSYjMzk7bSBzZWFyY2hpbmcgZm9yIHRoZSBzcGVjaWZpYyB1c2VyLXZpc2libGUgY29uZmlnIHRoYXQgaW4gdHVybiBlbmFibGVzIHRoZSBicm9hZCBmdW5jdGlvbmFsaXR5IHRoYXQgJiMzNDtUUkFDSU5HJiMzNDsgcmVwcmVzZW50cywgYW5kIGl0IHNob3VsZCBiZSBpbiB0aGlzIEtjb25maWcgZmlsZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUga2V5IHRvIHVubG9jayB0aGUgdHJhY2luZyBmdW5jdGlvbmFsaXR5IEkmIzM5O20gaW50ZXJlc3RlZCBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZUUkFDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz0xOTg9Y29uZmlnIFRSQUNJTkdfU1VQUE9SVFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTIwMy1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjIwNDptZW51Y29uZmlnIEZUUkFDRVxua2VybmVsL3RyYWNlL0tjb25maWctMjA1LVx0Ym9vbCBcJiMzNDtUcmFjZXJzXCYjMzQ7XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9NTg4PWNvbmZpZyBFTkFCTEVfREVGQVVMVF9UUkFDRVJTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctNTk2LVxua2VybmVsL3RyYWNlL0tjb25maWc6NTk3OmNvbmZpZyBGVFJBQ0VfU1lTQ0FMTFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTU5OC1cdGJvb2wgXCYjMzQ7VHJhY2Ugc3lzY2FsbHNcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz04ODA9Y29uZmlnIEJQRl9LUFJPQkVfT1ZFUlJJREVcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04ODgtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4ODk6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX1BBVENIQUJMRV9GVU5DVElPTl9FTlRSWVxua2VybmVsL3RyYWNlL0tjb25maWctODkwLVx0Ym9vbFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg5Mi1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg5Mzpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfQ0Ncbmtlcm5lbC90cmFjZS9LY29uZmlnLTg5NC1cdGRlZl9ib29sIHlcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04OTgtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4OTk6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX09CSlRPT0xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTkwMC1cdGRlZl9ib29sIHlcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy05MDYtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo5MDc6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX1JFQ09SRE1DT1VOVFxua2VybmVsL3RyYWNlL0tjb25maWctOTA4LVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTEwMzM9Y29uZmlnIFRSQUNFX0VWQUxfTUFQX0ZJTEVcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDYwLVxua2VybmVsL3RyYWNlL0tjb25maWc6MTA2MTpjb25maWcgRlRSQUNFX1JFQ09SRF9SRUNVUlNJT05cbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNjItXHRib29sIFwmIzM0O1JlY29yZCBmdW5jdGlvbnMgdGhhdCByZWN1cnNlIGluIGZ1bmN0aW9uIHRyYWNpbmdcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDc0LVxua2VybmVsL3RyYWNlL0tjb25maWc6MTA3NTpjb25maWcgRlRSQUNFX1JFQ09SRF9SRUNVUlNJT05fU0laRVxua2VybmVsL3RyYWNlL0tjb25maWctMTA3Ni1cdGludCBcJiMzNDtNYXggbnVtYmVyIG9mIHJlY3Vyc2VkIGZ1bmN0aW9ucyB0byByZWNvcmRcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDg1LVxua2VybmVsL3RyYWNlL0tjb25maWc6MTA4Njpjb25maWcgRlRSQUNFX1ZBTElEQVRFX1JDVV9JU19XQVRDSElOR1xua2VybmVsL3RyYWNlL0tjb25maWctMTA4Ny1cdGJvb2wgXCYjMzQ7VmFsaWRhdGUgUkNVIGlzIG9uIGR1cmluZyBmdHJhY2UgZXhlY3V0aW9uXCYjMzQ7XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9MTExMz1jb25maWcgR0NPVl9QUk9GSUxFX0ZUUkFDRVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMjQtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMTI1OmNvbmZpZyBGVFJBQ0VfU0VMRlRFU1Rcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMjYtXHRib29sXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTI3LVxua2VybmVsL3RyYWNlL0tjb25maWc6MTEyODpjb25maWcgRlRSQUNFX1NUQVJUVVBfVEVTVFxua2VybmVsL3RyYWNlL0tjb25maWctMTEyOS1cdGJvb2wgXCYjMzQ7UGVyZm9ybSBhIHN0YXJ0dXAgdGVzdCBvbiBmdHJhY2VcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTQ4PWNvbmZpZyBFVkVOVF9UUkFDRV9URVNUX1NZU0NBTExTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTE1OS1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjExNjA6Y29uZmlnIEZUUkFDRV9TT1JUX1NUQVJUVVBfVEVTVFxua2VybmVsL3RyYWNlL0tjb25maWctMTE2MS0gICAgICAgYm9vbCBcJiMzNDtWZXJpZnkgY29tcGlsZSB0aW1lIHNvcnRpbmcgb2YgZnRyYWNlIGZ1bmN0aW9uc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU3OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipUcmFjaW5nIEtlcm5lbCBDb25maWd1cmF0aW9uczogQSBRdWljayBMb29rKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGUgYGZ0cmFjZWAgb3B0aW9uIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHNlZS4uLkkmIzM5O2xsIGp1bXAgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgc28gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCB3YW50IHRvIGNoZWNrIGBtZW51Y29uZmlnIEZUUkFDRWAgaW4gdGhlIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbW9zdCBkaXJlY3Qgcm91dGUgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0cyByZWxhdGVkIHRvIGBmdHJhY2VgLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBnZXQgbWUgYSBjbGVhciB2aWV3IG9mIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgZmVhdHVyZXMuIEkmIzM5O20gYWZ0ZXIgYSBxdWljaywgZm9jdXNlZCBvdmVydmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjAwOlx0XHRkZXBlbmRzIG9uIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlRcbiAyMDE6XHRcdGRlcGVuZHMgb24gU1RBQ0tUUkFDRV9TVVBQT1JUXG4gMjAyOlx0XHRkZWZhdWx0IHlcbiAyMDM6XHRcbiAyMDQ6XHRtZW51Y29uZmlnIEZUUkFDRVxuIDIwNTpcdFx0Ym9vbCBcJiMzNDtUcmFjZXJzXCYjMzQ7XG4gMjA2Olx0XHRkZXBlbmRzIG9uIFRSQUNJTkdfU1VQUE9SVFxuIDIwNzpcdFx0ZGVmYXVsdCB5IGlmIERFQlVHX0tFUk5FTFxuIDIwODpcdFx0aGVscFxuIDIwOTpcdFx0ICBFbmFibGUgdGhlIGtlcm5lbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxuIDIxMDpcdFxuIDIxMTpcdGlmIEZUUkFDRVxuIDIxMjpcdFxuIDIxMzpcdGNvbmZpZyBUUkFDRUZTX0FVVE9NT1VOVF9ERVBSRUNBVEVEXG4gMjE0Olx0XHRib29sIFwmIzM0O0F1dG9tb3VudCB0cmFjZWZzIG9uIGRlYnVnZnMgW0RFUFJFQ0FURURdXCYjMzQ7XG4gMjE1Olx0XHRkZXBlbmRzIG9uIFRSQUNJTkdcbiAyMTY6XHRcdGRlZmF1bHQgeVxuIDIxNzpcdFx0aGVscFxuIDIxODpcdFx0ICBUaGUgdHJhY2luZyBpbnRlcmZhY2Ugd2FzIG1vdmVkIGZyb20gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZ1xuIDIxOTpcdFx0ICB0byAvc3lzL2tlcm5lbC90cmFjaW5nIGluIDIwMTUsIGJ1dCB0aGUgdHJhY2luZyBmaWxlIHN5c3RlbVxuIDIyMDpcdFx0ICB3YXMgc3RpbGwgYXV0b21vdW50ZWQgaW4gL3N5cy9rZXJuZWwvZGVidWcgZm9yIGJhY2t3YXJkXG4gMjIxOlx0XHQgIGNvbXBhdGliaWxpdHkgd2l0aCB0b29saW5nLlxuIDIyMjpcdFxuIDIyMzpcdFx0ICBUaGUgbmV3IGludGVyZmFjZSBoYXMgYmVlbiBhcm91bmQgZm9yIG1vcmUgdGhhbiAxMCB5ZWFycyBhbmRcbiAyMjQ6XHRcdCAgdGhlIG9sZCBkZWJ1ZyBtb3VudCB3aWxsIHNvb24gYmUgcmVtb3ZlZC5cbiAyMjU6XHRcbiAyMjY6XHRjb25maWcgQk9PVFRJTUVfVFJBQ0lOR1xuIDIyNzpcdFx0Ym9vbCBcJiMzNDtCb290LXRpbWUgVHJhY2luZyBzdXBwb3J0XCYjMzQ7XG4gMjI4Olx0XHRkZXBlbmRzIG9uIFRSQUNJTkdcbiAyMjk6XHRcdHNlbGVjdCBCT09UX0NPTkZJR1xuIDIzMDpcdFx0aGVscFxuIDIzMTpcdFx0ICBFbmFibGUgZGV2ZWxvcGVyIHRvIHNldHVwIGZ0cmFjZSBzdWJzeXN0ZW0gdmlhIHN1cHBsZW1lbnRhbFxuIDIzMjpcdFx0ICBrZXJuZWwgY21kbGluZSBhdCBib290IHRpbWUgZm9yIGRlYnVnZ2luZyAodHJhY2luZykgZHJpdmVyXG4gMjMzOlx0XHQgIGluaXRpYWxpemF0aW9uIGFuZCBib290IHByb2Nlc3MuXG4gMjM0Olx0XG4gMjM1Olx0Y29uZmlnIEZVTkNUSU9OX1RSQUNFUlxuIDIzNjpcdFx0Ym9vbCBcJiMzNDtLZXJuZWwgRnVuY3Rpb24gVHJhY2VyXCYjMzQ7XG4gMjM3Olx0XHRkZXBlbmRzIG9uIEhBVkVfRlVOQ1RJT05fVFJBQ0VSXG4gMjM4Olx0XHRzZWxlY3QgS0FMTFNZTVNcbiAyMzk6XHRcdHNlbGVjdCBHRU5FUklDX1RSQUNFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMyMQoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiA0NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBWZXJkaWN0OiBUcmFjZSBSaW5nIEJ1ZmZlciBSZWFkZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgZW5hYmxpbmcgYENPTkZJR19GVFJBQ0VgIG9yIGBDT05GSUdfVFJBQ0lOR2AgYXV0b21hdGljYWxseSBpbmNsdWRlcyBgQ09ORklHX1JJTkdfQlVGRkVSYCwgc28gdGhvc2UgYXJlIHRoZSBrZXkgb25lcyB0byBhZGQgdG8gYEVuYWJsZUNvbmZpZ3NgLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGdvIHdpdGggYFRSQUNJTkdgIGFuZCBgRlRSQUNFYC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBUaGUgZGlmZiBtb2RpZmllcyBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgY2FsbGVycyBhbmQgcmVsYXRlZCBmdW5jdGlvbnMsIHNvIGxldCYjMzk7cyBzZWUuLi4gYHRyYWNpbmdfYnVmZmVyc19pb2N0bGAgY2FsbHMgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCwgYW5kIGByYl9nZXRfcmVhZGVyX3BhZ2VgIGlzIGNhbGxlZCB3aXRoaW4gYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYC4KClRoZSBuZXh0IGltcG9ydGFudCBwb2ludCBpcyB0byBlc3RhYmxpc2ggaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgZmVhdHVyZS4gR29vZCBuZXdzISBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLCBgcmJfZ2V0X3JlYWRlcl9wYWdlYCwgYW5kIGB0cmFjaW5nX2J1ZmZlcnNfaW9jdGxgIGFyZSAqZGVmaW5pdGVseSogc3BlY2lmaWMgdG8gdGhlIHJpbmcgYnVmZmVyIHRyYWNpbmcgbW1hcCByZWFkZXIgZmVhdHVyZS4gVGhpcyBpbmNyZWFzZXMgdGhlIGxpa2VsaWhvb2QgdGhhdCBhIGZ1enppbmcgY2FtcGFpZ24gd2lsbCB1bmVhcnRoIHZ1bG5lcmFiaWxpdGllcy4KCkFscmlnaHQsIHdoYXQmIzM5O3MgdGhlIHZlcmRpY3Qgb24gYFdvcnRoRnV6emluZ2A/IFRoaXMgaXMgYSBuby1icmFpbmVyOiBBYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggY2hhbmdlcyBleGVjdXRhYmxlIGNvZGUgaW4gYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYC4gU3BlY2lmaWNhbGx5LCBpdCByZW1vdmVzIGEgYFdBUk5fT05gIGFzc2VydGlvbi4gVGhpcyBhc3NlcnRpb24gaGFuZGxlZCB0aGUgY2FzZSB3aGVyZSBhIHJlYWRlciBpcyBvYnRhaW5lZC9hYnNlbnQgd2hlbiBtbWFwcGluZy9yZWFkaW5nIHRoZSB0cmFjZSByaW5nIGJ1ZmZlciwgd2hpY2ggc291bmRzIGxpa2Ugc29tZXRoaW5nIHdlIHNob3VsZCBzY3J1dGluaXplLiBDcnVjaWFsbHksIHRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgVFJBQ0VfTU1BUF9JT0NUTF9HRVRfUkVBREVSYCBpb2N0bCBvbiB0cmFjZWZzIGJ1ZmZlciBmaWxlcy4gSXQmIzM5O3MgbW9kaWZ5aW5nIGEga2VybmVsIHJ1bnRpbWUgYXNzZXJ0aW9uLCBhIGRlZmVuc2l2ZSBjaGVjaywgaW4gYSBjb3JlIHRyYWNpbmcgc3Vic3lzdGVtLiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIHVuZXF1aXZvY2FsbHkgYHRydWVgLgoKSSYjMzk7dmUgZ290IHRvIG1ha2Ugc3VyZSB0aGlzIGFsaWducyB3aXRoIHRoZSBjcml0ZXJpYS4gVGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSAoY2hlY2shKSwgaW5jbHVkaW5nIGEgY29yZSBzdWJzeXN0ZW0gKHRyYWNpbmcpIGFuZCBtb2RpZmllcyBhIHJ1bnRpbWUgYXNzZXJ0aW9uLiBDaGVjayBhZ2FpbiEKClNvLCB0aGUgZXNzZW50aWFsczoKCiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgCiogICBgRm9jdXNTeW1ib2xzYDogYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCwgYHRyYWNpbmdfYnVmZmVyc19pb2N0bGAsIGByYl9nZXRfcmVhZGVyX3BhZ2VgCiogICBgRW5hYmxlQ29uZmlnc2A6IGBUUkFDSU5HYCwgYEZUUkFDRWAKKiAgIFJlYXNvbmluZzogQ29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgdmVyZGljdC4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBQ0lORyYjMzQ7LAogICAgJiMzNDtGVFJBQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlciYjMzQ7LAogICAgJiMzNDt0cmFjaW5nX2J1ZmZlcnNfaW9jdGwmIzM0OywKICAgICYjMzQ7cmJfZ2V0X3JlYWRlcl9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWFkZXIgYWNxdWlzaXRpb24gbG9naWMgaW4gdGhlIHJpbmcgYnVmZmVyIHN1YnN5c3RlbSBieSByZW1vdmluZyBhIFdBUk5fT04gYXNzZXJ0aW9uIHdoZW4gcmJfZ2V0X3JlYWRlcl9wYWdlKCkgcmV0dXJucyBOVUxMIGluIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKCkuIFRoaXMgcGF0aCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGlvY3RsKFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUikgb24gdHJhY2UgYnVmZmVyIGZpbGVzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIHZlcmlmeSBtZW1vcnktbWFwcGVkIHJlYWRlciBzeW5jaHJvbml6YXRpb24gYW5kIGVycm9yIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFDSU5HJiMzNDssCiAgICAmIzM0O0ZUUkFDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyJiMzNDssCiAgICAmIzM0O3RyYWNpbmdfYnVmZmVyc19pb2N0bCYjMzQ7LAogICAgJiMzNDtyYl9nZXRfcmVhZGVyX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlYWRlciBhY3F1aXNpdGlvbiBsb2dpYyBpbiB0aGUgcmluZyBidWZmZXIgc3Vic3lzdGVtIGJ5IHJlbW92aW5nIGEgV0FSTl9PTiBhc3NlcnRpb24gd2hlbiByYl9nZXRfcmVhZGVyX3BhZ2UoKSByZXR1cm5zIE5VTEwgaW4gcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoKS4gVGhpcyBwYXRoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaW9jdGwoVFJBQ0VfTU1BUF9JT0NUTF9HRVRfUkVBREVSKSBvbiB0cmFjZSBidWZmZXIgZmlsZXMgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gdmVyaWZ5IG1lbW9yeS1tYXBwZWQgcmVhZGVyIHN5bmNocm9uaXphdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IHJlbW92ZXMgYSBXQVJOX09OKCkgbWFjcm8gYXJvdW5kIGEgTlVMTCBjaGVjayAoY2hhbmdpbmcgJiMzOTtpZiAoV0FSTl9PTighcmVhZGVyKSkmIzM5OyB0byAmIzM5O2lmICghcmVhZGVyKSYjMzk7KSBpbiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0IGZpZWxkcywgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgZGF0YSBwYXRocy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2IwM2M0M2VmODE3OTMzYjgzMzJiNWNhOGM5ZTM1NTExYTRjNGNkMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTU6MDA6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCmluZGV4IDljMDNhNTU1YTZiYTIuLjFhNGRhM2Q0NzUxNDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCkBAIC03OTk1LDcgJiM0Mzs3OTk1LDcgQEAgaW50IHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSkKIAkJZ290byBvdXQ7CiAKIAlyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7Ci0JaWYgKFdBUk5fT04oIXJlYWRlcikpCiYjNDM7CWlmICghcmVhZGVyKQogCQlnb3RvIG91dDsKIAogCS8qIENoZWNrIGlmIGFueSBldmVudHMgd2VyZSBkcm9wcGVkICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmluZyBCdWZmZXIgUmVhZGVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzLiBUaGUgZGlmZiBwb2ludHMgdXMgZGlyZWN0bHkgdG8gYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDc5OTUgd2hlcmUgdGhlIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgZnVuY3Rpb24gaXMuIEl0JiMzOTtzIGNsZWFyIGZyb20gdGhlIHBhdGNoIHRoYXQgYSBjaGFuZ2UgaXMgYmVpbmcgbWFkZSB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gVGhlIGNvbnRleHQgaXMgdml0YWwgaGVyZTogaXQgc2VlbXMgdGhhdCBgcmJfZ2V0X3JlYWRlcl9wYWdlYCBjb3VsZCByZXR1cm4gYSBudWxsIHBvaW50ZXIuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYFdBUk5fT05gLCB3aGljaCwgd2hpbGUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgYW5kIGRldGVjdGluZyBpc3N1ZXMsIG1pZ2h0IG5vdCBiZSB0aGUgbW9zdCBhcHByb3ByaWF0ZSBhcHByb2FjaCBpbiB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uIFRoZSBwYXRjaCByZW1vdmVzIHRoZSBgV0FSTl9PTmAgY2hlY2sgYW5kIGp1c3QgY2hlY2tzIGlmIGByZWFkZXJgIGlzIG51bGwuIEl04oCZcyBsaWtlbHkgYSBjaGFuZ2UgdG8gaW1wcm92ZSByb2J1c3RuZXNzIG9yIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgd2FybmluZyBmcm9tIHVubmVjZXNzYXJpbHkgaGFsdGluZyBleGVjdXRpb24gaW4gY2VydGFpbiBzaXR1YXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY2FsbCBzaXRlcyBvZiBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGEgYE5VTExgIHJldHVybiB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgY2hhbmdlIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gVGhlIGNvbW1lbnQgcmVnYXJkaW5nIGV2ZW50IGRyb3BzIHByb3ZpZGVzIHNvbWUgY29udGV4dCwgYnV0IHVuZGVyc3RhbmRpbmcgKndoeSogYHJiX2dldF9yZWFkZXJfcGFnZWAgbWlnaHQgcmV0dXJuIGBOVUxMYCBpcyBrZXkgdG8gYXNzZXNzaW5nIHRoZSBwYXRjaCYjMzk7cyBjb3JyZWN0bmVzcyBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiBzeXN0ZW0gYmVoYXZpb3IsIGVzcGVjaWFsbHkgaW4gaGlnaC1wcmVzc3VyZSB0cmFjaW5nIGVudmlyb25tZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzk4MDpcdFx0cmVhZGVyX3NpemUgPSByYl9wYWdlX3NpemUoY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSk7XG43OTgxOlx0XG43OTgyOlx0XHQvKlxuNzk4MzpcdFx0ICogVGhlcmUgYXJlIGRhdGEgdG8gYmUgcmVhZCBvbiB0aGUgY3VycmVudCByZWFkZXIgcGFnZSwgd2UgY2FuXG43OTg0Olx0XHQgKiByZXR1cm4gdG8gdGhlIGNhbGxlci4gQnV0IGJlZm9yZSB0aGF0LCB3ZSBhc3N1bWUgdGhlIGxhdHRlciB3aWxsIHJlYWRcbjc5ODU6XHRcdCAqIGV2ZXJ5dGhpbmcuIExldCYjMzk7cyB1cGRhdGUgdGhlIGtlcm5lbCByZWFkZXIgYWNjb3JkaW5nbHkuXG43OTg2Olx0XHQgKi9cbjc5ODc6XHRcdGlmIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlLVx1MDAzZXJlYWQgXHUwMDNjIHJlYWRlcl9zaXplKSB7XG43OTg4Olx0XHRcdHdoaWxlIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlLVx1MDAzZXJlYWQgXHUwMDNjIHJlYWRlcl9zaXplKVxuNzk4OTpcdFx0XHRcdHJiX2FkdmFuY2VfcmVhZGVyKGNwdV9idWZmZXIpO1xuNzk5MDpcdFx0XHRnb3RvIG91dDtcbjc5OTE6XHRcdH1cbjc5OTI6XHRcbjc5OTM6XHRcdC8qIERpZCB0aGUgcmVhZGVyIGNhdGNoIHVwIHdpdGggdGhlIHdyaXRlcj8gKi9cbjc5OTQ6XHRcdGlmIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlID09IGNwdV9idWZmZXItXHUwMDNlY29tbWl0X3BhZ2UpXG43OTk1Olx0XHRcdGdvdG8gb3V0O1xuNzk5NjpcdFxuNzk5NzpcdFx0cmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpO1xuNzk5ODpcdFx0aWYgKCFyZWFkZXIpXG43OTk5Olx0XHRcdGdvdG8gb3V0O1xuODAwMDpcdFxuODAwMTpcdFx0LyogQ2hlY2sgaWYgYW55IGV2ZW50cyB3ZXJlIGRyb3BwZWQgKi9cbjgwMDI6XHRcdG1pc3NlZF9ldmVudHMgPSBjcHVfYnVmZmVyLVx1MDAzZWxvc3RfZXZlbnRzO1xuODAwMzpcdFxuODAwNDpcdFx0aWYgKG1pc3NlZF9ldmVudHMpIHtcbjgwMDU6XHRcdFx0aWYgKGNwdV9idWZmZXItXHUwMDNlcmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci1cdTAwM2Vjb21taXRfcGFnZSkge1xuODAwNjpcdFx0XHRcdHN0cnVjdCBidWZmZXJfZGF0YV9wYWdlICpkcGFnZSA9IHJlYWRlci1cdTAwM2VwYWdlO1xuODAwNzpcdFx0XHRcdHVuc2lnbmVkIGludCBjb21taXQ7XG44MDA4Olx0XHRcdFx0LypcbjgwMDk6XHRcdFx0XHQgKiBVc2UgdGhlIHJlYWxfZW5kIGZvciB0aGUgZGF0YSBzaXplLFxuODAxMDpcdFx0XHRcdCAqIFRoaXMgZ2l2ZXMgdXMgYSBjaGFuY2UgdG8gc3RvcmUgdGhlIGxvc3QgZXZlbnRzXG44MDExOlx0XHRcdFx0ICogb24gdGhlIHBhZ2UuXG44MDEyOlx0XHRcdFx0ICovXG44MDEzOlx0XHRcdFx0aWYgKHJlYWRlci1cdTAwM2VyZWFsX2VuZClcbjgwMTQ6XHRcdFx0XHRcdGxvY2FsX3NldChcdTAwMjZkcGFnZS1cdTAwM2Vjb21taXQsIHJlYWRlci1cdTAwM2VyZWFsX2VuZCk7XG44MDE1Olx0XHRcdFx0LypcbjgwMTY6XHRcdFx0XHQgKiBJZiB0aGVyZSBpcyByb29tIGF0IHRoZSBlbmQgb2YgdGhlIHBhZ2UgdG8gc2F2ZSB0aGVcbjgwMTc6XHRcdFx0XHQgKiBtaXNzZWQgZXZlbnRzLCB0aGVuIHJlY29yZCBpdCB0aGVyZS5cbjgwMTg6XHRcdFx0XHQgKi9cbjgwMTk6XHRcdFx0XHRjb21taXQgPSByYl9wYWdlX3NpemUocmVhZGVyKTtcbjgwMjA6XHRcdFx0XHRpZiAocmJfcGFnZV9jYXBhY2l0eShyZWFkZXIpIC0gY29tbWl0IFx1MDAzZT0gc2l6ZW9mKG1pc3NlZF9ldmVudHMpKSB7XG44MDIxOlx0XHRcdFx0XHRtZW1jcHkoXHUwMDI2ZHBhZ2UtXHUwMDNlZGF0YVtjb21taXRdLCBcdTAwMjZtaXNzZWRfZXZlbnRzLFxuODAyMjpcdFx0XHRcdFx0ICAgICAgIHNpemVvZihtaXNzZWRfZXZlbnRzKSk7XG44MDIzOlx0XHRcdFx0XHRsb2NhbF9hZGQoUkJfTUlTU0VEX1NUT1JFRCwgXHUwMDI2ZHBhZ2UtXHUwMDNlY29tbWl0KTtcbjgwMjQ6XHRcdFx0XHR9XG44MDI1Olx0XHRcdFx0bG9jYWxfYWRkKFJCX01JU1NFRF9FVkVOVFMsIFx1MDAyNmRwYWdlLVx1MDAzZWNvbW1pdCk7XG44MDI2Olx0XHRcdH0gZWxzZSBpZiAoIVdBUk5fT05DRShjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlID09IGNwdV9idWZmZXItXHUwMDNldGFpbF9wYWdlLFxuODAyNzpcdFx0XHRcdFx0ICAgICAgXCYjMzQ7UmVhZGVyIG9uIGNvbW1pdCB3aXRoICVsZCBtaXNzZWQgZXZlbnRzXCYjMzQ7LFxuODAyODpcdFx0XHRcdFx0ICAgICAgbWlzc2VkX2V2ZW50cykpIHtcbjgwMjk6XHRcdFx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDI4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2Ygc29tZSBjb2RlLCBwcm9iYWJseSByZWxhdGVkIHRvIGNvbmN1cnJlbnQgZGF0YSBzdHJ1Y3R1cmVzOgoKKipEZWNvbnN0cnVjdGluZyBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgKioKCkFscmlnaHQsIHNvIEkmIzM5O20ga25lZS1kZWVwIGluIHRoaXMgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCBmdW5jdGlvbi4gVGhhdCBuYW1lIGFsb25lIHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHBhcnQgb2YgYSBzeXN0ZW0gZm9yIGVmZmljaWVudGx5IG1hbmFnaW5nIGRhdGEsIHBlcmhhcHMgd2l0aGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4gVGhlICYjMzQ7cmluZyBidWZmZXImIzM0OyBzdWdnZXN0cyBhIGNpcmN1bGFyIHF1ZXVlLCBsaWtlbHkgb3B0aW1pemVkIGZvciBmYXN0LCBzZXF1ZW50aWFsIGFjY2Vzcy4gVGhlICYjMzQ7bWFwJiMzNDsgY29tcG9uZW50IGltcGxpZXMgc29tZSBraW5kIG9mIGtleS12YWx1ZSBsb29rdXAgKndpdGhpbiogdGhhdCByaW5nIGJ1ZmZlciwgcG90ZW50aWFsbHkgZm9yIHJhbmRvbSBhY2Nlc3Mgb3Igc3BlY2lmaWMgZGF0YSByZXRyaWV2YWwuIEFuZCB0aGVuIHRoZXJlJiMzOTtzIHRoZSBgZ2V0X3JlYWRlcmAgcGFydC4gT2theSwgc28gdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgZGVzaWduZWQgdG8gYWNxdWlyZSBhIHJlYWQgaGFuZGxlLCBvciBhbiBpdGVyYXRvciwgaW50byB0aGUgYnVmZmVyLCBwcmVzdW1hYmx5IHdpdGggdGhyZWFkIHNhZmV0eSBjb25zaWRlcmF0aW9ucy4gSSYjMzk7bSBwcm9iYWJseSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgbG9ja2luZyBzdHJhdGVnaWVzIHVzZWQgKGlmIGFueSksIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBOb3csIGxldCYjMzk7cyBzZWUgd2hhdCB0aGUgcmVzdCBvZiB0aGlzIHRoaW5nIGlzIGFjdHVhbGx5IGRvaW5nLi4uIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzk2MDpcdH1cbjc5NjE6XHRcbjc5NjI6XHRpbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxuNzk2MzpcdHtcbjc5NjQ6XHRcdHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyO1xuNzk2NTpcdFx0c3RydWN0IGJ1ZmZlcl9wYWdlICpyZWFkZXI7XG43OTY2Olx0XHR1bnNpZ25lZCBsb25nIG1pc3NlZF9ldmVudHM7XG43OTY3Olx0XHR1bnNpZ25lZCBsb25nIHJlYWRlcl9zaXplO1xuNzk2ODpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjc5Njk6XHRcbjc5NzA6XHRcdGNwdV9idWZmZXIgPSByYl9nZXRfbWFwcGVkX2J1ZmZlcihidWZmZXIsIGNwdSk7XG43OTcxOlx0XHRpZiAoSVNfRVJSKGNwdV9idWZmZXIpKVxuNzk3MjpcdFx0XHRyZXR1cm4gKGludClQVFJfRVJSKGNwdV9idWZmZXIpO1xuNzk3MzpcdFxuNzk3NDpcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmNwdV9idWZmZXItXHUwMDNlcmVhZGVyX2xvY2ssIGZsYWdzKTtcbjc5NzU6XHRcbjc5NzY6XHRjb25zdW1lOlxuNzk3NzpcdFx0aWYgKHJiX3Blcl9jcHVfZW1wdHkoY3B1X2J1ZmZlcikpXG43OTc4Olx0XHRcdGdvdG8gb3V0O1xuNzk3OTpcdFxuNzk4MDpcdFx0cmVhZGVyX3NpemUgPSByYl9wYWdlX3NpemUoY3B1X2J1ZmZlci1cdTAwM2VyZWFkZXJfcGFnZSk7XG43OTgxOlx0XG43OTgyOlx0XHQvKlxuNzk4MzpcdFx0ICogVGhlcmUgYXJlIGRhdGEgdG8gYmUgcmVhZCBvbiB0aGUgY3VycmVudCByZWFkZXIgcGFnZSwgd2UgY2FuXG43OTg0Olx0XHQgKiByZXR1cm4gdG8gdGhlIGNhbGxlci4gQnV0IGJlZm9yZSB0aGF0LCB3ZSBhc3N1bWUgdGhlIGxhdHRlciB3aWxsIHJlYWRcbjc5ODU6XHRcdCAqIGV2ZXJ5dGhpbmcuIExldCYjMzk7cyB1cGRhdGUgdGhlIGtlcm5lbCByZWFkZXIgYWNjb3JkaW5nbHkuXG43OTg2Olx0XHQgKi9cbjc5ODc6XHRcdGlmIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlLVx1MDAzZXJlYWQgXHUwMDNjIHJlYWRlcl9zaXplKSB7XG43OTg4Olx0XHRcdHdoaWxlIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlLVx1MDAzZXJlYWQgXHUwMDNjIHJlYWRlcl9zaXplKVxuNzk4OTpcdFx0XHRcdHJiX2FkdmFuY2VfcmVhZGVyKGNwdV9idWZmZXIpO1xuNzk5MDpcdFx0XHRnb3RvIG91dDtcbjc5OTE6XHRcdH1cbjc5OTI6XHRcbjc5OTM6XHRcdC8qIERpZCB0aGUgcmVhZGVyIGNhdGNoIHVwIHdpdGggdGhlIHdyaXRlcj8gKi9cbjc5OTQ6XHRcdGlmIChjcHVfYnVmZmVyLVx1MDAzZXJlYWRlcl9wYWdlID09IGNwdV9idWZmZXItXHUwMDNlY29tbWl0X3BhZ2UpXG43OTk1Olx0XHRcdGdvdG8gb3V0O1xuNzk5NjpcdFxuNzk5NzpcdFx0cmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpO1xuNzk5ODpcdFx0aWYgKCFyZWFkZXIpXG43OTk5Olx0XHRcdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzIwCgkJCQkJCQlvdXRwdXQ6IDExMAoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBBIFF1aWNrIFJldmlldyoqCgpPa2F5LCBzbyB0aGUgZGlmZiBpcyBzdHJhaWdodGZvcndhcmQuIFdlJiMzOTtyZSBlc3NlbnRpYWxseSBkcm9wcGluZyB0aGUgYFdBUk5fT05gIG1hY3JvIGFyb3VuZCBhIG51bGwgY2hlY2sgZm9yIHRoZSBgcmVhZGVyYCB2YXJpYWJsZS4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzOiBgaWYgKFdBUk5fT04oIXJlYWRlcikpYCBhbmQgaXQmIzM5O3MgYmVpbmcgY2hhbmdlZCB0byBgaWYgKCFyZWFkZXIpYC4gVGhhdCBgcmVhZGVyYCBjYW4gbGVnaXRpbWF0ZWx5IGJlIG51bGwgaW4gY29uY3VycmVudCBidWZmZXIgb3BlcmF0aW9ucyBvciB3aGVuIG5vIHJlYWRlciBwYWdlIGlzIGF2YWlsYWJsZS4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZT8gSSYjMzk7dmUgZ29uZSBvdmVyIGl0LCBhbmQgbm8uIFRoaXMgZG9lc24mIzM5O3QgYWxsb2NhdGUgbWVtb3J5LCBpdCBkb2VzbiYjMzk7dCBjb3B5IGFueXRoaW5nIHRvIHVzZXJzcGFjZSwgaXQgZG9lc24mIzM5O3QgKnJlYWQqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgaXQgZG9lc24mIzM5O3QgYWZmZWN0IGFueSBzdHJ1Y3Qgc2l6ZXMgb3IgZGF0YSBmbG93cy4gSXQmIzM5O3MganVzdCByZW1vdmluZyBhIHdhcm5pbmcgYWJvdXQgYW4gZXJyb3IgY29uZGl0aW9uLgoKQWxyaWdodCwgc28gdGhlIGNvbmNsdXNpb24gaXMgcHJldHR5IGNsZWFyLiBTaW5jZSBpdCBtZWV0cyB0aGUgY3JpdGVyaWEgb2Ygbm90IGludHJvZHVjaW5nIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgaXQgc2ltcGx5IHJlbW92ZXMgYSBgV0FSTl9PTmAgbWFjcm8gc3Vycm91bmRpbmcgYSBudWxsIGNoZWNrIGZvciBgcmVhZGVyYCwgYE5lZWRzS01TQU5gIGhhcyB0byBiZSBgZmFsc2VgLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIHByb3ZpZGUgdGhlIGFwcHJvcHJpYXRlIHJlc3BvbnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IHJlbW92ZXMgYSBXQVJOX09OKCkgbWFjcm8gYXJvdW5kIGEgTlVMTCBjaGVjayAoY2hhbmdpbmcgJiMzOTtpZiAoV0FSTl9PTighcmVhZGVyKSkmIzM5OyB0byAmIzM5O2lmICghcmVhZGVyKSYjMzk7KSBpbiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0IGZpZWxkcywgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgZGF0YSBwYXRocy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSByZW1vdmVzIGEgV0FSTl9PTigpIG1hY3JvIGFyb3VuZCBhIE5VTEwgY2hlY2sgKGNoYW5naW5nICYjMzk7aWYgKFdBUk5fT04oIXJlYWRlcikpJiMzOTsgdG8gJiMzOTtpZiAoIXJlYWRlcikmIzM5OykgaW4gcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBmaWVsZHMsIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGRhdGEgcGF0aHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDA6MjEuNDExMTc0NDgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMyMTU1NTUzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBQ0lOR1wiLFxuICAgIFwiRlRSQUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJcIixcbiAgICBcInRyYWNpbmdfYnVmZmVyc19pb2N0bFwiLFxuICAgIFwicmJfZ2V0X3JlYWRlcl9wYWdlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IHJlbW92ZXMgYSBXQVJOX09OKCkgbWFjcm8gYXJvdW5kIGEgTlVMTCBjaGVjayAoY2hhbmdpbmcgJ2lmIChXQVJOX09OKCFyZWFkZXIpKScgdG8gJ2lmICghcmVhZGVyKScpIGluIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgZmllbGRzLCBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBkYXRhIHBhdGhzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlYWRlciBhY3F1aXNpdGlvbiBsb2dpYyBpbiB0aGUgcmluZyBidWZmZXIgc3Vic3lzdGVtIGJ5IHJlbW92aW5nIGEgV0FSTl9PTiBhc3NlcnRpb24gd2hlbiByYl9nZXRfcmVhZGVyX3BhZ2UoKSByZXR1cm5zIE5VTEwgaW4gcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoKS4gVGhpcyBwYXRoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaW9jdGwoVFJBQ0VfTU1BUF9JT0NUTF9HRVRfUkVBREVSKSBvbiB0cmFjZSBidWZmZXIgZmlsZXMgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gdmVyaWZ5IG1lbW9yeS1tYXBwZWQgcmVhZGVyIHN5bmNocm9uaXphdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAwOjIxLjQxMTE4MDYxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYwNzIyNTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2IwM2M0M2VmODE3OTMzYjgzMzJiNWNhOGM5ZTM1NTExYTRjNGNkMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDE1OjAwOjE5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcXG5pbmRleCA5YzAzYTU1NWE2YmEyLi4xYTRkYTNkNDc1MTQ0IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jXFxuKysrIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcXG5AQCAtNzk5NSw3ICs3OTk1LDcgQEAgaW50IHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7XFxuLVxcdGlmIChXQVJOX09OKCFyZWFkZXIpKVxcbitcXHRpZiAoIXJlYWRlcilcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHQvKiBDaGVjayBpZiBhbnkgZXZlbnRzIHdlcmUgZHJvcHBlZCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTowMDoyMi44NzI2ODI4MTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUxNzQ2NzI0MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQUNJTkdcIixcbiAgICBcIkZUUkFDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyXCIsXG4gICAgXCJ0cmFjaW5nX2J1ZmZlcnNfaW9jdGxcIixcbiAgICBcInJiX2dldF9yZWFkZXJfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWFkZXIgYWNxdWlzaXRpb24gbG9naWMgaW4gdGhlIHJpbmcgYnVmZmVyIHN1YnN5c3RlbSBieSByZW1vdmluZyBhIFdBUk5fT04gYXNzZXJ0aW9uIHdoZW4gcmJfZ2V0X3JlYWRlcl9wYWdlKCkgcmV0dXJucyBOVUxMIGluIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKCkuIFRoaXMgcGF0aCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGlvY3RsKFRSQUNFX01NQVBfSU9DVExfR0VUX1JFQURFUikgb24gdHJhY2UgYnVmZmVyIGZpbGVzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIHZlcmlmeSBtZW1vcnktbWFwcGVkIHJlYWRlciBzeW5jaHJvbml6YXRpb24gYW5kIGVycm9yIGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNiMDNjNDNlZjgxNzkzM2I4MzMyYjVjYThjOWUzNTUxMWE0YzRjZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE1OjAwOjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1xuaW5kZXggOWMwM2E1NTVhNmJhMi4uMWE0ZGEzZDQ3NTE0NCAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jXG4rKysgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1xuQEAgLTc5OTUsNyArNzk5NSw3IEBAIGludCByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0cmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpO1xuLVx0aWYgKFdBUk5fT04oIXJlYWRlcikpXG4rXHRpZiAoIXJlYWRlcilcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHQvKiBDaGVjayBpZiBhbnkgZXZlbnRzIHdlcmUgZHJvcHBlZCAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDA6MjIuODcyNjg0MTI3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAyMzk0Nzc2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCByZXF1ZXN0IGZvciBhIHBhdGNoIHJldmlldyB0byBkZXRlcm1pbmUgaWYgaXQncyB3b3J0aCBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUeXBpY2FsIExpbnV4IGtlcm5lbCBtYWludGFpbmVyIHRyaWFnZS4gTXkgam9iIGlzIHRvIGV2YWx1YXRlIHdoZXRoZXIgdGhpcyBwYXRjaCBzZXJpZXMgcHJlc2VudHMgYW4gb3Bwb3J0dW5pdHkgZm9yIGZ1enppbmcsIGFuZCBpZiBzbywgaG93IHRvIGJlc3QgZW5hYmxlIGl0LiBJIG5lZWQgdG8gbWFrZSBhIGp1ZGdtZW50IGNhbGwgb24gXCJXb3J0aEZ1enppbmcsXCIgZXh0cmFjdCByZWxldmFudCBcIkZvY3VzU3ltYm9sc1wiIGFuZCBcIkVuYWJsZUNvbmZpZ3MsXCIgYW5kIHByb3ZpZGUgcmVhc29uaW5nIGZvciBteSBkZWNpc2lvbiBiZWZvcmUgY2FsbGluZyBgc2V0LXJlc3VsdHNgLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgcGF0Y2ggZGlmZi4gSG1tLCBpdCdzIGEgcmVsYXRpdmVseSBzbWFsbCBjaGFuZ2Ugd2l0aGluIGBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY2AuICBMZXQgbWUgc2VlLi4uIExpbmUgNzk5NS4gSXQgYXBwZWFycyB0aGF0IGEgYFdBUk5fT05gIGNoZWNrIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBtb3JlIGJhc2ljIG51bGwgY2hlY2sgb24gdGhlIHJlYWRlciBwb2ludGVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgdGhpcyAqY291bGQqIGJlIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhcyBpdCBtaWdodCBleHBvc2Ugc29tZSBwcmV2aW91c2x5IG1hc2tlZCBlcnJvciBjb25kaXRpb25zLiBBIG51bGwgcmVhZGVyIHN1Z2dlc3RzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGluIGEgY3JpdGljYWwgcGF0aC4gSXQncyBhIGtlcm5lbCB0cmFjZSBidWZmZXIsIHNvIHRoaXMgY291bGQgYWZmZWN0IGRlYnVnZ2luZyBvciBvdGhlciB0cmFjZSBmdW5jdGlvbmFsaXR5IGlmIGEgcmVhZGVyIGlzIG51bGwuXG5cbk5leHQsIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBzbyBJJ2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBvbiBga2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNgIGFyb3VuZCBsaW5lIDc5OTUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gRnJvbSB0aGVyZSwgSSdsbCBhc3Nlc3MgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZSBhbmQgaWYgc3l6a2FsbGVyIGlzIGxpa2VseSB0byB1bmNvdmVyIGFueSBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTowMDozMy4xMTIxNjM5OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Njc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3OTgwOlxcdFxcdHJlYWRlcl9zaXplID0gcmJfcGFnZV9zaXplKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlKTtcXG43OTgxOlxcdFxcbjc5ODI6XFx0XFx0LypcXG43OTgzOlxcdFxcdCAqIFRoZXJlIGFyZSBkYXRhIHRvIGJlIHJlYWQgb24gdGhlIGN1cnJlbnQgcmVhZGVyIHBhZ2UsIHdlIGNhblxcbjc5ODQ6XFx0XFx0ICogcmV0dXJuIHRvIHRoZSBjYWxsZXIuIEJ1dCBiZWZvcmUgdGhhdCwgd2UgYXNzdW1lIHRoZSBsYXR0ZXIgd2lsbCByZWFkXFxuNzk4NTpcXHRcXHQgKiBldmVyeXRoaW5nLiBMZXQncyB1cGRhdGUgdGhlIGtlcm5lbCByZWFkZXIgYWNjb3JkaW5nbHkuXFxuNzk4NjpcXHRcXHQgKi9cXG43OTg3OlxcdFxcdGlmIChjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZS1cXHUwMDNlcmVhZCBcXHUwMDNjIHJlYWRlcl9zaXplKSB7XFxuNzk4ODpcXHRcXHRcXHR3aGlsZSAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UtXFx1MDAzZXJlYWQgXFx1MDAzYyByZWFkZXJfc2l6ZSlcXG43OTg5OlxcdFxcdFxcdFxcdHJiX2FkdmFuY2VfcmVhZGVyKGNwdV9idWZmZXIpO1xcbjc5OTA6XFx0XFx0XFx0Z290byBvdXQ7XFxuNzk5MTpcXHRcXHR9XFxuNzk5MjpcXHRcXG43OTkzOlxcdFxcdC8qIERpZCB0aGUgcmVhZGVyIGNhdGNoIHVwIHdpdGggdGhlIHdyaXRlcj8gKi9cXG43OTk0OlxcdFxcdGlmIChjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZSA9PSBjcHVfYnVmZmVyLVxcdTAwM2Vjb21taXRfcGFnZSlcXG43OTk1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjc5OTY6XFx0XFxuNzk5NzpcXHRcXHRyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7XFxuNzk5ODpcXHRcXHRpZiAoIXJlYWRlcilcXG43OTk5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjgwMDA6XFx0XFxuODAwMTpcXHRcXHQvKiBDaGVjayBpZiBhbnkgZXZlbnRzIHdlcmUgZHJvcHBlZCAqL1xcbjgwMDI6XFx0XFx0bWlzc2VkX2V2ZW50cyA9IGNwdV9idWZmZXItXFx1MDAzZWxvc3RfZXZlbnRzO1xcbjgwMDM6XFx0XFxuODAwNDpcXHRcXHRpZiAobWlzc2VkX2V2ZW50cykge1xcbjgwMDU6XFx0XFx0XFx0aWYgKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlICE9IGNwdV9idWZmZXItXFx1MDAzZWNvbW1pdF9wYWdlKSB7XFxuODAwNjpcXHRcXHRcXHRcXHRzdHJ1Y3QgYnVmZmVyX2RhdGFfcGFnZSAqZHBhZ2UgPSByZWFkZXItXFx1MDAzZXBhZ2U7XFxuODAwNzpcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY29tbWl0O1xcbjgwMDg6XFx0XFx0XFx0XFx0LypcXG44MDA5OlxcdFxcdFxcdFxcdCAqIFVzZSB0aGUgcmVhbF9lbmQgZm9yIHRoZSBkYXRhIHNpemUsXFxuODAxMDpcXHRcXHRcXHRcXHQgKiBUaGlzIGdpdmVzIHVzIGEgY2hhbmNlIHRvIHN0b3JlIHRoZSBsb3N0IGV2ZW50c1xcbjgwMTE6XFx0XFx0XFx0XFx0ICogb24gdGhlIHBhZ2UuXFxuODAxMjpcXHRcXHRcXHRcXHQgKi9cXG44MDEzOlxcdFxcdFxcdFxcdGlmIChyZWFkZXItXFx1MDAzZXJlYWxfZW5kKVxcbjgwMTQ6XFx0XFx0XFx0XFx0XFx0bG9jYWxfc2V0KFxcdTAwMjZkcGFnZS1cXHUwMDNlY29tbWl0LCByZWFkZXItXFx1MDAzZXJlYWxfZW5kKTtcXG44MDE1OlxcdFxcdFxcdFxcdC8qXFxuODAxNjpcXHRcXHRcXHRcXHQgKiBJZiB0aGVyZSBpcyByb29tIGF0IHRoZSBlbmQgb2YgdGhlIHBhZ2UgdG8gc2F2ZSB0aGVcXG44MDE3OlxcdFxcdFxcdFxcdCAqIG1pc3NlZCBldmVudHMsIHRoZW4gcmVjb3JkIGl0IHRoZXJlLlxcbjgwMTg6XFx0XFx0XFx0XFx0ICovXFxuODAxOTpcXHRcXHRcXHRcXHRjb21taXQgPSByYl9wYWdlX3NpemUocmVhZGVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDA6MzMuMTEyNDMzMTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjQ5MTk5NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLiBJdCdzIGNydWNpYWwsIGFuZCB0aGUgbmFtZSBzdWdnZXN0cyBhIGtleSBmdW5jdGlvbiByZWxhdGVkIHRvIHJlYWRpbmcgZGF0YSBmcm9tIGEgcmluZyBidWZmZXIgbWFwLiBUbyB0cnVseSBncmFzcCBpdHMgcm9sZSBhbmQgcG90ZW50aWFsIGltcGFjdCwgSSBuZWVkIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBTaW1wbHkgdW5kZXJzdGFuZGluZyB0aGUgbmFtZSBpc24ndCBlbm91Z2g7IEkgbmVlZCB0byBzZWUgKmhvdyogaXQncyBpbnZva2VkLCB3aGF0IGl0cyBpbnB1dHMgYW5kIG91dHB1dHMgYXJlLCBhbmQgdGhlIG92ZXJhbGwgcGF0dGVybiBvZiBpdHMgdXNhZ2UuXG5cbk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGl0cyBjb2RlYmFzZSBhcHBlYXJhbmNlcy4gVGhpcyBjYWxscyBmb3IgYSBxdWljayBhbmQgcHJlY2lzZSBjb2RlIHNlYXJjaC4gSSdsbCBsYXVuY2ggYGdyZXBwZXJgIChvciBteSBwcmVmZXJyZWQgY29kZSBzZWFyY2ggdG9vbCwgd2hhdGV2ZXIgSSdtIG1vc3QgY29tZm9ydGFibGUgd2l0aCBhbmQgaGFzIHRoZSBiZXN0IGluZGV4aW5nIG9mIHRoaXMgcGFydGljdWxhciBjb2RlYmFzZSkgYW5kIHplcm8gaW4gb24gZXZlcnkgaW5zdGFuY2Ugb2YgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYC4gSSdsbCBhbmFseXplIGVhY2ggY2FsbCBzaXRlIHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBzeXN0ZW0gbG9naWMsIGVzcGVjaWFsbHkgdGhlIHN1cnJvdW5kaW5nIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgYnJlYWR0aCBvZiBrbm93bGVkZ2UgbmVlZGVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGluIGl0cyBlbnRpcmV0eS4gVGhpcyBpcyBhIHN0YW5kYXJkIGZpcnN0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxODIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAwOjM2LjM2MTYzNTcwOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAzMTAyMTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcmluZ19idWZmZXIuaD0yNTQ9aW50IHJpbmdfYnVmZmVyX3VubWFwKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSk7XFxuaW5jbHVkZS9saW51eC9yaW5nX2J1ZmZlci5oOjI1NTppbnQgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KTtcXG5pbmNsdWRlL2xpbnV4L3JpbmdfYnVmZmVyLmgtMjU2LVxcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM9NzkyNz1pbnQgcmluZ19idWZmZXJfdW5tYXAoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzk2MS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo3OTYyOmludCByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzk2My17XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYz03MzY1PXN0YXRpYyBsb25nIHRyYWNpbmdfYnVmZmVyc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03MzgwLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jOjczODE6XFx0XFx0cmV0dXJuIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKGl0ZXItXFx1MDAzZWFycmF5X2J1ZmZlci1cXHUwMDNlYnVmZmVyLFxcbmtlcm5lbC90cmFjZS90cmFjZS5jLTczODItXFx0XFx0XFx0XFx0XFx0XFx0ICBpdGVyLVxcdTAwM2VjcHVfZmlsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAwOjM3Ljk2NDc0MjcxM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1Mjg2OTEzMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb2RlIHNuaXBwZXQsIGFzIGlmIGl0IHdlcmUgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgdHJhY2UuY2AgYW5kIFJpbmcgQnVmZmVyIE1hcHBpbmcqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGB0cmFjaW5nX2J1ZmZlcnNfaW9jdGxgIGZ1bmN0aW9uIGluIGBrZXJuZWwvdHJhY2UvdHJhY2UuY2AgaW50ZXJhY3RzIHdpdGggdGhlIHJpbmcgYnVmZmVyLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgKmhvdyogaXQncyBnZXR0aW5nIGEgcmVhZGVyIGhhbmRsZSwgd2hpY2ggSSdtIHByZXR0eSBzdXJlIGlzIGhhbmRsZWQgdGhyb3VnaCBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLiBMZXQncyBnZXQgdG8gbGluZSA3MzY1IGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZy4gSSBleHBlY3QgdG8gc2VlIHRoZSBjYWxsLCBidXQgSSdtIGludGVyZXN0ZWQgaW4gdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIC0gYXJlIHRoZXJlIGVycm9yIGNoZWNrcz8gV2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQ/IElzIHRoZXJlIGFueSBzcGVjaWZpYyBjb250ZXh0IHRoYXQncyByZWxldmFudCB0byBob3cgYHRyYWNpbmdfYnVmZmVyc19pb2N0bGAgdXRpbGl6ZXMgdGhlIHJpbmcgYnVmZmVyPyBJJ20gYW50aWNpcGF0aW5nIHRoaXMgY2FsbCBwcm9iYWJseSByZXR1cm5zIGEgbWFwcGluZyBvciBhIHBvaW50ZXIgb2Ygc29tZSBzb3J0LiBJdCdsbCBiZSBrZXkgdG8gdGhlbiBmaWd1cmUgb3V0IGhvdyB0aGF0IHJlYWRlciBoYW5kbGUgaXMgdGhlbiB1c2VkIGZvciB0aGUgZXZlbnR1YWwgcmVhZHMsIGFuZCBwb3RlbnRpYWxseSBmb3IgbWFuYWdpbmcgdGhlIGRhdGEgd2l0aGluIHRoZSBidWZmZXIuIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUga2VybmVsIGludGVyZmFjZSBwcm92aWRlcyB0aGUgdHJhY2UgZGF0YSB0byB0aGUgdXNlcnNwYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODQwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDA6NDAuNDkzNDM2MzQ5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQwMTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS90cmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczNjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjczNjU6XFx0c3RhdGljIGxvbmcgdHJhY2luZ19idWZmZXJzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG43MzY2OlxcdHtcXG43MzY3OlxcdFxcdHN0cnVjdCBmdHJhY2VfYnVmZmVyX2luZm8gKmluZm8gPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuNzM2ODpcXHRcXHRzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIgPSBcXHUwMDI2aW5mby1cXHUwMDNlaXRlcjtcXG43MzY5OlxcdFxcdGludCBlcnI7XFxuNzM3MDpcXHRcXG43MzcxOlxcdFxcdGlmIChjbWQgPT0gVFJBQ0VfTU1BUF9JT0NUTF9HRVRfUkVBREVSKSB7XFxuNzM3MjpcXHRcXHRcXHRpZiAoIShmaWxlLVxcdTAwM2VmX2ZsYWdzIFxcdTAwMjYgT19OT05CTE9DSykpIHtcXG43MzczOlxcdFxcdFxcdFxcdGVyciA9IHJpbmdfYnVmZmVyX3dhaXQoaXRlci1cXHUwMDNlYXJyYXlfYnVmZmVyLVxcdTAwM2VidWZmZXIsXFxuNzM3NDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgaXRlci1cXHUwMDNlY3B1X2ZpbGUsXFxuNzM3NTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgaXRlci1cXHUwMDNldHItXFx1MDAzZWJ1ZmZlcl9wZXJjZW50LFxcbjczNzY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIE5VTEwsIE5VTEwpO1xcbjczNzc6XFx0XFx0XFx0XFx0aWYgKGVycilcXG43Mzc4OlxcdFxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuNzM3OTpcXHRcXHRcXHR9XFxuNzM4MDpcXHRcXG43MzgxOlxcdFxcdFxcdHJldHVybiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihpdGVyLVxcdTAwM2VhcnJheV9idWZmZXItXFx1MDAzZWJ1ZmZlcixcXG43MzgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgaXRlci1cXHUwMDNlY3B1X2ZpbGUpO1xcbjczODM6XFx0XFx0fSBlbHNlIGlmIChjbWQpIHtcXG43Mzg0OlxcdFxcdFxcdHJldHVybiAtRU5PVFRZO1xcbjczODU6XFx0XFx0fVxcbjczODY6XFx0XFxuNzM4NzpcXHRcXHQvKlxcbjczODg6XFx0XFx0ICogQW4gaW9jdGwgY2FsbCB3aXRoIGNtZCAwIHRvIHRoZSByaW5nIGJ1ZmZlciBmaWxlIHdpbGwgd2FrZSB1cCBhbGxcXG43Mzg5OlxcdFxcdCAqIHdhaXRlcnNcXG43MzkwOlxcdFxcdCAqL1xcbjczOTE6XFx0XFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ0cmFjZV90eXBlc19sb2NrKTtcXG43MzkyOlxcdFxcbjczOTM6XFx0XFx0LyogTWFrZSBzdXJlIHRoZSB3YWl0ZXJzIHNlZSB0aGUgbmV3IHdhaXRfaW5kZXggKi9cXG43Mzk0OlxcdFxcdCh2b2lkKWF0b21pY19mZXRjaF9pbmNfcmVsZWFzZShcXHUwMDI2aXRlci1cXHUwMDNld2FpdF9pbmRleCk7XFxuNzM5NTpcXHRcXG43Mzk2OlxcdFxcdHJpbmdfYnVmZmVyX3dha2Vfd2FpdGVycyhpdGVyLVxcdTAwM2VhcnJheV9idWZmZXItXFx1MDAzZWJ1ZmZlciwgaXRlci1cXHUwMDNlY3B1X2ZpbGUpO1xcbjczOTc6XFx0XFxuNzM5ODpcXHRcXHRyZXR1cm4gMDtcXG43Mzk5OlxcdH1cXG43NDAwOlxcdFxcbjc0MDE6XFx0LypcXG43NDAyOlxcdCAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSBWTUEgaXMgZHVwbGljYXRlZCAoZS5nLiwgb24gZm9yaygpKSB0byBpbmNyZW1lbnRcXG43NDAzOlxcdCAqIHRoZSB1c2VyX21hcHBlZCBjb3VudGVyIHdpdGhvdXQgcmVtYXBwaW5nIHBhZ2VzLlxcbjc0MDQ6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAwOjQwLjQ5Mzc3Nzk0OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMzE1NDIyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSaW5nIEJ1ZmZlciBSZWFkZXIgQWNxdWlzaXRpb24qKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGlzIHBhdGNoLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGUgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCBmdW5jdGlvbiB3aXRoaW4gYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYC4gSSBuZWVkIHRvIGVuc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UuXG5cbkl0J3Mgc3RyYWlnaHRmb3J3YXJkOyB0aGUgcHJpbWFyeSBtb2RpZmljYXRpb24gY2VudGVycyBhcm91bmQgdGhpcyBjb25kaXRpb25hbCBjaGVjazpcblxuYGBgY1xuXHRyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7XG4tXHRpZiAoV0FSTl9PTighcmVhZGVyKSlcbitcdGlmICghcmVhZGVyKVxuIFx0XHRnb3RvIG91dDtcbmBgYFxuXG5QcmV2aW91c2x5LCBgV0FSTl9PTmAgd2FzIHVzZWQuIE5vdyBpdCdzIGEgc2ltcGxlIGBpZmAgY29uZGl0aW9uLiBUaGUgYFdBUk5fT05gIG1hY3JvIHNlZW1zIGV4Y2Vzc2l2ZSBoZXJlLiBBIG51bGwgYHJlYWRlcmAgcG9pbnRlciBzdWdnZXN0cyBhIGZ1bmRhbWVudGFsIGlzc3VlLCBhbmQgYSBzaW1wbGUgY2hlY2sgYmVmb3JlIGNvbnRpbnVpbmcgaXMgYSBwZXJmZWN0bHkgcmVhc29uYWJsZSBhcHByb2FjaC4gSXQncyBhIG1hdHRlciBvZiBlbnN1cmluZyB3ZSBncmFjZWZ1bGx5IGhhbmRsZSB0aGUgc2NlbmFyaW8gd2hlcmUgYHJiX2dldF9yZWFkZXJfcGFnZWAgZmFpbHMgdG8gcmV0dXJuIGEgdmFsaWQgcmVhZGVyIHBhZ2UuIFRoaXMgY291bGQgYmUgZHVlIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlcyBvciBvdGhlciBsb3ctbGV2ZWwgcHJvYmxlbXMgd2l0aGluIHRoZSByaW5nIGJ1ZmZlciBpdHNlbGYuIFdlIGNoZWNrIGZvciBhIE5VTEwgYHJlYWRlcmAgcG9pbnRlciByZXR1cm5lZCBieSBgcmJfZ2V0X3JlYWRlcl9wYWdlYC4gVGhlIFwiZ290byBvdXRcIiBzdWdnZXN0cyB0aGF0IHdlIGhhbmRsZSBhIGBOVUxMYCBgcmVhZGVyYCBieSByZXR1cm5pbmcsIGxpa2VseSBwcm9wYWdhdGluZyBhbiBlcnJvciBjb2RlIHVwIHRoZSBjYWxsIHN0YWNrIHNvIHRoYXQgaXQgY2FuIGJlIGhhbmRsZWQgYXBwcm9wcmlhdGVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc2MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAwOjQzLjUyNTMyMTg5M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzc1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzk2MCxcbiAgXCJMaW5lQ291bnRcIjogNjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzk2MDpcXHR9XFxuNzk2MTpcXHRcXG43OTYyOlxcdGludCByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcihzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpXFxuNzk2MzpcXHR7XFxuNzk2NDpcXHRcXHRzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcjtcXG43OTY1OlxcdFxcdHN0cnVjdCBidWZmZXJfcGFnZSAqcmVhZGVyO1xcbjc5NjY6XFx0XFx0dW5zaWduZWQgbG9uZyBtaXNzZWRfZXZlbnRzO1xcbjc5Njc6XFx0XFx0dW5zaWduZWQgbG9uZyByZWFkZXJfc2l6ZTtcXG43OTY4OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuNzk2OTpcXHRcXG43OTcwOlxcdFxcdGNwdV9idWZmZXIgPSByYl9nZXRfbWFwcGVkX2J1ZmZlcihidWZmZXIsIGNwdSk7XFxuNzk3MTpcXHRcXHRpZiAoSVNfRVJSKGNwdV9idWZmZXIpKVxcbjc5NzI6XFx0XFx0XFx0cmV0dXJuIChpbnQpUFRSX0VSUihjcHVfYnVmZmVyKTtcXG43OTczOlxcdFxcbjc5NzQ6XFx0XFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfbG9jaywgZmxhZ3MpO1xcbjc5NzU6XFx0XFxuNzk3NjpcXHRjb25zdW1lOlxcbjc5Nzc6XFx0XFx0aWYgKHJiX3Blcl9jcHVfZW1wdHkoY3B1X2J1ZmZlcikpXFxuNzk3ODpcXHRcXHRcXHRnb3RvIG91dDtcXG43OTc5OlxcdFxcbjc5ODA6XFx0XFx0cmVhZGVyX3NpemUgPSByYl9wYWdlX3NpemUoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UpO1xcbjc5ODE6XFx0XFxuNzk4MjpcXHRcXHQvKlxcbjc5ODM6XFx0XFx0ICogVGhlcmUgYXJlIGRhdGEgdG8gYmUgcmVhZCBvbiB0aGUgY3VycmVudCByZWFkZXIgcGFnZSwgd2UgY2FuXFxuNzk4NDpcXHRcXHQgKiByZXR1cm4gdG8gdGhlIGNhbGxlci4gQnV0IGJlZm9yZSB0aGF0LCB3ZSBhc3N1bWUgdGhlIGxhdHRlciB3aWxsIHJlYWRcXG43OTg1OlxcdFxcdCAqIGV2ZXJ5dGhpbmcuIExldCdzIHVwZGF0ZSB0aGUga2VybmVsIHJlYWRlciBhY2NvcmRpbmdseS5cXG43OTg2OlxcdFxcdCAqL1xcbjc5ODc6XFx0XFx0aWYgKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlLVxcdTAwM2VyZWFkIFxcdTAwM2MgcmVhZGVyX3NpemUpIHtcXG43OTg4OlxcdFxcdFxcdHdoaWxlIChjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZS1cXHUwMDNlcmVhZCBcXHUwMDNjIHJlYWRlcl9zaXplKVxcbjc5ODk6XFx0XFx0XFx0XFx0cmJfYWR2YW5jZV9yZWFkZXIoY3B1X2J1ZmZlcik7XFxuNzk5MDpcXHRcXHRcXHRnb3RvIG91dDtcXG43OTkxOlxcdFxcdH1cXG43OTkyOlxcdFxcbjc5OTM6XFx0XFx0LyogRGlkIHRoZSByZWFkZXIgY2F0Y2ggdXAgd2l0aCB0aGUgd3JpdGVyPyAqL1xcbjc5OTQ6XFx0XFx0aWYgKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlID09IGNwdV9idWZmZXItXFx1MDAzZWNvbW1pdF9wYWdlKVxcbjc5OTU6XFx0XFx0XFx0Z290byBvdXQ7XFxuNzk5NjpcXHRcXG43OTk3OlxcdFxcdHJlYWRlciA9IHJiX2dldF9yZWFkZXJfcGFnZShjcHVfYnVmZmVyKTtcXG43OTk4OlxcdFxcdGlmICghcmVhZGVyKVxcbjc5OTk6XFx0XFx0XFx0Z290byBvdXQ7XFxuODAwMDpcXHRcXG44MDAxOlxcdFxcdC8qIENoZWNrIGlmIGFueSBldmVudHMgd2VyZSBkcm9wcGVkICovXFxuODAwMjpcXHRcXHRtaXNzZWRfZXZlbnRzID0gY3B1X2J1ZmZlci1cXHUwMDNlbG9zdF9ldmVudHM7XFxuODAwMzpcXHRcXG44MDA0OlxcdFxcdGlmIChtaXNzZWRfZXZlbnRzKSB7XFxuODAwNTpcXHRcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgIT0gY3B1X2J1ZmZlci1cXHUwMDNlY29tbWl0X3BhZ2UpIHtcXG44MDA2OlxcdFxcdFxcdFxcdHN0cnVjdCBidWZmZXJfZGF0YV9wYWdlICpkcGFnZSA9IHJlYWRlci1cXHUwMDNlcGFnZTtcXG44MDA3OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBjb21taXQ7XFxuODAwODpcXHRcXHRcXHRcXHQvKlxcbjgwMDk6XFx0XFx0XFx0XFx0ICogVXNlIHRoZSByZWFsX2VuZCBmb3IgdGhlIGRhdGEgc2l6ZSxcXG44MDEwOlxcdFxcdFxcdFxcdCAqIFRoaXMgZ2l2ZXMgdXMgYSBjaGFuY2UgdG8gc3RvcmUgdGhlIGxvc3QgZXZlbnRzXFxuODAxMTpcXHRcXHRcXHRcXHQgKiBvbiB0aGUgcGFnZS5cXG44MDEyOlxcdFxcdFxcdFxcdCAqL1xcbjgwMTM6XFx0XFx0XFx0XFx0aWYgKHJlYWRlci1cXHUwMDNlcmVhbF9lbmQpXFxuODAxNDpcXHRcXHRcXHRcXHRcXHRsb2NhbF9zZXQoXFx1MDAyNmRwYWdlLVxcdTAwM2Vjb21taXQsIHJlYWRlci1cXHUwMDNlcmVhbF9lbmQpO1xcbjgwMTU6XFx0XFx0XFx0XFx0LypcXG44MDE2OlxcdFxcdFxcdFxcdCAqIElmIHRoZXJlIGlzIHJvb20gYXQgdGhlIGVuZCBvZiB0aGUgcGFnZSB0byBzYXZlIHRoZVxcbjgwMTc6XFx0XFx0XFx0XFx0ICogbWlzc2VkIGV2ZW50cywgdGhlbiByZWNvcmQgaXQgdGhlcmUuXFxuODAxODpcXHRcXHRcXHRcXHQgKi9cXG44MDE5OlxcdFxcdFxcdFxcdGNvbW1pdCA9IHJiX3BhZ2Vfc2l6ZShyZWFkZXIpO1xcbjgwMjA6XFx0XFx0XFx0XFx0aWYgKHJiX3BhZ2VfY2FwYWNpdHkocmVhZGVyKSAtIGNvbW1pdCBcXHUwMDNlPSBzaXplb2YobWlzc2VkX2V2ZW50cykpIHtcXG44MDIxOlxcdFxcdFxcdFxcdFxcdG1lbWNweShcXHUwMDI2ZHBhZ2UtXFx1MDAzZWRhdGFbY29tbWl0XSwgXFx1MDAyNm1pc3NlZF9ldmVudHMsXFxuODAyMjpcXHRcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKG1pc3NlZF9ldmVudHMpKTtcXG44MDIzOlxcdFxcdFxcdFxcdFxcdGxvY2FsX2FkZChSQl9NSVNTRURfU1RPUkVELCBcXHUwMDI2ZHBhZ2UtXFx1MDAzZWNvbW1pdCk7XFxuODAyNDpcXHRcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAwOjQzLjUyNTY2MTczM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjE3MzU1MDYyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBGdXp6aW5nIEFwcGxpY2FiaWxpdHkgb2YgdGhlIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgTW9kaWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNoYW5nZSB0byBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgIG1lcml0cyBmdXp6aW5nIGJhc2VkIG9uIHRob3NlIHN0cmljdCBjcml0ZXJpYS4gSXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBpcyBhY2Nlc3NlZCB0aHJvdWdoIGB0cmFjaW5nX2J1ZmZlcnNfaW9jdGxgIGFuZCBleHBvc2VkIHRocm91Z2ggYHRyYWNlZnMvZnRyYWNlYCByaW5nIGJ1ZmZlciBmaWxlcy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuRmlyc3QsIHRoZSBjb3JlIHByaW5jaXBsZTogKnJlYWNoYWJpbGl0eSouIENhbiB0aGlzIGNvZGUgYWN0dWFsbHkgKnJ1biogaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gWWVzLCBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGB0cmFjZWZzL2Z0cmFjZWAgaW50ZXJmYWNlLiBJIHRoaW5rIHdlIGFyZSBnb29kIHRoZXJlLlxuXG5Ob3cgZm9yIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBmcm9tIFNlY3Rpb24gMi4gSXMgdGhpczpcblxuKiAgIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlPyBObywgaXQncyBrZXJuZWwgY29kZS5cbiogICBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU/IE5vLCB0aGlzIGludGVyZmFjZXMgd2l0aCByaW5nIGJ1ZmZlci5cbiogICBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM/IEFsc28gbm8sIGlmIGl0IGlzIHJlYWNoYWJsZSB2aWEgaW9jdGwgY2FsbHMuXG5cbk9rYXksIHRoYXQncyBlbmNvdXJhZ2luZy4gTGV0J3MgbW92ZSB0byB0aGUgKnBvc2l0aXZlKiBjcml0ZXJpYSBpbiBTZWN0aW9uIDMuIERvZXMgaXQgdG91Y2ggYW55IG9mIHRob3NlIHNwZWNpZmljIGFyZWFzP1xuXG5UaGUgY2hhbmdlIHRvIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpYCBpbnZvbHZlcyBhbiAqYWx0ZXJhdGlvbiogb2YgYW4gYXNzZXJ0aW9uLCBzcGVjaWZpY2FsbHkgYSBgV0FSTl9PTmAgY2hlY2suIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBgV0FSTl9PTighcmVhZGVyKWAsIGJ1dCB0aGlzIHdhcyByZW1vdmVkIHRvIGp1c3QgYCFyZWFkZXJgLiBUaGlzIGFsdGVyYXRpb24gZGlyZWN0bHkgcmVsYXRlcyB0byAqUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzKiB3aXRoaW4gcmVhY2hhYmxlIGNvZGUuIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIHRoZSBgcmJfZ2V0X3JlYWRlcl9wYWdlKClgIGZ1bmN0aW9uIGNhbiByZXR1cm4gYSBOVUxMIHZhbHVlIGZvciBsZWdpdGltYXRlIHJlYXNvbnMgKGUuZy4sIG5vdGhpbmcgdG8gcmVhZCBvciBjb25jdXJyZW50IHN3YXApLlxuXG5UaGlzICphcHBlYXJzKiB0byBiZSBhIGNsZWFyIGNhc2UgZm9yIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdyB0byBkb3VibGUtY2hlY2s6IEkgc2hvdWxkIGNoZWNrIHRvIHNlZSB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyB0byBiZSBzdXJlLiBJJ2xsIG5lZWQgdG8gc2VhcmNoIHRoZSBga2VybmVsL3RyYWNlL0tjb25maWdgIGFuZCBga2VybmVsL3RyYWNlL01ha2VmaWxlYCBmaWxlcyBmb3IgYENPTkZJR19SSU5HX0JVRkZFUmAsIGBDT05GSUdfVFJBQ0lOR2AsIGBDT05GSUdfRlRSQUNFYCwgb3IgYW55IHJpbmcgYnVmZmVyIHJlbGF0ZWQgb3B0aW9ucywganVzdCB0byBjb25maXJtIHRoZSBwYXRoIHRocm91Z2ggdGhlIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyOTksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTowMDo1NS42OTkyMTUyNzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NzM2ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJpbmdfYnVmZmVyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9NYWtlZmlsZT02Mz1vYmotJChDT05GSUdfRlVOQ1RJT05fVFJBQ0VSKSArPSBsaWJmdHJhY2Uub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfUklOR19CVUZGRVIpICs9IHJpbmdfYnVmZmVyLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSykgKz0gcmluZ19idWZmZXJfYmVuY2htYXJrLm9cXG4tLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xMzM9b2JqLSQoQ09ORklHX1RSQUNFX1JFTU9URSkgKz0gdHJhY2VfcmVtb3RlLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTM0Om9iai0kKENPTkZJR19TSU1QTEVfUklOR19CVUZGRVIpICs9IHNpbXBsZV9yaW5nX2J1ZmZlci5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTEzNS1vYmotJChDT05GSUdfVFJBQ0VfUkVNT1RFX1RFU1QpICs9IHJlbW90ZV90ZXN0Lm9cXG4tLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xNjE9JChvYmopLyUuby5jaGVja2VkOiAkKG9iaikvJS5vICQob2JqKS91bmRlZnN5bXNfYmFzZS5vIEZPUkNFXFxuLS1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTYzLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxNjQ6YWx3YXlzLSQoQ09ORklHX1NJTVBMRV9SSU5HX0JVRkZFUikgKz0gc2ltcGxlX3JpbmdfYnVmZmVyLm8uY2hlY2tlZFxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xNjUtXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYz0xMTE3PV9fcG9sbF90IHJpbmdfYnVmZmVyX3BvbGxfd2FpdChzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUsXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy0xMTc5LVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjExODA6LyogYnVmZmVyIG1heSBiZSBlaXRoZXIgcmluZ19idWZmZXIgb3IgcmluZ19idWZmZXJfcGVyX2NwdSAqL1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTExODEtI2RlZmluZSBSQl9XQVJOX09OKGIsIGNvbmQpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM9NTQxND1FWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9yZWNvcmRfZW5hYmxlX2NwdSk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDE2LS8qKlxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU0MTc6ICogcmluZ19idWZmZXJfb2xkZXN0X2V2ZW50X3RzIC0gZ2V0IHRoZSBvbGRlc3QgZXZlbnQgdGltZXN0YW1wIGZyb20gdGhlIGJ1ZmZlclxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU0MTgtICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDIwLSAqL1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU0MjE6dTY0IHJpbmdfYnVmZmVyX29sZGVzdF9ldmVudF90cyhzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQyMi17XFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDQ2LX1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NDQ3OkVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX29sZGVzdF9ldmVudF90cyk7XFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQ0OC1cXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTU0ODU9RVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfZW50cmllc19jcHUpO1xcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQ4Ny0vKipcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NDg4OiAqIHJpbmdfYnVmZmVyX292ZXJydW5fY3B1IC0gZ2V0IHRoZSBudW1iZXIgb2Ygb3ZlcnJ1bnMgY2F1c2VkIGJ5IHRoZSByaW5nXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQ4OS0gKiBidWZmZXIgd3JhcHBpbmcgYXJvdW5kIChvbmx5IGlmIFJCX0ZMX09WRVJXUklURSBpcyBvbikuXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NDkyLSAqL1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU0OTM6dW5zaWduZWQgbG9uZyByaW5nX2J1ZmZlcl9vdmVycnVuX2NwdShzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUpXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTQ5NC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NTA1LX1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NTA2OkVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX292ZXJydW5fY3B1KTtcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NTA3LVxcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM9NTU5Mj1FWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9lbnRyaWVzKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU1OTQtLyoqXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NTU5NTogKiByaW5nX2J1ZmZlcl9vdmVycnVucyAtIGdldCB0aGUgbnVtYmVyIG9mIG92ZXJydW5zIGluIGJ1ZmZlclxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTU1OTYtICogQGJ1ZmZlcjogVGhlIHJpbmcgYnVmZmVyXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NjAwLSAqL1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjU2MDE6dW5zaWduZWQgbG9uZyByaW5nX2J1ZmZlcl9vdmVycnVucyhzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIpXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNTYwMi17XFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NjE0LX1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo1NjE1OkVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX292ZXJydW5zKTtcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy01NjE2LVxcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyX2JlbmNobWFyay5jPTIzMj1zdGF0aWMgdm9pZCByaW5nX2J1ZmZlcl9wcm9kdWNlcih2b2lkKVxcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyX2JlbmNobWFyay5jLTMwMS1cXHRlbnRyaWVzID0gcmluZ19idWZmZXJfZW50cmllcyhidWZmZXIpO1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlcl9iZW5jaG1hcmsuYzozMDI6XFx0b3ZlcnJ1bnMgPSByaW5nX2J1ZmZlcl9vdmVycnVucyhidWZmZXIpO1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlcl9iZW5jaG1hcmsuYy0zMDMtXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYz0yODIyPWdldF90b3RhbF9lbnRyaWVzX2NwdShzdHJ1Y3QgYXJyYXlfYnVmZmVyICpidWYsIHVuc2lnbmVkIGxvbmcgKnRvdGFsLFxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtMjgzOC1cXHRcXHQqdG90YWwgPSBjb3VudCArXFxua2VybmVsL3RyYWNlL3RyYWNlLmM6MjgzOTpcXHRcXHRcXHRyaW5nX2J1ZmZlcl9vdmVycnVuX2NwdShidWYtXFx1MDAzZWJ1ZmZlciwgY3B1KTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy0yODQwLVxcdCplbnRyaWVzID0gY291bnQ7XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYz0zMzY3PV9fdHJhY2luZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCBib29sIHNuYXBzaG90KVxcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtMzQzMC1cXHQvKiBBbm5vdGF0ZSBzdGFydCBvZiBidWZmZXJzIGlmIHdlIGhhZCBvdmVycnVucyAqL1xcbmtlcm5lbC90cmFjZS90cmFjZS5jOjM0MzE6XFx0aWYgKHJpbmdfYnVmZmVyX292ZXJydW5zKGl0ZXItXFx1MDAzZWFycmF5X2J1ZmZlci1cXHUwMDNlYnVmZmVyKSlcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy0zNDMyLVxcdFxcdGl0ZXItXFx1MDAzZWl0ZXJfZmxhZ3MgfD0gVFJBQ0VfRklMRV9BTk5PVEFURTtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jPTc0NzI9dHJhY2luZ19zdGF0c19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1ZixcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jLTc0OTItXFxua2VybmVsL3RyYWNlL3RyYWNlLmM6NzQ5MzpcXHRjbnQgPSByaW5nX2J1ZmZlcl9vdmVycnVuX2NwdSh0cmFjZV9idWYtXFx1MDAzZWJ1ZmZlciwgY3B1KTtcXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy03NDk0LVxcdHRyYWNlX3NlcV9wcmludGYocywgXFxcIm92ZXJydW46ICVsZFxcXFxuXFxcIiwgY250KTtcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5jLTc1MDMtXFx0XFx0LyogbG9jYWwgb3IgZ2xvYmFsIGZvciB0cmFjZV9jbG9jayAqL1xcbmtlcm5lbC90cmFjZS90cmFjZS5jOjc1MDQ6XFx0XFx0dCA9IG5zMnVzZWNzKHJpbmdfYnVmZmVyX29sZGVzdF9ldmVudF90cyh0cmFjZV9idWYtXFx1MDAzZWJ1ZmZlciwgY3B1KSk7XFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzUwNS1cXHRcXHR1c2VjX3JlbSA9IGRvX2Rpdih0LCBVU0VDX1BFUl9TRUMpO1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlLmMtNzUxNC1cXHRcXHR0cmFjZV9zZXFfcHJpbnRmKHMsIFxcXCJvbGRlc3QgZXZlbnQgdHM6ICVsbHVcXFxcblxcXCIsXFxua2VybmVsL3RyYWNlL3RyYWNlLmM6NzUxNTpcXHRcXHRcXHRcXHRyaW5nX2J1ZmZlcl9vbGRlc3RfZXZlbnRfdHModHJhY2VfYnVmLVxcdTAwM2VidWZmZXIsIGNwdSkpO1xcbmtlcm5lbC90cmFjZS90cmFjZS5jLTc1MTYtXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYz05Mzc4PXN0YXRpYyB2b2lkIHRyYWNlX2luaXRfaXRlcihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuYy05Mzg4LVxcdC8qIEFubm90YXRlIHN0YXJ0IG9mIGJ1ZmZlcnMgaWYgd2UgaGFkIG92ZXJydW5zICovXFxua2VybmVsL3RyYWNlL3RyYWNlLmM6OTM4OTpcXHRpZiAocmluZ19idWZmZXJfb3ZlcnJ1bnMoaXRlci1cXHUwMDNlYXJyYXlfYnVmZmVyLVxcdTAwM2VidWZmZXIpKVxcbmtlcm5lbC90cmFjZS90cmFjZS5jLTkzOTAtXFx0XFx0aXRlci1cXHUwMDNlaXRlcl9mbGFncyB8PSBUUkFDRV9GSUxFX0FOTk9UQVRFO1xcbi0tXFxua2VybmVsL3RyYWNlL3RyYWNlX21taW90cmFjZS5jPTEyMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9vdmVycnVucyhzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpXFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfbW1pb3RyYWNlLmMtMTIyLVxcdHVuc2lnbmVkIGxvbmcgY250ID0gYXRvbWljX3hjaGcoXFx1MDAyNmRyb3BwZWRfY291bnQsIDApO1xcbmtlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYzoxMjM6XFx0dW5zaWduZWQgbG9uZyBvdmVyID0gcmluZ19idWZmZXJfb3ZlcnJ1bnMoaXRlci1cXHUwMDNlYXJyYXlfYnVmZmVyLVxcdTAwM2VidWZmZXIpO1xcbmtlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYy0xMjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAwOjU1Ljc1ODk1NzYwNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjE4NjgzMjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgdGhlIEtlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgYSBmZXcga2V5IHRyYWNpbmcgb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUuLi4gdGhlIG1vc3Qgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyBga2VybmVsL3RyYWNlL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGUgcmluZyBidWZmZXIgaW1wbGVtZW50YXRpb24gYW5kIHRoZSBjb3JlIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGVuc3VyaW5nIHRoYXQgYFJJTkdfQlVGRkVSYCBhbmQgYFRSQUNJTkdgIGFyZSBib3RoIGVuYWJsZWQsIG9yIGF0IGxlYXN0IGNvbmZpZ3VyZWQgaW4gYSB3YXkgdGhhdCBhbGxvd3MgdGhlbSB0byBiZSBwcm9wZXJseSB1dGlsaXplZCwgb3IgYXQgbGVhc3Qgbm90IGluYWR2ZXJ0ZW50bHkgZGlzYWJsZWQsIHNpbmNlIHRoYXQgd291bGQgYmUgYSB2ZXJ5IGZydXN0cmF0aW5nIG92ZXJzaWdodC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlaXIgc3RhdHVzIGFuZCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFsIHNldHRpbmdzIHRvIGVuc3VyZSB0aGUgZnVuY3Rpb25hbGl0eSBJIGV4cGVjdCBpcyBwcmVzZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM5MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAwOjU3LjM3NzY0Mzg0N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwMTA5ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJJTkdfQlVGRkVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz0xNDE9Y29uZmlnIFRSQUNFX0NMT0NLXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xNDMtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTQ0OmNvbmZpZyBSSU5HX0JVRkZFUlxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTE0NS1cXHRib29sXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xNTQ9Y29uZmlnIENPTlRFWFRfU1dJVENIX1RSQUNFUlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTU2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjE1Nzpjb25maWcgUklOR19CVUZGRVJfQUxMT1dfU1dBUFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTE1OC1cXHRib29sXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz05ODc9Y29uZmlnIFRSQUNFUE9JTlRfQkVOQ0hNQVJLXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDE2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwMTc6Y29uZmlnIFJJTkdfQlVGRkVSX0JFTkNITUFSS1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwMTgtXFx0dHJpc3RhdGUgXFxcIlJpbmcgYnVmZmVyIGJlbmNobWFyayBzdHJlc3MgdGVzdGVyXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9MTA4Nj1jb25maWcgRlRSQUNFX1ZBTElEQVRFX1JDVV9JU19XQVRDSElOR1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA5OC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDk5OmNvbmZpZyBSSU5HX0JVRkZFUl9SRUNPUkRfUkVDVVJTSU9OXFxua2VybmVsL3RyYWNlL0tjb25maWctMTEwMC1cXHRib29sIFxcXCJSZWNvcmQgZnVuY3Rpb25zIHRoYXQgcmVjdXJzZSBpbiB0aGUgcmluZyBidWZmZXJcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTYwPWNvbmZpZyBGVFJBQ0VfU09SVF9TVEFSVFVQX1RFU1RcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExNzMtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTE3NDpjb25maWcgUklOR19CVUZGRVJfU1RBUlRVUF9URVNUXFxua2VybmVsL3RyYWNlL0tjb25maWctMTE3NS0gICAgICAgYm9vbCBcXFwiUmluZyBidWZmZXIgc3RhcnR1cCBzZWxmIHRlc3RcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTk2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjExOTc6Y29uZmlnIFJJTkdfQlVGRkVSX1ZBTElEQVRFX1RJTUVfREVMVEFTXFxua2VybmVsL3RyYWNlL0tjb25maWctMTE5OC1cXHRib29sIFxcXCJWZXJpZnkgcmluZyBidWZmZXIgdGltZSBzdGFtcCBkZWx0YXNcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMjE2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjEyMTc6Y29uZmlnIFJJTkdfQlVGRkVSX1BFUlNJU1RFTlRfSU5KRUNUXFxua2VybmVsL3RyYWNlL0tjb25maWctMTIxOC1cXHRib29sIFxcXCJFbmFibGUgcGVyc2lzdGVudCByaW5nIGJ1ZmZlciBlcnJvciBpbmplY3Rpb24gdGVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDA6NTcuNDI3NjYxMDE5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMjUwMTM3NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIGBSSU5HX0JVRkZFUmAgYW5kIGBUUkFDSU5HYCBpbiBga2VybmVsL3RyYWNlL0tjb25maWdgOlxuXG4qKkludmVzdGlnYXRpbmcgS2VybmVsIFRyYWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYFJJTkdfQlVGRkVSYCBhbmQgYFRSQUNJTkdgIHdpdGhpbiB0aGUga2VybmVsJ3MgdHJhY2luZyBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgaW5zaWRlIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlIGl0c2VsZi4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgcmVsYXRpb25zaGlwcyB0aGV5J3ZlIGRlZmluZWQgd2l0aCBvdGhlciBrZXJuZWwgZmVhdHVyZXMuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGVzZSBzZXR0aW5ncyB3aWxsIGRldGVybWluZSB3aGV0aGVyIHRoZSBrZXJuZWwncyB0cmFjaW5nIGluZnJhc3RydWN0dXJlIGxldmVyYWdlcyBhIHJpbmcgYnVmZmVyIGZvciBkYXRhIHN0b3JhZ2UsIGFuZCBob3cgdGhlIG92ZXJhbGwgdHJhY2luZyBzeXN0ZW0gaXMgZW5hYmxlZC4gSSdtIGV4cGVjdGluZyBgVFJBQ0lOR2AgdG8gYmUgYSBicm9hZGVyIGVuYWJsaW5nIG9wdGlvbiwgcG9zc2libHkgd2l0aCBgUklOR19CVUZGRVJgIGFzIGEgc3VwcG9ydGluZyBkZXRhaWwgd2l0aGluIHRoYXQgbW9yZSBjb21wcmVoZW5zaXZlIGZlYXR1cmUgc2V0LiBLbm93aW5nIHRoaXMgaW50ZXJwbGF5IGlzIGVzc2VudGlhbCBmb3IgY3VzdG9taXppbmcgdGhlIHRyYWNpbmcgc2V0dXAgZm9yIHNwZWNpZmljIHBlcmZvcm1hbmNlIG9yIGRlYnVnZ2luZyBuZWVkcy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0aGUgS2NvbmZpZyBhY3R1YWxseSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEzMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAxOjAwLjQ1MjY3ODE5NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTMwOlxcdGNvbmZpZyBCVUlMRFRJTUVfTUNPVU5UX1NPUlRcXG4gMTMxOlxcdCAgICAgICBib29sXFxuIDEzMjpcXHQgICAgICAgZGVmYXVsdCB5XFxuIDEzMzpcXHQgICAgICAgZGVwZW5kcyBvbiBIQVZFX0JVSUxEVElNRV9NQ09VTlRfU09SVCBcXHUwMDI2XFx1MDAyNiBEWU5BTUlDX0ZUUkFDRVxcbiAxMzQ6XFx0ICAgICAgIGhlbHBcXG4gMTM1OlxcdCAgICAgICAgIFNvcnQgdGhlIG1jb3VudF9sb2Mgc2VjdGlvbiBhdCBidWlsZCB0aW1lLlxcbiAxMzY6XFx0XFxuIDEzNzpcXHRjb25maWcgVFJBQ0VSX01BWF9UUkFDRVxcbiAxMzg6XFx0XFx0Ym9vbFxcbiAxMzk6XFx0XFx0c2VsZWN0IFRSQUNFUl9TTkFQU0hPVFxcbiAxNDA6XFx0XFxuIDE0MTpcXHRjb25maWcgVFJBQ0VfQ0xPQ0tcXG4gMTQyOlxcdFxcdGJvb2xcXG4gMTQzOlxcdFxcbiAxNDQ6XFx0Y29uZmlnIFJJTkdfQlVGRkVSXFxuIDE0NTpcXHRcXHRib29sXFxuIDE0NjpcXHRcXHRzZWxlY3QgVFJBQ0VfQ0xPQ0tcXG4gMTQ3OlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAxNDg6XFx0XFxuIDE0OTpcXHRjb25maWcgRVZFTlRfVFJBQ0lOR1xcbiAxNTA6XFx0XFx0c2VsZWN0IENPTlRFWFRfU1dJVENIX1RSQUNFUlxcbiAxNTE6XFx0XFx0c2VsZWN0IEdMT0JcXG4gMTUyOlxcdFxcdGJvb2xcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0Y29uZmlnIENPTlRFWFRfU1dJVENIX1RSQUNFUlxcbiAxNTU6XFx0XFx0Ym9vbFxcbiAxNTY6XFx0XFxuIDE1NzpcXHRjb25maWcgUklOR19CVUZGRVJfQUxMT1dfU1dBUFxcbiAxNTg6XFx0XFx0Ym9vbFxcbiAxNTk6XFx0XFx0aGVscFxcbiAxNjA6XFx0XFx0IEFsbG93IHRoZSB1c2Ugb2YgcmluZ19idWZmZXJfc3dhcF9jcHUuXFxuIDE2MTpcXHRcXHQgQWRkcyBhIHZlcnkgc2xpZ2h0IG92ZXJoZWFkIHRvIHRyYWNpbmcgd2hlbiBlbmFibGVkLlxcbiAxNjI6XFx0XFxuIDE2MzpcXHRjb25maWcgUFJFRU1QVElSUV9UUkFDRVBPSU5UU1xcbiAxNjQ6XFx0XFx0Ym9vbFxcbiAxNjU6XFx0XFx0ZGVwZW5kcyBvbiBUUkFDRV9QUkVFTVBUX1RPR0dMRSB8fCBUUkFDRV9JUlFGTEFHU1xcbiAxNjY6XFx0XFx0c2VsZWN0IFRSQUNJTkdcXG4gMTY3OlxcdFxcdGRlZmF1bHQgeVxcbiAxNjg6XFx0XFx0aGVscFxcbiAxNjk6XFx0XFx0ICBDcmVhdGUgcHJlZW1wdC9pcnEgdG9nZ2xlIHRyYWNlcG9pbnRzIGlmIG5lZWRlZCwgc28gdGhhdCBvdGhlciBwYXJ0c1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTowMTowMC40NTI3ODM4MjRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2NTc2NzIyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBSSU5HX0JVRkZFUmAgYW5kIGBUUkFDSU5HYCBDb2RlIFBhdGhzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCdzIHRoZSBjb2RlIHRoYXQncyBzZWxlY3Rpbmcgb3IgZW5hYmxpbmcgKmJvdGgqIGBSSU5HX0JVRkZFUmAgYW5kIGBUUkFDSU5HYD9cIiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgcHJvamVjdCwgemVyb2luZyBpbiBvbiBhbnkgY29uZGl0aW9uYWwgbG9naWMsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIG9yIGJ1aWxkIHNjcmlwdHMgdGhhdCBtaWdodCBiZSByZXNwb25zaWJsZSBmb3IgdGhpcyBjb3VwbGluZy4gSSdtIGxvb2tpbmcgZm9yIHRoZSByb290IGNhdXNlLCB0aGUgdHJpZ2dlciB0aGF0J3MgbGVhZGluZyB0aGVzZSB0d28gZmVhdHVyZXMgdG8gYmUgYWN0aXZhdGVkIHRvZ2V0aGVyLiBJcyBpdCBhbiBpbnRlbmRlZCBmZWF0dXJlIGludGVyYWN0aW9uPyBBIGJ1Zz8gQSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXkncmUgbGlua2VkIGluIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVyZSBhcmUgYSBmZXcgbGlrZWx5IGFyZWFzIEknbGwgbmVlZCB0byBjaGVjayBmaXJzdCwgYnV0IEkgbmVlZCB0byBzdGFydCBzb21ld2hlcmUuIEknbGwgbmVlZCB0byBsb29rIGF0IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBLY29uZmlnIHNldHRpbmdzLCBhbmQgYW55IGN1c3RvbSBidWlsZCBzeXN0ZW1zIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBwaW5wb2ludCB0aGUgbWVjaGFuaXNtIHRoYXQgY29udHJvbHMgdGhpcyBkdWFsIGFjdGl2YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODc3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTowMTowMi44MTg1NTMxNTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NDI2NDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBSSU5HX0JVRkZFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9MTc5PWNvbmZpZyBUUkFDSU5HXFxua2VybmVsL3RyYWNlL0tjb25maWctMTgwLVxcdGJvb2xcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxODE6XFx0c2VsZWN0IFJJTkdfQlVGRkVSXFxua2VybmVsL3RyYWNlL0tjb25maWctMTgyLVxcdHNlbGVjdCBTVEFDS1RSQUNFIGlmIFNUQUNLVFJBQ0VfU1VQUE9SVFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9NDIxPWNvbmZpZyBJUlFTT0ZGX1RSQUNFUlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctNDI3LVxcdHNlbGVjdCBUUkFDRVJfTUFYX1RSQUNFXFxua2VybmVsL3RyYWNlL0tjb25maWc6NDI4OlxcdHNlbGVjdCBSSU5HX0JVRkZFUl9BTExPV19TV0FQXFxua2VybmVsL3RyYWNlL0tjb25maWctNDI5LVxcdHNlbGVjdCBUUkFDRVJfU05BUFNIT1RfUEVSX0NQVV9TV0FQXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz00NDQ9Y29uZmlnIFBSRUVNUFRfVFJBQ0VSXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy00NDktXFx0c2VsZWN0IFRSQUNFUl9NQVhfVFJBQ0VcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo0NTA6XFx0c2VsZWN0IFJJTkdfQlVGRkVSX0FMTE9XX1NXQVBcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy00NTEtXFx0c2VsZWN0IFRSQUNFUl9TTkFQU0hPVF9QRVJfQ1BVX1NXQVBcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTYzMT1jb25maWcgVFJBQ0VSX1NOQVBTSE9UX1BFUl9DUFVfU1dBUFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctNjMzLVxcdGRlcGVuZHMgb24gVFJBQ0VSX1NOQVBTSE9UXFxua2VybmVsL3RyYWNlL0tjb25maWc6NjM0OlxcdHNlbGVjdCBSSU5HX0JVRkZFUl9BTExPV19TV0FQXFxua2VybmVsL3RyYWNlL0tjb25maWctNjM1LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDE6MDIuODczOTgzODY2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NDE4MzIxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBrZXJuZWwgdHJhY2luZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gbG9vayBhdCBgQ09ORklHX0ZUUkFDRWAsIGBDT05GSUdfVFJBQ0lOR2AsIGFuZCBgQ09ORklHX1JJTkdfQlVGRkVSYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBwcmltYXJ5IHN1c3BlY3RzLiBOb3csIHRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gZGVsdmUgaW50byB0aGUgYGtlcm5lbC90cmFjZS9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSB1c2VyLWZhY2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0cmFjaW5nIGFyZSB1c3VhbGx5IGRlZmluZWQuIEknbSBzZWFyY2hpbmcgZm9yIHRoZSBzcGVjaWZpYyB1c2VyLXZpc2libGUgY29uZmlnIHRoYXQgaW4gdHVybiBlbmFibGVzIHRoZSBicm9hZCBmdW5jdGlvbmFsaXR5IHRoYXQgXCJUUkFDSU5HXCIgcmVwcmVzZW50cywgYW5kIGl0IHNob3VsZCBiZSBpbiB0aGlzIEtjb25maWcgZmlsZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBrZXkgdG8gdW5sb2NrIHRoZSB0cmFjaW5nIGZ1bmN0aW9uYWxpdHkgSSdtIGludGVyZXN0ZWQgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTAzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDE6MDUuNTE1ODE3OTQzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTYzNzUxNDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVFJBQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTE5OD1jb25maWcgVFJBQ0lOR19TVVBQT1JUXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yMDMtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MjA0Om1lbnVjb25maWcgRlRSQUNFXFxua2VybmVsL3RyYWNlL0tjb25maWctMjA1LVxcdGJvb2wgXFxcIlRyYWNlcnNcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz01ODg9Y29uZmlnIEVOQUJMRV9ERUZBVUxUX1RSQUNFUlNcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTU5Ni1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo1OTc6Y29uZmlnIEZUUkFDRV9TWVNDQUxMU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTU5OC1cXHRib29sIFxcXCJUcmFjZSBzeXNjYWxsc1xcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTg4MD1jb25maWcgQlBGX0tQUk9CRV9PVkVSUklERVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODg4LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg4OTpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfUEFUQ0hBQkxFX0ZVTkNUSU9OX0VOVFJZXFxua2VybmVsL3RyYWNlL0tjb25maWctODkwLVxcdGJvb2xcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg5Mi1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4OTM6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX0NDXFxua2VybmVsL3RyYWNlL0tjb25maWctODk0LVxcdGRlZl9ib29sIHlcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg5OC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4OTk6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX09CSlRPT0xcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy05MDAtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctOTA2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjkwNzpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfUkVDT1JETUNPVU5UXFxua2VybmVsL3RyYWNlL0tjb25maWctOTA4LVxcdGRlZl9ib29sIHlcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTEwMzM9Y29uZmlnIFRSQUNFX0VWQUxfTUFQX0ZJTEVcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNjAtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTA2MTpjb25maWcgRlRSQUNFX1JFQ09SRF9SRUNVUlNJT05cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDYyLVxcdGJvb2wgXFxcIlJlY29yZCBmdW5jdGlvbnMgdGhhdCByZWN1cnNlIGluIGZ1bmN0aW9uIHRyYWNpbmdcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDc0LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwNzU6Y29uZmlnIEZUUkFDRV9SRUNPUkRfUkVDVVJTSU9OX1NJWkVcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDc2LVxcdGludCBcXFwiTWF4IG51bWJlciBvZiByZWN1cnNlZCBmdW5jdGlvbnMgdG8gcmVjb3JkXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA4NS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDg2OmNvbmZpZyBGVFJBQ0VfVkFMSURBVEVfUkNVX0lTX1dBVENISU5HXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA4Ny1cXHRib29sIFxcXCJWYWxpZGF0ZSBSQ1UgaXMgb24gZHVyaW5nIGZ0cmFjZSBleGVjdXRpb25cXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTEzPWNvbmZpZyBHQ09WX1BST0ZJTEVfRlRSQUNFXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTI0LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjExMjU6Y29uZmlnIEZUUkFDRV9TRUxGVEVTVFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMjYtXFx0Ym9vbFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMjctXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTEyODpjb25maWcgRlRSQUNFX1NUQVJUVVBfVEVTVFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMjktXFx0Ym9vbCBcXFwiUGVyZm9ybSBhIHN0YXJ0dXAgdGVzdCBvbiBmdHJhY2VcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTQ4PWNvbmZpZyBFVkVOVF9UUkFDRV9URVNUX1NZU0NBTExTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTU5LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjExNjA6Y29uZmlnIEZUUkFDRV9TT1JUX1NUQVJUVVBfVEVTVFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExNjEtICAgICAgIGJvb2wgXFxcIlZlcmlmeSBjb21waWxlIHRpbWUgc29ydGluZyBvZiBmdHJhY2UgZnVuY3Rpb25zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTowMTowNi42Nzk1NzM4MTdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTYwNzk3MTQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqVHJhY2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbnM6IEEgUXVpY2sgTG9vayoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGUgYGZ0cmFjZWAgb3B0aW9uIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc2VlLi4uSSdsbCBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIHNvIEknbSB0aGlua2luZyBJJ2xsIHdhbnQgdG8gY2hlY2sgYG1lbnVjb25maWcgRlRSQUNFYCBpbiB0aGUgYGtlcm5lbC90cmFjZS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIG1vc3QgZGlyZWN0IHJvdXRlIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdHMgcmVsYXRlZCB0byBgZnRyYWNlYC4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgZ2V0IG1lIGEgY2xlYXIgdmlldyBvZiB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGZlYXR1cmVzLiBJJ20gYWZ0ZXIgYSBxdWljaywgZm9jdXNlZCBvdmVydmlldy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTowMTowOC4yODc1NDc3NDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMDpcXHRcXHRkZXBlbmRzIG9uIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlRcXG4gMjAxOlxcdFxcdGRlcGVuZHMgb24gU1RBQ0tUUkFDRV9TVVBQT1JUXFxuIDIwMjpcXHRcXHRkZWZhdWx0IHlcXG4gMjAzOlxcdFxcbiAyMDQ6XFx0bWVudWNvbmZpZyBGVFJBQ0VcXG4gMjA1OlxcdFxcdGJvb2wgXFxcIlRyYWNlcnNcXFwiXFxuIDIwNjpcXHRcXHRkZXBlbmRzIG9uIFRSQUNJTkdfU1VQUE9SVFxcbiAyMDc6XFx0XFx0ZGVmYXVsdCB5IGlmIERFQlVHX0tFUk5FTFxcbiAyMDg6XFx0XFx0aGVscFxcbiAyMDk6XFx0XFx0ICBFbmFibGUgdGhlIGtlcm5lbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxcbiAyMTA6XFx0XFxuIDIxMTpcXHRpZiBGVFJBQ0VcXG4gMjEyOlxcdFxcbiAyMTM6XFx0Y29uZmlnIFRSQUNFRlNfQVVUT01PVU5UX0RFUFJFQ0FURURcXG4gMjE0OlxcdFxcdGJvb2wgXFxcIkF1dG9tb3VudCB0cmFjZWZzIG9uIGRlYnVnZnMgW0RFUFJFQ0FURURdXFxcIlxcbiAyMTU6XFx0XFx0ZGVwZW5kcyBvbiBUUkFDSU5HXFxuIDIxNjpcXHRcXHRkZWZhdWx0IHlcXG4gMjE3OlxcdFxcdGhlbHBcXG4gMjE4OlxcdFxcdCAgVGhlIHRyYWNpbmcgaW50ZXJmYWNlIHdhcyBtb3ZlZCBmcm9tIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmdcXG4gMjE5OlxcdFxcdCAgdG8gL3N5cy9rZXJuZWwvdHJhY2luZyBpbiAyMDE1LCBidXQgdGhlIHRyYWNpbmcgZmlsZSBzeXN0ZW1cXG4gMjIwOlxcdFxcdCAgd2FzIHN0aWxsIGF1dG9tb3VudGVkIGluIC9zeXMva2VybmVsL2RlYnVnIGZvciBiYWNrd2FyZFxcbiAyMjE6XFx0XFx0ICBjb21wYXRpYmlsaXR5IHdpdGggdG9vbGluZy5cXG4gMjIyOlxcdFxcbiAyMjM6XFx0XFx0ICBUaGUgbmV3IGludGVyZmFjZSBoYXMgYmVlbiBhcm91bmQgZm9yIG1vcmUgdGhhbiAxMCB5ZWFycyBhbmRcXG4gMjI0OlxcdFxcdCAgdGhlIG9sZCBkZWJ1ZyBtb3VudCB3aWxsIHNvb24gYmUgcmVtb3ZlZC5cXG4gMjI1OlxcdFxcbiAyMjY6XFx0Y29uZmlnIEJPT1RUSU1FX1RSQUNJTkdcXG4gMjI3OlxcdFxcdGJvb2wgXFxcIkJvb3QtdGltZSBUcmFjaW5nIHN1cHBvcnRcXFwiXFxuIDIyODpcXHRcXHRkZXBlbmRzIG9uIFRSQUNJTkdcXG4gMjI5OlxcdFxcdHNlbGVjdCBCT09UX0NPTkZJR1xcbiAyMzA6XFx0XFx0aGVscFxcbiAyMzE6XFx0XFx0ICBFbmFibGUgZGV2ZWxvcGVyIHRvIHNldHVwIGZ0cmFjZSBzdWJzeXN0ZW0gdmlhIHN1cHBsZW1lbnRhbFxcbiAyMzI6XFx0XFx0ICBrZXJuZWwgY21kbGluZSBhdCBib290IHRpbWUgZm9yIGRlYnVnZ2luZyAodHJhY2luZykgZHJpdmVyXFxuIDIzMzpcXHRcXHQgIGluaXRpYWxpemF0aW9uIGFuZCBib290IHByb2Nlc3MuXFxuIDIzNDpcXHRcXG4gMjM1OlxcdGNvbmZpZyBGVU5DVElPTl9UUkFDRVJcXG4gMjM2OlxcdFxcdGJvb2wgXFxcIktlcm5lbCBGdW5jdGlvbiBUcmFjZXJcXFwiXFxuIDIzNzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfRlVOQ1RJT05fVFJBQ0VSXFxuIDIzODpcXHRcXHRzZWxlY3QgS0FMTFNZTVNcXG4gMjM5OlxcdFxcdHNlbGVjdCBHRU5FUklDX1RSQUNFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTowMTowOC4yODc2ODc0NDlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI2MDMzNjMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFZlcmRpY3Q6IFRyYWNlIFJpbmcgQnVmZmVyIFJlYWRlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgZW5hYmxpbmcgYENPTkZJR19GVFJBQ0VgIG9yIGBDT05GSUdfVFJBQ0lOR2AgYXV0b21hdGljYWxseSBpbmNsdWRlcyBgQ09ORklHX1JJTkdfQlVGRkVSYCwgc28gdGhvc2UgYXJlIHRoZSBrZXkgb25lcyB0byBhZGQgdG8gYEVuYWJsZUNvbmZpZ3NgLiBTcGVjaWZpY2FsbHksIEknbGwgZ28gd2l0aCBgVFJBQ0lOR2AgYW5kIGBGVFJBQ0VgLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBUaGUgZGlmZiBtb2RpZmllcyBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgY2FsbGVycyBhbmQgcmVsYXRlZCBmdW5jdGlvbnMsIHNvIGxldCdzIHNlZS4uLiBgdHJhY2luZ19idWZmZXJzX2lvY3RsYCBjYWxscyBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLCBhbmQgYHJiX2dldF9yZWFkZXJfcGFnZWAgaXMgY2FsbGVkIHdpdGhpbiBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLlxuXG5UaGUgbmV4dCBpbXBvcnRhbnQgcG9pbnQgaXMgdG8gZXN0YWJsaXNoIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIGZlYXR1cmUuIEdvb2QgbmV3cyEgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCwgYHJiX2dldF9yZWFkZXJfcGFnZWAsIGFuZCBgdHJhY2luZ19idWZmZXJzX2lvY3RsYCBhcmUgKmRlZmluaXRlbHkqIHNwZWNpZmljIHRvIHRoZSByaW5nIGJ1ZmZlciB0cmFjaW5nIG1tYXAgcmVhZGVyIGZlYXR1cmUuIFRoaXMgaW5jcmVhc2VzIHRoZSBsaWtlbGlob29kIHRoYXQgYSBmdXp6aW5nIGNhbXBhaWduIHdpbGwgdW5lYXJ0aCB2dWxuZXJhYmlsaXRpZXMuXG5cbkFscmlnaHQsIHdoYXQncyB0aGUgdmVyZGljdCBvbiBgV29ydGhGdXp6aW5nYD8gVGhpcyBpcyBhIG5vLWJyYWluZXI6IEFic29sdXRlbHkuIFRoZSBwYXRjaCBjaGFuZ2VzIGV4ZWN1dGFibGUgY29kZSBpbiBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgLiBTcGVjaWZpY2FsbHksIGl0IHJlbW92ZXMgYSBgV0FSTl9PTmAgYXNzZXJ0aW9uLiBUaGlzIGFzc2VydGlvbiBoYW5kbGVkIHRoZSBjYXNlIHdoZXJlIGEgcmVhZGVyIGlzIG9idGFpbmVkL2Fic2VudCB3aGVuIG1tYXBwaW5nL3JlYWRpbmcgdGhlIHRyYWNlIHJpbmcgYnVmZmVyLCB3aGljaCBzb3VuZHMgbGlrZSBzb21ldGhpbmcgd2Ugc2hvdWxkIHNjcnV0aW5pemUuIENydWNpYWxseSwgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBUUkFDRV9NTUFQX0lPQ1RMX0dFVF9SRUFERVJgIGlvY3RsIG9uIHRyYWNlZnMgYnVmZmVyIGZpbGVzLiBJdCdzIG1vZGlmeWluZyBhIGtlcm5lbCBydW50aW1lIGFzc2VydGlvbiwgYSBkZWZlbnNpdmUgY2hlY2ssIGluIGEgY29yZSB0cmFjaW5nIHN1YnN5c3RlbS4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyB1bmVxdWl2b2NhbGx5IGB0cnVlYC5cblxuSSd2ZSBnb3QgdG8gbWFrZSBzdXJlIHRoaXMgYWxpZ25zIHdpdGggdGhlIGNyaXRlcmlhLiBUaGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIChjaGVjayEpLCBpbmNsdWRpbmcgYSBjb3JlIHN1YnN5c3RlbSAodHJhY2luZykgYW5kIG1vZGlmaWVzIGEgcnVudGltZSBhc3NlcnRpb24uIENoZWNrIGFnYWluIVxuXG5TbywgdGhlIGVzc2VudGlhbHM6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgXG4qICAgYEZvY3VzU3ltYm9sc2A6IGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAsIGB0cmFjaW5nX2J1ZmZlcnNfaW9jdGxgLCBgcmJfZ2V0X3JlYWRlcl9wYWdlYFxuKiAgIGBFbmFibGVDb25maWdzYDogYFRSQUNJTkdgLCBgRlRSQUNFYFxuKiAgIFJlYXNvbmluZzogQ29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgdmVyZGljdC5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzIxLCJPdXRwdXRUb2tlbnMiOjE1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAxOjE0LjU0ODAyNTQ5N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMzc5MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFDSU5HXCIsXG4gICAgXCJGVFJBQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlclwiLFxuICAgIFwidHJhY2luZ19idWZmZXJzX2lvY3RsXCIsXG4gICAgXCJyYl9nZXRfcmVhZGVyX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVhZGVyIGFjcXVpc2l0aW9uIGxvZ2ljIGluIHRoZSByaW5nIGJ1ZmZlciBzdWJzeXN0ZW0gYnkgcmVtb3ZpbmcgYSBXQVJOX09OIGFzc2VydGlvbiB3aGVuIHJiX2dldF9yZWFkZXJfcGFnZSgpIHJldHVybnMgTlVMTCBpbiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpLiBUaGlzIHBhdGggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBpb2N0bChUUkFDRV9NTUFQX0lPQ1RMX0dFVF9SRUFERVIpIG9uIHRyYWNlIGJ1ZmZlciBmaWxlcyBhbmQgd2FycmFudHMgZnV6emluZyB0byB2ZXJpZnkgbWVtb3J5LW1hcHBlZCByZWFkZXIgc3luY2hyb25pemF0aW9uIGFuZCBlcnJvciBoYW5kbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFDSU5HXCIsXG4gICAgXCJGVFJBQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlclwiLFxuICAgIFwidHJhY2luZ19idWZmZXJzX2lvY3RsXCIsXG4gICAgXCJyYl9nZXRfcmVhZGVyX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVhZGVyIGFjcXVpc2l0aW9uIGxvZ2ljIGluIHRoZSByaW5nIGJ1ZmZlciBzdWJzeXN0ZW0gYnkgcmVtb3ZpbmcgYSBXQVJOX09OIGFzc2VydGlvbiB3aGVuIHJiX2dldF9yZWFkZXJfcGFnZSgpIHJldHVybnMgTlVMTCBpbiByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcigpLiBUaGlzIHBhdGggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBpb2N0bChUUkFDRV9NTUFQX0lPQ1RMX0dFVF9SRUFERVIpIG9uIHRyYWNlIGJ1ZmZlciBmaWxlcyBhbmQgd2FycmFudHMgZnV6emluZyB0byB2ZXJpZnkgbWVtb3J5LW1hcHBlZCByZWFkZXIgc3luY2hyb25pemF0aW9uIGFuZCBlcnJvciBoYW5kbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDE6MTQuNjE5NDEwMzU1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDAwNzMwNzg2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAxOjE0LjYxOTgzNzAyNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwMDA2ODc1NzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IHJlbW92ZXMgYSBXQVJOX09OKCkgbWFjcm8gYXJvdW5kIGEgTlVMTCBjaGVjayAoY2hhbmdpbmcgJ2lmIChXQVJOX09OKCFyZWFkZXIpKScgdG8gJ2lmICghcmVhZGVyKScpIGluIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgZmllbGRzLCBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBkYXRhIHBhdGhzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2IwM2M0M2VmODE3OTMzYjgzMzJiNWNhOGM5ZTM1NTExYTRjNGNkMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTU6MDA6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jXG5pbmRleCA5YzAzYTU1NWE2YmEyLi4xYTRkYTNkNDc1MTQ0IDEwMDY0NFxuLS0tIGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcbisrKyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jXG5AQCAtNzk5NSw3ICs3OTk1LDcgQEAgaW50IHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRyZWFkZXIgPSByYl9nZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7XG4tXHRpZiAoV0FSTl9PTighcmVhZGVyKSlcbitcdGlmICghcmVhZGVyKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdC8qIENoZWNrIGlmIGFueSBldmVudHMgd2VyZSBkcm9wcGVkICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTowMToxNC42MTk4MzgwMDVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEwMzYyMDI3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSaW5nIEJ1ZmZlciBSZWFkZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzLiBUaGUgZGlmZiBwb2ludHMgdXMgZGlyZWN0bHkgdG8gYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDc5OTUgd2hlcmUgdGhlIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgZnVuY3Rpb24gaXMuIEl0J3MgY2xlYXIgZnJvbSB0aGUgcGF0Y2ggdGhhdCBhIGNoYW5nZSBpcyBiZWluZyBtYWRlIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBUaGUgY29udGV4dCBpcyB2aXRhbCBoZXJlOiBpdCBzZWVtcyB0aGF0IGByYl9nZXRfcmVhZGVyX3BhZ2VgIGNvdWxkIHJldHVybiBhIG51bGwgcG9pbnRlci4gVGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBgV0FSTl9PTmAsIHdoaWNoLCB3aGlsZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBhbmQgZGV0ZWN0aW5nIGlzc3VlcywgbWlnaHQgbm90IGJlIHRoZSBtb3N0IGFwcHJvcHJpYXRlIGFwcHJvYWNoIGluIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby4gVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBXQVJOX09OYCBjaGVjayBhbmQganVzdCBjaGVja3MgaWYgYHJlYWRlcmAgaXMgbnVsbC4gSXTigJlzIGxpa2VseSBhIGNoYW5nZSB0byBpbXByb3ZlIHJvYnVzdG5lc3Mgb3IgdG8gcHJldmVudCBhIHBvdGVudGlhbCB3YXJuaW5nIGZyb20gdW5uZWNlc3NhcmlseSBoYWx0aW5nIGV4ZWN1dGlvbiBpbiBjZXJ0YWluIHNpdHVhdGlvbnMuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNhbGwgc2l0ZXMgb2YgYHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyYCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhIGBOVUxMYCByZXR1cm4gdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGNoYW5nZSBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIFRoZSBjb21tZW50IHJlZ2FyZGluZyBldmVudCBkcm9wcyBwcm92aWRlcyBzb21lIGNvbnRleHQsIGJ1dCB1bmRlcnN0YW5kaW5nICp3aHkqIGByYl9nZXRfcmVhZGVyX3BhZ2VgIG1pZ2h0IHJldHVybiBgTlVMTGAgaXMga2V5IHRvIGFzc2Vzc2luZyB0aGUgcGF0Y2gncyBjb3JyZWN0bmVzcyBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiBzeXN0ZW0gYmVoYXZpb3IsIGVzcGVjaWFsbHkgaW4gaGlnaC1wcmVzc3VyZSB0cmFjaW5nIGVudmlyb25tZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjAxOjI1LjY1NjA0MzY3N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzk4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzk4MDpcXHRcXHRyZWFkZXJfc2l6ZSA9IHJiX3BhZ2Vfc2l6ZShjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZSk7XFxuNzk4MTpcXHRcXG43OTgyOlxcdFxcdC8qXFxuNzk4MzpcXHRcXHQgKiBUaGVyZSBhcmUgZGF0YSB0byBiZSByZWFkIG9uIHRoZSBjdXJyZW50IHJlYWRlciBwYWdlLCB3ZSBjYW5cXG43OTg0OlxcdFxcdCAqIHJldHVybiB0byB0aGUgY2FsbGVyLiBCdXQgYmVmb3JlIHRoYXQsIHdlIGFzc3VtZSB0aGUgbGF0dGVyIHdpbGwgcmVhZFxcbjc5ODU6XFx0XFx0ICogZXZlcnl0aGluZy4gTGV0J3MgdXBkYXRlIHRoZSBrZXJuZWwgcmVhZGVyIGFjY29yZGluZ2x5Llxcbjc5ODY6XFx0XFx0ICovXFxuNzk4NzpcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UtXFx1MDAzZXJlYWQgXFx1MDAzYyByZWFkZXJfc2l6ZSkge1xcbjc5ODg6XFx0XFx0XFx0d2hpbGUgKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlLVxcdTAwM2VyZWFkIFxcdTAwM2MgcmVhZGVyX3NpemUpXFxuNzk4OTpcXHRcXHRcXHRcXHRyYl9hZHZhbmNlX3JlYWRlcihjcHVfYnVmZmVyKTtcXG43OTkwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjc5OTE6XFx0XFx0fVxcbjc5OTI6XFx0XFxuNzk5MzpcXHRcXHQvKiBEaWQgdGhlIHJlYWRlciBjYXRjaCB1cCB3aXRoIHRoZSB3cml0ZXI/ICovXFxuNzk5NDpcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgPT0gY3B1X2J1ZmZlci1cXHUwMDNlY29tbWl0X3BhZ2UpXFxuNzk5NTpcXHRcXHRcXHRnb3RvIG91dDtcXG43OTk2OlxcdFxcbjc5OTc6XFx0XFx0cmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpO1xcbjc5OTg6XFx0XFx0aWYgKCFyZWFkZXIpXFxuNzk5OTpcXHRcXHRcXHRnb3RvIG91dDtcXG44MDAwOlxcdFxcbjgwMDE6XFx0XFx0LyogQ2hlY2sgaWYgYW55IGV2ZW50cyB3ZXJlIGRyb3BwZWQgKi9cXG44MDAyOlxcdFxcdG1pc3NlZF9ldmVudHMgPSBjcHVfYnVmZmVyLVxcdTAwM2Vsb3N0X2V2ZW50cztcXG44MDAzOlxcdFxcbjgwMDQ6XFx0XFx0aWYgKG1pc3NlZF9ldmVudHMpIHtcXG44MDA1OlxcdFxcdFxcdGlmIChjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZSAhPSBjcHVfYnVmZmVyLVxcdTAwM2Vjb21taXRfcGFnZSkge1xcbjgwMDY6XFx0XFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9kYXRhX3BhZ2UgKmRwYWdlID0gcmVhZGVyLVxcdTAwM2VwYWdlO1xcbjgwMDc6XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGNvbW1pdDtcXG44MDA4OlxcdFxcdFxcdFxcdC8qXFxuODAwOTpcXHRcXHRcXHRcXHQgKiBVc2UgdGhlIHJlYWxfZW5kIGZvciB0aGUgZGF0YSBzaXplLFxcbjgwMTA6XFx0XFx0XFx0XFx0ICogVGhpcyBnaXZlcyB1cyBhIGNoYW5jZSB0byBzdG9yZSB0aGUgbG9zdCBldmVudHNcXG44MDExOlxcdFxcdFxcdFxcdCAqIG9uIHRoZSBwYWdlLlxcbjgwMTI6XFx0XFx0XFx0XFx0ICovXFxuODAxMzpcXHRcXHRcXHRcXHRpZiAocmVhZGVyLVxcdTAwM2VyZWFsX2VuZClcXG44MDE0OlxcdFxcdFxcdFxcdFxcdGxvY2FsX3NldChcXHUwMDI2ZHBhZ2UtXFx1MDAzZWNvbW1pdCwgcmVhZGVyLVxcdTAwM2VyZWFsX2VuZCk7XFxuODAxNTpcXHRcXHRcXHRcXHQvKlxcbjgwMTY6XFx0XFx0XFx0XFx0ICogSWYgdGhlcmUgaXMgcm9vbSBhdCB0aGUgZW5kIG9mIHRoZSBwYWdlIHRvIHNhdmUgdGhlXFxuODAxNzpcXHRcXHRcXHRcXHQgKiBtaXNzZWQgZXZlbnRzLCB0aGVuIHJlY29yZCBpdCB0aGVyZS5cXG44MDE4OlxcdFxcdFxcdFxcdCAqL1xcbjgwMTk6XFx0XFx0XFx0XFx0Y29tbWl0ID0gcmJfcGFnZV9zaXplKHJlYWRlcik7XFxuODAyMDpcXHRcXHRcXHRcXHRpZiAocmJfcGFnZV9jYXBhY2l0eShyZWFkZXIpIC0gY29tbWl0IFxcdTAwM2U9IHNpemVvZihtaXNzZWRfZXZlbnRzKSkge1xcbjgwMjE6XFx0XFx0XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZkcGFnZS1cXHUwMDNlZGF0YVtjb21taXRdLCBcXHUwMDI2bWlzc2VkX2V2ZW50cyxcXG44MDIyOlxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplb2YobWlzc2VkX2V2ZW50cykpO1xcbjgwMjM6XFx0XFx0XFx0XFx0XFx0bG9jYWxfYWRkKFJCX01JU1NFRF9TVE9SRUQsIFxcdTAwMjZkcGFnZS1cXHUwMDNlY29tbWl0KTtcXG44MDI0OlxcdFxcdFxcdFxcdH1cXG44MDI1OlxcdFxcdFxcdFxcdGxvY2FsX2FkZChSQl9NSVNTRURfRVZFTlRTLCBcXHUwMDI2ZHBhZ2UtXFx1MDAzZWNvbW1pdCk7XFxuODAyNjpcXHRcXHRcXHR9IGVsc2UgaWYgKCFXQVJOX09OQ0UoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgPT0gY3B1X2J1ZmZlci1cXHUwMDNldGFpbF9wYWdlLFxcbjgwMjc6XFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcIlJlYWRlciBvbiBjb21taXQgd2l0aCAlbGQgbWlzc2VkIGV2ZW50c1xcXCIsXFxuODAyODpcXHRcXHRcXHRcXHRcXHQgICAgICBtaXNzZWRfZXZlbnRzKSkge1xcbjgwMjk6XFx0XFx0XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDE6MjUuNjU2NTMzOTU3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMzE2NzExMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIHNvbWUgY29kZSwgcHJvYmFibHkgcmVsYXRlZCB0byBjb25jdXJyZW50IGRhdGEgc3RydWN0dXJlczpcblxuKipEZWNvbnN0cnVjdGluZyBgcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXJgKipcblxuQWxyaWdodCwgc28gSSdtIGtuZWUtZGVlcCBpbiB0aGlzIGByaW5nX2J1ZmZlcl9tYXBfZ2V0X3JlYWRlcmAgZnVuY3Rpb24uIFRoYXQgbmFtZSBhbG9uZSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBwYXJ0IG9mIGEgc3lzdGVtIGZvciBlZmZpY2llbnRseSBtYW5hZ2luZyBkYXRhLCBwZXJoYXBzIHdpdGhpbiBhIG11bHRpdGhyZWFkZWQgZW52aXJvbm1lbnQuIFRoZSBcInJpbmcgYnVmZmVyXCIgc3VnZ2VzdHMgYSBjaXJjdWxhciBxdWV1ZSwgbGlrZWx5IG9wdGltaXplZCBmb3IgZmFzdCwgc2VxdWVudGlhbCBhY2Nlc3MuIFRoZSBcIm1hcFwiIGNvbXBvbmVudCBpbXBsaWVzIHNvbWUga2luZCBvZiBrZXktdmFsdWUgbG9va3VwICp3aXRoaW4qIHRoYXQgcmluZyBidWZmZXIsIHBvdGVudGlhbGx5IGZvciByYW5kb20gYWNjZXNzIG9yIHNwZWNpZmljIGRhdGEgcmV0cmlldmFsLiBBbmQgdGhlbiB0aGVyZSdzIHRoZSBgZ2V0X3JlYWRlcmAgcGFydC4gT2theSwgc28gdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgZGVzaWduZWQgdG8gYWNxdWlyZSBhIHJlYWQgaGFuZGxlLCBvciBhbiBpdGVyYXRvciwgaW50byB0aGUgYnVmZmVyLCBwcmVzdW1hYmx5IHdpdGggdGhyZWFkIHNhZmV0eSBjb25zaWRlcmF0aW9ucy4gSSdtIHByb2JhYmx5IHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBsb2NraW5nIHN0cmF0ZWdpZXMgdXNlZCAoaWYgYW55KSwgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIE5vdywgbGV0J3Mgc2VlIHdoYXQgdGhlIHJlc3Qgb2YgdGhpcyB0aGluZyBpcyBhY3R1YWxseSBkb2luZy4uLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDE6MjcuODg4MjA2OTM4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3OTYwOlxcdH1cXG43OTYxOlxcdFxcbjc5NjI6XFx0aW50IHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSlcXG43OTYzOlxcdHtcXG43OTY0OlxcdFxcdHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyO1xcbjc5NjU6XFx0XFx0c3RydWN0IGJ1ZmZlcl9wYWdlICpyZWFkZXI7XFxuNzk2NjpcXHRcXHR1bnNpZ25lZCBsb25nIG1pc3NlZF9ldmVudHM7XFxuNzk2NzpcXHRcXHR1bnNpZ25lZCBsb25nIHJlYWRlcl9zaXplO1xcbjc5Njg6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG43OTY5OlxcdFxcbjc5NzA6XFx0XFx0Y3B1X2J1ZmZlciA9IHJiX2dldF9tYXBwZWRfYnVmZmVyKGJ1ZmZlciwgY3B1KTtcXG43OTcxOlxcdFxcdGlmIChJU19FUlIoY3B1X2J1ZmZlcikpXFxuNzk3MjpcXHRcXHRcXHRyZXR1cm4gKGludClQVFJfRVJSKGNwdV9idWZmZXIpO1xcbjc5NzM6XFx0XFxuNzk3NDpcXHRcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9sb2NrLCBmbGFncyk7XFxuNzk3NTpcXHRcXG43OTc2OlxcdGNvbnN1bWU6XFxuNzk3NzpcXHRcXHRpZiAocmJfcGVyX2NwdV9lbXB0eShjcHVfYnVmZmVyKSlcXG43OTc4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjc5Nzk6XFx0XFxuNzk4MDpcXHRcXHRyZWFkZXJfc2l6ZSA9IHJiX3BhZ2Vfc2l6ZShjcHVfYnVmZmVyLVxcdTAwM2VyZWFkZXJfcGFnZSk7XFxuNzk4MTpcXHRcXG43OTgyOlxcdFxcdC8qXFxuNzk4MzpcXHRcXHQgKiBUaGVyZSBhcmUgZGF0YSB0byBiZSByZWFkIG9uIHRoZSBjdXJyZW50IHJlYWRlciBwYWdlLCB3ZSBjYW5cXG43OTg0OlxcdFxcdCAqIHJldHVybiB0byB0aGUgY2FsbGVyLiBCdXQgYmVmb3JlIHRoYXQsIHdlIGFzc3VtZSB0aGUgbGF0dGVyIHdpbGwgcmVhZFxcbjc5ODU6XFx0XFx0ICogZXZlcnl0aGluZy4gTGV0J3MgdXBkYXRlIHRoZSBrZXJuZWwgcmVhZGVyIGFjY29yZGluZ2x5Llxcbjc5ODY6XFx0XFx0ICovXFxuNzk4NzpcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UtXFx1MDAzZXJlYWQgXFx1MDAzYyByZWFkZXJfc2l6ZSkge1xcbjc5ODg6XFx0XFx0XFx0d2hpbGUgKGNwdV9idWZmZXItXFx1MDAzZXJlYWRlcl9wYWdlLVxcdTAwM2VyZWFkIFxcdTAwM2MgcmVhZGVyX3NpemUpXFxuNzk4OTpcXHRcXHRcXHRcXHRyYl9hZHZhbmNlX3JlYWRlcihjcHVfYnVmZmVyKTtcXG43OTkwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjc5OTE6XFx0XFx0fVxcbjc5OTI6XFx0XFxuNzk5MzpcXHRcXHQvKiBEaWQgdGhlIHJlYWRlciBjYXRjaCB1cCB3aXRoIHRoZSB3cml0ZXI/ICovXFxuNzk5NDpcXHRcXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNlcmVhZGVyX3BhZ2UgPT0gY3B1X2J1ZmZlci1cXHUwMDNlY29tbWl0X3BhZ2UpXFxuNzk5NTpcXHRcXHRcXHRnb3RvIG91dDtcXG43OTk2OlxcdFxcbjc5OTc6XFx0XFx0cmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpO1xcbjc5OTg6XFx0XFx0aWYgKCFyZWFkZXIpXFxuNzk5OTpcXHRcXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6MDE6MjcuODg4NjY3MDA4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY3MzgwMjU2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogQSBRdWljayBSZXZpZXcqKlxuXG5Pa2F5LCBzbyB0aGUgZGlmZiBpcyBzdHJhaWdodGZvcndhcmQuIFdlJ3JlIGVzc2VudGlhbGx5IGRyb3BwaW5nIHRoZSBgV0FSTl9PTmAgbWFjcm8gYXJvdW5kIGEgbnVsbCBjaGVjayBmb3IgdGhlIGByZWFkZXJgIHZhcmlhYmxlLiBUaGUgb3JpZ2luYWwgY29kZSB3YXM6IGBpZiAoV0FSTl9PTighcmVhZGVyKSlgIGFuZCBpdCdzIGJlaW5nIGNoYW5nZWQgdG8gYGlmICghcmVhZGVyKWAuIFRoYXQgYHJlYWRlcmAgY2FuIGxlZ2l0aW1hdGVseSBiZSBudWxsIGluIGNvbmN1cnJlbnQgYnVmZmVyIG9wZXJhdGlvbnMgb3Igd2hlbiBubyByZWFkZXIgcGFnZSBpcyBhdmFpbGFibGUuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZT8gSSd2ZSBnb25lIG92ZXIgaXQsIGFuZCBuby4gVGhpcyBkb2Vzbid0IGFsbG9jYXRlIG1lbW9yeSwgaXQgZG9lc24ndCBjb3B5IGFueXRoaW5nIHRvIHVzZXJzcGFjZSwgaXQgZG9lc24ndCAqcmVhZCogdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBpdCBkb2Vzbid0IGFmZmVjdCBhbnkgc3RydWN0IHNpemVzIG9yIGRhdGEgZmxvd3MuIEl0J3MganVzdCByZW1vdmluZyBhIHdhcm5pbmcgYWJvdXQgYW4gZXJyb3IgY29uZGl0aW9uLlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29uY2x1c2lvbiBpcyBwcmV0dHkgY2xlYXIuIFNpbmNlIGl0IG1lZXRzIHRoZSBjcml0ZXJpYSBvZiBub3QgaW50cm9kdWNpbmcgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBpdCBzaW1wbHkgcmVtb3ZlcyBhIGBXQVJOX09OYCBtYWNybyBzdXJyb3VuZGluZyBhIG51bGwgY2hlY2sgZm9yIGByZWFkZXJgLCBgTmVlZHNLTVNBTmAgaGFzIHRvIGJlIGBmYWxzZWAuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBwcm92aWRlIHRoZSBhcHByb3ByaWF0ZSByZXNwb25zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMyMCwiT3V0cHV0VG9rZW5zIjoxMTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTowMTozNC42MjY2OTU1MDdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgcmVtb3ZlcyBhIFdBUk5fT04oKSBtYWNybyBhcm91bmQgYSBOVUxMIGNoZWNrIChjaGFuZ2luZyAnaWYgKFdBUk5fT04oIXJlYWRlcikpJyB0byAnaWYgKCFyZWFkZXIpJykgaW4gcmluZ19idWZmZXJfbWFwX2dldF9yZWFkZXIoKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBmaWVsZHMsIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGRhdGEgcGF0aHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IHJlbW92ZXMgYSBXQVJOX09OKCkgbWFjcm8gYXJvdW5kIGEgTlVMTCBjaGVjayAoY2hhbmdpbmcgJ2lmIChXQVJOX09OKCFyZWFkZXIpKScgdG8gJ2lmICghcmVhZGVyKScpIGluIHJpbmdfYnVmZmVyX21hcF9nZXRfcmVhZGVyKCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgZmllbGRzLCBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBkYXRhIHBhdGhzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz2sfx[1] Phase: Succeeded StartedAt: 2026-09-09 15:01:45 +0000 UTC FinishedAt: 2026-09-09 15:01:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 15:01:45 +0000 UTC FinishedAt: 2026-09-09 15:01:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[2] Phase: Succeeded StartedAt: 2026-09-09 15:01:45 +0000 UTC FinishedAt: 2026-09-09 18:48:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 15:01:45 +0000 UTC FinishedAt: 2026-09-09 18:48:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 15:01:45 +0000 UTC FinishedAt: 2026-09-09 15:01:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 15:01:45 +0000 UTC FinishedAt: 2026-09-09 15:01:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowz2sfx/series-workflowz2sfx-convert-artifact-2516575383/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 15:01:56 +0000 UTC FinishedAt: 2026-09-09 15:18:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 15:01:56 +0000 UTC FinishedAt: 2026-09-09 15:18:34 +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:*72077b0f-3192-462f-924f-20d27911ac0f,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-workflowz2sfx/series-workflowz2sfx-convert-artifact-2516575383/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": "21ad88e9-3edd-48ae-9081-476bd5bb962e", "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-workflowz2sfx/series-workflowz2sfx-build-action-1580376557/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 15:01:56 +0000 UTC FinishedAt: 2026-09-09 15:18:24 +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:*72077b0f-3192-462f-924f-20d27911ac0f,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-workflowz2sfx/series-workflowz2sfx-convert-artifact-2516575383/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": "21ad88e9-3edd-48ae-9081-476bd5bb962e", "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-workflowz2sfx/series-workflowz2sfx-build-action-1580376557/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 15:18:34 +0000 UTC FinishedAt: 2026-09-09 15:18:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 15:18:34 +0000 UTC FinishedAt: 2026-09-09 15:18:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 15:18:34 +0000 UTC FinishedAt: 2026-09-09 15:18:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 15:18:34 +0000 UTC FinishedAt: 2026-09-09 15:18:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowz2sfx/series-workflowz2sfx-convert-artifact-972900550/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 15:18:44 +0000 UTC FinishedAt: 2026-09-09 15:21:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 15:18:44 +0000 UTC FinishedAt: 2026-09-09 15:20:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*21ad88e9-3edd-48ae-9081-476bd5bb962e,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-workflowz2sfx/series-workflowz2sfx-build-action-1580376557/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-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 15:21:00 +0000 UTC FinishedAt: 2026-09-09 15:21:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 15:21:00 +0000 UTC FinishedAt: 2026-09-09 15:21:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 15:21:00 +0000 UTC FinishedAt: 2026-09-09 15:37:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 15:21:00 +0000 UTC FinishedAt: 2026-09-09 15:37:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*72077b0f-3192-462f-924f-20d27911ac0f,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-workflowz2sfx/series-workflowz2sfx-convert-artifact-972900550/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": "3f384103-d72b-46b9-ab2c-a1da2796b6d2", "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-workflowz2sfx/series-workflowz2sfx-build-action-1835650058/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 15:21:00 +0000 UTC FinishedAt: 2026-09-09 15:36:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*72077b0f-3192-462f-924f-20d27911ac0f,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-workflowz2sfx/series-workflowz2sfx-convert-artifact-972900550/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": "3f384103-d72b-46b9-ab2c-a1da2796b6d2", "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-workflowz2sfx/series-workflowz2sfx-build-action-1835650058/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 15:37:07 +0000 UTC FinishedAt: 2026-09-09 15:37:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 15:37:07 +0000 UTC FinishedAt: 2026-09-09 15:37:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 15:37:07 +0000 UTC FinishedAt: 2026-09-09 15:39:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 15:37:07 +0000 UTC FinishedAt: 2026-09-09 15:39:07 +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:*3f384103-d72b-46b9-ab2c-a1da2796b6d2,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-workflowz2sfx/series-workflowz2sfx-build-action-1835650058/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-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 15:39:17 +0000 UTC FinishedAt: 2026-09-09 18:48:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 15:39:17 +0000 UTC FinishedAt: 2026-09-09 18:48:58 +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":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*21ad88e9-3edd-48ae-9081-476bd5bb962e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3f384103-d72b-46b9-ab2c-a1da2796b6d2,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-workflowz2sfx/series-workflowz2sfx-build-action-1580376557/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-workflowz2sfx/series-workflowz2sfx-build-action-1835650058/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 15:39:17 +0000 UTC FinishedAt: 2026-09-09 15:39:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 15:39:17 +0000 UTC FinishedAt: 2026-09-09 15:39:22 +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":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz2sfx/series-workflowz2sfx-convert-artifact-370093707/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 15:39:17 +0000 UTC FinishedAt: 2026-09-09 15:39:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 15:39:17 +0000 UTC FinishedAt: 2026-09-09 15:39:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 15:39:17 +0000 UTC FinishedAt: 2026-09-09 15:39:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 15:39:27 +0000 UTC FinishedAt: 2026-09-09 18:48:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2sfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ring_buffer_map_get_reader","tracing_buffers_ioctl","rb_get_reader_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRACING","FTRACE"],"series_id":"60634a84-5e6a-4f9a-bc9f-13cc6c4a2bd3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 15:39:27 +0000 UTC FinishedAt: 2026-09-09 18:48:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*21ad88e9-3edd-48ae-9081-476bd5bb962e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3f384103-d72b-46b9-ab2c-a1da2796b6d2,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-workflowz2sfx/series-workflowz2sfx-build-action-1580376557/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-workflowz2sfx/series-workflowz2sfx-build-action-1835650058/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-workflowz2sfx/series-workflowz2sfx-convert-artifact-370093707/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,}