Name: series-workflowhvdfm Phase: Succeeded StartedAt: 2026-07-12 00:10:09 +0000 UTC FinishedAt: 2026-07-12 02:28:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[0] Phase: Succeeded StartedAt: 2026-07-12 00:10:09 +0000 UTC FinishedAt: 2026-07-12 00:37:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[0].run-triage Phase: Succeeded StartedAt: 2026-07-12 00:10:10 +0000 UTC FinishedAt: 2026-07-12 00:37:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "44696aa3a489d2baf58efa61b37833f100072bee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MWIFIEX", "MWIFIEX_USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "44696aa3a489d2baf58efa61b37833f100072bee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MWIFIEX", "MWIFIEX_USB" ], "series_id": "b1fdcdc4-2083-4115-8fde-d385e180e1ea" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mwifiex_search_oui_in_ie", "mwifiex_is_rsn_oui_present", "mwifiex_is_wpa_oui_present", "mwifiex_is_network_compatible", "mwifiex_check_network_compatibility", "mwifiex_update_curr_bss_params", "mwifiex_parse_single_response_buf", "mwifiex_ret_802_11_scan", "mwifiex_handle_event_ext_scan_report", "mwifiex_bss_start" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01XSUZJRVgmIzM0OywKICAgICYjMzQ7TVdJRklFWF9VU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttd2lmaWV4X3NlYXJjaF9vdWlfaW5faWUmIzM0OywKICAgICYjMzQ7bXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnQmIzM0OywKICAgICYjMzQ7bXdpZmlleF9pc193cGFfb3VpX3ByZXNlbnQmIzM0OywKICAgICYjMzQ7bXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGUmIzM0OywKICAgICYjMzQ7bXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHkmIzM0OywKICAgICYjMzQ7bXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zJiMzNDssCiAgICAmIzM0O213aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1ZiYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3JldF84MDJfMTFfc2NhbiYjMzQ7LAogICAgJiMzNDttd2lmaWV4X2hhbmRsZV9ldmVudF9leHRfc2Nhbl9yZXBvcnQmIzM0OywKICAgICYjMzQ7bXdpZmlleF9ic3Nfc3RhcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGluIGBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVgIHdoZW4gcGFyc2luZyBXaS1GaSBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUVzKS4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgd2hlbiB0aGUgZHJpdmVyIHByb2Nlc3NlcyBzY2FuIHJlc3VsdHMgb3IgZXZlbnRzIGZyb20gdGhlIGZpcm13YXJlLiBTaW5jZSB0aGUgbXdpZmlleCBkcml2ZXIgc3VwcG9ydHMgVVNCLCB0aGUgZmlybXdhcmUgcmVzcG9uc2VzIGNhbiBiZSBmdXp6ZWQgdmlhIHRoZSBVU0Igc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmM1NWVjYWZhNmY0YTBiMmMyYWFhMWEwMzc5MDIyNmE2NmUwODExYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDEyIDAwOjMzOjE4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jXG5pbmRleCA5N2MwZWMzYjgyMmU3MC4uM2E1NWZjNmYxYjU0OGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jXG5AQCAtMTA0LDEyICYjNDM7MTA0LDIxIEBAIGhhc192ZW5kb3JfaGRyKHN0cnVjdCBpZWVlX3R5cGVzX3ZlbmRvcl9zcGVjaWZpYyAqaWUsIHU4IGtleSlcbiAgKiBhIGdpdmVuIG91aSBpbiBQVEsuXG4gICovXG4gc3RhdGljIHU4XG4tbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKHN0cnVjdCBpZV9ib2R5ICppZWJvZHksIHU4ICpvdWkpXG4mIzQzO213aWZpZXhfc2VhcmNoX291aV9pbl9pZShzdHJ1Y3QgaWVfYm9keSAqaWVib2R5LCB1OCAqb3VpLCBpbnQgaWVfbGVuKVxuIHtcbiBcdHU4IGNvdW50O1xuIFxuJiM0MztcdC8qIE5lZWQgZ3JwX2tleV9vdWlbNF0gJiM0MzsgcHRrX2NudFsyXSBiZWZvcmUgcmVhZGluZyB0aGUgT1VJIGNvdW50LiAqL1xuJiM0MztcdGlmIChpZV9sZW4gXHUwMDNjIChpbnQpb2Zmc2V0b2Yoc3RydWN0IGllX2JvZHksIHB0a19ib2R5KSlcbiYjNDM7XHRcdHJldHVybiBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVDtcbiYjNDM7XG4gXHRjb3VudCA9IGllYm9keS1cdTAwM2VwdGtfY250WzBdO1xuIFxuJiM0MztcdC8qIFJlamVjdCBhbiBPVUkgY291bnQgd2hvc2UgbGlzdCB3b3VsZCBydW4gcGFzdCB0aGUgZWxlbWVudC4gKi9cbiYjNDM7XHRpZiAob2Zmc2V0b2Yoc3RydWN0IGllX2JvZHksIHB0a19ib2R5KSAmIzQzO1xuJiM0MztcdCAgICBjb3VudCAqIHNpemVvZihpZWJvZHktXHUwMDNlcHRrX2JvZHkpIFx1MDAzZSAoc2l6ZV90KWllX2xlbilcbiYjNDM7XHRcdHJldHVybiBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVDtcbiYjNDM7XG4gXHQvKiBUaGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBPVUlzIGZvciBQVEsgaGVuY2VcbiBcdCAgIDEpIFRha2UgdGhlIGxlbmd0aC5cbiBcdCAgIDIpIENoZWNrIGFsbCB0aGUgT1VJcyBmb3IgQUVTLlxuQEAgLTE0MywxMSAmIzQzOzE1MiwxNCBAQCBtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudChzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYywgdTMyIGNpcGhlcilcbiBcdHU4IHJldCA9IE1XSUZJRVhfT1VJX05PVF9QUkVTRU5UO1xuIFxuIFx0aWYgKGhhc19pZWVlX2hkcihic3NfZGVzYy1cdTAwM2ViY25fcnNuX2llLCBXTEFOX0VJRF9SU04pKSB7XG4mIzQzO1x0XHRpbnQgaWVfbGVuID0gKGludClic3NfZGVzYy1cdTAwM2ViY25fcnNuX2llLVx1MDAzZWllZWVfaGRyLmxlbiAtXG4mIzQzO1x0XHRcdCAgICAgUlNOX0dUS19PVUlfT0ZGU0VUO1xuJiM0MztcbiBcdFx0aWVib2R5ID0gKHN0cnVjdCBpZV9ib2R5ICopXG4gXHRcdFx0ICgoKHU4ICopIGJzc19kZXNjLVx1MDAzZWJjbl9yc25faWUtXHUwMDNlZGF0YSkgJiM0MztcbiBcdFx0XHQgIFJTTl9HVEtfT1VJX09GRlNFVCk7XG4gXHRcdG91aSA9IFx1MDAyNm13aWZpZXhfcnNuX291aVtjaXBoZXJdWzBdO1xuLVx0XHRyZXQgPSBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWUoaWVib2R5LCBvdWkpO1xuJiM0MztcdFx0cmV0ID0gbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKGllYm9keSwgb3VpLCBpZV9sZW4pO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXHR9XG5AQCAtMTY5LDEwICYjNDM7MTgxLDE0IEBAIG13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50KHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLCB1MzIgY2lwaGVyKVxuIFx0dTggcmV0ID0gTVdJRklFWF9PVUlfTk9UX1BSRVNFTlQ7XG4gXG4gXHRpZiAoaGFzX3ZlbmRvcl9oZHIoYnNzX2Rlc2MtXHUwMDNlYmNuX3dwYV9pZSwgV0xBTl9FSURfVkVORE9SX1NQRUNJRklDKSkge1xuJiM0MztcdFx0aW50IGllX2xlbiA9IChpbnQpYnNzX2Rlc2MtXHUwMDNlYmNuX3dwYV9pZS1cdTAwM2V2ZW5kX2hkci5sZW4gLVxuJiM0MztcdFx0XHQgICAgIChpbnQpc2l6ZW9mKGJzc19kZXNjLVx1MDAzZWJjbl93cGFfaWUtXHUwMDNldmVuZF9oZHIub3VpKSAtXG4mIzQzO1x0XHRcdCAgICAgV1BBX0dUS19PVUlfT0ZGU0VUO1xuJiM0MztcbiBcdFx0aWVib2R5ID0gKHN0cnVjdCBpZV9ib2R5ICopKCh1OCAqKWJzc19kZXNjLVx1MDAzZWJjbl93cGFfaWUtXHUwMDNlZGF0YSAmIzQzO1xuIFx0XHRcdFx0XHQgICAgV1BBX0dUS19PVUlfT0ZGU0VUKTtcbiBcdFx0b3VpID0gXHUwMDI2bXdpZmlleF93cGFfb3VpW2NpcGhlcl1bMF07XG4tXHRcdHJldCA9IG13aWZpZXhfc2VhcmNoX291aV9pbl9pZShpZWJvZHksIG91aSk7XG4mIzQzO1x0XHRyZXQgPSBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWUoaWVib2R5LCBvdWksIGllX2xlbik7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNV0lGSUVYJiMzNDssCiAgICAmIzM0O01XSUZJRVhfVVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXdpZmlleF9zZWFyY2hfb3VpX2luX2llJiMzNDssCiAgICAmIzM0O213aWZpZXhfaXNfcnNuX291aV9wcmVzZW50JiMzNDssCiAgICAmIzM0O213aWZpZXhfaXNfd3BhX291aV9wcmVzZW50JiMzNDssCiAgICAmIzM0O213aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlJiMzNDssCiAgICAmIzM0O213aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5JiMzNDssCiAgICAmIzM0O213aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtcyYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3BhcnNlX3NpbmdsZV9yZXNwb25zZV9idWYmIzM0OywKICAgICYjMzQ7bXdpZmlleF9yZXRfODAyXzExX3NjYW4mIzM0OywKICAgICYjMzQ7bXdpZmlleF9oYW5kbGVfZXZlbnRfZXh0X3NjYW5fcmVwb3J0JiMzNDssCiAgICAmIzM0O213aWZpZXhfYnNzX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYCB3aGVuIHBhcnNpbmcgV2ktRmkgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gdGhlIGRyaXZlciBwcm9jZXNzZXMgc2NhbiByZXN1bHRzIG9yIGV2ZW50cyBmcm9tIHRoZSBmaXJtd2FyZS4gU2luY2UgdGhlIG13aWZpZXggZHJpdmVyIHN1cHBvcnRzIFVTQiwgdGhlIGZpcm13YXJlIHJlc3BvbnNlcyBjYW4gYmUgZnV6emVkIHZpYSB0aGUgVVNCIHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmM1NWVjYWZhNmY0YTBiMmMyYWFhMWEwMzc5MDIyNmE2NmUwODExYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDEyIDAwOjMzOjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMKaW5kZXggOTdjMGVjM2I4MjJlNzAuLjNhNTVmYzZmMWI1NDhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMKQEAgLTEwNCwxMiAmIzQzOzEwNCwyMSBAQCBoYXNfdmVuZG9yX2hkcihzdHJ1Y3QgaWVlZV90eXBlc192ZW5kb3Jfc3BlY2lmaWMgKmllLCB1OCBrZXkpCiAgKiBhIGdpdmVuIG91aSBpbiBQVEsuCiAgKi8KIHN0YXRpYyB1OAotbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKHN0cnVjdCBpZV9ib2R5ICppZWJvZHksIHU4ICpvdWkpCiYjNDM7bXdpZmlleF9zZWFyY2hfb3VpX2luX2llKHN0cnVjdCBpZV9ib2R5ICppZWJvZHksIHU4ICpvdWksIGludCBpZV9sZW4pCiB7CiAJdTggY291bnQ7CiAKJiM0MzsJLyogTmVlZCBncnBfa2V5X291aVs0XSAmIzQzOyBwdGtfY250WzJdIGJlZm9yZSByZWFkaW5nIHRoZSBPVUkgY291bnQuICovCiYjNDM7CWlmIChpZV9sZW4gJmx0OyAoaW50KW9mZnNldG9mKHN0cnVjdCBpZV9ib2R5LCBwdGtfYm9keSkpCiYjNDM7CQlyZXR1cm4gTVdJRklFWF9PVUlfTk9UX1BSRVNFTlQ7CiYjNDM7CiAJY291bnQgPSBpZWJvZHktJmd0O3B0a19jbnRbMF07CiAKJiM0MzsJLyogUmVqZWN0IGFuIE9VSSBjb3VudCB3aG9zZSBsaXN0IHdvdWxkIHJ1biBwYXN0IHRoZSBlbGVtZW50LiAqLwomIzQzOwlpZiAob2Zmc2V0b2Yoc3RydWN0IGllX2JvZHksIHB0a19ib2R5KSAmIzQzOwomIzQzOwkgICAgY291bnQgKiBzaXplb2YoaWVib2R5LSZndDtwdGtfYm9keSkgJmd0OyAoc2l6ZV90KWllX2xlbikKJiM0MzsJCXJldHVybiBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVDsKJiM0MzsKIAkvKiBUaGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBPVUlzIGZvciBQVEsgaGVuY2UKIAkgICAxKSBUYWtlIHRoZSBsZW5ndGguCiAJICAgMikgQ2hlY2sgYWxsIHRoZSBPVUlzIGZvciBBRVMuCkBAIC0xNDMsMTEgJiM0MzsxNTIsMTQgQEAgbXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnQoc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MsIHUzMiBjaXBoZXIpCiAJdTggcmV0ID0gTVdJRklFWF9PVUlfTk9UX1BSRVNFTlQ7CiAKIAlpZiAoaGFzX2llZWVfaGRyKGJzc19kZXNjLSZndDtiY25fcnNuX2llLCBXTEFOX0VJRF9SU04pKSB7CiYjNDM7CQlpbnQgaWVfbGVuID0gKGludClic3NfZGVzYy0mZ3Q7YmNuX3Jzbl9pZS0mZ3Q7aWVlZV9oZHIubGVuIC0KJiM0MzsJCQkgICAgIFJTTl9HVEtfT1VJX09GRlNFVDsKJiM0MzsKIAkJaWVib2R5ID0gKHN0cnVjdCBpZV9ib2R5ICopCiAJCQkgKCgodTggKikgYnNzX2Rlc2MtJmd0O2Jjbl9yc25faWUtJmd0O2RhdGEpICYjNDM7CiAJCQkgIFJTTl9HVEtfT1VJX09GRlNFVCk7CiAJCW91aSA9ICZhbXA7bXdpZmlleF9yc25fb3VpW2NpcGhlcl1bMF07Ci0JCXJldCA9IG13aWZpZXhfc2VhcmNoX291aV9pbl9pZShpZWJvZHksIG91aSk7CiYjNDM7CQlyZXQgPSBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWUoaWVib2R5LCBvdWksIGllX2xlbik7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0KQEAgLTE2OSwxMCAmIzQzOzE4MSwxNCBAQCBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudChzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYywgdTMyIGNpcGhlcikKIAl1OCByZXQgPSBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVDsKIAogCWlmIChoYXNfdmVuZG9yX2hkcihic3NfZGVzYy0mZ3Q7YmNuX3dwYV9pZSwgV0xBTl9FSURfVkVORE9SX1NQRUNJRklDKSkgewomIzQzOwkJaW50IGllX2xlbiA9IChpbnQpYnNzX2Rlc2MtJmd0O2Jjbl93cGFfaWUtJmd0O3ZlbmRfaGRyLmxlbiAtCiYjNDM7CQkJICAgICAoaW50KXNpemVvZihic3NfZGVzYy0mZ3Q7YmNuX3dwYV9pZS0mZ3Q7dmVuZF9oZHIub3VpKSAtCiYjNDM7CQkJICAgICBXUEFfR1RLX09VSV9PRkZTRVQ7CiYjNDM7CiAJCWllYm9keSA9IChzdHJ1Y3QgaWVfYm9keSAqKSgodTggKilic3NfZGVzYy0mZ3Q7YmNuX3dwYV9pZS0mZ3Q7ZGF0YSAmIzQzOwogCQkJCQkgICAgV1BBX0dUS19PVUlfT0ZGU0VUKTsKIAkJb3VpID0gJmFtcDttd2lmaWV4X3dwYV9vdWlbY2lwaGVyXVswXTsKLQkJcmV0ID0gbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKGllYm9keSwgb3VpKTsKJiM0MzsJCXJldCA9IG13aWZpZXhfc2VhcmNoX291aV9pbl9pZShpZWJvZHksIG91aSwgaWVfbGVuKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjU2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFdpLUZpIERyaXZlciBQYXRjaDogU2VjdXJpdHkgYW5kIEZ1enppbmcgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jYC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZpeCDigJMgYWRkaW5nIGJvdW5kcyBjaGVja2luZyB0byBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYC4gU2VlbXMgbGlrZSBhIHN0YW5kYXJkIGRlZmVuc2UgYWdhaW5zdCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcGFyc2luZyBJbmZvcm1hdGlvbiBFbGVtZW50cyBmcm9tIFdpLUZpIGJlYWNvbnMgb3IgcHJvYmUgcmVzcG9uc2VzLiBHb29kLCBwcm9hY3RpdmUgc2VjdXJpdHkgaXMgYWx3YXlzIGFwcHJlY2lhdGVkLiBJdCYjMzk7cyBmdW5jdGlvbmFsIGNvZGUgd2l0aGluIGEgd2lyZWxlc3MgZHJpdmVyLCB3aGljaCBpcyB3aGVyZSB0aGluZ3Mgc3RhcnQgdG8gZ2V0IGludGVyZXN0aW5nIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gd2UgZnV6eiB0aGlzPyBXaXRoIFdpLUZpIGRyaXZlcnMsIG1hYzgwMjExX2h3c2ltIGlzIG9mdGVuIHRoZSBnby10by4gQnV0LCB0aGlzIGlzICptd2lmaWV4KiwgYSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIuIFNvLCB0aGUgcXVlc3Rpb24gYmVjb21lczogY2FuIHdlIGZ1enogKm13aWZpZXgqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFRoYXQmIzM5O3MgdGhlIHJlYWwgY2hhbGxlbmdlIHdpdGggaGFyZHdhcmUgZHJpdmVycywgcmlnaHQ/IFRoZXkmIzM5O3JlIG9mdGVuIHRpZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUuIEl0JiMzOTtzIG5vdCBhbHdheXMgZWFzeSB1bmxlc3MgdGhlcmUgaXMgc3BlY2lmaWMgZW11bGF0aW9uIGZvciB0aGUgaGFyZHdhcmUgb3IgaXTigJlzIGEgVVNCLCBTRElPLCBvciBQQ0llIGRldmljZSwgd2hlcmUgd2UgY2FuIHBvdGVudGlhbGx5IGZ1enogdGhlIGJ1cy4KCkhtbSwgZG9lcyBtd2lmaWV4ICpoYXZlKiBVU0Igc3VwcG9ydD8gVGhhdCBtaWdodCBvcGVuIHVwIHNvbWUgZnV6emluZyBwb3NzaWJpbGl0aWVzLiBMZXQgbWUgY2hlY2suLi4gWWVwLCB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuY2AgZmlsZSBleGlzdHMuIE9rYXksIHRoaXMgaXMgZ29vZC4gVGltZSB0byBkaWcgYSBiaXQgZGVlcGVyIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZG8gd2l0aCB0aGlzIGRyaXZlciBhbmQgaXRzIFVTQiBpbnRlcmZhY2UuIE1heWJlIHdlJiMzOTtyZSBvbnRvIHNvbWV0aGluZyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxODUyOCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYz00Mj1zdGF0aWMgdTE2XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjQzOm13aWZpZXhfY29udmVydF9tY3NtYXBfdG9fbWF4cmF0ZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy00NC1cdFx0XHRcdCAgdTggYmFuZHMsIHUxNiBtY3NfbWFwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtNDgtXHR1MzIgdXNyX3ZodF9jYXBfaW5mbyA9IDA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjQ5Olx0c3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtXHUwMDNlYWRhcHRlcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtNTAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYz04NT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzo4Njptd2lmaWV4X2ZpbGxfdmh0X2NhcF9pbmZvKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTg3LVx0XHRcdCAgc3RydWN0IGllZWU4MDIxMV92aHRfY2FwICp2aHRfY2FwLCB1OCBiYW5kcylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtODgte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzo4OTpcdHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LVx1MDAzZWFkYXB0ZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTkwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtOTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjk5OnZvaWQgbXdpZmlleF9maWxsX3ZodF9jYXBfdGx2KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTEwMC1cdFx0XHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZodF9jYXAgKnZodF9jYXAsIHU4IGJhbmRzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xMDEte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxMDI6XHRzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi1cdTAwM2VhZGFwdGVyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xMDMtXHR1MTYgbWNzX21hcF91c2VyLCBtY3NfbWFwX3Jlc3AsIG1jc19tYXBfcmVzdWx0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTA2LVx0LyogRmlsbCBWSFQgY2FwIGluZm8gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MTA3Olx0bXdpZmlleF9maWxsX3ZodF9jYXBfaW5mbyhwcml2LCB2aHRfY2FwLCBiYW5kcyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTEwOC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTEyOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MTI5Olx0dG1wID0gbXdpZmlleF9jb252ZXJ0X21jc21hcF90b19tYXhyYXRlKHByaXYsIGJhbmRzLCBtY3NfbWFwX3Jlc3VsdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTEzMC1cdHZodF9jYXAtXHUwMDNlc3VwcF9tY3MucnhfaGlnaGVzdCA9IGNwdV90b19sZTE2KHRtcCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xNTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjE1MTpcdHRtcCA9IG13aWZpZXhfY29udmVydF9tY3NtYXBfdG9fbWF4cmF0ZShwcml2LCBiYW5kcywgbWNzX21hcF9yZXN1bHQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xNTItXHR2aHRfY2FwLVx1MDAzZXN1cHBfbWNzLnR4X2hpZ2hlc3QgPSBjcHVfdG9fbGUxNih0bXApO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTU2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxNTc6aW50IG13aWZpZXhfY21kX2FwcGVuZF8xMWFjX3RsdihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxNTg6XHRcdFx0ICAgICBzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTU5LVx0XHRcdCAgICAgdTggKipidWZmZXIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE2MC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjE2MTpcdHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3ZodGNhcCAqdmh0X2NhcDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MTYyOlx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfb3Blcl9tb2RlX250ZiAqb3Blcl9udGY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE2My1cdHN0cnVjdCBpZWVlX3R5cGVzX29wZXJfbW9kZV9udGYgKmllZWVfb3Blcl9udGY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjE2NDpcdHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3ZodF9vcGVyICp2aHRfb3A7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjE2NTpcdHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LVx1MDAzZWFkYXB0ZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE2Ni1cdHU4IHN1cHBfY2h3ZF9zZXQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xNzYtXHRpZiAoYnNzX2Rlc2MtXHUwMDNlYmNuX3ZodF9jYXApIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MTc3Olx0XHR2aHRfY2FwID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3ZodGNhcCAqKSpidWZmZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE3OC1cdFx0bWVtc2V0KHZodF9jYXAsIDAsIHNpemVvZigqdmh0X2NhcCkpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTgxLVx0XHRcdFx0Y3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdmh0X2NhcCkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxODI6XHRcdG1lbWNweSgodTggKil2aHRfY2FwICYjNDM7IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xODMtXHRcdCAgICAgICAodTggKilic3NfZGVzYy1cdTAwM2ViY25fdmh0X2NhcCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE4NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MTg2Olx0XHRtd2lmaWV4X2ZpbGxfdmh0X2NhcF90bHYocHJpdiwgXHUwMDI2dmh0X2NhcC1cdTAwM2V2aHRfY2FwLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xODctXHRcdFx0XHRcdCBic3NfZGVzYy1cdTAwM2Vic3NfYmFuZCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xOTQtXHRcdGlmIChwcml2LVx1MDAzZWJzc19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MTk1Olx0XHRcdHZodF9vcCA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc192aHRfb3BlciAqKSpidWZmZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE5Ni1cdFx0XHRtZW1zZXQodmh0X29wLCAwLCBzaXplb2YoKnZodF9vcCkpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTk5LVx0XHRcdHZodF9vcC1cdTAwM2VoZWFkZXIubGVuICA9IGNwdV90b19sZTE2KHNpemVvZigqdmh0X29wKSAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjIwMDpcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMjAxLVx0XHRcdG1lbWNweSgodTggKil2aHRfb3AgJiM0MztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MjAyOlx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTIwMy1cdFx0XHQgICAgICAgKHU4ICopYnNzX2Rlc2MtXHUwMDNlYmNuX3ZodF9vcGVyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMjUyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoyNTM6aW50IG13aWZpZXhfY21kXzExYWNfY2ZnKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTI1NC1cdFx0XHQgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwgdTE2IGNtZF9hY3Rpb24sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjI1NTpcdFx0XHQgc3RydWN0IG13aWZpZXhfMTFhY192aHRfY2ZnICpjZmcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTI1Ni17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0yNzItLyogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgQmxvY2tBQ0sgc2V0dXAgaW5mb3JtYXRpb24gZm9yIGdpdmVuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjI3MzogKiBtd2lmaWV4X3ByaXZhdGUgc3RydWN0dXJlIGZvciAxMWFjIGVuYWJsZWQgbmV0d29ya3MuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTI3NC0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6Mjc1OnZvaWQgbXdpZmlleF9zZXRfMTFhY19iYV9wYXJhbXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMjc2LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTI5My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6Mjk0OmJvb2wgbXdpZmlleF9pc19ic3NfaW5fMTFhY19tb2RlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTI5NS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjI5NjpcdHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0yOTctXHRzdHJ1Y3QgaWVlZTgwMjExX3ZodF9vcGVyYXRpb24gKnZodF9vcGVyO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMzEwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzozMTE6dTggbXdpZmlleF9nZXRfY2VudGVyX2ZyZXFfaW5kZXgoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggYmFuZCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMzEyLVx0XHRcdFx0IHUzMiBwcmlfY2hhbiwgdTggY2hhbl9idylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5oPTE0PWVudW0gdmh0X2NmZ19taXNjX2NvbmZpZyB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuaC0yNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmg6MjU6aW50IG13aWZpZXhfY21kX2FwcGVuZF8xMWFjX3RsdihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuaDoyNjpcdFx0XHRcdHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuaC0yNy1cdFx0XHRcdHU4ICoqYnVmZmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmg6Mjg6aW50IG13aWZpZXhfY21kXzExYWNfY2ZnKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5oLTI5LVx0XHRcdCBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLCB1MTYgY21kX2FjdGlvbixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmg6MzA6XHRcdFx0IHN0cnVjdCBtd2lmaWV4XzExYWNfdmh0X2NmZyAqY2ZnKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmg6MzE6dm9pZCBtd2lmaWV4X2ZpbGxfdmh0X2NhcF90bHYoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmgtMzItXHRcdFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV92aHRfY2FwICp2aHRfY2FwLCB1OCBiYW5kcyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTExLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjEyOnZvaWQgbXdpZmlleF9pbml0XzExaF9wYXJhbXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xMy17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjE4OmlubGluZSBpbnQgbXdpZmlleF9pc18xMWhfYWN0aXZlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYz0yNT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjI2Om13aWZpZXhfMTFoX3Byb2Nlc3NfaW5mcmFfam9pbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqKmJ1ZmZlcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyNzpcdFx0XHQgICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjgte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjI5Olx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyICppZV9oZWFkZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MzA6XHRzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19wd3JfY2FwYWJpbGl0eSAqY2FwO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjMxOlx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfbG9jYWxfcHdyX2NvbnN0cmFpbnQgKmNvbnN0cmFpbnQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMzItXHRzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMzgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6Mzk6XHRyYWRpb190eXBlID0gbXdpZmlleF9iYW5kX3RvX3JhZGlvX3R5cGUoKHU4KSBic3NfZGVzYy1cdTAwM2Vic3NfYmFuZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtNDAtXHRzYmFuZCA9IHByaXYtXHUwMDNld2Rldi53aXBoeS1cdTAwM2ViYW5kc1tyYWRpb190eXBlXTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy00MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzo0MjpcdGNhcCA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19wd3JfY2FwYWJpbGl0eSAqKSpidWZmZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtNDMtXHRjYXAtXHUwMDNlaGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihXTEFOX0VJRF9QV1JfQ0FQQUJJTElUWSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTQ4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjQ5Olx0Y29uc3RyYWludCA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19sb2NhbF9wd3JfY29uc3RyYWludCAqKSpidWZmZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtNTAtXHRjb25zdHJhaW50LVx1MDAzZWhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoV0xBTl9FSURfUFdSX0NPTlNUUkFJTlQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy01NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzo1NjpcdGllX2hlYWRlciA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgKikqYnVmZmVyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTU3LVx0aWVfaGVhZGVyLVx1MDAzZXR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9QQVNTVEhST1VHSCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTY5LS8qIEVuYWJsZSBvciBkaXNhYmxlIHRoZSAxMWggZXh0ZW5zaW9ucyBpbiB0aGUgZmlybXdhcmUgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzo3MDppbnQgbXdpZmlleF8xMWhfYWN0aXZhdGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgYm9vbCBmbGFnKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTcxLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtNzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6Nzg6XHRyZXR1cm4gbXdpZmlleF9zZW5kX2NtZChwcml2LCBIb3N0Q21kX0NNRF84MDJfMTFfU05NUF9NSUIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtNzktXHRcdFx0XHRIb3N0Q21kX0FDVF9HRU5fU0VULCBET1QxMUhfSSwgXHUwMDI2ZW5hYmxlLCB0cnVlKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtODctICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6ODg6dm9pZCBtd2lmaWV4XzExaF9wcm9jZXNzX2pvaW4oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKipidWZmZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6ODk6XHRcdFx0ICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtOTAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy05NC1cdFx0ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6OTU6XHRcdG13aWZpZXhfMTFoX2FjdGl2YXRlKHByaXYsIHRydWUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTk2LVx0XHRwcml2LVx1MDAzZXN0YXRlXzExaC5pc18xMWhfYWN0aXZlID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy05Ny1cdFx0YnNzX2Rlc2MtXHUwMDNlY2FwX2luZm9fYml0bWFwIHw9IFdMQU5fQ0FQQUJJTElUWV9TUEVDVFJVTV9NR01UO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjk4Olx0XHRtd2lmaWV4XzExaF9wcm9jZXNzX2luZnJhX2pvaW4ocHJpdiwgYnVmZmVyLCBic3NfZGVzYyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtOTktXHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTEwMC1cdFx0LyogRGVhY3RpdmF0ZSAxMWggZnVuY3Rpb25zIGluIHRoZSBmaXJtd2FyZSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjEwMTpcdFx0bXdpZmlleF8xMWhfYWN0aXZhdGUocHJpdiwgZmFsc2UpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTEwMi1cdFx0cHJpdi1cdTAwM2VzdGF0ZV8xMWguaXNfMTFoX2FjdGl2ZSA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xMTAtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTExOnZvaWQgbXdpZmlleF9kZnNfY2FjX3dvcmtfcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTExMi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTExNC1cdHN0cnVjdCBkZWxheWVkX3dvcmsgKmRlbGF5ZWRfd29yayA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxMTU6XHRzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxMTY6XHRcdFx0Y29udGFpbmVyX29mKGRlbGF5ZWRfd29yaywgc3RydWN0IG13aWZpZXhfcHJpdmF0ZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xMTctXHRcdFx0XHQgICAgIGRmc19jYWNfd29yayk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTEyMC1cdGlmIChwcml2LVx1MDAzZXdkZXYubGlua3NbMF0uY2FjX3N0YXJ0ZWQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxMjE6XHRcdG13aWZpZXhfZGJnKHByaXYtXHUwMDNlYWRhcHRlciwgTVNHLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTEyMi1cdFx0XHQgICAgXCYjMzQ7Q0FDIHRpbWVyIGZpbmlzaGVkOyBObyByYWRhciBkZXRlY3RlZFxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTEzMS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxMzI6aW50IG13aWZpZXhfY21kX2lzc3VlX2NoYW5fcmVwb3J0X3JlcXVlc3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xMzMtXHRcdFx0XHRcdCAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTM2LVx0c3RydWN0IGhvc3RfY21kX2RzX2NoYW5fcnB0X3JlcSAqY3JfcmVxID0gXHUwMDI2Y21kLVx1MDAzZXBhcmFtcy5jaGFuX3JwdF9yZXE7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTM3Olx0c3RydWN0IG13aWZpZXhfcmFkYXJfcGFyYW1zICpyYWRhcl9wYXJhbXMgPSAodm9pZCAqKWRhdGFfYnVmO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTEzOC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTQ5LVx0aWYgKHJhZGFyX3BhcmFtcy1cdTAwM2VjYWNfdGltZV9tcylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxNTA6XHRcdG13aWZpZXhfZGJnKHByaXYtXHUwMDNlYWRhcHRlciwgTVNHLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE1MS1cdFx0XHQgICAgXCYjMzQ7MTFoOiBpc3N1aW5nIERGUyBSYWRhciBjaGVjayBmb3IgY2hhbm5lbD0lZFxcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTUzLVx0ZWxzZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjE1NDpcdFx0bXdpZmlleF9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBNU0csIFwmIzM0O2NhbmNlbGxpbmcgQ0FDXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xNTUtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE1OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxNTk6aW50IG13aWZpZXhfc3RvcF9yYWRhcl9kZXRlY3Rpb24oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xNjAtXHRcdFx0XHQgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE2MS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTYyOlx0c3RydWN0IG13aWZpZXhfcmFkYXJfcGFyYW1zIHJhZGFyX3BhcmFtcztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xNjMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTY0Olx0bWVtc2V0KFx1MDAyNnJhZGFyX3BhcmFtcywgMCwgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3JhZGFyX3BhcmFtcykpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE2NS1cdHJhZGFyX3BhcmFtcy5jaGFuZGVmID0gY2hhbmRlZjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTY3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjE2ODpcdHJldHVybiBtd2lmaWV4X3NlbmRfY21kKHByaXYsIEhvc3RDbWRfQ01EX0NIQU5fUkVQT1JUX1JFUVVFU1QsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTY5LVx0XHRcdFx0SG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwgXHUwMDI2cmFkYXJfcGFyYW1zLCB0cnVlKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTc0LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjE3NTp2b2lkIG13aWZpZXhfYWJvcnRfY2FjKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTc2LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xNzctXHRpZiAocHJpdi1cdTAwM2V3ZGV2LmxpbmtzWzBdLmNhY19zdGFydGVkKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTc4Olx0XHRpZiAobXdpZmlleF9zdG9wX3JhZGFyX2RldGVjdGlvbihwcml2LCBcdTAwMjZwcml2LVx1MDAzZWRmc19jaGFuZGVmKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxNzk6XHRcdFx0bXdpZmlleF9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBFUlJPUixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xODAtXHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIHN0b3AgQ0FDIGluIEZXXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxODE6XHRcdG13aWZpZXhfZGJnKHByaXYtXHUwMDNlYWRhcHRlciwgTVNHLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE4Mi1cdFx0XHQgICAgXCYjMzQ7QWJvcnRpbmcgZGVsYXllZCB3b3JrIGZvciBDQUMuXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTkzLSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjE5NDppbnQgbXdpZmlleF8xMWhfaGFuZGxlX2NoYW5ycHRfcmVhZHkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xOTUtXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE5Ny1cdHN0cnVjdCBob3N0X2NtZF9kc19jaGFuX3JwdF9ldmVudCAqcnB0X2V2ZW50O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjE5ODpcdHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2NoYW5fcnB0X2RhdGEgKnJwdDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xOTktXHR1MTYgZXZlbnRfbGVuLCB0bHZfbGVuO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yMDUtXHRpZiAobGUzMl90b19jcHUocnB0X2V2ZW50LVx1MDAzZXJlc3VsdCkgIT0gSG9zdENtZF9SRVNVTFRfT0spIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyMDY6XHRcdG13aWZpZXhfZGJnKHByaXYtXHUwMDNlYWRhcHRlciwgRVJST1IsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjA3LVx0XHRcdCAgICBcJiMzNDtFcnJvciBpbiBjaGFubmVsIHJlcG9ydCBldmVudFxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTIxMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyMTE6XHR3aGlsZSAoZXZlbnRfbGVuIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlcikpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yMTItXHRcdHJwdCA9ICh2b2lkICopXHUwMDI2cnB0X2V2ZW50LVx1MDAzZXRsdmJ1Zjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjE3LVx0XHRcdGlmIChycHQtXHUwMDNlbWFwLnJhZGFyKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjE4Olx0XHRcdFx0bXdpZmlleF9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBNU0csXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjE5LVx0XHRcdFx0XHQgICAgXCYjMzQ7UkFEQVIgRGV0ZWN0ZWQgb24gY2hhbm5lbCAlZCFcXG5cJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTIzOC0vKiBIYW5kbGVyIGZvciByYWRhciBkZXRlY3RlZCBldmVudCBmcm9tIEZXLiovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjM5OmludCBtd2lmaWV4XzExaF9oYW5kbGVfcmFkYXJfZGV0ZWN0ZWQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNDAtXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI0MS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjQyOlx0c3RydWN0IG13aWZpZXhfcmFkYXJfZGV0X2V2ZW50ICpyZHJfZXZlbnQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjQzLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNDUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjQ2Olx0bXdpZmlleF9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBNU0csXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjQ3LVx0XHQgICAgXCYjMzQ7cmFkYXIgZGV0ZWN0ZWQ7IGluZGljYXRpbmcga2VybmVsXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyNDg6XHRpZiAobXdpZmlleF9zdG9wX3JhZGFyX2RldGVjdGlvbihwcml2LCBcdTAwMjZwcml2LVx1MDAzZWRmc19jaGFuZGVmKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyNDk6XHRcdG13aWZpZXhfZGJnKHByaXYtXHUwMDNlYWRhcHRlciwgRVJST1IsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjUwLVx0XHRcdCAgICBcJiMzNDtGYWlsZWQgdG8gc3RvcCBDQUMgaW4gRldcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNTItXHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyNTM6XHRtd2lmaWV4X2RiZyhwcml2LVx1MDAzZWFkYXB0ZXIsIE1TRywgXCYjMzQ7cmVnZG9tYWluOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNTQtXHRcdCAgICByZHJfZXZlbnQtXHUwMDNlcmVnX2RvbWFpbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjU1Olx0bXdpZmlleF9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBNU0csIFwmIzM0O3JhZGFyIGRldGVjdGlvbiB0eXBlOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNTYtXHRcdCAgICByZHJfZXZlbnQtXHUwMDNlZGV0X3R5cGUpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNjUtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjY2OnZvaWQgbXdpZmlleF9kZnNfY2hhbl9zd193b3JrX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNjcte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjI2ODpcdHN0cnVjdCBtd2lmaWV4X3VhcF9ic3NfcGFyYW0gKmJzc19jZmc7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjY5LVx0c3RydWN0IGRlbGF5ZWRfd29yayAqZGVsYXllZF93b3JrID0gdG9fZGVsYXllZF93b3JrKHdvcmspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjI3MDpcdHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjI3MTpcdFx0XHRjb250YWluZXJfb2YoZGVsYXllZF93b3JrLCBzdHJ1Y3QgbXdpZmlleF9wcml2YXRlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI3Mi1cdFx0XHRcdCAgICAgZGZzX2NoYW5fc3dfd29yayk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI3NS1cdGlmICghYnNzX2NmZy1cdTAwM2ViZWFjb25fcGVyaW9kKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6Mjc2Olx0XHRtd2lmaWV4X2RiZyhwcml2LVx1MDAzZWFkYXB0ZXIsIEVSUk9SLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI3Ny1cdFx0XHQgICAgXCYjMzQ7Y2hhbm5lbCBzd2l0Y2g6IEFQIGFscmVhZHkgc3RvcHBlZFxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI4MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyODE6XHRtd2lmaWV4X3VhcF9zZXRfY2hhbm5lbChwcml2LCBic3NfY2ZnLCBwcml2LVx1MDAzZWRmc19jaGFuZGVmKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yODItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjgzOlx0aWYgKG13aWZpZXhfY29uZmlnX3N0YXJ0X3VhcChwcml2LCBic3NfY2ZnKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjI4NDpcdFx0bXdpZmlleF9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBFUlJPUixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yODUtXHRcdFx0ICAgIFwmIzM0O0ZhaWxlZCB0byBzdGFydCBBUCBhZnRlciBjaGFubmVsIHN3aXRjaFxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI4OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyODk6XHRtd2lmaWV4X2RiZyhwcml2LVx1MDAzZWFkYXB0ZXIsIE1TRyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yOTAtXHRcdCAgICBcJiMzNDtpbmRpY2F0aW5nIGNoYW5uZWwgc3dpdGNoIGNvbXBsZXRpb24gdG8ga2VybmVsXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMjQtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MjU6aW50IG13aWZpZXhfZmlsbF9jYXBfaW5mbyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCByYWRpb190eXBlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTI2LVx0XHRcdCAgc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKmh0X2NhcClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzItXHRpZiAoV0FSTl9PTl9PTkNFKCFzYmFuZCkpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMzpcdFx0bXdpZmlleF9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBFUlJPUiwgXCYjMzQ7SW52YWxpZCByYWRpbyB0eXBlIVxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzQtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy02OS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo3MDpzdGF0aWMgc3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NzE6bXdpZmlleF9nZXRfYmFfc3RhdHVzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NzI6XHRcdCAgICAgIGVudW0gbXdpZmlleF9iYV9zdGF0dXMgYmFfc3RhdHVzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTczLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo3NDpcdHN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKnR4X2JhX3Rzcl90Ymw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNzUtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTk1LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjk2OmludCBtd2lmaWV4X3JldF8xMW5fZGVsYmEoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy05Ny1cdFx0XHQgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy05OS1cdGludCB0aWQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTAwOlx0c3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqdHhfYmFfdGJsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTEwMS1cdHN0cnVjdCBob3N0X2NtZF9kc18xMW5fZGVsYmEgKmRlbF9iYSA9IFx1MDAyNnJlc3AtXHUwMDNlcGFyYW1zLmRlbF9iYTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTA1LVx0aWYgKGRlbF9iYS1cdTAwM2VkZWxfcmVzdWx0ID09IEJBX1JFU1VMVF9TVUNDRVNTKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTA2Olx0XHRtd2lmaWV4X2RlbF9iYV90YmwocHJpdiwgdGlkLCBkZWxfYmEtXHUwMDNlcGVlcl9tYWNfYWRkcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xMDctXHRcdFx0XHQgICBUWVBFX0RFTEJBX1NFTlQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTEwOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoxMTA6XHRcdHR4X2JhX3RibCA9IG13aWZpZXhfZ2V0X2JhX3N0YXR1cyhwcml2LCBCQV9TRVRVUF9JTlBST0dSRVNTKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xMTEtXHRcdGlmICh0eF9iYV90YmwpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTEyOlx0XHRcdG13aWZpZXhfc2VuZF9hZGRiYShwcml2LCB0eF9iYV90YmwtXHUwMDNldGlkLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTExMy1cdFx0XHRcdFx0ICAgdHhfYmFfdGJsLVx1MDAzZXJhKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTIwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjEyMTpcdFx0bXdpZmlleF9jcmVhdGVfYmFfdGJsKHByaXYsIGRlbF9iYS1cdTAwM2VwZWVyX21hY19hZGRyLCB0aWQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTIyLVx0XHRcdFx0ICAgICAgQkFfU0VUVVBfSU5QUk9HUkVTUyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTIzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjEyNDpcdFx0dHhfYmFfdGJsID0gbXdpZmlleF9nZXRfYmFfc3RhdHVzKHByaXYsIEJBX1NFVFVQX0lOUFJPR1JFU1MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTEyNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xMjYtXHRcdGlmICh0eF9iYV90YmwpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTI3Olx0XHRcdG13aWZpZXhfZGVsX2JhX3RibChwcml2LCB0eF9iYV90YmwtXHUwMDNldGlkLCB0eF9iYV90YmwtXHUwMDNlcmEsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTI4LVx0XHRcdFx0XHQgICBUWVBFX0RFTEJBX1NFTlQsIHRydWUpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xNDEtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTQyOmludCBtd2lmaWV4X3JldF8xMW5fYWRkYmFfcmVxKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTQzLVx0XHRcdCAgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xNDYtXHRzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2FkZGJhX3JzcCAqYWRkX2JhX3JzcCA9IFx1MDAyNnJlc3AtXHUwMDNlcGFyYW1zLmFkZF9iYV9yc3A7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTQ3Olx0c3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqdHhfYmFfdGJsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjE0ODpcdHN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICpyYV9saXN0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTE0OS1cdHUxNiBibG9ja19hY2tfcGFyYW1fc2V0ID0gbGUxNl90b19jcHUoYWRkX2JhX3JzcC1cdTAwM2VibG9ja19hY2tfcGFyYW1fc2V0KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTU2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjE1NzpcdHRpZF9kb3duID0gbXdpZmlleF93bW1fZG93bmdyYWRlX3RpZChwcml2LCB0aWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjE1ODpcdHJhX2xpc3QgPSBtd2lmaWV4X3dtbV9nZXRfcmFsaXN0X25vZGUocHJpdiwgdGlkX2Rvd24sIGFkZF9iYV9yc3AtXHUwMDNlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTU5LVx0XHRwZWVyX21hY19hZGRyKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTY0LVx0XHR9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTY1Olx0XHRtd2lmaWV4X2RlbF9iYV90YmwocHJpdiwgdGlkLCBhZGRfYmFfcnNwLVx1MDAzZXBlZXJfbWFjX2FkZHIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTY2LVx0XHRcdFx0ICAgVFlQRV9ERUxCQV9TRU5ULCB0cnVlKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTcyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjE3MzpcdHR4X2JhX3RibCA9IG13aWZpZXhfZ2V0X2JhX3RibChwcml2LCB0aWQsIGFkZF9iYV9yc3AtXHUwMDNlcGVlcl9tYWNfYWRkcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTc0LVx0aWYgKHR4X2JhX3RibCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjE3NTpcdFx0bXdpZmlleF9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBFVkVOVCwgXCYjMzQ7aW5mbzogQkEgc3RyZWFtIGNvbXBsZXRlXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xNzYtXHRcdHR4X2JhX3RibC1cdTAwM2ViYV9zdGF0dXMgPSBCQV9TRVRVUF9DT01QTEVURTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTg3LVx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoxODg6XHRcdG13aWZpZXhfZGJnKHByaXYtXHUwMDNlYWRhcHRlciwgRVJST1IsIFwmIzM0O0JBIHN0cmVhbSBub3QgY3JlYXRlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTg5LVx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0yMDEtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MjAyOmludCBtd2lmaWV4X2NtZF9yZWNmZ190eF9idWYoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0yMDMtXHRcdFx0ICAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLCBpbnQgY21kX2FjdGlvbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMjE0LVx0Y2FzZSBIb3N0Q21kX0FDVF9HRU5fU0VUOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjIxNTpcdFx0bXdpZmlleF9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBDTUQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMjE2LVx0XHRcdCAgICBcJiMzNDtjbWQ6IHNldCB0eF9idWY9JWRcXG5cJiMzNDssICpidWZfc2l6ZSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTIzNC0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoyMzU6aW50IG13aWZpZXhfY21kX2Ftc2R1X2FnZ3JfY3RybChzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTIzNi1cdFx0XHRcdGludCBjbWRfYWN0aW9uLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjIzNzpcdFx0XHRcdHN0cnVjdCBtd2lmaWV4X2RzXzExbl9hbXNkdV9hZ2dyX2N0cmwgKmFhX2N0cmwpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMjM4LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMjY3LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjI2ODppbnQgbXdpZmlleF9jbWRfMTFuX2NmZyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTI2OS1cdFx0XHRzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLCB1MTYgY21kX2FjdGlvbixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoyNzA6XHRcdFx0c3RydWN0IG13aWZpZXhfZHNfMTFuX3R4X2NmZyAqdHhjZmcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMjcxLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM9Mjk4PWludFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjI5OTptd2lmaWV4X2NtZF9hcHBlbmRfMTFuX3RsdihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjMwMDpcdFx0XHQgICBzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMDEtXHRcdFx0ICAgdTggKipidWZmZXIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzAyLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMDM6XHRzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGNhcCAqaHRfY2FwO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjMwNDpcdHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0aW5mbyAqaHRfaW5mbztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMDU6XHRzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19jaGFuX2xpc3RfcGFyYW1fc2V0ICpjaGFuX2xpc3Q7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzA2Olx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfMjA0MGJzc2NvICpic3NfY29fMjA0MDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMDc6XHRzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19leHRjYXAgKmV4dF9jYXA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzA4LVx0aW50IHJldF9sZW4gPSAwO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzE2Olx0cmFkaW9fdHlwZSA9IG13aWZpZXhfYmFuZF90b19yYWRpb190eXBlKCh1OCkgYnNzX2Rlc2MtXHUwMDNlYnNzX2JhbmQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTMxNy1cdHNiYW5kID0gcHJpdi1cdTAwM2V3ZGV2LndpcGh5LVx1MDAzZWJhbmRzW3JhZGlvX3R5cGVdO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMTktXHRpZiAoYnNzX2Rlc2MtXHUwMDNlYmNuX2h0X2NhcCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjMyMDpcdFx0aHRfY2FwID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0Y2FwICopICpidWZmZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzIxOlx0XHRtZW1zZXQoaHRfY2FwLCAwLCBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXApKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMjItXHRcdGh0X2NhcC1cdTAwM2VoZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFdMQU5fRUlEX0hUX0NBUEFCSUxJVFkpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMjQtXHRcdFx0XHRjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMjU6XHRcdG1lbWNweSgodTggKikgaHRfY2FwICYjNDM7IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTMyNi1cdFx0ICAgICAgICh1OCAqKWJzc19kZXNjLVx1MDAzZWJjbl9odF9jYXAsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTMyOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMjk6XHRcdG13aWZpZXhfZmlsbF9jYXBfaW5mbyhwcml2LCByYWRpb190eXBlLCBcdTAwMjZodF9jYXAtXHUwMDNlaHRfY2FwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMzAtXHRcdC8qIFVwZGF0ZSBIVDQwIGNhcGFiaWxpdHkgZnJvbSBjdXJyZW50IGNoYW5uZWwgaW5mb3JtYXRpb24gKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzMzLVx0XHRcdHU4IHJhZGlvID1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMzQ6XHRcdFx0bXdpZmlleF9iYW5kX3RvX3JhZGlvX3R5cGUoYnNzX2Rlc2MtXHUwMDNlYnNzX2JhbmQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTMzNS1cdFx0XHRpbnQgZnJlcSA9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM2Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozNjM6XHRcdCpidWZmZXIgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGNhcCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzY0Olx0XHRyZXRfbGVuICYjNDM7PSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM2NS1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzY4LVx0XHRpZiAocHJpdi1cdTAwM2Vic3NfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjM2OTpcdFx0XHRodF9pbmZvID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0aW5mbyAqKSAqYnVmZmVyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM3MC1cdFx0XHRtZW1zZXQoaHRfaW5mbywgMCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozNzE6XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGluZm8pKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zNzItXHRcdFx0aHRfaW5mby1cdTAwM2VoZWFkZXIudHlwZSA9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM3OC1cdFx0XHRtZW1jcHkoKHU4ICopIGh0X2luZm8gJiM0MztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozNzk6XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM4MC1cdFx0XHQgICAgICAgKHU4ICopYnNzX2Rlc2MtXHUwMDNlYmNuX2h0X29wZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM4OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozODk6XHRcdFx0KmJ1ZmZlciAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0aW5mbyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzkwOlx0XHRcdHJldF9sZW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGluZm8pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM5MS1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zOTMtXHRcdGNoYW5fbGlzdCA9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6Mzk0Olx0XHRcdChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19jaGFuX2xpc3RfcGFyYW1fc2V0ICopICpidWZmZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzk1LVx0XHRtZW1zZXQoY2hhbl9saXN0LCAwLCBzdHJ1Y3Rfc2l6ZShjaGFuX2xpc3QsIGNoYW5fc2Nhbl9wYXJhbSwgMSkpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zOTctXHRcdGNoYW5fbGlzdC1cdTAwM2VoZWFkZXIubGVuID1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozOTg6XHRcdFx0Y3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2NoYW5fc2Nhbl9wYXJhbV9zZXQpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zOTktXHRcdGNoYW5fbGlzdC1cdTAwM2VjaGFuX3NjYW5fcGFyYW1bMF0uY2hhbl9udW1iZXIgPVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy00MDEtXHRcdGNoYW5fbGlzdC1cdTAwM2VjaGFuX3NjYW5fcGFyYW1bMF0ucmFkaW9fdHlwZSA9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDAyOlx0XHRcdG13aWZpZXhfYmFuZF90b19yYWRpb190eXBlKCh1OCkgYnNzX2Rlc2MtXHUwMDNlYnNzX2JhbmQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQwMy1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDE2LVx0aWYgKGJzc19kZXNjLVx1MDAzZWJjbl9ic3NfY29fMjA0MCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjQxNzpcdFx0YnNzX2NvXzIwNDAgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfMjA0MGJzc2NvICopICpidWZmZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDE4LVx0XHRtZW1zZXQoYnNzX2NvXzIwNDAsIDAsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDE5Olx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzXzIwNDBic3NjbykpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQyMC1cdFx0YnNzX2NvXzIwNDAtXHUwMDNlaGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihXTEFOX0VJRF9CU1NfQ09FWF8yMDQwKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDI0LVx0XHRtZW1jcHkoKHU4ICopIGJzc19jb18yMDQwICYjNDM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDI1Olx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDI2LVx0XHQgICAgICAgYnNzX2Rlc2MtXHUwMDNlYmNuX2Jzc19jb18yMDQwICYjNDM7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQyOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0MzA6XHRcdCpidWZmZXIgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc18yMDQwYnNzY28pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjQzMTpcdFx0cmV0X2xlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzXzIwNDBic3Njbyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDMyLVx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy00MzUtXHRcdGhkciA9ICh2b2lkICopYnNzX2Rlc2MtXHUwMDNlYmNuX2V4dF9jYXA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDM2Olx0XHRleHRfY2FwID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2V4dGNhcCAqKSAqYnVmZmVyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjQzNzpcdFx0bWVtc2V0KGV4dF9jYXAsIDAsIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19leHRjYXApKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy00MzgtXHRcdGV4dF9jYXAtXHUwMDNlaGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihXTEFOX0VJRF9FWFRfQ0FQQUJJTElUWSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ1MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0NTE6XHRcdCpidWZmZXIgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19leHRjYXApICYjNDM7IGhkci1cdTAwM2VsZW47XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDUyOlx0XHRyZXRfbGVuICYjNDM7PSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfZXh0Y2FwKSAmIzQzOyBoZHItXHUwMDNlbGVuO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ1My1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDYxLSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjQ2MjpzdGF0aWMgaW50IG13aWZpZXhfaXNfdHhfYmFfc3RyZWFtX3B0cl92YWxpZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjQ2MzpcdFx0XHRcdHN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKnR4X3RibF9wdHIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDY0LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0NjU6XHRzdHJ1Y3QgbXdpZmlleF90eF9iYV9zdHJlYW1fdGJsICp0eF9iYV90c3JfdGJsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ2Ni1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDgwLSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjQ4MTp2b2lkIG13aWZpZXhfMTFuX2RlbGV0ZV90eF9iYV9zdHJlYW1fdGJsX2VudHJ5KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDgyOlx0XHRcdFx0c3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqdHhfYmFfdHNyX3RibClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy00ODMte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ4NC1cdGlmICghdHhfYmFfdHNyX3RibCBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0ODU6XHQgICAgbXdpZmlleF9pc190eF9iYV9zdHJlYW1fcHRyX3ZhbGlkKHByaXYsIHR4X2JhX3Rzcl90YmwpKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ4Ni1cdFx0cmV0dXJuO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ4Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0ODg6XHRtd2lmaWV4X2RiZyhwcml2LVx1MDAzZWFkYXB0ZXIsIElORk8sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDg5LVx0XHQgICAgXCYjMzQ7aW5mbzogdHhfYmFfdHNyX3RibCAlcFxcblwmIzM0OywgdHhfYmFfdHNyX3RibCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ5OC0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0OTk6dm9pZCBtd2lmaWV4XzExbl9kZWxldGVfYWxsX3R4X2JhX3N0cmVhbV90Ymwoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy01MDAte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTUwMS1cdGludCBpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjUwMjpcdHN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKmRlbF90YmxfcHRyLCAqdG1wX25vZGU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNTAzLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy01MDYtXHRcdFx0XHQgXHUwMDI2cHJpdi1cdTAwM2V0eF9iYV9zdHJlYW1fdGJsX3B0ciwgbGlzdClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo1MDc6XHRcdG13aWZpZXhfMTFuX2RlbGV0ZV90eF9iYV9zdHJlYW1fdGJsX2VudHJ5KHByaXYsIGRlbF90YmxfcHRyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy01MDgtXHRzcGluX3VubG9ja19iaChcdTAwMjZwcml2LVx1MDAzZXR4X2JhX3N0cmVhbV90YmxfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTUyMC0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo1MjE6c3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NTIyOm13aWZpZXhfZ2V0X2JhX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBpbnQgdGlkLCB1OCAqcmEpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNTIzLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo1MjQ6XHRzdHJ1Y3QgbXdpZmlleF90eF9iYV9zdHJlYW1fdGJsICp0eF9iYV90c3JfdGJsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTUyNS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNTQxLSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjU0Mjp2b2lkIG13aWZpZXhfY3JlYXRlX2JhX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqcmEsIGludCB0aWQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NTQzOlx0XHRcdCAgIGVudW0gbXdpZmlleF9iYV9zdGF0dXMgYmFfc3RhdHVzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTU0NC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NTQ1Olx0c3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqbmV3X25vZGU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NTQ2Olx0c3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKnJhX2xpc3Q7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNTQ3LVx0aW50IHRpZF9kb3duO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTU0OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo1NDk6XHRpZiAoIW13aWZpZXhfZ2V0X2JhX3RibChwcml2LCB0aWQsIHJhKSkge1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3NzQKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYG13aWZpZXhgIERyaXZlcjogQSBUYXJnZXRlZCBBcHByb2FjaCoqCgpPa2F5LCBzbyB0aGUgYG13aWZpZXhgIGRyaXZlciBpcyB0aGUgdGFyZ2V0LiBJdCYjMzk7cyBtdWx0aS1mYWNldGVkLCBzdXBwb3J0aW5nIFVTQiwgUENJZSwgYW5kIFNESU8sIHdoaWNoIGlzIGdvb2QgbmV3cyBiZWNhdXNlIHRoYXQgb3BlbnMgdXAgc2V2ZXJhbCBmdXp6aW5nIGF2ZW51ZXMuIFNwZWNpZmljYWxseSwgc2luY2UgaXQgc3VwcG9ydHMgVVNCLCB0aGUgZHVtbXkgSENEIChVU0IgZnV6emVyKSBiZWNvbWVzIGEgdmlhYmxlIHRvb2wsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IGdldHMgbXkgYXR0ZW50aW9uLgoKVGhlIGNvcmUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZnV6emluZyBlZmZvcnQgYWN0dWFsbHkgKndvcnRoKiB0aGUgdGltZT8gWWVzLCBkZWZpbml0ZWx5LiBJdCBoYW5kbGVzIFdpLUZpIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpLCB3aGljaCBhcmUgbm90b3Jpb3VzbHkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgcmlwZSBmb3IgdnVsbmVyYWJpbGl0eSBkaXNjb3ZlcnkuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aXRoaW4gYG13aWZpZXhfc2VhcmNoX291aV9pbl9pZWAuIE5pY2UhCgpOb3csIHRoZSBjcnVjaWFsIHN0ZXA6IERldGVybWluaW5nIHRoZSBhdHRhY2sgc3VyZmFjZSBmb3IgYG13aWZpZXhfc2VhcmNoX291aV9pbl9pZWAuIENhbiB0aGlzIGZ1bmN0aW9uIGJlIHRyaWdnZXJlZCBmcm9tIHRoZSBob3N0LCBvciBpcyBpdCBleGNsdXNpdmVseSBhIGRldmljZS1zaWRlIHJvdXRpbmU/IEl0IGFwcGVhcnMgdGhlIGZ1bmN0aW9uIHBhcnNlcyBJRXMgZnJvbSBgYnNzX2Rlc2MtJmd0O2Jjbl9yc25faWVgIGFuZCBgYnNzX2Rlc2MtJmd0O2Jjbl93cGFfaWVgLiBBaGEsIHRoZXNlIGFyZSBiZWFjb24vcHJvYmUgcmVzcG9uc2UgSUVzLCBhbmQgdGhlc2UgY29tZSBmcm9tIHRoZSBBUCEgU28sIHRoZSBkZXZpY2UvZmlybXdhcmUgY29udHJvbHMgdGhlIGRhdGEgd2UmIzM5O3JlIGxvb2tpbmcgYXQuCgpUaGlzIGlzIHdoZXJlIHRoZSBhcmNoaXRlY3R1cmUga25vd2xlZGdlIGNvbWVzIGluIGhhbmR5LiBgbXdpZmlleGAmIzM5O3MgZmlybXdhcmUgaGFuZGxlcyB0aGUgV2ktRmkgTUFDLCBhbmQgdGhlIGhvc3QgZHJpdmVyIGNvbW11bmljYXRlcyB2aWEgY29tbWFuZHMgYW5kIGV2ZW50cy4gS25vd2luZyB0aGlzLCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZGV0ZXJtaW5lIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSB2dWxuZXJhYmxlIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgbXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnRgIGFuZCBgbXdpZmlleF9pc193cGFfb3VpX3ByZXNlbnRgIGFyZSBjYWxsZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluZGljYXRpb24gb24gd2hlcmUgdG8gZm9jdXMgdGhlIGZ1enppbmcgZWZmb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXhfaXNfcnNuX291aV9wcmVzZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTE0Nz1zdGF0aWMgdThcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM6MTQ4Om13aWZpZXhfaXNfcnNuX291aV9wcmVzZW50KHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLCB1MzIgY2lwaGVyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNDkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MzQ0PW13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy00MDgtXHRcdFx0ICAgICBic3NfZGVzYy1cdTAwM2ViY25faHRfY2FwKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM6NDA5Olx0XHRcdCAgICAhbXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnQoYnNzX2Rlc2MsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTQxMC1cdFx0XHRcdFx0XHRcdENJUEhFUl9TVUlURV9DQ01QKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy00MTEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjQxMjpcdFx0XHRcdGlmIChtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy00MTMtXHRcdFx0XHRcdFx0KGJzc19kZXNjLCBDSVBIRVJfU1VJVEVfVEtJUCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgxMwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIG13aWZpZXggTmV0d29yayBDb21wYXRpYmlsaXR5IENoZWNrKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBgbXdpZmlleGAgZHJpdmVyIGFnYWluLiBJIHNlZSB0aGF0IGBtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZWAgaXMgYSBrZXkgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBiZWluZyBpbnZva2VkIGR1cmluZyBib3RoIHRoZSBzY2FuIHJlc3VsdCBwcm9jZXNzaW5nIGFuZCB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHBoYXNlcy4gVGhpcyBzdWdnZXN0cyBpdCYjMzk7cyBhIGNyaXRpY2FsIGdhdGVrZWVwZXIgZm9yIGRldGVybWluaW5nIHdoaWNoIG5ldHdvcmtzIHRoZSBkZXZpY2Ugd2lsbCBldmVuICpjb25zaWRlciouIEludGVyZXN0aW5nLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhhdCBnYXRla2VlcGluZy4gTXkgbmV4dCBzdGVwLCBuYXR1cmFsbHksIGlzIHRvIHRyYWNlIGFsbCB0aGUgY2FsbCBzaXRlcyBvZiBgbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVgLiBJIG5lZWQgdG8gcHJlY2lzZWx5IHVuZGVyc3RhbmQgKndoZW4qIGFuZCAqd2h5KiB0aGlzIGNvbXBhdGliaWxpdHkgY2hlY2sgaXMgYmVpbmcgcnVuLiBJcyBpdCBqdXN0IGFib3V0IHNlY3VyaXR5IHNldHRpbmdzPyBJbmZyYXN0cnVjdHVyZSBtb2RlIHZlcnN1cyBhZC1ob2M/IFJlZ3VsYXRvcnkgZG9tYWluIGNvbnNpZGVyYXRpb25zPyBJJiMzOTtsbCBwaW5wb2ludCBldmVyeSBjYWxsLCB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHQsIGFuZCB0aGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBuZXR3b3JrIGNvbXBhdGliaWxpdHkgaXMgZGV0ZXJtaW5lZCB3aXRoaW4gdGhpcyBkcml2ZXIuIEtub3dpbmcgdGhlIHNwZWNpZmljIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGEgbmV0d29yayB0byBiZSBjb25zaWRlcmVkIGluY29tcGF0aWJsZSB3aWxsIGJlIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbnkgY29ubmVjdGlvbiBpc3N1ZXMuIEFuZCwgcG90ZW50aWFsbHksIGlkZW50aWZ5aW5nIGFueSB2dWxuZXJhYmlsaXRpZXMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0zNDM9c3RhdGljIHMzMlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzozNDQ6bXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMzQ1LVx0XHRcdCAgICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLCB1MzIgbW9kZSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTE2MTY9aW50IG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNjI4LVx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoxNjI5Olx0XHRcdHJldCA9IG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlKHByaXYsIGJzc19kZXNjLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNjMwLVx0XHRcdFx0XHRcdFx0ICAgIHByaXYtXHUwMDNlYnNzX21vZGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDI1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5YCYjMzk7cyBJbnZvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgYG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5YC4gVGhlIGNvcmUgcXVlc3Rpb24gaXM6IHdoZW4gZG9lcyB0aGlzIGZ1bmN0aW9uIGdldCBjYWxsZWQgaW4gdGhlIGBtd2lmaWV4YCBkcml2ZXI/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBuZXR3b3JrIGNvbXBhdGliaWxpdHkgY2hlY2tzIGFuZCBob3cgdGhleSBhcmUgaW1wbGVtZW50ZWQuIFRoaXMgZnVuY3Rpb24mIzM5O3MgdGltaW5nIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgZHJpdmVyIGJlaGF2aW9yLCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFuZCBhbnkgY29tcGF0aWJpbGl0eS1yZWxhdGVkIGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSB0aGUgdHJpZ2dlcnMsIHRoZSBzdXJyb3VuZGluZyBjb250cm9sIGZsb3csIGFuZCBhbnkgZGVwZW5kZW5jaWVzIHRoaXMgZnVuY3Rpb24gaGFzLiBTbywgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGZpZ3VyZSB0aGlzIG91dCBhbmQgc3RhcnQgd2l0aCB0aGUgY2FsbGVyIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xNTQxPWludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE1NDItXHRcdFx0XHQgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2VudHJ5KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTU0MzppbnQgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTU0NC1cdFx0XHRcdFx0c3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MTU5MT1pbnQgbXdpZmlleF9jbWRfODAyXzExX3NjYW4oc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE2MTUtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjE2MTY6aW50IG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE2MTctXHRcdFx0XHRcdHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MTcwMz1zdGF0aWMgaW50IG13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTcxNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM6MTcxODpcdHJldCA9IG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5KHByaXYsIGJzc19kZXNjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTcxOS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jPTMxOD1pbnQgbXdpZmlleF9ic3Nfc3RhcnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy0zNjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM6MzYxOlx0XHRyZXQgPSBtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eShwcml2LCBic3NfZGVzYyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtMzYyLVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy00MDgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM6NDA5Olx0XHRyZXQgPSBtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eShwcml2LCBic3NfZGVzYyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtNDEwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTM2OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbXdpZmlleCBDb25maWd1cmF0aW9uIGFuZCBQb3RlbnRpYWwgU2VjdXJpdHkgSW1wbGljYXRpb25zKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBwb2ludCB3aGVuIGEgc3RhdGlvbiBjb25uZWN0cyB0byBhIEJhc2ljIFNlcnZpY2UgU2V0IChCU1MpIG9yIGluaXRpYXRlcyBvbmUuIFRoZSBCU1MgZGVzY3JpcHRvciwgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbmV0d29yaywgZ2V0cyBwb3B1bGF0ZWQgZWl0aGVyIGZyb20gdGhlIHJlc3VsdHMgb2YgYSBzY2FuIG9yIGRpcmVjdGx5IGZyb20gZXZlbnRzIHJlcG9ydGVkIGJ5IHRoZSBmaXJtd2FyZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCBwYXJ0aWN1bGFybHkgc2luY2UgbXdpZmlleCBzdXBwb3J0cyBVU0IuIFRoaXMgbWVhbnMgdGhhdCBmaXJtd2FyZSByZXNwb25zZXMsIHdoaWNoIGluY2x1ZGUgdGhlIGVzc2VudGlhbCBiZWFjb24gYW5kIHByb2JlIHJlc3BvbnNlIGRhdGEsIGFyZSBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIGZ1enppbmcgdGhyb3VnaCB0aGUgVVNCIGludGVyZmFjZS4gSXQgc291bmRzIGxpa2UgYSBzb2xpZCBhdHRhY2sgdmVjdG9yLCBidXQgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGVuYWJsZWQsIGFuZCBpZiB0aGlzIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGlzIGV4cG9zZWQsIG9yIGlmIGl0IGNhbiBiZSBhZGRyZXNzZWQgd2l0aCBhcHByb3ByaWF0ZSBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZvciBtd2lmaWV4IGFuZCBzZWUgd2hhdCBidWlsZCBvcHRpb25zIGFyZSBpbiBwbGF5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNvbmZpZ3VyZWQgdG8gc2VlIGp1c3QgaG93IGV4cG9zZWQgdGhpcyBtaWdodCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1XSUZJRVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzoyOmNvbmZpZyBNV0lGSUVYXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBXaUZpLUV4IERyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTExLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6MTI6Y29uZmlnIE1XSUZJRVhfU0RJT1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMTMtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBTRDg3ODYvU0Q4Nzg3L1NEODc5Ny9TRDg4ODcvU0Q4ODk3L1NEODk3Ny9TRDg5NzgvU0Q4OTg3L1NEODk5N1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTI0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6MjU6Y29uZmlnIE1XSUZJRVhfUENJRVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBQQ0lFIDg3NjYvODg5Ny84OTk3XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMzYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzozNzpjb25maWcgTVdJRklFWF9VU0JcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTM4LVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgVVNCODc2Ni84Nzk3Lzg5OTdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxMDMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNV0lGSUVYIENvbmZpZ3VyYXRpb24gZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCDigJMgdGhvc2UgYXJlIHRoZSBrZXkgY29uZmlncyBmb3IgdGhlIE1hcnZlbGwgV2ktRmkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gZnV6emluZy4gUmlnaHQsIGBNV0lGSUVYYCBpcyB0aGUgY29yZSBkcml2ZXIsIGFuZCBgTVdJRklFWF9VU0JgIGlzIHRoZSBVU0Itc3BlY2lmaWMgZHJpdmVyLiBUaGUgaWRlYSBpcyB0byBsZXZlcmFnZSB0aGUgVVNCIGRyaXZlciBmb3IgZnV6emluZy4gSWYgd2UgZW5hYmxlIGBNV0lGSUVYX1VTQmAsIHRoYXQgZ2l2ZXMgdXMgYSBkaXJlY3QgZW50cnkgcG9pbnQgdmlhIHRoZSBVU0IgaW50ZXJmYWNlLCB3aGljaCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgcXVlc3Rpb24gbm93IGlzOiBDYW4gd2UgcmVhY2ggc29tZXRoaW5nIGxpa2UgYG13aWZpZXhfc2VhcmNoX291aV9pbl9pZWAgKG9yIHNpbWlsYXIsIGxpa2UgYSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgaW5mb3JtYXRpb24gZWxlbWVudHMpIGZyb20gYSBVU0IgZnV6emluZyBwZXJzcGVjdGl2ZT8gSXTigJlzIGNydWNpYWwgdG8gbWFwIHRoYXQgb3V0LiBUaGlua2luZyBhYm91dCBpdCwgdGhlIFVTQiBkcml2ZXIgc2hvdWxkIGJlIHJlY2VpdmluZyBkYXRhIGZyb20gdGhlIFVTQiBkZXZpY2UgaXRzZWxmIGFuZCB0aGVuIHBhc3NpbmcgaXQgYWxvbmcgdG8gdGhlIGNvcmUgZHJpdmVyLiBTbywgbXkgZm9jdXMgc2hvdWxkIGJlIG9uIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIFVTQiBkcml2ZXIgdGhhdCBoYW5kbGUgaW5jb21pbmcgZGF0YS4gSSBuZWVkIHRvIGRpZyBpbnRvIHNvbWV0aGluZyBsaWtlIGBtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZWAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCBzZWUgaG93IHRoZSBkYXRhIGZsb3cgbG9va3MsIHRoZSBkYXRhIGhhbmRsaW5nIGFuZCBob3cgaW5mb3JtYXRpb24gZnJvbSB0aGUgVVNCIGludGVyZmFjZSBpbnRlZ3JhdGVzIHdpdGggdGhlIGNvcmUgZnVuY3Rpb25zLiBJIHRoaW5rIHRoYXQmIzM5O3MgdGhlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXhfdXNiX3J4X2NvbXBsZXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmM9NDY9c3RhdGljIGludCBtd2lmaWV4X3VzYl9yZWN2KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTE1MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYzoxNTI6c3RhdGljIHZvaWQgbXdpZmlleF91c2JfcnhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTE1My17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jPTI4NT1zdGF0aWMgaW50IG13aWZpZXhfdXNiX3N1Ym1pdF9yeF91cmIoc3RydWN0IHVyYl9jb250ZXh0ICpjdHgsIGludCBzaXplKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYy0zMTUtXHRcdFx0XHQgdXNiX3JjdmludHBpcGUoY2FyZC1cdTAwM2V1ZGV2LCBjdHgtXHUwMDNlZXApLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jOjMxNjpcdFx0XHRcdCBjdHgtXHUwMDNlc2tiLVx1MDAzZWRhdGEsIHNpemUsIG13aWZpZXhfdXNiX3J4X2NvbXBsZXRlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTMxNy1cdFx0XHRcdCAodm9pZCAqKWN0eCwgY2FyZC1cdTAwM2VyeF9jbWRfaW50ZXJ2YWwpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYy0zMjAtXHRcdFx0XHQgIHVzYl9yY3ZidWxrcGlwZShjYXJkLVx1MDAzZXVkZXYsIGN0eC1cdTAwM2VlcCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmM6MzIxOlx0XHRcdFx0ICBjdHgtXHUwMDNlc2tiLVx1MDAzZWRhdGEsIHNpemUsIG13aWZpZXhfdXNiX3J4X2NvbXBsZXRlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTMyMi1cdFx0XHRcdCAgKHZvaWQgKiljdHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjk2MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGJhc2VkIG9uIHRoYXQgcHJvY2VzcyBkZXNjcmlwdGlvbi4KCioqTXkgQW5hbHlzaXMgb2YgdGhlIFVTQiBSZWNlaXZlIFBhdGgqKgoKQWxyaWdodCwgc28gdGhlIGBtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZWAgZnVuY3Rpb24gaXMgdGhlIGluaXRpYWwgZW50cnkgcG9pbnQgZm9yIGluY29taW5nIGRhdGEgb24gdGhlIFVTQiBidXMg4oCTIHRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIGRhdGEgSSYjMzk7bSBnZXR0aW5nIGZyb20gdGhlcmUgaXMgaGFuZGVkIG9mZiB0byBgbXdpZmlleF91c2JfcmVjdmAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGJlZ2lucywgd2hlcmUgSSBleHBlY3QgdGhlIGRhdGEgaXMgZnVydGhlciBleGFtaW5lZCBhbmQgcHJvYmFibHkgcGFyc2VkLiBJdCYjMzk7cyBsaWtlbHkgYG13aWZpZXhfdXNiX3JlY3ZgIHRoZW4gY2FsbHMgYSBoYW5kbGVyIGZ1bmN0aW9uIGxpa2UgYG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldGAsIG9yIHNvbWV0aGluZyB2ZXJ5IHNpbWlsYXIsIHRvIGFjdHVhbGx5ICpkbyogc29tZXRoaW5nIHdpdGggdGhlIHJlY2VpdmVkIGRhdGEuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2NhbiByZXN1bHRzIGZsb3cgdGhyb3VnaCBhbGwgb2YgdGhpcy4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljIHRocm91Z2ggdGhlc2UgZnVuY3Rpb25zIHRvIHNlZSBob3cgdGhlIFdpLUZpIHNjYW4gZGF0YSBtYWtlcyBpdHMgd2F5IHRvIHRoZSBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIHJvdXRpbmVzLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBwYXRoIHNwZWNpZmljYWxseSBmcm9tIHRoZSBwb2ludCB0aGF0IGRhdGEgaXMgcmVjZWl2ZWQgb24gdGhlIFVTQiBhbGwgdGhlIHdheSB0byBpdHMgZmluYWwgZm9ybS4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXhfaGFuZGxlX3J4X3BhY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYz0xNzQ9c3RhdGljIGludCBtd2lmaWV4X3Byb2Nlc3Nfcngoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTIwNC1cdFx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6MjA1Olx0XHRcdG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldChhZGFwdGVyLCBza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0yMDYtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oPTExMDI9dm9pZCBtd2lmaWV4X3Byb2Nlc3NfYXNzb2NfcmVzcChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTEwMzppbnQgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTExMDQtXHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvcGNpZS5jPTE1MjY9c3RhdGljIGludCBtd2lmaWV4X3BjaWVfcHJvY2Vzc19yZWN2X2RhdGEoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvcGNpZS5jLTE1ODgtXHRcdFx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9wY2llLmM6MTU4OTpcdFx0XHRcdG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldChhZGFwdGVyLCBza2JfZGF0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvcGNpZS5jLTE1OTAtXHRcdFx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmM9MTU5Mz1zdGF0aWMgdm9pZCBtd2lmaWV4X2RlYWdncl9zZGlvX3BrdChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmMtMTYzMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmM6MTYzNDpcdFx0bXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KGFkYXB0ZXIsIHNrYl9kZWFnZ3IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYy0xNjM1LVx0XHRkYXRhICYjNDM7PSBibGtfc2l6ZTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jPTE2NDc9c3RhdGljIGludCBtd2lmaWV4X2RlY29kZV9yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jLTE2ODQtXHRcdH0gZWxzZSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jOjE2ODU6XHRcdFx0bXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KGFkYXB0ZXIsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jLTE2ODYtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jLTIzLSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYzoyNDppbnQgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jLTI1LVx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jLTU5LX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90eHJ4LmM6NjA6RVhQT1JUX1NZTUJPTF9HUEwobXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90eHJ4LmMtNjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTc5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqUlggUGFja2V0IFByb2Nlc3NpbmcgRGlzY3JlcGFuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIE1hcnZlbGwgV2ktRmkgZHJpdmVyIGNvZGUgYWdhaW4uIEkgd2FzIGp1c3QgbG9va2luZyBhdCBgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0YCwgYW5kIGl0JiMzOTtzIHN0cmlraW5nIG1lIGFzIGJlaW5nICpleGNsdXNpdmVseSogZm9jdXNlZCBvbiBkYXRhIHBhY2tldHMuIFRoYXQmIzM5O3Mgd2hhdCB0aGUgbmFtZSBhbmQgdGhlIGNvZGUgc2VlbSB0byBpbmRpY2F0ZS4gQnV0IHRoYXQgY2FuJiMzOTt0IGJlIHRoZSAqd2hvbGUqIHN0b3J5LCBjYW4gaXQ/IFdoZXJlIGFyZSB0aGUgY29tbWFuZCBhbmQgZXZlbnQgcGFja2V0cyBoYW5kbGVkPyBXZSBjYW4mIzM5O3QganVzdCBiZSBkcm9wcGluZyB0aG9zZSBvbiB0aGUgZmxvb3IhCgpBaCwgcmlnaHQsIG5vdyBpdCYjMzk7cyBjb21pbmcgYmFjayB0byBtZS4gVGhlIFVTQiByZWNlaXZlIGNvbXBsZXRpb24gaGFuZGxlciwgYG13aWZpZXhfdXNiX3J4X2NvbXBsZXRlYCwgKnRoYXQmIzM5O3MqIHRoZSBvbmUgdGhhdCBzZWVtcyB0byBiZSB0aGUgY2VudHJhbCBwb2ludCBmb3IgYm90aCBkYXRhIHBhY2tldHMgYW5kIHRob3NlIGNvbW1hbmQvZXZlbnQgcGFja2V0cy4gSXQmIzM5O3MgaGFuZGxpbmcgdGhlIGNvbXBsZXRpb24gb2YgYSByZWNlaXZlIG9wZXJhdGlvbiBmcm9tIHRoZSBVU0IgaW50ZXJmYWNlLCBzbyBpdCBtYWtlcyBzZW5zZSB0aGF0IGl0IHdvdWxkIG5lZWQgdG8gbWFrZSB0aGUgZGlzdGluY3Rpb24uIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG15IGF0dGVudGlvbiB0aGVyZSB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXdpZmlleF9wcm9jZXNzX3J4X2NvbW1hbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1MDMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlJldmlzaXRpbmcgbXdpZmlleF91c2JfcnhfY29tcGxldGUqKgoKT2theSwgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIGBtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZWAuIEkgbmVlZCB0byByZS1leGFtaW5lIHRoYXQgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIHJlY2VudCByZXBvcnRzLiBHaXZlbiB0aGUgaW50cmljYWNpZXMgb2YgdGhlIFVTQiByZWNlaXZlIHBhdGggaW4gdGhlIE1hcnZlbGwgV2lGaSBkcml2ZXIsIGl0JiMzOTtzIGNyaXRpY2FsIHRvIGVuc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIERNQSBlbmdpbmUgbHVya2luZyBpbiB0aGF0IHJvdXRpbmUuIEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhlIGhhbmRsaW5nIG9mIGRlc2NyaXB0b3IgY2hhaW5zLCBidWZmZXIgb3duZXJzaGlwLCBhbmQgaW50ZXJydXB0IGNvYWxlc2NpbmcuIFRoZSBwZXJmb3JtYW5jZSBpc3N1ZXMgd2UgYXJlIHNlZWluZyBmZWVsIGxpa2UgdGhleSBjb3VsZCBzdGVtIGZyb20gaW1wcm9wZXIgaGFuZGxpbmcgb2YgcmVjZWl2ZSBidWZmZXJzLCBvciBwb3RlbnRpYWxseSBhbiBpc3N1ZSBpbiB0aGUgaW50ZXJydXB0IHNlcnZpY2luZyBmbG93LiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgYWdhaW4gdGhlIHNlcXVlbmNlIG9mIGV2ZW50cyBhbmQgaG93IHRoZXkgYXJlIGFmZmVjdGVkIGJ5IGRpZmZlcmVudCBob3N0IGNvbmZpZ3VyYXRpb25zIGFuZCBkcml2ZXIgdmVyc2lvbnMuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIGVycm9yIGhhbmRsaW5nIGFuZCB3aGV0aGVyIGVycm9ycyBhcmUgZ3JhY2VmdWxseSBtYW5hZ2VkIHRvIHByZXZlbnQgY2FzY2FkaW5nIGZhaWx1cmVzLiBJdOKAmXMgdGltZSBmb3IgYSBkZWVwIGRpdmUsIGFnYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE1MjpcdHN0YXRpYyB2b2lkIG13aWZpZXhfdXNiX3J4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbiAxNTM6XHR7XG4gMTU0Olx0XHRzdHJ1Y3QgdXJiX2NvbnRleHQgKmNvbnRleHQgPSAoc3RydWN0IHVyYl9jb250ZXh0ICopdXJiLVx1MDAzZWNvbnRleHQ7XG4gMTU1Olx0XHRzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gY29udGV4dC1cdTAwM2VhZGFwdGVyO1xuIDE1NjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGNvbnRleHQtXHUwMDNlc2tiO1xuIDE1NzpcdFx0c3RydWN0IHVzYl9jYXJkX3JlYyAqY2FyZDtcbiAxNTg6XHRcdGludCByZWN2X2xlbmd0aCA9IHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoO1xuIDE1OTpcdFx0aW50IHNpemUsIHN0YXR1cztcbiAxNjA6XHRcbiAxNjE6XHRcdGlmICghYWRhcHRlciB8fCAhYWRhcHRlci1cdTAwM2VjYXJkKSB7XG4gMTYyOlx0XHRcdHByX2VycihcJiMzNDttd2lmaWV4IGFkYXB0ZXIgb3IgY2FyZCBzdHJ1Y3R1cmUgaXMgbm90IHZhbGlkXFxuXCYjMzQ7KTtcbiAxNjM6XHRcdFx0cmV0dXJuO1xuIDE2NDpcdFx0fVxuIDE2NTpcdFxuIDE2NjpcdFx0Y2FyZCA9IChzdHJ1Y3QgdXNiX2NhcmRfcmVjICopYWRhcHRlci1cdTAwM2VjYXJkO1xuIDE2NzpcdFx0aWYgKGNhcmQtXHUwMDNlcnhfY21kX2VwID09IGNvbnRleHQtXHUwMDNlZXApXG4gMTY4Olx0XHRcdGF0b21pY19kZWMoXHUwMDI2Y2FyZC1cdTAwM2VyeF9jbWRfdXJiX3BlbmRpbmcpO1xuIDE2OTpcdFx0ZWxzZVxuIDE3MDpcdFx0XHRhdG9taWNfZGVjKFx1MDAyNmNhcmQtXHUwMDNlcnhfZGF0YV91cmJfcGVuZGluZyk7XG4gMTcxOlx0XG4gMTcyOlx0XHRpZiAocmVjdl9sZW5ndGgpIHtcbiAxNzM6XHRcdFx0aWYgKHVyYi1cdTAwM2VzdGF0dXMgfHxcbiAxNzQ6XHRcdFx0ICAgIHRlc3RfYml0KE1XSUZJRVhfU1VSUFJJU0VfUkVNT1ZFRCwgXHUwMDI2YWRhcHRlci1cdTAwM2V3b3JrX2ZsYWdzKSkge1xuIDE3NTpcdFx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuIDE3NjpcdFx0XHRcdFx0ICAgIFwmIzM0O1VSQiBzdGF0dXMgaXMgZmFpbGVkOiAlZFxcblwmIzM0OywgdXJiLVx1MDAzZXN0YXR1cyk7XG4gMTc3Olx0XHRcdFx0LyogRG8gbm90IGZyZWUgc2tiIGluIGNhc2Ugb2YgY29tbWFuZCBlcCAqL1xuIDE3ODpcdFx0XHRcdGlmIChjYXJkLVx1MDAzZXJ4X2NtZF9lcCAhPSBjb250ZXh0LVx1MDAzZWVwKVxuIDE3OTpcdFx0XHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiAxODA6XHRcdFx0XHRnb3RvIHNldHVwX2Zvcl9uZXh0O1xuIDE4MTpcdFx0XHR9XG4gMTgyOlx0XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzZSByZWN2X2xlbmd0aClcbiAxODM6XHRcdFx0XHRza2JfdHJpbShza2IsIHJlY3ZfbGVuZ3RoKTtcbiAxODQ6XHRcdFx0ZWxzZVxuIDE4NTpcdFx0XHRcdHNrYl9wdXQoc2tiLCByZWN2X2xlbmd0aCAtIHNrYi1cdTAwM2VsZW4pO1xuIDE4NjpcdFxuIDE4NzpcdFx0XHRzdGF0dXMgPSBtd2lmaWV4X3VzYl9yZWN2KGFkYXB0ZXIsIHNrYiwgY29udGV4dC1cdTAwM2VlcCk7XG4gMTg4Olx0XG4gMTg5Olx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIElORk8sXG4gMTkwOlx0XHRcdFx0ICAgIFwmIzM0O2luZm86IHJlY3ZfbGVuZ3RoPSVkLCBzdGF0dXM9JWRcXG5cJiMzNDssXG4gMTkxOlx0XHRcdFx0ICAgIHJlY3ZfbGVuZ3RoLCBzdGF0dXMpO1xuIDE5MjpcdFx0XHRpZiAoc3RhdHVzID09IC1FSU5QUk9HUkVTUykge1xuIDE5MzpcdFx0XHRcdG13aWZpZXhfcXVldWVfbWFpbl93b3JrKGFkYXB0ZXIpO1xuIDE5NDpcdFxuIDE5NTpcdFx0XHRcdC8qIHVyYiBmb3IgZGF0YV9lcCBpcyByZS1zdWJtaXR0ZWQgbm93O1xuIDE5NjpcdFx0XHRcdCAqIHVyYiBmb3IgY21kX2VwIHdpbGwgYmUgcmUtc3VibWl0dGVkIGluIGNhbGxiYWNrXG4gMTk3Olx0XHRcdFx0ICogbXdpZmlleF91c2JfcmVjdl9jb21wbGV0ZVxuIDE5ODpcdFx0XHRcdCAqL1xuIDE5OTpcdFx0XHRcdGlmIChjYXJkLVx1MDAzZXJ4X2NtZF9lcCA9PSBjb250ZXh0LVx1MDAzZWVwKVxuIDIwMDpcdFx0XHRcdFx0cmV0dXJuO1xuIDIwMTpcdFx0XHR9IGVsc2Uge1xuIDIwMjpcdFx0XHRcdGlmIChzdGF0dXMgPT0gLTEpXG4gMjAzOlx0XHRcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcbiAyMDQ6XHRcdFx0XHRcdFx0ICAgIFwmIzM0O3JlY2VpdmVkIGRhdGEgcHJvY2Vzc2luZyBmYWlsZWQhXFxuXCYjMzQ7KTtcbiAyMDU6XHRcbiAyMDY6XHRcdFx0XHQvKiBEbyBub3QgZnJlZSBza2IgaW4gY2FzZSBvZiBjb21tYW5kIGVwICovXG4gMjA3Olx0XHRcdFx0aWYgKGNhcmQtXHUwMDNlcnhfY21kX2VwICE9IGNvbnRleHQtXHUwMDNlZXApXG4gMjA4Olx0XHRcdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIDIwOTpcdFx0XHR9XG4gMjEwOlx0XHR9IGVsc2UgaWYgKHVyYi1cdTAwM2VzdGF0dXMpIHtcbiAyMTE6XHRcdFx0aWYgKCF0ZXN0X2JpdChNV0lGSUVYX0lTX1NVU1BFTkRFRCwgXHUwMDI2YWRhcHRlci1cdTAwM2V3b3JrX2ZsYWdzKSkge1xuIDIxMjpcdFx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEZBVEFMLFxuIDIxMzpcdFx0XHRcdFx0ICAgIFwmIzM0O0NhcmQgaXMgcmVtb3ZlZDogJWRcXG5cJiMzNDssIHVyYi1cdTAwM2VzdGF0dXMpO1xuIDIxNDpcdFx0XHRcdHNldF9iaXQoTVdJRklFWF9TVVJQUklTRV9SRU1PVkVELCBcdTAwMjZhZGFwdGVyLVx1MDAzZXdvcmtfZmxhZ3MpO1xuIDIxNTpcdFx0XHR9XG4gMjE2Olx0XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gMjE3Olx0XHRcdHJldHVybjtcbiAyMTg6XHRcdH0gZWxzZSB7XG4gMjE5Olx0XHRcdC8qIERvIG5vdCBmcmVlIHNrYiBpbiBjYXNlIG9mIGNvbW1hbmQgZXAgKi9cbiAyMjA6XHRcdFx0aWYgKGNhcmQtXHUwMDNlcnhfY21kX2VwICE9IGNvbnRleHQtXHUwMDNlZXApXG4gMjIxOlx0XHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiAyMjI6XHRcbiAyMjM6XHRcdFx0LyogZmFsbCB0aHJvdWdoIHNldHVwX2Zvcl9uZXh0ICovXG4gMjI0Olx0XHR9XG4gMjI1Olx0XG4gMjI2Olx0c2V0dXBfZm9yX25leHQ6XG4gMjI3Olx0XHRpZiAoY2FyZC1cdTAwM2VyeF9jbWRfZXAgPT0gY29udGV4dC1cdTAwM2VlcClcbiAyMjg6XHRcdFx0c2l6ZSA9IE1XSUZJRVhfUlhfQ01EX0JVRl9TSVpFO1xuIDIyOTpcdFx0ZWxzZVxuIDIzMDpcdFx0XHRzaXplID0gTVdJRklFWF9SWF9EQVRBX0JVRl9TSVpFO1xuIDIzMTpcdFxuIDIzMjpcdFx0aWYgKGNhcmQtXHUwMDNlcnhfY21kX2VwID09IGNvbnRleHQtXHUwMDNlZXApIHtcbiAyMzM6XHRcdFx0bXdpZmlleF91c2Jfc3VibWl0X3J4X3VyYihjb250ZXh0LCBzaXplKTtcbiAyMzQ6XHRcdH0gZWxzZSB7XG4gMjM1Olx0XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZhZGFwdGVyLVx1MDAzZXJ4X3BlbmRpbmcpIFx1MDAzYz0gSElHSF9SWF9QRU5ESU5HKSB7XG4gMjM2Olx0XHRcdFx0bXdpZmlleF91c2Jfc3VibWl0X3J4X3VyYihjb250ZXh0LCBzaXplKTtcbiAyMzc6XHRcdFx0fSBlbHNlIHtcbiAyMzg6XHRcdFx0XHRjb250ZXh0LVx1MDAzZXNrYiA9IE5VTEw7XG4gMjM5Olx0XHRcdH1cbiAyNDA6XHRcdH1cbiAyNDE6XHRcbiAyNDI6XHRcdHJldHVybjtcbiAyNDM6XHR9XG4gMjQ0Olx0XG4gMjQ1Olx0c3RhdGljIHZvaWQgbXdpZmlleF91c2JfdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuIDI0NjpcdHtcbiAyNDc6XHRcdHN0cnVjdCB1cmJfY29udGV4dCAqY29udGV4dCA9IChzdHJ1Y3QgdXJiX2NvbnRleHQgKikodXJiLVx1MDAzZWNvbnRleHQpO1xuIDI0ODpcdFx0c3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRleHQtXHUwMDNlYWRhcHRlcjtcbiAyNDk6XHRcdHN0cnVjdCB1c2JfY2FyZF9yZWMgKmNhcmQgPSBhZGFwdGVyLVx1MDAzZWNhcmQ7XG4gMjUwOlx0XHRzdHJ1Y3QgdXNiX3R4X2RhdGFfcG9ydCAqcG9ydDtcbiAyNTE6XHRcdGludCBpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjM3MAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgRGF0YSBSZWNlcHRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYG13aWZpZXhfdXNiX3JlY3ZgIGZ1bmN0aW9uLiBNeSBhbmFseXNpcyBuZWVkcyB0byBiZWdpbiBoZXJlLCBhcyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgd2l0aCByZXNwZWN0IHRvIHRoZSByZWNlaXZlZCBkYXRhLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBtYW5hZ2luZyB0aGUgaW5jb21pbmcgdHJhZmZpYy4gV2hhdCBhcmUgdGhlIGtleSBwcm9jZXNzZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBib3R0bGVuZWNrcz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgbnVhbmNlcyBoZXJlLCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gcHJvY2Vzc2VzIGFueSByZWNlaXZlZCBkYXRhLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSB0aGF0IGFyZSBiZWluZyBtYW5pcHVsYXRlZC4gSXMgdGhpcyB3aGVyZSB0aGUgY3JpdGljYWwgZGVjaXNpb25zIGFyZSBtYWRlIGFib3V0IHBhY2tldCBwYXJzaW5nLCBlcnJvciBoYW5kbGluZywgYW5kIHVsdGltYXRlbHksIHdoZXJlIHRoZSBkYXRhIGlzIHBhc3NlZCB1cCB0byB0aGUgaGlnaGVyIGxheWVycz8gTGV0JiMzOTtzIGZpZ3VyZSB0aGlzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0NjpcdHN0YXRpYyBpbnQgbXdpZmlleF91c2JfcmVjdihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuICA0NzpcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBlcClcbiAgNDg6XHR7XG4gIDQ5Olx0XHR1MzIgcmVjdl90eXBlO1xuICA1MDpcdFx0X19sZTMyIHRtcDtcbiAgNTE6XHRcdGludCByZXQ7XG4gIDUyOlx0XG4gIDUzOlx0XHRpZiAoYWRhcHRlci1cdTAwM2Voc19hY3RpdmF0ZWQpXG4gIDU0Olx0XHRcdG13aWZpZXhfcHJvY2Vzc19oc19jb25maWcoYWRhcHRlcik7XG4gIDU1Olx0XG4gIDU2Olx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgSU5URl9IRUFERVJfTEVOKSB7XG4gIDU3Olx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuICA1ODpcdFx0XHRcdCAgICBcJiMzNDslczogaW52YWxpZCBza2ItXHUwMDNlbGVuXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gIDU5Olx0XHRcdHJldHVybiAtMTtcbiAgNjA6XHRcdH1cbiAgNjE6XHRcbiAgNjI6XHRcdHN3aXRjaCAoZXApIHtcbiAgNjM6XHRcdGNhc2UgTVdJRklFWF9VU0JfRVBfQ01EX0VWRU5UOlxuICA2NDpcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFVkVOVCxcbiAgNjU6XHRcdFx0XHQgICAgXCYjMzQ7JXM6IEVQX0NNRF9FVkVOVFxcblwmIzM0OywgX19mdW5jX18pO1xuICA2NjpcdFx0XHRza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgXHUwMDI2dG1wLCBJTlRGX0hFQURFUl9MRU4pO1xuICA2NzpcdFx0XHRyZWN2X3R5cGUgPSBsZTMyX3RvX2NwdSh0bXApO1xuICA2ODpcdFx0XHRza2JfcHVsbChza2IsIElOVEZfSEVBREVSX0xFTik7XG4gIDY5Olx0XG4gIDcwOlx0XHRcdHN3aXRjaCAocmVjdl90eXBlKSB7XG4gIDcxOlx0XHRcdGNhc2UgTVdJRklFWF9VU0JfVFlQRV9DTUQ6XG4gIDcyOlx0XHRcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNlIE1XSUZJRVhfU0laRV9PRl9DTURfQlVGRkVSKSB7XG4gIDczOlx0XHRcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcbiAgNzQ6XHRcdFx0XHRcdFx0ICAgIFwmIzM0O0NNRDogc2tiLVx1MDAzZWxlbiB0b28gbGFyZ2VcXG5cJiMzNDspO1xuICA3NTpcdFx0XHRcdFx0cmV0ID0gLTE7XG4gIDc2Olx0XHRcdFx0XHRnb3RvIGV4aXRfcmVzdG9yZV9za2I7XG4gIDc3Olx0XHRcdFx0fSBlbHNlIGlmICghYWRhcHRlci1cdTAwM2VjdXJyX2NtZCkge1xuICA3ODpcdFx0XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgV0FSTiwgXCYjMzQ7Q01EOiBubyBjdXJyX2NtZFxcblwmIzM0Oyk7XG4gIDc5Olx0XHRcdFx0XHRpZiAoYWRhcHRlci1cdTAwM2Vwc19zdGF0ZSA9PSBQU19TVEFURV9TTEVFUF9DRk0pIHtcbiAgODA6XHRcdFx0XHRcdFx0bXdpZmlleF9wcm9jZXNzX3NsZWVwX2NvbmZpcm1fcmVzcChcbiAgODE6XHRcdFx0XHRcdFx0XHRcdGFkYXB0ZXIsIHNrYi1cdTAwM2VkYXRhLFxuICA4MjpcdFx0XHRcdFx0XHRcdFx0c2tiLVx1MDAzZWxlbik7XG4gIDgzOlx0XHRcdFx0XHRcdHJldCA9IDA7XG4gIDg0Olx0XHRcdFx0XHRcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcbiAgODU6XHRcdFx0XHRcdH1cbiAgODY6XHRcdFx0XHRcdHJldCA9IC0xO1xuICA4NzpcdFx0XHRcdFx0Z290byBleGl0X3Jlc3RvcmVfc2tiO1xuICA4ODpcdFx0XHRcdH1cbiAgODk6XHRcbiAgOTA6XHRcdFx0XHRhZGFwdGVyLVx1MDAzZWN1cnJfY21kLVx1MDAzZXJlc3Bfc2tiID0gc2tiO1xuICA5MTpcdFx0XHRcdGFkYXB0ZXItXHUwMDNlY21kX3Jlc3BfcmVjZWl2ZWQgPSB0cnVlO1xuICA5MjpcdFx0XHRcdGJyZWFrO1xuICA5MzpcdFx0XHRjYXNlIE1XSUZJRVhfVVNCX1RZUEVfRVZFTlQ6XG4gIDk0Olx0XHRcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZih1MzIpKSB7XG4gIDk1Olx0XHRcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcbiAgOTY6XHRcdFx0XHRcdFx0ICAgIFwmIzM0O0VWRU5UOiBza2ItXHUwMDNlbGVuIHRvbyBzbWFsbFxcblwmIzM0Oyk7XG4gIDk3Olx0XHRcdFx0XHRyZXQgPSAtMTtcbiAgOTg6XHRcdFx0XHRcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcbiAgOTk6XHRcdFx0XHR9XG4gMTAwOlx0XHRcdFx0c2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIFx1MDAyNnRtcCwgc2l6ZW9mKHUzMikpO1xuIDEwMTpcdFx0XHRcdGFkYXB0ZXItXHUwMDNlZXZlbnRfY2F1c2UgPSBsZTMyX3RvX2NwdSh0bXApO1xuIDEwMjpcdFx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVWRU5ULFxuIDEwMzpcdFx0XHRcdFx0ICAgIFwmIzM0O2V2ZW50X2NhdXNlICUjeFxcblwmIzM0OywgYWRhcHRlci1cdTAwM2VldmVudF9jYXVzZSk7XG4gMTA0Olx0XG4gMTA1Olx0XHRcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNlIE1BWF9FVkVOVF9TSVpFKSB7XG4gMTA2Olx0XHRcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcbiAxMDc6XHRcdFx0XHRcdFx0ICAgIFwmIzM0O0VWRU5UOiBldmVudCBib2R5IHRvbyBsYXJnZVxcblwmIzM0Oyk7XG4gMTA4Olx0XHRcdFx0XHRyZXQgPSAtMTtcbiAxMDk6XHRcdFx0XHRcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcbiAxMTA6XHRcdFx0XHR9XG4gMTExOlx0XG4gMTEyOlx0XHRcdFx0bWVtY3B5KGFkYXB0ZXItXHUwMDNlZXZlbnRfYm9keSwgc2tiLVx1MDAzZWRhdGEgJiM0MztcbiAxMTM6XHRcdFx0XHQgICAgICAgTVdJRklFWF9FVkVOVF9IRUFERVJfTEVOLCBza2ItXHUwMDNlbGVuKTtcbiAxMTQ6XHRcbiAxMTU6XHRcdFx0XHRhZGFwdGVyLVx1MDAzZWV2ZW50X3JlY2VpdmVkID0gdHJ1ZTtcbiAxMTY6XHRcdFx0XHRhZGFwdGVyLVx1MDAzZWV2ZW50X3NrYiA9IHNrYjtcbiAxMTc6XHRcdFx0XHRicmVhaztcbiAxMTg6XHRcdFx0ZGVmYXVsdDpcbiAxMTk6XHRcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcbiAxMjA6XHRcdFx0XHRcdCAgICBcJiMzNDt1bmtub3duIHJlY3ZfdHlwZSAlI3hcXG5cJiMzNDssIHJlY3ZfdHlwZSk7XG4gMTIxOlx0XHRcdFx0cmV0ID0gLTE7XG4gMTIyOlx0XHRcdFx0Z290byBleGl0X3Jlc3RvcmVfc2tiO1xuIDEyMzpcdFx0XHR9XG4gMTI0Olx0XHRcdGJyZWFrO1xuIDEyNTpcdFx0Y2FzZSBNV0lGSUVYX1VTQl9FUF9EQVRBOlxuIDEyNjpcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBEQVRBLCBcJiMzNDslczogRVBfREFUQVxcblwmIzM0OywgX19mdW5jX18pO1xuIDEyNzpcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2UgTVdJRklFWF9SWF9EQVRBX0JVRl9TSVpFKSB7XG4gMTI4Olx0XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXG4gMTI5Olx0XHRcdFx0XHQgICAgXCYjMzQ7REFUQTogc2tiLVx1MDAzZWxlbiB0b28gbGFyZ2VcXG5cJiMzNDspO1xuIDEzMDpcdFx0XHRcdHJldHVybiAtMTtcbiAxMzE6XHRcdFx0fVxuIDEzMjpcdFxuIDEzMzpcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZhZGFwdGVyLVx1MDAzZXJ4X2RhdGFfcSwgc2tiKTtcbiAxMzQ6XHRcdFx0YWRhcHRlci1cdTAwM2VkYXRhX3JlY2VpdmVkID0gdHJ1ZTtcbiAxMzU6XHRcdFx0YXRvbWljX2luYyhcdTAwMjZhZGFwdGVyLVx1MDAzZXJ4X3BlbmRpbmcpO1xuIDEzNjpcdFx0XHRicmVhaztcbiAxMzc6XHRcdGRlZmF1bHQ6XG4gMTM4Olx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuIDEzOTpcdFx0XHRcdCAgICBcJiMzNDslczogdW5rbm93biBlbmRwb3J0ICUjeFxcblwmIzM0OywgX19mdW5jX18sIGVwKTtcbiAxNDA6XHRcdFx0cmV0dXJuIC0xO1xuIDE0MTpcdFx0fVxuIDE0MjpcdFxuIDE0MzpcdFx0cmV0dXJuIC1FSU5QUk9HUkVTUztcbiAxNDQ6XHRcbiAxNDU6XHRleGl0X3Jlc3RvcmVfc2tiOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODEyNgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHByb2Nlc3MsIGJyZWFraW5nIGl0IGRvd24gc3RlcC1ieS1zdGVwOgoKKipOZXR3b3JrIERyaXZlciBEYXRhIEZsb3cgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIE1hcnZlbGwgV2ktRmkgZHJpdmVyIGhhbmRsZXMgaW5jb21pbmcgZGF0YS4gSXQgc2VlbXMgbGlrZSB0aGUgYG13aWZpZXhfdXNiX3JlY3ZgIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIHJlY2VpdmluZyBkYXRhIG92ZXIgdGhlIFVTQiBpbnRlcmZhY2UuIE15IGltbWVkaWF0ZSBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoZSBmdW5jdGlvbiBzZXRzIGZsYWdzIGluZGljYXRpbmcgcmVjZWlwdCBvZiBlaXRoZXIgYSBjb21tYW5kIHJlc3BvbnNlIG9yIGFuIGV2ZW50IOKAkyBzcGVjaWZpY2FsbHksIGBhZGFwdGVyLSZndDtjbWRfcmVzcF9yZWNlaXZlZCA9IHRydWVgIG9yIGBhZGFwdGVyLSZndDtldmVudF9yZWNlaXZlZCA9IHRydWVgLiBUaGVuLCBhcyBpcyBvZnRlbiB0aGUgY2FzZSB3aGVuIGRlYWxpbmcgd2l0aCBhc3luY2hyb25vdXMgb3BlcmF0aW9ucywgaXQgcmV0dXJucyBgLUVJTlBST0dSRVNTYC4gVGhpcyBzaWduYWxzIHRoYXQgdGhlIHJlY2VpdmluZyBpcyBpbiBwcm9ncmVzcywgYW5kIHRoZSBzeXN0ZW0gbmVlZHMgdG8gZG8gb3RoZXIgdGhpbmdzIGFuZCByZXR1cm4gYmFjayB3aGVuIHRoZSBhY3Rpb24gaGFzIGZpbmlzaGVkLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgYWZ0ZXJtYXRoLiBVcG9uIGNvbXBsZXRpb24gb2YgdGhlIFVTQiByZWNlaXZlIG9wZXJhdGlvbiDigJMgYXMgaGFuZGxlZCBpbiBgbXdpZmlleF91c2JfcnhfY29tcGxldGVgIOKAkyBhIGNhbGwgaXMgbWFkZSB0byBgbXdpZmlleF9xdWV1ZV9tYWluX3dvcmsoYWRhcHRlcilgLiBUaGlzIGxvb2tzIGxpa2UgdGhlIGRyaXZlciYjMzk7cyB3YXkgb2YgZGVmZXJyaW5nIHRoZSBhY3R1YWwgcHJvY2Vzc2luZyBvZiB0aGUgZGF0YSBpdCBqdXN0IHJlY2VpdmVkLiBXaGljaCBtYWtlcyBzZW5zZSwgZXNwZWNpYWxseSBpbiBhIGRyaXZlciBjb250ZXh0LCB3aGVyZSB5b3Ugd2FudCB0byBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIHRpbWUgeW91JiMzOTtyZSBibG9ja2luZyB0aGUgVVNCIHJlY2VpdmUgcGF0aC4KCkZpbmFsbHksIHRoZSBtYWluIHdvcmsgcXVldWUsIHRoZSBpbXBsaWNhdGlvbiBiZWluZyB0aGF0IHRoZSB3b3JrIHF1ZXVlIGl0c2VsZiBpcyByZXNwb25zaWJsZSBmb3IgcHJvY2Vzc2luZyBib3RoIGNvbW1hbmRzIGFuZCBldmVudHMuIEkgbmVlZCB0byBsb29rIGludG8gYG13aWZpZXhfbWFpbl9wcm9jZXNzYCBtb3JlIGNsb3NlbHkgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiBjb21tYW5kIHJlc3BvbnNlcyBhbmQgZXZlbnRzLCBhbmQgaG93IGl0IGhhbmRsZXMgdGhlbSBhcHByb3ByaWF0ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X21haW5fcHJvY2VzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYz0yMTY9c3RhdGljIHZvaWQgbWF5YmVfcXVpcmtfZndfZGlzYWJsZV9kcyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMjQ3LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzoyNDg6aW50IG13aWZpZXhfbWFpbl9wcm9jZXNzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTI0OS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy00ODEtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzo0ODI6RVhQT1JUX1NZTUJPTF9HUEwobXdpZmlleF9tYWluX3Byb2Nlc3MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy00ODMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYz0xNDE5PXN0YXRpYyB2b2lkIG13aWZpZXhfbWFpbl93b3JrX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTE0MjUtXHRcdHJldHVybjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6MTQyNjpcdG13aWZpZXhfbWFpbl9wcm9jZXNzKGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0xNDI3LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oPTE1Mjk9aW50IG13aWZpZXhfc2V0X3R4X3Bvd2VyKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNTMxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaDoxNTMyOmludCBtd2lmaWV4X21haW5fcHJvY2VzcyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICopO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNTMzLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmM9MTM0MD1td2lmaWV4X3NkaW9faW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYy0xMzU2LVx0bXdpZmlleF9pbnRlcnJ1cHRfc3RhdHVzKGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYzoxMzU3Olx0bXdpZmlleF9tYWluX3Byb2Nlc3MoYWRhcHRlcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jLTEzNTgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTIwMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBDb3JlIFByb2Nlc3NpbmcgTG9vcCBpbiB0aGUgRHJpdmVyKioKCk9rYXksIHNvIGBtd2lmaWV4X21haW5fcHJvY2Vzc2Agc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgZnVuY3Rpb24gZm9yIHRoaXMgV2ktRmkgZHJpdmVyLiBUaGF0IG1ha2VzIHNlbnNlLiBJdCYjMzk7cyB0aGUgbWFpbiBsb29wLCB0aGUgaGVhcnRiZWF0LiBUaGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgKmhvdyogaXQmIzM5O3MgZG9pbmcgaXRzIGpvYi4KClRoZSB0ZXh0IHBvaW50cyBvdXQgdGhhdCBpdCYjMzk7cyBjYWxsaW5nIHR3byBrZXkgZnVuY3Rpb25zOiBgbXdpZmlleF9wcm9jZXNzX2NtZHJlc3BgIGFuZCBgbXdpZmlleF9wcm9jZXNzX2V2ZW50YC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHByaW1hcnkgZnVuY3Rpb25zIHRvIHByb2Nlc3MgY29tbWFuZHMgYW5kIGV2ZW50cyByZWNlaXZlZC4gT2YgY291cnNlLCB0aGF0JiMzOTtzIHdoYXQgSSYjMzk7ZCBleHBlY3QuIGBjbWRyZXNwYCBpcyBmb3IgaGFuZGxpbmcgY29tbWFuZCByZXNwb25zZXMsIHRoYXQmIzM5O3MgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnkuIEJ1dCBldmVudHMsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGxpZXMsIHJpZ2h0PyBTbyBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBtd2lmaWV4X3Byb2Nlc3NfZXZlbnRgIGFuZCBzZWUgd2hhdCB0aGF0JiMzOTtzIGFjdHVhbGx5IGRvaW5nLiBUaGF0JiMzOTtzIHRoZSBwYXJ0IHRoYXQmIzM5O2xsIGxpa2VseSByZXZlYWwgaG93IHRoZSBkcml2ZXIgaXMgcmVzcG9uZGluZyB0byB0aGUgZW52aXJvbm1lbnQsIHRoZSBuZXR3b3JrLCBhbmQgdGhlIGhhcmR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X3Byb2Nlc3NfZXZlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jbWRldnQuYz00MjE9dm9pZCBtd2lmaWV4X2ZyZWVfY21kX2J1ZmZlcihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jbWRldnQuYy00NjktICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY21kZXZ0LmM6NDcwOmludCBtd2lmaWV4X3Byb2Nlc3NfZXZlbnQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jbWRldnQuYy00NzEte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9MjQ4PWludCBtd2lmaWV4X21haW5fcHJvY2VzcyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMzUwLVx0XHRcdGFkYXB0ZXItXHUwMDNlZXZlbnRfcmVjZWl2ZWQgPSBmYWxzZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6MzUxOlx0XHRcdG13aWZpZXhfcHJvY2Vzc19ldmVudChhZGFwdGVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMzUyLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xMDcxPWludCBtd2lmaWV4X3Byb2Nlc3NfbWdtdF9wYWNrZXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTEwNzMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oOjEwNzQ6aW50IG13aWZpZXhfcHJvY2Vzc19ldmVudChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTA3NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5MjcKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbXdpZmlleF9wcm9jZXNzX2V2ZW50YCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aCBgbXdpZmlleF9wcm9jZXNzX2V2ZW50YCBpbiBgY21kZXZ0LmNgLiBUaGF0JiMzOTtzIGEgc29saWQgZW50cnkgcG9pbnQgZm9yIGludmVzdGlnYXRpbmcgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBldmVudHMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIE1hcnZlbGwgV2ktRmkgZHJpdmVyIGNvbnRleHQuIFRoaXMgbGlrZWx5IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgZXZlbnQgaGFuZGxpbmcgbG9vcCBvciBkaXNwYXRjaCBtZWNoYW5pc20uIE15IGluaXRpYWwgZXhwZWN0YXRpb24gaXMgdG8gZmluZCB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHJlY2VpdmluZyBldmVudHMgZnJvbSB0aGUgZmlybXdhcmUgb3IgaGFyZHdhcmUgYW5kIHRoZW4gcm91dGluZyB0aGVtIHRvIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVycyBiYXNlZCBvbiB0aGVpciB0eXBlLiBXZSYjMzk7cmUgcHJvYmFibHkgdGFsa2luZyBhYm91dCB0aGUgaGVhcnQgb2YgdGhlIGludGVycnVwdCBwcm9jZXNzaW5nIG9yIHBvbGxpbmcgbWVjaGFuaXNtIGhlcmUuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgaXQmIzM5O3MgYSBzaW1wbGUgc3dpdGNoLWNhc2UsIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGxvb2t1cCB0YWJsZSwgb3Igc29tZXRoaW5nIGV2ZW50LWRyaXZlbiBsaWtlIGEgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIHN5c3RlbS4gVGhlIGdvYWwgbm93IGlzIHRvIGxvb2sgYXQgdGhlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NtZGV2dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDcwOlx0aW50IG13aWZpZXhfcHJvY2Vzc19ldmVudChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxuIDQ3MTpcdHtcbiA0NzI6XHRcdGludCByZXQsIGk7XG4gNDczOlx0XHRzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2O1xuIDQ3NDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFkYXB0ZXItXHUwMDNlZXZlbnRfc2tiO1xuIDQ3NTpcdFx0dTMyIGV2ZW50Y2F1c2U7XG4gNDc2Olx0XHRzdHJ1Y3QgbXdpZmlleF9yeGluZm8gKnJ4X2luZm87XG4gNDc3Olx0XG4gNDc4Olx0XHRpZiAoKGFkYXB0ZXItXHUwMDNlZXZlbnRfY2F1c2UgXHUwMDI2IEVWRU5UX0lEX01BU0spID09IEVWRU5UX1JBREFSX0RFVEVDVEVEKSB7XG4gNDc5Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFkYXB0ZXItXHUwMDNlcHJpdl9udW07IGkmIzQzOyYjNDM7KSB7XG4gNDgwOlx0XHRcdFx0cHJpdiA9IGFkYXB0ZXItXHUwMDNlcHJpdltpXTtcbiA0ODE6XHRcdFx0XHRpZiAobXdpZmlleF9pc18xMWhfYWN0aXZlKHByaXYpKSB7XG4gNDgyOlx0XHRcdFx0XHRhZGFwdGVyLVx1MDAzZWV2ZW50X2NhdXNlIHw9XG4gNDgzOlx0XHRcdFx0XHRcdCgocHJpdi1cdTAwM2Vic3NfbnVtIFx1MDAyNiAweGZmKSBcdTAwM2NcdTAwM2MgMTYpIHxcbiA0ODQ6XHRcdFx0XHRcdFx0KChwcml2LVx1MDAzZWJzc190eXBlIFx1MDAyNiAweGZmKSBcdTAwM2NcdTAwM2MgMjQpO1xuIDQ4NTpcdFx0XHRcdFx0YnJlYWs7XG4gNDg2Olx0XHRcdFx0fVxuIDQ4NzpcdFx0XHR9XG4gNDg4Olx0XHR9XG4gNDg5Olx0XG4gNDkwOlx0XHRldmVudGNhdXNlID0gYWRhcHRlci1cdTAwM2VldmVudF9jYXVzZTtcbiA0OTE6XHRcbiA0OTI6XHRcdC8qIFNhdmUgdGhlIGxhc3QgZXZlbnQgdG8gZGVidWcgbG9nICovXG4gNDkzOlx0XHRhZGFwdGVyLVx1MDAzZWRiZy5sYXN0X2V2ZW50X2luZGV4ID1cbiA0OTQ6XHRcdFx0XHQoYWRhcHRlci1cdTAwM2VkYmcubGFzdF9ldmVudF9pbmRleCAmIzQzOyAxKSAlIERCR19DTURfTlVNO1xuIDQ5NTpcdFx0YWRhcHRlci1cdTAwM2VkYmcubGFzdF9ldmVudFthZGFwdGVyLVx1MDAzZWRiZy5sYXN0X2V2ZW50X2luZGV4XSA9XG4gNDk2Olx0XHRcdFx0XHRcdFx0XHQodTE2KSBldmVudGNhdXNlO1xuIDQ5NzpcdFxuIDQ5ODpcdFx0LyogR2V0IEJTUyBudW1iZXIgYW5kIGNvcnJlc3BvbmRpbmcgcHJpdiAqL1xuIDQ5OTpcdFx0cHJpdiA9IG13aWZpZXhfZ2V0X3ByaXZfYnlfaWQoYWRhcHRlciwgRVZFTlRfR0VUX0JTU19OVU0oZXZlbnRjYXVzZSksXG4gNTAwOlx0XHRcdFx0XHQgICAgICBFVkVOVF9HRVRfQlNTX1RZUEUoZXZlbnRjYXVzZSkpO1xuIDUwMTpcdFx0aWYgKCFwcml2KVxuIDUwMjpcdFx0XHRwcml2ID0gbXdpZmlleF9nZXRfcHJpdihhZGFwdGVyLCBNV0lGSUVYX0JTU19ST0xFX0FOWSk7XG4gNTAzOlx0XG4gNTA0Olx0XHQvKiBDbGVhciBCU1NfTk9fQklUUyBmcm9tIGV2ZW50ICovXG4gNTA1Olx0XHRldmVudGNhdXNlIFx1MDAyNj0gRVZFTlRfSURfTUFTSztcbiA1MDY6XHRcdGFkYXB0ZXItXHUwMDNlZXZlbnRfY2F1c2UgPSBldmVudGNhdXNlO1xuIDUwNzpcdFxuIDUwODpcdFx0aWYgKHNrYikge1xuIDUwOTpcdFx0XHRyeF9pbmZvID0gTVdJRklFWF9TS0JfUlhDQihza2IpO1xuIDUxMDpcdFx0XHRtZW1zZXQocnhfaW5mbywgMCwgc2l6ZW9mKCpyeF9pbmZvKSk7XG4gNTExOlx0XHRcdHJ4X2luZm8tXHUwMDNlYnNzX251bSA9IHByaXYtXHUwMDNlYnNzX251bTtcbiA1MTI6XHRcdFx0cnhfaW5mby1cdTAwM2Vic3NfdHlwZSA9IHByaXYtXHUwMDNlYnNzX3R5cGU7XG4gNTEzOlx0XHRcdG13aWZpZXhfZGJnX2R1bXAoYWRhcHRlciwgRVZUX0QsIFwmIzM0O0V2ZW50IEJ1ZjpcJiMzNDssXG4gNTE0Olx0XHRcdFx0XHQgc2tiLVx1MDAzZWRhdGEsIHNrYi1cdTAwM2VsZW4pO1xuIDUxNTpcdFx0fVxuIDUxNjpcdFxuIDUxNzpcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVZFTlQsIFwmIzM0O0VWRU5UOiBjYXVzZTogJSN4XFxuXCYjMzQ7LCBldmVudGNhdXNlKTtcbiA1MTg6XHRcbiA1MTk6XHRcdGlmIChwcml2LVx1MDAzZWJzc19yb2xlID09IE1XSUZJRVhfQlNTX1JPTEVfVUFQKVxuIDUyMDpcdFx0XHRyZXQgPSBtd2lmaWV4X3Byb2Nlc3NfdWFwX2V2ZW50KHByaXYpO1xuIDUyMTpcdFx0ZWxzZVxuIDUyMjpcdFx0XHRyZXQgPSBtd2lmaWV4X3Byb2Nlc3Nfc3RhX2V2ZW50KHByaXYpO1xuIDUyMzpcdFxuIDUyNDpcdFx0YWRhcHRlci1cdTAwM2VldmVudF9jYXVzZSA9IDA7XG4gNTI1Olx0XHRhZGFwdGVyLVx1MDAzZWV2ZW50X3NrYiA9IE5VTEw7XG4gNTI2Olx0XHRhZGFwdGVyLVx1MDAzZWlmX29wcy5ldmVudF9jb21wbGV0ZShhZGFwdGVyLCBza2IpO1xuIDUyNzpcdFxuIDUyODpcdFx0cmV0dXJuIHJldDtcbiA1Mjk6XHR9XG4gNTMwOlx0XG4gNTMxOlx0LypcbiA1MzI6XHQgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGEgY29tbWFuZCBhbmQgc2VuZCBpdCB0byB0aGUgZmlybXdhcmUuXG4gNTMzOlx0ICpcbiA1MzQ6XHQgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtXG4gNTM1Olx0ICogICAgICAtIFNhbml0eSB0ZXN0cyB0byBtYWtlIHN1cmUgdGhlIGNhcmQgaXMgc3RpbGwgcHJlc2VudCBvciB0aGUgRldcbiA1MzY6XHQgKiAgICAgICAgaXMgbm90IHJlc2V0XG4gNTM3Olx0ICogICAgICAtIEdldHRpbmcgYSBuZXcgY29tbWFuZCBub2RlIGZyb20gdGhlIGNvbW1hbmQgZnJlZSBxdWV1ZVxuIDUzODpcdCAqICAgICAgLSBJbml0aWFsaXppbmcgdGhlIGNvbW1hbmQgbm9kZSBmb3IgZGVmYXVsdCBwYXJhbWV0ZXJzXG4gNTM5Olx0ICogICAgICAtIEZpbGwgdXAgdGhlIG5vbi1kZWZhdWx0IHBhcmFtZXRlcnMgYW5kIGJ1ZmZlciBwb2ludGVyc1xuIDU0MDpcdCAqICAgICAgLSBBZGQgdGhlIGNvbW1hbmQgdG8gcGVuZGluZyBxdWV1ZVxuIDU0MTpcdCAqL1xuIDU0MjpcdGludCBtd2lmaWV4X3NlbmRfY21kKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHUxNiBjbWRfbm8sXG4gNTQzOlx0XHRcdCAgICAgdTE2IGNtZF9hY3Rpb24sIHUzMiBjbWRfb2lkLCB2b2lkICpkYXRhX2J1ZiwgYm9vbCBzeW5jKVxuIDU0NDpcdHtcbiA1NDU6XHRcdGludCByZXQ7XG4gNTQ2Olx0XHRzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi1cdTAwM2VhZGFwdGVyO1xuIDU0NzpcdFx0c3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZF9ub2RlO1xuIDU0ODpcdFx0c3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZF9wdHI7XG4gNTQ5Olx0XG4gNTUwOlx0XHRpZiAoIWFkYXB0ZXIpIHtcbiA1NTE6XHRcdFx0cHJfZXJyKFwmIzM0O1BSRVBfQ01EOiBhZGFwdGVyIGlzIE5VTExcXG5cJiMzNDspO1xuIDU1MjpcdFx0XHRyZXR1cm4gLTE7XG4gNTUzOlx0XHR9XG4gNTU0Olx0XG4gNTU1Olx0XHRpZiAodGVzdF9iaXQoTVdJRklFWF9JU19TVVNQRU5ERUQsIFx1MDAyNmFkYXB0ZXItXHUwMDNld29ya19mbGFncykpIHtcbiA1NTY6XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXG4gNTU3Olx0XHRcdFx0ICAgIFwmIzM0O1BSRVBfQ01EOiBkZXZpY2UgaW4gc3VzcGVuZGVkIHN0YXRlXFxuXCYjMzQ7KTtcbiA1NTg6XHRcdFx0cmV0dXJuIC0xO1xuIDU1OTpcdFx0fVxuIDU2MDpcdFxuIDU2MTpcdFx0aWYgKHRlc3RfYml0KE1XSUZJRVhfSVNfSFNfRU5BQkxJTkcsIFx1MDAyNmFkYXB0ZXItXHUwMDNld29ya19mbGFncykgXHUwMDI2XHUwMDI2XG4gNTYyOlx0XHQgICAgY21kX25vICE9IEhvc3RDbWRfQ01EXzgwMl8xMV9IU19DRkdfRU5IKSB7XG4gNTYzOlx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuIDU2NDpcdFx0XHRcdCAgICBcJiMzNDtQUkVQX0NNRDogaG9zdCBlbnRlcmluZyBzbGVlcCBzdGF0ZVxcblwmIzM0Oyk7XG4gNTY1Olx0XHRcdHJldHVybiAtMTtcbiA1NjY6XHRcdH1cbiA1Njc6XHRcbiA1Njg6XHRcdGlmICh0ZXN0X2JpdChNV0lGSUVYX1NVUlBSSVNFX1JFTU9WRUQsIFx1MDAyNmFkYXB0ZXItXHUwMDNld29ya19mbGFncykpIHtcbiA1Njk6XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODQwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgU1RBIEV2ZW50IEhhbmRsaW5nIGluIG13aWZpZXhfcHJvY2Vzc19zdGFfZXZlbnQqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gYG13aWZpZXhfcHJvY2Vzc19zdGFfZXZlbnRgLiBTdGFuZGFyZCBTdGF0aW9uIChTVEEpIGV2ZW50cy4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBiZSB0aGUgZm9jYWwgcG9pbnQgZm9yIGhhbmRsaW5nIGEgdmFyaWV0eSBvZiBTVEEtcmVsYXRlZCBldmVudHMuIEJ1dCB3aGF0IEkgbmVlZCB0byBwaW5wb2ludCBpcyBob3cgdGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgYW55IHNjYW4gcmVzdWx0cyB0aGF0IG1heSBiZSBhc3NvY2lhdGVkIHdpdGggaXQuIElzIHRoaXMgd2hlcmUgdGhlIGluY29taW5nIHNjYW4gcmVzdWx0cyBnZXQgcGFyc2VkIG9yIHVzZWQ/IEl04oCZcyBsb2dpY2FsIHRoYXQgYW4gU1RBIGV2ZW50IGhhbmRsZXIgd291bGQgbmVlZCB0byBkZWFsIHdpdGggc2NhbiBkYXRhIGV2ZW50dWFsbHksIGJ1dCBJIG11c3Qga25vdyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciB0aGUgaW1tZWRpYXRlIGhhbmRsaW5nLCBvciBpZiBpdCBkaXNwYXRjaGVzIHRoZSBzY2FuIHJlc3VsdHMgdG8gb3RoZXIgbW9kdWxlcyBmb3IgZnVydGhlciBwcm9jZXNzaW5nLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIGNvZGUgZmxvdyBoZXJlIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X3Byb2Nlc3Nfc3RhX2V2ZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY21kZXZ0LmM9NDcwPWludCBtd2lmaWV4X3Byb2Nlc3NfZXZlbnQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY21kZXZ0LmMtNTIxLVx0ZWxzZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NtZGV2dC5jOjUyMjpcdFx0cmV0ID0gbXdpZmlleF9wcm9jZXNzX3N0YV9ldmVudChwcml2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jbWRldnQuYy01MjMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xMTQzPWludCBtd2lmaWV4X2hhbmRsZV91YXBfcnhfZm9yd2FyZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xMTQ0LVx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTE0NTppbnQgbXdpZmlleF9wcm9jZXNzX3N0YV9ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICopO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xMTQ2LWludCBtd2lmaWV4X3Byb2Nlc3NfdWFwX2V2ZW50KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9ldmVudC5jPTU4Nz1td2lmaWV4X2Z3X2R1bXBfaW5mb19ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfZXZlbnQuYy02OTUtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2V2ZW50LmM6Njk2OmludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX2V2ZW50KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2V2ZW50LmMtNjk3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1NjAKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBTVEEgRXZlbnQgUHJvY2Vzc2luZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbXdpZmlleF9wcm9jZXNzX3N0YV9ldmVudGAgZnVuY3Rpb24gd2l0aGluIGBzdGFfZXZlbnQuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCB3aGVuIGl0IGNvbWVzIHRvIGhhbmRsaW5nIHN0YXRpb24tcmVsYXRlZCBldmVudHMg4oCTIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIGZvciBTVEEgYmVoYXZpb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBkcml2ZXIgaXMgcmVzcG9uZGluZyB0byB0aGVzZSBldmVudHMuIFdoYXQgYXJlIHRoZSBrZXkgZGVjaXNpb24gcG9pbnRzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBldmVudCB0eXBlcz8gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIGZ1cnRoZXIgb3B0aW1pemF0aW9uIGNvdWxkIGJlIGFjaGlldmVkLiBNeSBmb2N1cyBpcyBvbiB0aGUgZWZmaWNpZW5jeSBhbmQgcm9idXN0bmVzcyBvZiB0aGUgaGFuZGxpbmcsIGFuZCBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiByYWNlIGNvbmRpdGlvbnMgb3IgYW55IHVudXN1YWwgY29udHJvbCBmbG93LiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIGZ1bmN0aW9uIGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfZXZlbnQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5NjpcdGludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX2V2ZW50KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXG4gNjk3Olx0e1xuIDY5ODpcdFx0c3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtXHUwMDNlYWRhcHRlcjtcbiA2OTk6XHRcdGludCByZXQgPSAwLCBpO1xuIDcwMDpcdFx0dTMyIGV2ZW50Y2F1c2UgPSBhZGFwdGVyLVx1MDAzZWV2ZW50X2NhdXNlO1xuIDcwMTpcdFx0dTE2IGN0cmwsIHJlYXNvbl9jb2RlO1xuIDcwMjpcdFx0dTggaWJzc19zdGFfYWRkcltFVEhfQUxFTl07XG4gNzAzOlx0XHRzdHJ1Y3QgbXdpZmlleF9zdGFfbm9kZSAqc3RhX3B0cjtcbiA3MDQ6XHRcbiA3MDU6XHRcdHN3aXRjaCAoZXZlbnRjYXVzZSkge1xuIDcwNjpcdFx0Y2FzZSBFVkVOVF9EVU1NWV9IT1NUX1dBS0VVUF9TSUdOQUw6XG4gNzA3Olx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuIDcwODpcdFx0XHRcdCAgICBcJiMzNDtpbnZhbGlkIEVWRU5UOiBEVU1NWV9IT1NUX1dBS0VVUF9TSUdOQUwsIGlnbm9yZSBpdFxcblwmIzM0Oyk7XG4gNzA5Olx0XHRcdGJyZWFrO1xuIDcxMDpcdFx0Y2FzZSBFVkVOVF9MSU5LX1NFTlNFRDpcbiA3MTE6XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVZFTlQsIFwmIzM0O2V2ZW50OiBMSU5LX1NFTlNFRFxcblwmIzM0Oyk7XG4gNzEyOlx0XHRcdGlmICghbmV0aWZfY2Fycmllcl9vayhwcml2LVx1MDAzZW5ldGRldikpXG4gNzEzOlx0XHRcdFx0bmV0aWZfY2Fycmllcl9vbihwcml2LVx1MDAzZW5ldGRldik7XG4gNzE0Olx0XHRcdG13aWZpZXhfd2FrZV91cF9uZXRfZGV2X3F1ZXVlKHByaXYtXHUwMDNlbmV0ZGV2LCBhZGFwdGVyKTtcbiA3MTU6XHRcdFx0YnJlYWs7XG4gNzE2Olx0XG4gNzE3Olx0XHRjYXNlIEVWRU5UX0RFQVVUSEVOVElDQVRFRDpcbiA3MTg6XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVZFTlQsIFwmIzM0O2V2ZW50OiBEZWF1dGhlbnRpY2F0ZWRcXG5cJiMzNDspO1xuIDcxOTpcdFx0XHRpZiAocHJpdi1cdTAwM2V3cHMuc2Vzc2lvbl9lbmFibGUpIHtcbiA3MjA6XHRcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBJTkZPLFxuIDcyMTpcdFx0XHRcdFx0ICAgIFwmIzM0O2luZm86IHJlY2VpdmUgZGVhdXRoIGV2ZW50IGluIHdwcyBzZXNzaW9uXFxuXCYjMzQ7KTtcbiA3MjI6XHRcdFx0XHRicmVhaztcbiA3MjM6XHRcdFx0fVxuIDcyNDpcdFx0XHRhZGFwdGVyLVx1MDAzZWRiZy5udW1fZXZlbnRfZGVhdXRoJiM0MzsmIzQzOztcbiA3MjU6XHRcdFx0aWYgKHByaXYtXHUwMDNlbWVkaWFfY29ubmVjdGVkKSB7XG4gNzI2Olx0XHRcdFx0cmVhc29uX2NvZGUgPVxuIDcyNzpcdFx0XHRcdFx0Z2V0X3VuYWxpZ25lZF9sZTE2KGFkYXB0ZXItXHUwMDNlZXZlbnRfYm9keSk7XG4gNzI4Olx0XHRcdFx0bXdpZmlleF9yZXNldF9jb25uZWN0X3N0YXRlKHByaXYsIHJlYXNvbl9jb2RlLCB0cnVlKTtcbiA3Mjk6XHRcdFx0fVxuIDczMDpcdFx0XHRicmVhaztcbiA3MzE6XHRcbiA3MzI6XHRcdGNhc2UgRVZFTlRfRElTQVNTT0NJQVRFRDpcbiA3MzM6XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVZFTlQsIFwmIzM0O2V2ZW50OiBEaXNhc3NvY2lhdGVkXFxuXCYjMzQ7KTtcbiA3MzQ6XHRcdFx0aWYgKHByaXYtXHUwMDNld3BzLnNlc3Npb25fZW5hYmxlKSB7XG4gNzM1Olx0XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgSU5GTyxcbiA3MzY6XHRcdFx0XHRcdCAgICBcJiMzNDtpbmZvOiByZWNlaXZlIGRpc2Fzc29jIGV2ZW50IGluIHdwcyBzZXNzaW9uXFxuXCYjMzQ7KTtcbiA3Mzc6XHRcdFx0XHRicmVhaztcbiA3Mzg6XHRcdFx0fVxuIDczOTpcdFx0XHRhZGFwdGVyLVx1MDAzZWRiZy5udW1fZXZlbnRfZGlzYXNzb2MmIzQzOyYjNDM7O1xuIDc0MDpcdFx0XHRpZiAocHJpdi1cdTAwM2VtZWRpYV9jb25uZWN0ZWQpIHtcbiA3NDE6XHRcdFx0XHRyZWFzb25fY29kZSA9XG4gNzQyOlx0XHRcdFx0XHRnZXRfdW5hbGlnbmVkX2xlMTYoYWRhcHRlci1cdTAwM2VldmVudF9ib2R5KTtcbiA3NDM6XHRcdFx0XHRtd2lmaWV4X3Jlc2V0X2Nvbm5lY3Rfc3RhdGUocHJpdiwgcmVhc29uX2NvZGUsIHRydWUpO1xuIDc0NDpcdFx0XHR9XG4gNzQ1Olx0XHRcdGJyZWFrO1xuIDc0NjpcdFxuIDc0NzpcdFx0Y2FzZSBFVkVOVF9MSU5LX0xPU1Q6XG4gNzQ4Olx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVWRU5ULCBcJiMzNDtldmVudDogTGluayBsb3N0XFxuXCYjMzQ7KTtcbiA3NDk6XHRcdFx0YWRhcHRlci1cdTAwM2VkYmcubnVtX2V2ZW50X2xpbmtfbG9zdCYjNDM7JiM0Mzs7XG4gNzUwOlx0XHRcdGlmIChwcml2LVx1MDAzZW1lZGlhX2Nvbm5lY3RlZCkge1xuIDc1MTpcdFx0XHRcdHJlYXNvbl9jb2RlID1cbiA3NTI6XHRcdFx0XHRcdGdldF91bmFsaWduZWRfbGUxNihhZGFwdGVyLVx1MDAzZWV2ZW50X2JvZHkpO1xuIDc1MzpcdFx0XHRcdGlmIChhZGFwdGVyLVx1MDAzZWhvc3RfbWxtZV9lbmFibGVkKSB7XG4gNzU0Olx0XHRcdFx0XHRhZGFwdGVyLVx1MDAzZXByaXZfbGlua19sb3N0ID0gcHJpdjtcbiA3NTU6XHRcdFx0XHRcdGFkYXB0ZXItXHUwMDNlaG9zdF9tbG1lX2xpbmtfbG9zdCA9IHRydWU7XG4gNzU2Olx0XHRcdFx0XHRxdWV1ZV93b3JrKGFkYXB0ZXItXHUwMDNlaG9zdF9tbG1lX3dvcmtxdWV1ZSxcbiA3NTc6XHRcdFx0XHRcdFx0ICAgXHUwMDI2YWRhcHRlci1cdTAwM2Vob3N0X21sbWVfd29yayk7XG4gNzU4Olx0XHRcdFx0fSBlbHNlIHtcbiA3NTk6XHRcdFx0XHRcdG13aWZpZXhfcmVzZXRfY29ubmVjdF9zdGF0ZShwcml2LCByZWFzb25fY29kZSxcbiA3NjA6XHRcdFx0XHRcdFx0XHRcdCAgICB0cnVlKTtcbiA3NjE6XHRcdFx0XHR9XG4gNzYyOlx0XHRcdH1cbiA3NjM6XHRcdFx0YnJlYWs7XG4gNzY0Olx0XG4gNzY1Olx0XHRjYXNlIEVWRU5UX1BTX1NMRUVQOlxuIDc2NjpcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFVkVOVCwgXCYjMzQ7aW5mbzogRVZFTlQ6IFNMRUVQXFxuXCYjMzQ7KTtcbiA3Njc6XHRcbiA3Njg6XHRcdFx0YWRhcHRlci1cdTAwM2Vwc19zdGF0ZSA9IFBTX1NUQVRFX1BSRV9TTEVFUDtcbiA3Njk6XHRcbiA3NzA6XHRcdFx0bXdpZmlleF9jaGVja19wc19jb25kKGFkYXB0ZXIpO1xuIDc3MTpcdFx0XHRicmVhaztcbiA3NzI6XHRcbiA3NzM6XHRcdGNhc2UgRVZFTlRfUFNfQVdBS0U6XG4gNzc0Olx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVWRU5ULCBcJiMzNDtpbmZvOiBFVkVOVDogQVdBS0VcXG5cJiMzNDspO1xuIDc3NTpcdFx0XHRpZiAoIWFkYXB0ZXItXHUwMDNlcHBzX3VhcHNkX21vZGUgXHUwMDI2XHUwMDI2XG4gNzc2Olx0XHRcdCAgICAocHJpdi1cdTAwM2Vwb3J0X29wZW4gfHxcbiA3Nzc6XHRcdFx0ICAgICAocHJpdi1cdTAwM2Vic3NfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykpIFx1MDAyNlx1MDAyNlxuIDc3ODpcdFx0XHQgICAgcHJpdi1cdTAwM2VtZWRpYV9jb25uZWN0ZWQgXHUwMDI2XHUwMDI2IGFkYXB0ZXItXHUwMDNlc2xlZXBfcGVyaW9kLnBlcmlvZCkge1xuIDc3OTpcdFx0XHRcdGFkYXB0ZXItXHUwMDNlcHBzX3VhcHNkX21vZGUgPSB0cnVlO1xuIDc4MDpcdFx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVWRU5ULFxuIDc4MTpcdFx0XHRcdFx0ICAgIFwmIzM0O2V2ZW50OiBQUFMvVUFQU0QgbW9kZSBhY3RpdmF0ZWRcXG5cJiMzNDspO1xuIDc4MjpcdFx0XHR9XG4gNzgzOlx0XHRcdGFkYXB0ZXItXHUwMDNldHhfbG9ja19mbGFnID0gZmFsc2U7XG4gNzg0Olx0XHRcdGlmIChhZGFwdGVyLVx1MDAzZXBwc191YXBzZF9tb2RlIFx1MDAyNlx1MDAyNiBhZGFwdGVyLVx1MDAzZWdlbl9udWxsX3BrdCkge1xuIDc4NTpcdFx0XHRcdGlmIChtd2lmaWV4X2NoZWNrX2xhc3RfcGFja2V0X2luZGljYXRpb24ocHJpdikpIHtcbiA3ODY6XHRcdFx0XHRcdGlmIChhZGFwdGVyLVx1MDAzZWRhdGFfc2VudCB8fFxuIDc4NzpcdFx0XHRcdFx0ICAgIChhZGFwdGVyLVx1MDAzZWlmX29wcy5pc19wb3J0X3JlYWR5IFx1MDAyNlx1MDAyNlxuIDc4ODpcdFx0XHRcdFx0ICAgICAhYWRhcHRlci1cdTAwM2VpZl9vcHMuaXNfcG9ydF9yZWFkeShwcml2KSkpIHtcbiA3ODk6XHRcdFx0XHRcdFx0YWRhcHRlci1cdTAwM2Vwc19zdGF0ZSA9IFBTX1NUQVRFX0FXQUtFO1xuIDc5MDpcdFx0XHRcdFx0XHRhZGFwdGVyLVx1MDAzZXBtX3dha2V1cF9jYXJkX3JlcSA9IGZhbHNlO1xuIDc5MTpcdFx0XHRcdFx0XHRhZGFwdGVyLVx1MDAzZXBtX3dha2V1cF9md190cnkgPSBmYWxzZTtcbiA3OTI6XHRcdFx0XHRcdFx0dGltZXJfZGVsZXRlKFx1MDAyNmFkYXB0ZXItXHUwMDNld2FrZXVwX3RpbWVyKTtcbiA3OTM6XHRcdFx0XHRcdFx0YnJlYWs7XG4gNzk0Olx0XHRcdFx0XHR9XG4gNzk1Olx0XHRcdFx0XHRpZiAoIW13aWZpZXhfc2VuZF9udWxsX3BhY2tldFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQ4MAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUcmFjaW5nIHRoZSBGdW5jdGlvbiBDYWxsIENoYWluKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYG13aWZpZXhgIGNvZGUgYWdhaW4sIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBuZXR3b3JrIGNvbXBhdGliaWxpdHkgaXMgYWN0dWFsbHkgZGV0ZXJtaW5lZC4gSXQgbG9va3MgbGlrZSBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYCBpcyBhIGtleSBmdW5jdGlvbiBoZXJlLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBieSBgbXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnRgIGFuZCBgbXdpZmlleF9pc193cGFfb3VpX3ByZXNlbnRgLCB3aGljaCwgaW4gdHVybiwgYXJlIGNhbGxlZCBmcm9tIGBtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZWAuIFRoYXQgbWFrZXMgc2Vuc2U7IGNoZWNraW5nIGZvciBPVUkgcHJlc2VuY2UgaXMgYSBnb29kIGluZGljYXRvciBvZiBjb21wYXRpYmlsaXR5LCBlc3BlY2lhbGx5IHdpdGggV1BBL1JTTiBzZWN1cml0eS4KCk5vdywgYG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlYCBmZWVkcyBpbnRvIGBtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eWAuIFRoaXMgb25lJiMzOTtzIGludGVyZXN0aW5nLCBhbmQgaXMgd2hlcmUgdGhpbmdzIHN0YXJ0IHRvIGdldCBtb3JlIGNvbnRleHR1YWxseSByZWxldmFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93ICp0aGlzKiBmdW5jdGlvbiBpcyB1c2VkLgoKQWxyaWdodCwgYG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5YCBpcyBjYWxsZWQgYnkgYG13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtc2AgYW5kIGBtd2lmaWV4X2Jzc19zdGFydGAuIGBtd2lmaWV4X2Jzc19zdGFydGAgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MgbGlrZWx5IGEgZnVuY3Rpb24gdGhhdCBpbml0aWF0ZXMgdGhlIGNvbm5lY3Rpb24gdG8gYSBuZXR3b3JrLiBIb3dldmVyLCBgbXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zYCBpcyBhbHNvIGNhbGxpbmcgdGhpcy4gSSB0aG91Z2h0IHRoYXQgZnVuY3Rpb24gd2FzIGNhbGxlZCBieSBgbXdpZmlleF9jbWRfODAyXzExX3NjYW5gLCBidXQgSSBzaG91bGQgdmVyaWZ5IHRoYXQuIExldCBtZSBkb3VibGUtY2hlY2sgaG93IGBtd2lmaWV4X3VwZGF0ZV9jdXJyX2Jzc19wYXJhbXNgIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0xNjU5PXN0YXRpYyBpbnQgbXdpZmlleF9zYXZlX2hpZGRlbl9zc2lkX2NoYW5uZWxzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNzAyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoxNzAzOnN0YXRpYyBpbnQgbXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE3MDQtXHRcdFx0XHRcdCAgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MTc0Mz1td2lmaWV4X3BhcnNlX3NpbmdsZV9yZXNwb25zZV9idWYoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKipic3NfaW5mbyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE4OTAtXHRcdFx0XHRcdCAgICBFVEhfQUxFTikpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjE4OTE6XHRcdFx0XHRcdG13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtcyhwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xODkyLVx0XHRcdFx0XHRcdFx0XHQgICAgICAgYnNzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzNTYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBXaS1GaSBTY2FuIFJlc3BvbnNlKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgcHJvY2Vzc2luZyBoYXBwZW5pbmcgaW4gdGhlIFdpLUZpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBzY2FuIHJlc3VsdHMuIEkgc2VlIHRoYXQgYG13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1ZmAgZ2V0cyBjYWxsZWQsIGFuZCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGl0cyBvcmlnaW5zOiBlaXRoZXIgYG13aWZpZXhfcmV0XzgwMl8xMV9zY2FuYCBvciBhIHZlcnkgc2ltaWxhciBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIHJlc3BvbnNlIGFmdGVyIGEgV2ktRmkgc2NhbiByZXF1ZXN0LiBUaGF0IGZ1bmN0aW9uIGlzIGNsZWFybHkgYSBrZXkgY29tcG9uZW50IGluIGRpc3NlY3RpbmcgdGhlIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdpcmVsZXNzIGFkYXB0ZXIgYWZ0ZXIgaXQmIzM5O3MgZ29uZSBvdXQgYW5kIGxvb2tlZCBmb3IgYXZhaWxhYmxlIG5ldHdvcmtzLiBJdCYjMzk7cyB0aGUgcG9pbnQgd2hlcmUgd2Ugc3RhcnQgcHVsbGluZyBhcGFydCB0aGF0IHJhdyBidWZmZXIsIGxpa2VseSBmaWxsZWQgd2l0aCA4MDIuMTEgaW5mb3JtYXRpb24gZWxlbWVudHMgKElFcyksIHRvIGV4dHJhY3QgdGhlIG1lYW5pbmdmdWwgZGF0YSBsaWtlIFNTSUQsIGNoYW5uZWwsIHNpZ25hbCBzdHJlbmd0aCwgc2VjdXJpdHkgY2FwYWJpbGl0aWVzLCBhbmQgYWxsIHRoZSBqdWljeSBkZXRhaWxzIHdlIG5lZWQgdG8gcG9wdWxhdGUgb3VyIHNjYW4gcmVzdWx0cy4gSSYjMzk7bSBpbWFnaW5pbmcgaXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgcG90ZW50aWFsbHkgY29tcGxleCB3aXRoIGFsbCB0aGUgcG9zc2libGUgdmFyaWF0aW9ucyBpbiA4MDIuMTEgZnJhbWUgZm9ybWF0cyBhbmQgdmVuZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB0aGlzIHBhcnQgaXMgd2hlcmUgdGhpbmdzIGNhbiBnZXQgdHJpY2t5LCBkZWFsaW5nIHdpdGggYWxsIHRoZSBkaWZmZXJlbnQgd2F5cyB2ZW5kb3JzIGltcGxlbWVudCB0aGluZ3MuIEkgbmVlZCB0byBiZSBzdXJlIGl0IGhhbmRsZXMgZXZlcnl0aGluZyBwcm9wZXJseSwgZW5zdXJpbmcgbm8gZGF0YSBsb3NzIG9yIGNvcnJ1cHRpb24sIGFuZCB0aGF0IGl0IHJlbWFpbnMgZWZmaWNpZW50IGZvciBnb29kIHBlcmZvcm1hbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X3BhcnNlX3NpbmdsZV9yZXNwb25zZV9idWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MTc0Mj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjE3NDM6bXdpZmlleF9wYXJzZV9zaW5nbGVfcmVzcG9uc2VfYnVmKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4ICoqYnNzX2luZm8sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE3NDQtXHRcdFx0XHQgIHUzMiAqYnl0ZXNfbGVmdCwgdTY0IGZ3X3RzZiwgdTggKnJhZGlvX3R5cGUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0yMTAyPWludCBtd2lmaWV4X3JldF84MDJfMTFfc2NhbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMjIyOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM6MjIyOTpcdFx0cmV0ID0gbXdpZmlleF9wYXJzZV9zaW5nbGVfcmVzcG9uc2VfYnVmKHByaXYsIFx1MDAyNmJzc19pbmZvLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0yMjMwLVx0XHRcdFx0XHRcdFx0XHUwMDI2Ynl0ZXNfbGVmdCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTI2MDM9aW50IG13aWZpZXhfaGFuZGxlX2V2ZW50X2V4dF9zY2FuX3JlcG9ydChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMjcxOS1cdFx0fVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoyNzIwOlx0XHRyZXQgPSBtd2lmaWV4X3BhcnNlX3NpbmdsZV9yZXNwb25zZV9idWYocHJpdiwgXHUwMDI2YnNzX2luZm8sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTI3MjEtXHRcdFx0XHRcdFx0XHRcdTAwMjZieXRlc19sZWZ0LCBmd190c2YsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MTY5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQXR0YWNrIFN1cmZhY2U6IFNjYW4gQ29tbWFuZCBIYW5kbGVycyoqCgpPa2F5LCBzbyBgbXdpZmlleF9yZXRfODAyXzExX3NjYW5gIGlzICp0aGUqIGZ1bmN0aW9uIEkgbmVlZCB0byBsb29rIGF0OyBpdCYjMzk7cyB0aGUgY29tbWFuZCByZXNwb25zZSBoYW5kbGVyIGZvciBzY2FuIGNvbW1hbmRzLiBJIGtub3cgdGhhdCBgbXdpZmlleF9oYW5kbGVfZXZlbnRfZXh0X3NjYW5fcmVwb3J0YCBpcyBhbHNvIGltcG9ydGFudCBhcyBpdCBoYW5kbGVzIHNjYW4gcmVwb3J0cy4gQm90aCBvZiB0aGVzZSBhcmUgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGV5IGdldCB0aGVpciBkYXRhIGZyb20gdGhlIGZpcm13YXJlLCB3aGljaCBtZWFucyB0aGF0IEkgY2FuIHBvdGVudGlhbGx5IGZlZWQgdGhlbSBmdXp6aW5nIGRhdGEgdGhyb3VnaCBVU0IuIFRoaXMgY29uZmlybXMgdGhlIG1vZGlmaWVkIGNvZGUgaXMgaW5kZWVkIHJlYWNoYWJsZSBhbmQsIGNydWNpYWxseSwgcHJvY2Vzc2VzICp1bnRydXN0ZWQqIGRhdGEgZGlyZWN0bHkgZnJvbSB0aGUgZGV2aWNlL2Zpcm13YXJlLgoKQ29uc2lkZXJpbmcgdGhpcyBpcyBhIGJ1ZyBmaXggZm9yIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIHBhcnNpbmcgV2ktRmkgSUVzLCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0Fic29sdXRlbHksIHRoaXMgaXMgZnV6ei13b3J0aHkuJiMzNDsgVGhlIHBvdGVudGlhbCBmb3IgYSByZWxpYWJsZSBjcmFzaCBoZXJlIGlzIGhpZ2gsIGFuZCB0aGlzIHNvdW5kcyBsaWtlIGEgZ3JlYXQgdXNlIGNhc2UgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgYE1XSUZJRVhgIGFuZCBgTVdJRklFWF9VU0JgIGFyZSBlbmFibGVkIGZvciB0aGUgdGVzdCBhbmQgZW5zdXJlIEkgZG8gbm90IG5lZ2xlY3QgYW55IHBvdGVudGlhbGx5IHJlbGF0ZWQgY29uZmlncy4KTGV0IG1lIGNoZWNrIHRob3NlIGNvbmZpZ3VyYXRpb25zLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNV0lGSUVYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6Mjpjb25maWcgTVdJRklFWFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjEyOmNvbmZpZyBNV0lGSUVYX1NESU9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTEzLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgU0Q4Nzg2L1NEODc4Ny9TRDg3OTcvU0Q4ODg3L1NEODg5Ny9TRDg5NzcvU0Q4OTc4L1NEODk4Ny9TRDg5OTdcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0yNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjI1OmNvbmZpZyBNV0lGSUVYX1BDSUVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTI2LVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgUENJRSA4NzY2Lzg4OTcvODk5N1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTM2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6Mzc6Y29uZmlnIE1XSUZJRVhfVVNCXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zOC1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFVTQjg3NjYvODc5Ny84OTk3XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MDE5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgVGFyZ2V0IGZvciBGdXp6aW5nOiBBIERlZXAgRGl2ZSBpbnRvIE1XSUZJRVggQ29tcGF0aWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gdGhlIGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCBtb2R1bGVzIGFzIHRoZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgY29udGV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhbmQgaWRlbnRpZnkga2V5IGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaGFzIGxlZCBtZSB0byBhIGZldyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIGZ1bmN0aW9ucywgc28gbGV0JiMzOTtzIHdhbGsgdGhyb3VnaCBteSByZWFzb25pbmcuCgpJbml0aWFsbHksIEkgaWRlbnRpZmllZCBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYCBhbmQgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQ6IGBtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudGAsIGBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudGAuIFRoZXNlIGFyZSB1bHRpbWF0ZWx5IGNhbGxlZCBieSBgbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVgLiBUaGUgZm9jdXMgaXMgdG8gZGV0ZXJtaW5lIG5ldHdvcmsgY29tcGF0aWJpbGl0eS4gSSB0aGVuIGFkZGVkIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWxhdGVkIHRvIHRoZXNlOiBgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlgLCBgbXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zYCwgYW5kIGBtd2lmaWV4X3BhcnNlX3NpbmdsZV9yZXNwb25zZV9idWZgLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlaXIgc3RhdGljIHN0YXR1cy4gSSBjb25maXJtZWQgdGhhdCBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYCwgYG13aWZpZXhfaXNfcnNuX291aV9wcmVzZW50YCwgYG13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50YCwgYG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlYCwgYW5kIGBtd2lmaWV4X3BhcnNlX3NpbmdsZV9yZXNwb25zZV9idWZgIGFyZSBzdGF0aWMsIHdoaWxlIGBtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eWAsIGBtd2lmaWV4X3JldF84MDJfMTFfc2NhbmAsIGFuZCBgbXdpZmlleF9oYW5kbGVfZXZlbnRfZXh0X3NjYW5fcmVwb3J0YCBhcmUgbm90LgoKTmV4dCwgSSBjb21waWxlZCBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgbmVlZCBhdHRlbnRpb246CiogICBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYAoqICAgYG13aWZpZXhfaXNfcnNuX291aV9wcmVzZW50YAoqICAgYG13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50YAoqICAgYG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlYAoqICAgYG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5YAoqICAgYG13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtc2AKKiAgIGBtd2lmaWV4X3BhcnNlX3NpbmdsZV9yZXNwb25zZV9idWZgCiogICBgbXdpZmlleF9yZXRfODAyXzExX3NjYW5gCiogICBgbXdpZmlleF9oYW5kbGVfZXZlbnRfZXh0X3NjYW5fcmVwb3J0YAoKVGhlbiwgSSBsb29rZWQgYXQgdGhlIGNhbGxlcnMgb2YgYG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5YC4gSSBmb3VuZCBgbXdpZmlleF9ic3Nfc3RhcnRgIGluIGBzdGFfaW9jdGwuY2AsIHNvIEkgc2hvdWxkIGFkZCB0aGF0IG9uZS4KCk5vdywgYSBjcnVjaWFsIHBvaW50OiBJcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIHRocm91Z2ggVVNCIGZ1enppbmc/IFRoZSBhbnN3ZXIgaXMgeWVzLiBUaGUgVVNCIGRyaXZlciByZWNlaXZlcyBkYXRhIGZyb20gdGhlIGRldmljZSBpbiB0aGUgZm9ybSBvZiBjb21tYW5kIHJlc3BvbnNlcyBvciBldmVudHMuIFNwZWNpZmljYWxseSwgYG13aWZpZXhfcmV0XzgwMl8xMV9zY2FuYCBoYW5kbGVzIGNvbW1hbmQgcmVzcG9uc2VzIGFuZCBgbXdpZmlleF9oYW5kbGVfZXZlbnRfZXh0X3NjYW5fcmVwb3J0YCBoYW5kbGVzIGV2ZW50cy4gVGhpcyBtZWFucyBib3RoIGFyZSByZWFjaGFibGUgdGhyb3VnaCBlbXVsYXRpb24gb2YgdGhlIFVTQiBkZXZpY2Ugc2VuZGluZyByZXNwb25zZXMgb3IgZXZlbnRzIGZyb20gYSBzY2FuIGNvbW1hbmQuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IGdvb2QgZnV6emluZyB0YXJnZXRzLgoKRmluYWxseSwgbGV0IG1lIHJlLWV2YWx1YXRlIG15IGxpc3QgZm9yIHRoZSBtb3N0IGVmZmVjdGl2ZSBmdXp6aW5nIHNjb3BlLiBgbXdpZmlleF9ic3Nfc3RhcnRgIG1pZ2h0IGJlIHRoZSBlbnRyeSBwb2ludCB0byBmdXp6aW5nIGEgbG90IG9mIHRoZSBjb21wYXRpYmlsaXR5IGNoZWNrcy4gV2hpbGUgaXQmIzM5O3MgY2FsbGVkIHRocm91Z2ggYW4gaW9jdGwvY2ZnODAyMTEgY2FsbGJhY2sgKGxpa2UgZnJvbSBgbXdpZmlleF9zZXRfYnNzX3BhcmFtc2ApLCBpdCBjYWxscyBgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlgIG9uIGEgQlNTIGRlc2NyaXB0b3IuIFRoaXMgQlNTIGRlc2NyaXB0b3IgaXMsIGltcG9ydGFudGx5LCBwb3B1bGF0ZWQgZnJvbSBzY2FuIHJlc3VsdHMuIFNjYW4gcmVzdWx0cywgaW4gdHVybiwgKmNvbWUgZnJvbSB0aGUgZGV2aWNlKi4gU28sIHRoZSBkYXRhIHdpdGhpbiB0aGUgQlNTIGRlc2NyaXB0b3IgaXMgaW5kZWVkIGRldmljZS1jb250cm9sbGVkIGFuZCBmdXp6YWJsZS4KClNvIHRoZSByZWZpbmVkIGZvY3VzIHN5bWJvbHMgYXJlOgoKKiAgIGBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVgCiogICBgbXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnRgCiogICBgbXdpZmlleF9pc193cGFfb3VpX3ByZXNlbnRgCiogICBgbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVgCiogICBgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlgCiogICBgbXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zYAoqICAgYG13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1ZmAKKiAgIGBtd2lmaWV4X3JldF84MDJfMTFfc2NhbmAKKiAgIGBtd2lmaWV4X2hhbmRsZV9ldmVudF9leHRfc2Nhbl9yZXBvcnRgCiogICBgbXdpZmlleF9ic3Nfc3RhcnRgCgpOb3csIGxldCYjMzk7cyBleHBsb3JlIGBtd2lmaWV4X2Jzc19zdGFydGAgaW4gZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X2Jzc19zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmM9MjI2Nj1td2lmaWV4X2NmZzgwMjExX2Fzc29jKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHNpemVfdCBzc2lkX2xlbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYy0yNDA1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmM6MjQwNjpcdHJldCA9IG13aWZpZXhfYnNzX3N0YXJ0KHByaXYsIGJzcywgXHUwMDI2cmVxX3NzaWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmMtMjQwNy1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmM9NDQyOD1td2lmaWV4X2NmZzgwMjExX2Fzc29jaWF0ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jLTQ1MjAtXHRjZmc4MDIxMV9yZWZfYnNzKGFkYXB0ZXItXHUwMDNld2lwaHksIHJlcS1cdTAwM2Vic3MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmM6NDUyMTpcdHJldCA9IG13aWZpZXhfYnNzX3N0YXJ0KHByaXYsIHJlcS1cdTAwM2Vic3MsIFx1MDAyNnJlcV9zc2lkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jLTQ1MjItXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xNDc4PWludCBtd2lmaWV4X3dhaXRfcXVldWVfY29tcGxldGUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTQ3OS1cdFx0XHRcdHN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRfcXVldWVkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTQ4MDppbnQgbXdpZmlleF9ic3Nfc3RhcnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNDgxLVx0XHQgICAgICBzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqcmVxX3NzaWQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYz0yNDk9c3RhdGljIGludCBtd2lmaWV4X3Byb2Nlc3NfY291bnRyeV9pZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy0zMTctICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM6MzE4OmludCBtd2lmaWV4X2Jzc19zdGFydChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtMzE5LVx0XHQgICAgICBzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqcmVxX3NzaWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NzcxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1hcnZlbGwgV2ktRmkgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYG13aWZpZXhfYnNzX3N0YXJ0YCB1c2VzIGEgYHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzc2AuIFRoaXMgaXMgcG9wdWxhdGVkIGJ5IGBtYWM4MDIxMS9jZmc4MDIxMWAsIHJpZ2h0PyBBbmQgdGhhdCBpbmZvcm1hdGlvbiAqY29tZXMgZnJvbSogdGhlIHNjYW4gcmVzdWx0cyBwcm92aWRlZCBieSB0aGUgZHJpdmVyIGl0c2VsZiwgaGFuZGVkIG9mZiB0byBgY2ZnODAyMTFgLCB0aGVuIHBhc3NlZCBiYWNrIGR1cmluZyBhc3NvY2lhdGlvbi4gR290IGl0IOKAkyB0aGUgZGV2aWNlIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIEJTUyBkYXRhLiBUaGF0IGNvbmZpcm1zIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGRhdGEgZmxvdywgd2hpY2ggaXMgaGVscGZ1bC4gQW5kIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUsIGFzIGV4cGVjdGVkLCBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBXZSBoYXZlOgoKKiAgIGBNV0lGSUVYYAoqICAgYE1XSUZJRVhfVVNCYAoqICAgYE1XSUZJRVhfU0RJT2AKKiAgIGBNV0lGSUVYX1BDSUVgCgpGb3IgdGVzdGluZyB0aGUgY29yZSBsb2dpYyB0aHJvdWdoIFVTQiBmdXp6aW5nLCBpdCBzZWVtcyBsaWtlIGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCBzaG91bGQgYmUgZW5vdWdoLiBUaGF0JiMzOTtsbCBrZWVwIHRoZSBzY29wZSBtYW5hZ2VhYmxlIGZvciBub3cuCgpCdXQgd2FpdCBhIHNlY29uZC4uLiBiZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZy4gRG9lcyBgTVdJRklFWF9VU0JgIGRlcGVuZCBvbiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnM/IEJlc3QgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZ2AgZmlsZSBxdWlja2x5LCBqdXN0IHRvIGJlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gVGhhdCBjb3VsZCBpbXBhY3Qgb3VyIHRlc3Rpbmcgc3RyYXRlZ3kuIEkmIzM5O2xsIHRha2UgYSBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE1XSUZJRVhcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXJcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIE1hcnZlbGxcbiAgIDc6XHRcdCAgODAyLjExbi9hYyBjaGlwc2V0cy5cbiAgIDg6XHRcbiAgIDk6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWRcbiAgMTA6XHRcdCAgbXdpZmlleC5cbiAgMTE6XHRcbiAgMTI6XHRjb25maWcgTVdJRklFWF9TRElPXG4gIDEzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBTRDg3ODYvU0Q4Nzg3L1NEODc5Ny9TRDg4ODcvU0Q4ODk3L1NEODk3Ny9TRDg5NzgvU0Q4OTg3L1NEODk5N1wmIzM0O1xuICAxNDpcdFx0ZGVwZW5kcyBvbiBNV0lGSUVYIFx1MDAyNlx1MDAyNiBNTUNcbiAgMTU6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMTY6XHRcdHNlbGVjdCBXQU5UX0RFVl9DT1JFRFVNUFxuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gTWFydmVsbFxuICAxOTpcdFx0ICA4Nzg2Lzg3ODcvODc5Ny84ODg3Lzg4OTcvODk3Ny84OTc4Lzg5ODcvODk5NyBjaGlwc2V0cyB3aXRoXG4gIDIwOlx0XHQgIFNESU8gaW50ZXJmYWNlLiBTRDg5NzggaXMgYWxzbyBrbm93biBhcyBOWFAgSVc0MTYuXG4gIDIxOlx0XG4gIDIyOlx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXG4gIDIzOlx0XHQgIG13aWZpZXhfc2Rpby5cbiAgMjQ6XHRcbiAgMjU6XHRjb25maWcgTVdJRklFWF9QQ0lFXG4gIDI2Olx0XHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBQQ0lFIDg3NjYvODg5Ny84OTk3XCYjMzQ7XG4gIDI3Olx0XHRkZXBlbmRzIG9uIE1XSUZJRVggXHUwMDI2XHUwMDI2IFBDSVxuICAyODpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAyOTpcdFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBNYXJ2ZWxsXG4gIDMyOlx0XHQgIDg3NjYvODg5Ny84OTk3IGNoaXBzZXRzIHdpdGggUENJZSBpbnRlcmZhY2UuXG4gIDMzOlx0XG4gIDM0Olx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXG4gIDM1Olx0XHQgIG13aWZpZXhfcGNpZS5cbiAgMzY6XHRcbiAgMzc6XHRjb25maWcgTVdJRklFWF9VU0JcbiAgMzg6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFVTQjg3NjYvODc5Ny84OTk3XCYjMzQ7XG4gIDM5Olx0XHRkZXBlbmRzIG9uIE1XSUZJRVggXHUwMDI2XHUwMDI2IFVTQlxuICA0MDpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICA0MTpcdFx0aGVscFxuICA0MjpcdFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gTWFydmVsbFxuICA0MzpcdFx0ICA4Nzk3Lzg5OTcgY2hpcHNldCB3aXRoIFVTQiBpbnRlcmZhY2UuXG4gIDQ0Olx0XG4gIDQ1Olx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXG4gIDQ2Olx0XHQgIG13aWZpZXhfdXNiLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTEwMgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDQ3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogTVdJRklFWCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7dmUgemVyb2VkIGluIG9uIHRoZSBgTVdJRklFWGAgYW5kIGBNV0lGSUVYX1VTQmAgbW9kdWxlcy4gVGhleSYjMzk7cmUgY2xlYXJseSB0aGUga2V5IHBsYXllcnMgaGVyZSwgcmVseWluZyBvbiBgQ0ZHODAyMTFgIGFuZCB0aGUgYFVTQmAgc3Vic3lzdGVtLCB3aGljaCBhcmUgdXN1YWxseSBiYWtlZCBpbnRvIFN5emthbGxlciBjb25maWd1cmF0aW9ucywgbWFraW5nIHRoZW0gcHJldHR5IGFjY2Vzc2libGUgdGFyZ2V0cy4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBzdHJhdGVneS4gVGhpcyBpcyB3aGF0JiMzOTtzIGxvb2tpbmcgcHJvbWlzaW5nOgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFllcywgYWJzb2x1dGVseS4gVGhpcyBpcyBwcm9taXNpbmcuCiogICAqKkZvY3VzIFN5bWJvbHM6KiogV2UgaGF2ZSBhIHNvbGlkIGxpc3Qgb2YgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGVzZSBpbiBtb3JlIGRldGFpbCwgYnV0IHRoZSBpbml0aWFsIGltcHJlc3Npb25zIGFyZSBnb29kLiBUaGV5JiMzOTtyZSByZWxhdGVkIHRvIHBhcnNpbmcgV2ktRmkgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcyksIGhhbmRsaW5nIHNjYW4gcmVzdWx0cywgYW5kIG1hbmFnaW5nIG5ldHdvcmsgY29tcGF0aWJpbGl0eSwgYWxsIG9mIHdoaWNoIGFyZSBjb21tb24gZnV6emluZyB0YXJnZXRzOgogICAgKiAgIGBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVgCiAgICAqICAgYG13aWZpZXhfaXNfcnNuX291aV9wcmVzZW50YAogICAgKiAgIGBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudGAKICAgICogICBgbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVgCiAgICAqICAgYG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5YAogICAgKiAgIGBtd2lmaWV4X3VwZGF0ZV9jdXJyX2Jzc19wYXJhbXNgCiAgICAqICAgYG13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1ZmAKICAgICogICBgbXdpZmlleF9yZXRfODAyXzExX3NjYW5gCiAgICAqICAgYG13aWZpZXhfaGFuZGxlX2V2ZW50X2V4dF9zY2FuX3JlcG9ydGAKICAgICogICBgbXdpZmlleF9ic3Nfc3RhcnRgCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogVGhlIGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCBjb25maWd1cmF0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQuCiogICAqKlJlYXNvbmluZzoqKiBUaGUgaW5pdGlhbCBtb3RpdmF0aW9uIHN0ZW1zIGZyb20gYSBwYXRjaCB0aGF0IGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5IGluIGBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVgIHdoZW4gZGVhbGluZyB3aXRoIFdpLUZpIElFcy4gQmVjYXVzZSB0aGUgZHJpdmVyIG9wZXJhdGVzIG92ZXIgVVNCLCB0aGlzIHN1Z2dlc3RzIHRoZSBmaXJtd2FyZSByZXNwb25zZXMgY2FuIGJlIGZ1enplZCB2aWEgdGhlIFVTQiBzdWJzeXN0ZW0uIFRoYXQmIzM5O3MgYSBnb29kIGF0dGFjayBzdXJmYWNlLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBjYWxsIGdyYXBocyB0byBlbnN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJJiMzOTt2ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGF0IGBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVgIGlzIG9ubHkgY2FsbGVkIGJ5IGBtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudGAgYW5kIGBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudGAuIGBtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudGAgZ2V0cyBjYWxsZWQgYnkgYG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlYCwgc28gd2UgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhpcyBhcmVhLiBXZSBuZWVkIHRvIGNoZWNrIGlmIGBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudGAgaXMgY2FsbGVkIGVsc2V3aGVyZS4gVGhhdCBoZWxwcyB1cyBzb2xpZGlmeSB0aGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXR0YWNrIHN1cmZhY2UsIGJ5IG1hcHBpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IHVsdGltYXRlbHkgY2FsbCB0aGUgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0xNzY9c3RhdGljIHU4XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjE3Nzptd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudChzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYywgdTMyIGNpcGhlcilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTc4LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTM0ND1td2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMzg5LVx0XHRcdCAgICAgYnNzX2Rlc2MtXHUwMDNlYmNuX2h0X2NhcCkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjM5MDpcdFx0XHQgICAgIW13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50KGJzc19kZXNjLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0zOTEtXHRcdFx0XHRcdFx0XHQgQ0lQSEVSX1NVSVRFX0NDTVApKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTM5Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM6MzkzOlx0XHRcdFx0aWYgKG13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTM5NC1cdFx0XHRcdFx0XHQoYnNzX2Rlc2MsIENJUEhFUl9TVUlURV9US0lQKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjYwOQoJCQkJCQkJb3V0cHV0OiAyNTUKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgZXhwcmVzc2VkIGFzIHRob3VnaCBJJiMzOTttIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkFuYWx5c2lzIENvbXBsZXRlOiBGb2N1cyBvbiBDb21wYXRpYmlsaXR5IENoZWNrKioKCkFscmlnaHQsIHRoYXQgd2FzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhbmFseXNpcy4gSSYjMzk7dmUgZHJpbGxlZCBkb3duLCBhbmQgaXQmIzM5O3MgY2xlYXIgdGhlIHJlbGV2YW50IGlzc3VlIHJlc2lkZXMgKmV4Y2x1c2l2ZWx5KiB3aXRoaW4gYG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlYC4gTm90aGluZyBlbHNlIHNlZW1zIHRvIGZhY3RvciBpbnRvIHRoaXMuIE15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiBpcyBzb2xpZCwgYW5kIEkmIzM5O20gY29uZmlkZW50IGluIG15IGNvbmNsdXNpb25zLiBJJiMzOTt2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbi4gVGltZSB0byBtb3ZlIGZvcndhcmQg4oCTIEkmIzM5O2xsIGluaXRpYXRlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuIExldCYjMzk7cyBnZXQgdGhlc2UgZmluZGluZ3MgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNV0lGSUVYJiMzNDssCiAgICAmIzM0O01XSUZJRVhfVVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXdpZmlleF9zZWFyY2hfb3VpX2luX2llJiMzNDssCiAgICAmIzM0O213aWZpZXhfaXNfcnNuX291aV9wcmVzZW50JiMzNDssCiAgICAmIzM0O213aWZpZXhfaXNfd3BhX291aV9wcmVzZW50JiMzNDssCiAgICAmIzM0O213aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlJiMzNDssCiAgICAmIzM0O213aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5JiMzNDssCiAgICAmIzM0O213aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtcyYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3BhcnNlX3NpbmdsZV9yZXNwb25zZV9idWYmIzM0OywKICAgICYjMzQ7bXdpZmlleF9yZXRfODAyXzExX3NjYW4mIzM0OywKICAgICYjMzQ7bXdpZmlleF9oYW5kbGVfZXZlbnRfZXh0X3NjYW5fcmVwb3J0JiMzNDssCiAgICAmIzM0O213aWZpZXhfYnNzX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYCB3aGVuIHBhcnNpbmcgV2ktRmkgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gdGhlIGRyaXZlciBwcm9jZXNzZXMgc2NhbiByZXN1bHRzIG9yIGV2ZW50cyBmcm9tIHRoZSBmaXJtd2FyZS4gU2luY2UgdGhlIG13aWZpZXggZHJpdmVyIHN1cHBvcnRzIFVTQiwgdGhlIGZpcm13YXJlIHJlc3BvbnNlcyBjYW4gYmUgZnV6emVkIHZpYSB0aGUgVVNCIHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVdJRklFWCYjMzQ7LAogICAgJiMzNDtNV0lGSUVYX1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O213aWZpZXhfc2VhcmNoX291aV9pbl9pZSYjMzQ7LAogICAgJiMzNDttd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudCYjMzQ7LAogICAgJiMzNDttd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudCYjMzQ7LAogICAgJiMzNDttd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZSYjMzQ7LAogICAgJiMzNDttd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eSYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3VwZGF0ZV9jdXJyX2Jzc19wYXJhbXMmIzM0OywKICAgICYjMzQ7bXdpZmlleF9wYXJzZV9zaW5nbGVfcmVzcG9uc2VfYnVmJiMzNDssCiAgICAmIzM0O213aWZpZXhfcmV0XzgwMl8xMV9zY2FuJiMzNDssCiAgICAmIzM0O213aWZpZXhfaGFuZGxlX2V2ZW50X2V4dF9zY2FuX3JlcG9ydCYjMzQ7LAogICAgJiMzNDttd2lmaWV4X2Jzc19zdGFydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYG13aWZpZXhfc2VhcmNoX291aV9pbl9pZWAgd2hlbiBwYXJzaW5nIFdpLUZpIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB3aGVuIHRoZSBkcml2ZXIgcHJvY2Vzc2VzIHNjYW4gcmVzdWx0cyBvciBldmVudHMgZnJvbSB0aGUgZmlybXdhcmUuIFNpbmNlIHRoZSBtd2lmaWV4IGRyaXZlciBzdXBwb3J0cyBVU0IsIHRoZSBmaXJtd2FyZSByZXNwb25zZXMgY2FuIGJlIGZ1enplZCB2aWEgdGhlIFVTQiBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozMzoxOS41MzczMzE1MzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM4NjkxNzk0MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVdJRklFWFwiLFxuICAgIFwiTVdJRklFWF9VU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVcIixcbiAgICBcIm13aWZpZXhfaXNfcnNuX291aV9wcmVzZW50XCIsXG4gICAgXCJtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudFwiLFxuICAgIFwibXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVcIixcbiAgICBcIm13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5XCIsXG4gICAgXCJtd2lmaWV4X3VwZGF0ZV9jdXJyX2Jzc19wYXJhbXNcIixcbiAgICBcIm13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1ZlwiLFxuICAgIFwibXdpZmlleF9yZXRfODAyXzExX3NjYW5cIixcbiAgICBcIm13aWZpZXhfaGFuZGxlX2V2ZW50X2V4dF9zY2FuX3JlcG9ydFwiLFxuICAgIFwibXdpZmlleF9ic3Nfc3RhcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYG13aWZpZXhfc2VhcmNoX291aV9pbl9pZWAgd2hlbiBwYXJzaW5nIFdpLUZpIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB3aGVuIHRoZSBkcml2ZXIgcHJvY2Vzc2VzIHNjYW4gcmVzdWx0cyBvciBldmVudHMgZnJvbSB0aGUgZmlybXdhcmUuIFNpbmNlIHRoZSBtd2lmaWV4IGRyaXZlciBzdXBwb3J0cyBVU0IsIHRoZSBmaXJtd2FyZSByZXNwb25zZXMgY2FuIGJlIGZ1enplZCB2aWEgdGhlIFVTQiBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjMzOjE5LjUzNzMzNzAyMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NTYzOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmM1NWVjYWZhNmY0YTBiMmMyYWFhMWEwMzc5MDIyNmE2NmUwODExYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAxMiAwMDozMzoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uY1xcbmluZGV4IDk3YzBlYzNiODIyZTcwLi4zYTU1ZmM2ZjFiNTQ4ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uY1xcbkBAIC0xMDQsMTIgKzEwNCwyMSBAQCBoYXNfdmVuZG9yX2hkcihzdHJ1Y3QgaWVlZV90eXBlc192ZW5kb3Jfc3BlY2lmaWMgKmllLCB1OCBrZXkpXFxuICAqIGEgZ2l2ZW4gb3VpIGluIFBUSy5cXG4gICovXFxuIHN0YXRpYyB1OFxcbi1td2lmaWV4X3NlYXJjaF9vdWlfaW5faWUoc3RydWN0IGllX2JvZHkgKmllYm9keSwgdTggKm91aSlcXG4rbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKHN0cnVjdCBpZV9ib2R5ICppZWJvZHksIHU4ICpvdWksIGludCBpZV9sZW4pXFxuIHtcXG4gXFx0dTggY291bnQ7XFxuIFxcbitcXHQvKiBOZWVkIGdycF9rZXlfb3VpWzRdICsgcHRrX2NudFsyXSBiZWZvcmUgcmVhZGluZyB0aGUgT1VJIGNvdW50LiAqL1xcbitcXHRpZiAoaWVfbGVuIFxcdTAwM2MgKGludClvZmZzZXRvZihzdHJ1Y3QgaWVfYm9keSwgcHRrX2JvZHkpKVxcbitcXHRcXHRyZXR1cm4gTVdJRklFWF9PVUlfTk9UX1BSRVNFTlQ7XFxuK1xcbiBcXHRjb3VudCA9IGllYm9keS1cXHUwMDNlcHRrX2NudFswXTtcXG4gXFxuK1xcdC8qIFJlamVjdCBhbiBPVUkgY291bnQgd2hvc2UgbGlzdCB3b3VsZCBydW4gcGFzdCB0aGUgZWxlbWVudC4gKi9cXG4rXFx0aWYgKG9mZnNldG9mKHN0cnVjdCBpZV9ib2R5LCBwdGtfYm9keSkgK1xcbitcXHQgICAgY291bnQgKiBzaXplb2YoaWVib2R5LVxcdTAwM2VwdGtfYm9keSkgXFx1MDAzZSAoc2l6ZV90KWllX2xlbilcXG4rXFx0XFx0cmV0dXJuIE1XSUZJRVhfT1VJX05PVF9QUkVTRU5UO1xcbitcXG4gXFx0LyogVGhlcmUgY291bGQgYmUgbXVsdGlwbGUgT1VJcyBmb3IgUFRLIGhlbmNlXFxuIFxcdCAgIDEpIFRha2UgdGhlIGxlbmd0aC5cXG4gXFx0ICAgMikgQ2hlY2sgYWxsIHRoZSBPVUlzIGZvciBBRVMuXFxuQEAgLTE0MywxMSArMTUyLDE0IEBAIG13aWZpZXhfaXNfcnNuX291aV9wcmVzZW50KHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLCB1MzIgY2lwaGVyKVxcbiBcXHR1OCByZXQgPSBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVDtcXG4gXFxuIFxcdGlmIChoYXNfaWVlZV9oZHIoYnNzX2Rlc2MtXFx1MDAzZWJjbl9yc25faWUsIFdMQU5fRUlEX1JTTikpIHtcXG4rXFx0XFx0aW50IGllX2xlbiA9IChpbnQpYnNzX2Rlc2MtXFx1MDAzZWJjbl9yc25faWUtXFx1MDAzZWllZWVfaGRyLmxlbiAtXFxuK1xcdFxcdFxcdCAgICAgUlNOX0dUS19PVUlfT0ZGU0VUO1xcbitcXG4gXFx0XFx0aWVib2R5ID0gKHN0cnVjdCBpZV9ib2R5ICopXFxuIFxcdFxcdFxcdCAoKCh1OCAqKSBic3NfZGVzYy1cXHUwMDNlYmNuX3Jzbl9pZS1cXHUwMDNlZGF0YSkgK1xcbiBcXHRcXHRcXHQgIFJTTl9HVEtfT1VJX09GRlNFVCk7XFxuIFxcdFxcdG91aSA9IFxcdTAwMjZtd2lmaWV4X3Jzbl9vdWlbY2lwaGVyXVswXTtcXG4tXFx0XFx0cmV0ID0gbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKGllYm9keSwgb3VpKTtcXG4rXFx0XFx0cmV0ID0gbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKGllYm9keSwgb3VpLCBpZV9sZW4pO1xcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuQEAgLTE2OSwxMCArMTgxLDE0IEBAIG13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50KHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLCB1MzIgY2lwaGVyKVxcbiBcXHR1OCByZXQgPSBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVDtcXG4gXFxuIFxcdGlmIChoYXNfdmVuZG9yX2hkcihic3NfZGVzYy1cXHUwMDNlYmNuX3dwYV9pZSwgV0xBTl9FSURfVkVORE9SX1NQRUNJRklDKSkge1xcbitcXHRcXHRpbnQgaWVfbGVuID0gKGludClic3NfZGVzYy1cXHUwMDNlYmNuX3dwYV9pZS1cXHUwMDNldmVuZF9oZHIubGVuIC1cXG4rXFx0XFx0XFx0ICAgICAoaW50KXNpemVvZihic3NfZGVzYy1cXHUwMDNlYmNuX3dwYV9pZS1cXHUwMDNldmVuZF9oZHIub3VpKSAtXFxuK1xcdFxcdFxcdCAgICAgV1BBX0dUS19PVUlfT0ZGU0VUO1xcbitcXG4gXFx0XFx0aWVib2R5ID0gKHN0cnVjdCBpZV9ib2R5ICopKCh1OCAqKWJzc19kZXNjLVxcdTAwM2ViY25fd3BhX2llLVxcdTAwM2VkYXRhICtcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFdQQV9HVEtfT1VJX09GRlNFVCk7XFxuIFxcdFxcdG91aSA9IFxcdTAwMjZtd2lmaWV4X3dwYV9vdWlbY2lwaGVyXVswXTtcXG4tXFx0XFx0cmV0ID0gbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKGllYm9keSwgb3VpKTtcXG4rXFx0XFx0cmV0ID0gbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKGllYm9keSwgb3VpLCBpZV9sZW4pO1xcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjMzOjE5Ljk5NDYwMTExMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzNDExOTAwMjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1XSUZJRVhcIixcbiAgICBcIk1XSUZJRVhfVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXdpZmlleF9zZWFyY2hfb3VpX2luX2llXCIsXG4gICAgXCJtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudFwiLFxuICAgIFwibXdpZmlleF9pc193cGFfb3VpX3ByZXNlbnRcIixcbiAgICBcIm13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlXCIsXG4gICAgXCJtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eVwiLFxuICAgIFwibXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zXCIsXG4gICAgXCJtd2lmaWV4X3BhcnNlX3NpbmdsZV9yZXNwb25zZV9idWZcIixcbiAgICBcIm13aWZpZXhfcmV0XzgwMl8xMV9zY2FuXCIsXG4gICAgXCJtd2lmaWV4X2hhbmRsZV9ldmVudF9leHRfc2Nhbl9yZXBvcnRcIixcbiAgICBcIm13aWZpZXhfYnNzX3N0YXJ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGluIGBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVgIHdoZW4gcGFyc2luZyBXaS1GaSBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUVzKS4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgd2hlbiB0aGUgZHJpdmVyIHByb2Nlc3NlcyBzY2FuIHJlc3VsdHMgb3IgZXZlbnRzIGZyb20gdGhlIGZpcm13YXJlLiBTaW5jZSB0aGUgbXdpZmlleCBkcml2ZXIgc3VwcG9ydHMgVVNCLCB0aGUgZmlybXdhcmUgcmVzcG9uc2VzIGNhbiBiZSBmdXp6ZWQgdmlhIHRoZSBVU0Igc3Vic3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJjNTVlY2FmYTZmNGEwYjJjMmFhYTFhMDM3OTAyMjZhNjZlMDgxMWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxMiAwMDozMzoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jXG5pbmRleCA5N2MwZWMzYjgyMmU3MC4uM2E1NWZjNmYxYjU0OGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jXG5AQCAtMTA0LDEyICsxMDQsMjEgQEAgaGFzX3ZlbmRvcl9oZHIoc3RydWN0IGllZWVfdHlwZXNfdmVuZG9yX3NwZWNpZmljICppZSwgdTgga2V5KVxuICAqIGEgZ2l2ZW4gb3VpIGluIFBUSy5cbiAgKi9cbiBzdGF0aWMgdThcbi1td2lmaWV4X3NlYXJjaF9vdWlfaW5faWUoc3RydWN0IGllX2JvZHkgKmllYm9keSwgdTggKm91aSlcbittd2lmaWV4X3NlYXJjaF9vdWlfaW5faWUoc3RydWN0IGllX2JvZHkgKmllYm9keSwgdTggKm91aSwgaW50IGllX2xlbilcbiB7XG4gXHR1OCBjb3VudDtcbiBcbitcdC8qIE5lZWQgZ3JwX2tleV9vdWlbNF0gKyBwdGtfY250WzJdIGJlZm9yZSByZWFkaW5nIHRoZSBPVUkgY291bnQuICovXG4rXHRpZiAoaWVfbGVuIFx1MDAzYyAoaW50KW9mZnNldG9mKHN0cnVjdCBpZV9ib2R5LCBwdGtfYm9keSkpXG4rXHRcdHJldHVybiBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVDtcbitcbiBcdGNvdW50ID0gaWVib2R5LVx1MDAzZXB0a19jbnRbMF07XG4gXG4rXHQvKiBSZWplY3QgYW4gT1VJIGNvdW50IHdob3NlIGxpc3Qgd291bGQgcnVuIHBhc3QgdGhlIGVsZW1lbnQuICovXG4rXHRpZiAob2Zmc2V0b2Yoc3RydWN0IGllX2JvZHksIHB0a19ib2R5KSArXG4rXHQgICAgY291bnQgKiBzaXplb2YoaWVib2R5LVx1MDAzZXB0a19ib2R5KSBcdTAwM2UgKHNpemVfdClpZV9sZW4pXG4rXHRcdHJldHVybiBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVDtcbitcbiBcdC8qIFRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIE9VSXMgZm9yIFBUSyBoZW5jZVxuIFx0ICAgMSkgVGFrZSB0aGUgbGVuZ3RoLlxuIFx0ICAgMikgQ2hlY2sgYWxsIHRoZSBPVUlzIGZvciBBRVMuXG5AQCAtMTQzLDExICsxNTIsMTQgQEAgbXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnQoc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MsIHUzMiBjaXBoZXIpXG4gXHR1OCByZXQgPSBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVDtcbiBcbiBcdGlmIChoYXNfaWVlZV9oZHIoYnNzX2Rlc2MtXHUwMDNlYmNuX3Jzbl9pZSwgV0xBTl9FSURfUlNOKSkge1xuK1x0XHRpbnQgaWVfbGVuID0gKGludClic3NfZGVzYy1cdTAwM2ViY25fcnNuX2llLVx1MDAzZWllZWVfaGRyLmxlbiAtXG4rXHRcdFx0ICAgICBSU05fR1RLX09VSV9PRkZTRVQ7XG4rXG4gXHRcdGllYm9keSA9IChzdHJ1Y3QgaWVfYm9keSAqKVxuIFx0XHRcdCAoKCh1OCAqKSBic3NfZGVzYy1cdTAwM2ViY25fcnNuX2llLVx1MDAzZWRhdGEpICtcbiBcdFx0XHQgIFJTTl9HVEtfT1VJX09GRlNFVCk7XG4gXHRcdG91aSA9IFx1MDAyNm13aWZpZXhfcnNuX291aVtjaXBoZXJdWzBdO1xuLVx0XHRyZXQgPSBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWUoaWVib2R5LCBvdWkpO1xuK1x0XHRyZXQgPSBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWUoaWVib2R5LCBvdWksIGllX2xlbik7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbkBAIC0xNjksMTAgKzE4MSwxNCBAQCBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudChzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYywgdTMyIGNpcGhlcilcbiBcdHU4IHJldCA9IE1XSUZJRVhfT1VJX05PVF9QUkVTRU5UO1xuIFxuIFx0aWYgKGhhc192ZW5kb3JfaGRyKGJzc19kZXNjLVx1MDAzZWJjbl93cGFfaWUsIFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQykpIHtcbitcdFx0aW50IGllX2xlbiA9IChpbnQpYnNzX2Rlc2MtXHUwMDNlYmNuX3dwYV9pZS1cdTAwM2V2ZW5kX2hkci5sZW4gLVxuK1x0XHRcdCAgICAgKGludClzaXplb2YoYnNzX2Rlc2MtXHUwMDNlYmNuX3dwYV9pZS1cdTAwM2V2ZW5kX2hkci5vdWkpIC1cbitcdFx0XHQgICAgIFdQQV9HVEtfT1VJX09GRlNFVDtcbitcbiBcdFx0aWVib2R5ID0gKHN0cnVjdCBpZV9ib2R5ICopKCh1OCAqKWJzc19kZXNjLVx1MDAzZWJjbl93cGFfaWUtXHUwMDNlZGF0YSArXG4gXHRcdFx0XHRcdCAgICBXUEFfR1RLX09VSV9PRkZTRVQpO1xuIFx0XHRvdWkgPSBcdTAwMjZtd2lmaWV4X3dwYV9vdWlbY2lwaGVyXVswXTtcbi1cdFx0cmV0ID0gbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKGllYm9keSwgb3VpKTtcbitcdFx0cmV0ID0gbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKGllYm9keSwgb3VpLCBpZV9sZW4pO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozMzoxOS45OTQ2MDI2NzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTE0OTg5NjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFdpLUZpIERyaXZlciBQYXRjaDogU2VjdXJpdHkgYW5kIEZ1enppbmcgQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uY2AuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZpeCDigJMgYWRkaW5nIGJvdW5kcyBjaGVja2luZyB0byBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYC4gU2VlbXMgbGlrZSBhIHN0YW5kYXJkIGRlZmVuc2UgYWdhaW5zdCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcGFyc2luZyBJbmZvcm1hdGlvbiBFbGVtZW50cyBmcm9tIFdpLUZpIGJlYWNvbnMgb3IgcHJvYmUgcmVzcG9uc2VzLiBHb29kLCBwcm9hY3RpdmUgc2VjdXJpdHkgaXMgYWx3YXlzIGFwcHJlY2lhdGVkLiBJdCdzIGZ1bmN0aW9uYWwgY29kZSB3aXRoaW4gYSB3aXJlbGVzcyBkcml2ZXIsIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBzdGFydCB0byBnZXQgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHdlIGZ1enogdGhpcz8gV2l0aCBXaS1GaSBkcml2ZXJzLCBtYWM4MDIxMV9od3NpbSBpcyBvZnRlbiB0aGUgZ28tdG8uIEJ1dCwgdGhpcyBpcyAqbXdpZmlleCosIGEgc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyLiBTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGNhbiB3ZSBmdXp6ICptd2lmaWV4KiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGF0J3MgdGhlIHJlYWwgY2hhbGxlbmdlIHdpdGggaGFyZHdhcmUgZHJpdmVycywgcmlnaHQ/IFRoZXkncmUgb2Z0ZW4gdGllZCB0byBzcGVjaWZpYyBoYXJkd2FyZS4gSXQncyBub3QgYWx3YXlzIGVhc3kgdW5sZXNzIHRoZXJlIGlzIHNwZWNpZmljIGVtdWxhdGlvbiBmb3IgdGhlIGhhcmR3YXJlIG9yIGl04oCZcyBhIFVTQiwgU0RJTywgb3IgUENJZSBkZXZpY2UsIHdoZXJlIHdlIGNhbiBwb3RlbnRpYWxseSBmdXp6IHRoZSBidXMuXG5cbkhtbSwgZG9lcyBtd2lmaWV4ICpoYXZlKiBVU0Igc3VwcG9ydD8gVGhhdCBtaWdodCBvcGVuIHVwIHNvbWUgZnV6emluZyBwb3NzaWJpbGl0aWVzLiBMZXQgbWUgY2hlY2suLi4gWWVwLCB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuY2AgZmlsZSBleGlzdHMuIE9rYXksIHRoaXMgaXMgZ29vZC4gVGltZSB0byBkaWcgYSBiaXQgZGVlcGVyIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZG8gd2l0aCB0aGlzIGRyaXZlciBhbmQgaXRzIFVTQiBpbnRlcmZhY2UuIE1heWJlIHdlJ3JlIG9udG8gc29tZXRoaW5nIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozMzoyNC45MDk1OTQ5ODRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMxNTA5NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE4NTI4IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jPTQyPXN0YXRpYyB1MTZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjQzOm13aWZpZXhfY29udmVydF9tY3NtYXBfdG9fbWF4cmF0ZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtNDQtXFx0XFx0XFx0XFx0ICB1OCBiYW5kcywgdTE2IG1jc19tYXApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTQ4LVxcdHUzMiB1c3Jfdmh0X2NhcF9pbmZvID0gMDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjQ5OlxcdHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LVxcdTAwM2VhZGFwdGVyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtNTAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jPTg1PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzo4Njptd2lmaWV4X2ZpbGxfdmh0X2NhcF9pbmZvKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy04Ny1cXHRcXHRcXHQgIHN0cnVjdCBpZWVlODAyMTFfdmh0X2NhcCAqdmh0X2NhcCwgdTggYmFuZHMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy04OC17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzo4OTpcXHRzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi1cXHUwMDNlYWRhcHRlcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTkwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy05OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjk5OnZvaWQgbXdpZmlleF9maWxsX3ZodF9jYXBfdGx2KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xMDAtXFx0XFx0XFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV92aHRfY2FwICp2aHRfY2FwLCB1OCBiYW5kcylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTEwMS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxMDI6XFx0c3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtXFx1MDAzZWFkYXB0ZXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xMDMtXFx0dTE2IG1jc19tYXBfdXNlciwgbWNzX21hcF9yZXNwLCBtY3NfbWFwX3Jlc3VsdDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTA2LVxcdC8qIEZpbGwgVkhUIGNhcCBpbmZvICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxMDc6XFx0bXdpZmlleF9maWxsX3ZodF9jYXBfaW5mbyhwcml2LCB2aHRfY2FwLCBiYW5kcyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xMDgtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTEyOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjEyOTpcXHR0bXAgPSBtd2lmaWV4X2NvbnZlcnRfbWNzbWFwX3RvX21heHJhdGUocHJpdiwgYmFuZHMsIG1jc19tYXBfcmVzdWx0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTEzMC1cXHR2aHRfY2FwLVxcdTAwM2VzdXBwX21jcy5yeF9oaWdoZXN0ID0gY3B1X3RvX2xlMTYodG1wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTUwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MTUxOlxcdHRtcCA9IG13aWZpZXhfY29udmVydF9tY3NtYXBfdG9fbWF4cmF0ZShwcml2LCBiYW5kcywgbWNzX21hcF9yZXN1bHQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTUyLVxcdHZodF9jYXAtXFx1MDAzZXN1cHBfbWNzLnR4X2hpZ2hlc3QgPSBjcHVfdG9fbGUxNih0bXApO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xNTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxNTc6aW50IG13aWZpZXhfY21kX2FwcGVuZF8xMWFjX3RsdihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MTU4OlxcdFxcdFxcdCAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xNTktXFx0XFx0XFx0ICAgICB1OCAqKmJ1ZmZlcilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE2MC17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxNjE6XFx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfdmh0Y2FwICp2aHRfY2FwO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MTYyOlxcdHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX29wZXJfbW9kZV9udGYgKm9wZXJfbnRmO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTYzLVxcdHN0cnVjdCBpZWVlX3R5cGVzX29wZXJfbW9kZV9udGYgKmllZWVfb3Blcl9udGY7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxNjQ6XFx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfdmh0X29wZXIgKnZodF9vcDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjE2NTpcXHRzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi1cXHUwMDNlYWRhcHRlcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE2Ni1cXHR1OCBzdXBwX2Nod2Rfc2V0O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xNzYtXFx0aWYgKGJzc19kZXNjLVxcdTAwM2ViY25fdmh0X2NhcCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MTc3OlxcdFxcdHZodF9jYXAgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfdmh0Y2FwICopKmJ1ZmZlcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE3OC1cXHRcXHRtZW1zZXQodmh0X2NhcCwgMCwgc2l6ZW9mKCp2aHRfY2FwKSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE4MS1cXHRcXHRcXHRcXHRjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGllZWU4MDIxMV92aHRfY2FwKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxODI6XFx0XFx0bWVtY3B5KCh1OCAqKXZodF9jYXAgKyBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE4My1cXHRcXHQgICAgICAgKHU4ICopYnNzX2Rlc2MtXFx1MDAzZWJjbl92aHRfY2FwLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xODUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxODY6XFx0XFx0bXdpZmlleF9maWxsX3ZodF9jYXBfdGx2KHByaXYsIFxcdTAwMjZ2aHRfY2FwLVxcdTAwM2V2aHRfY2FwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTg3LVxcdFxcdFxcdFxcdFxcdCBic3NfZGVzYy1cXHUwMDNlYnNzX2JhbmQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xOTQtXFx0XFx0aWYgKHByaXYtXFx1MDAzZWJzc19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjE5NTpcXHRcXHRcXHR2aHRfb3AgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfdmh0X29wZXIgKikqYnVmZmVyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTk2LVxcdFxcdFxcdG1lbXNldCh2aHRfb3AsIDAsIHNpemVvZigqdmh0X29wKSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE5OS1cXHRcXHRcXHR2aHRfb3AtXFx1MDAzZWhlYWRlci5sZW4gID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCp2aHRfb3ApIC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjIwMDpcXHRcXHRcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0yMDEtXFx0XFx0XFx0bWVtY3B5KCh1OCAqKXZodF9vcCArXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoyMDI6XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0yMDMtXFx0XFx0XFx0ICAgICAgICh1OCAqKWJzc19kZXNjLVxcdTAwM2ViY25fdmh0X29wZXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTI1Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjI1MzppbnQgbXdpZmlleF9jbWRfMTFhY19jZmcoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTI1NC1cXHRcXHRcXHQgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwgdTE2IGNtZF9hY3Rpb24sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoyNTU6XFx0XFx0XFx0IHN0cnVjdCBtd2lmaWV4XzExYWNfdmh0X2NmZyAqY2ZnKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMjU2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMjcyLS8qIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIEJsb2NrQUNLIHNldHVwIGluZm9ybWF0aW9uIGZvciBnaXZlblxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MjczOiAqIG13aWZpZXhfcHJpdmF0ZSBzdHJ1Y3R1cmUgZm9yIDExYWMgZW5hYmxlZCBuZXR3b3Jrcy5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTI3NC0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjI3NTp2b2lkIG13aWZpZXhfc2V0XzExYWNfYmFfcGFyYW1zKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0yNzYte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0yOTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoyOTQ6Ym9vbCBtd2lmaWV4X2lzX2Jzc19pbl8xMWFjX21vZGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTI5NS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoyOTY6XFx0c3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2M7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0yOTctXFx0c3RydWN0IGllZWU4MDIxMV92aHRfb3BlcmF0aW9uICp2aHRfb3BlcjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMzEwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MzExOnU4IG13aWZpZXhfZ2V0X2NlbnRlcl9mcmVxX2luZGV4KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4IGJhbmQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0zMTItXFx0XFx0XFx0XFx0IHUzMiBwcmlfY2hhbiwgdTggY2hhbl9idylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmg9MTQ9ZW51bSB2aHRfY2ZnX21pc2NfY29uZmlnIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmgtMjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuaDoyNTppbnQgbXdpZmlleF9jbWRfYXBwZW5kXzExYWNfdGx2KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuaDoyNjpcXHRcXHRcXHRcXHRzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5oLTI3LVxcdFxcdFxcdFxcdHU4ICoqYnVmZmVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5oOjI4OmludCBtd2lmaWV4X2NtZF8xMWFjX2NmZyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmgtMjktXFx0XFx0XFx0IHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsIHUxNiBjbWRfYWN0aW9uLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmg6MzA6XFx0XFx0XFx0IHN0cnVjdCBtd2lmaWV4XzExYWNfdmh0X2NmZyAqY2ZnKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5oOjMxOnZvaWQgbXdpZmlleF9maWxsX3ZodF9jYXBfdGx2KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuaC0zMi1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZodF9jYXAgKnZodF9jYXAsIHU4IGJhbmRzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTI6dm9pZCBtd2lmaWV4X2luaXRfMTFoX3BhcmFtcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xMy17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjE4OmlubGluZSBpbnQgbXdpZmlleF9pc18xMWhfYWN0aXZlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYz0yNT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyNjptd2lmaWV4XzExaF9wcm9jZXNzX2luZnJhX2pvaW4oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKipidWZmZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjI3OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjgte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyOTpcXHRzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgKmllX2hlYWRlcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MzA6XFx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfcHdyX2NhcGFiaWxpdHkgKmNhcDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MzE6XFx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfbG9jYWxfcHdyX2NvbnN0cmFpbnQgKmNvbnN0cmFpbnQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTMyLVxcdHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzozOTpcXHRyYWRpb190eXBlID0gbXdpZmlleF9iYW5kX3RvX3JhZGlvX3R5cGUoKHU4KSBic3NfZGVzYy1cXHUwMDNlYnNzX2JhbmQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy00MC1cXHRzYmFuZCA9IHByaXYtXFx1MDAzZXdkZXYud2lwaHktXFx1MDAzZWJhbmRzW3JhZGlvX3R5cGVdO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy00MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6NDI6XFx0Y2FwID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3B3cl9jYXBhYmlsaXR5ICopKmJ1ZmZlcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtNDMtXFx0Y2FwLVxcdTAwM2VoZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFdMQU5fRUlEX1BXUl9DQVBBQklMSVRZKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy00OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6NDk6XFx0Y29uc3RyYWludCA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19sb2NhbF9wd3JfY29uc3RyYWludCAqKSpidWZmZXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTUwLVxcdGNvbnN0cmFpbnQtXFx1MDAzZWhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoV0xBTl9FSURfUFdSX0NPTlNUUkFJTlQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTU1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzo1NjpcXHRpZV9oZWFkZXIgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyICopKmJ1ZmZlcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtNTctXFx0aWVfaGVhZGVyLVxcdTAwM2V0eXBlID0gY3B1X3RvX2xlMTYoVExWX1RZUEVfUEFTU1RIUk9VR0gpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTY5LS8qIEVuYWJsZSBvciBkaXNhYmxlIHRoZSAxMWggZXh0ZW5zaW9ucyBpbiB0aGUgZmlybXdhcmUgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6NzA6aW50IG13aWZpZXhfMTFoX2FjdGl2YXRlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGJvb2wgZmxhZylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtNzEte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTc3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzo3ODpcXHRyZXR1cm4gbXdpZmlleF9zZW5kX2NtZChwcml2LCBIb3N0Q21kX0NNRF84MDJfMTFfU05NUF9NSUIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTc5LVxcdFxcdFxcdFxcdEhvc3RDbWRfQUNUX0dFTl9TRVQsIERPVDExSF9JLCBcXHUwMDI2ZW5hYmxlLCB0cnVlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy04Ny0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6ODg6dm9pZCBtd2lmaWV4XzExaF9wcm9jZXNzX2pvaW4oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKipidWZmZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjg5OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy05MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtOTQtXFx0XFx0ICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjk1OlxcdFxcdG13aWZpZXhfMTFoX2FjdGl2YXRlKHByaXYsIHRydWUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy05Ni1cXHRcXHRwcml2LVxcdTAwM2VzdGF0ZV8xMWguaXNfMTFoX2FjdGl2ZSA9IHRydWU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTk3LVxcdFxcdGJzc19kZXNjLVxcdTAwM2VjYXBfaW5mb19iaXRtYXAgfD0gV0xBTl9DQVBBQklMSVRZX1NQRUNUUlVNX01HTVQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjk4OlxcdFxcdG13aWZpZXhfMTFoX3Byb2Nlc3NfaW5mcmFfam9pbihwcml2LCBidWZmZXIsIGJzc19kZXNjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtOTktXFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTAwLVxcdFxcdC8qIERlYWN0aXZhdGUgMTFoIGZ1bmN0aW9ucyBpbiB0aGUgZmlybXdhcmUgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTAxOlxcdFxcdG13aWZpZXhfMTFoX2FjdGl2YXRlKHByaXYsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTAyLVxcdFxcdHByaXYtXFx1MDAzZXN0YXRlXzExaC5pc18xMWhfYWN0aXZlID0gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTEwLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxMTE6dm9pZCBtd2lmaWV4X2Rmc19jYWNfd29ya19xdWV1ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTExMi17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTE0LVxcdHN0cnVjdCBkZWxheWVkX3dvcmsgKmRlbGF5ZWRfd29yayA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTE1OlxcdHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxMTY6XFx0XFx0XFx0Y29udGFpbmVyX29mKGRlbGF5ZWRfd29yaywgc3RydWN0IG13aWZpZXhfcHJpdmF0ZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTE3LVxcdFxcdFxcdFxcdCAgICAgZGZzX2NhY193b3JrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xMjAtXFx0aWYgKHByaXYtXFx1MDAzZXdkZXYubGlua3NbMF0uY2FjX3N0YXJ0ZWQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTIxOlxcdFxcdG13aWZpZXhfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIE1TRyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTIyLVxcdFxcdFxcdCAgICBcXFwiQ0FDIHRpbWVyIGZpbmlzaGVkOyBObyByYWRhciBkZXRlY3RlZFxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTMxLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxMzI6aW50IG13aWZpZXhfY21kX2lzc3VlX2NoYW5fcmVwb3J0X3JlcXVlc3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTMzLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xMzYtXFx0c3RydWN0IGhvc3RfY21kX2RzX2NoYW5fcnB0X3JlcSAqY3JfcmVxID0gXFx1MDAyNmNtZC1cXHUwMDNlcGFyYW1zLmNoYW5fcnB0X3JlcTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTM3OlxcdHN0cnVjdCBtd2lmaWV4X3JhZGFyX3BhcmFtcyAqcmFkYXJfcGFyYW1zID0gKHZvaWQgKilkYXRhX2J1ZjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTM4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE0OS1cXHRpZiAocmFkYXJfcGFyYW1zLVxcdTAwM2VjYWNfdGltZV9tcylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTUwOlxcdFxcdG13aWZpZXhfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIE1TRyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTUxLVxcdFxcdFxcdCAgICBcXFwiMTFoOiBpc3N1aW5nIERGUyBSYWRhciBjaGVjayBmb3IgY2hhbm5lbD0lZFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xNTMtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxNTQ6XFx0XFx0bXdpZmlleF9kYmcocHJpdi1cXHUwMDNlYWRhcHRlciwgTVNHLCBcXFwiY2FuY2VsbGluZyBDQUNcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xNTUtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTU4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxNTk6aW50IG13aWZpZXhfc3RvcF9yYWRhcl9kZXRlY3Rpb24oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTYwLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE2MS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjE2MjpcXHRzdHJ1Y3QgbXdpZmlleF9yYWRhcl9wYXJhbXMgcmFkYXJfcGFyYW1zO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xNjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjE2NDpcXHRtZW1zZXQoXFx1MDAyNnJhZGFyX3BhcmFtcywgMCwgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3JhZGFyX3BhcmFtcykpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xNjUtXFx0cmFkYXJfcGFyYW1zLmNoYW5kZWYgPSBjaGFuZGVmO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE2Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTY4OlxcdHJldHVybiBtd2lmaWV4X3NlbmRfY21kKHByaXYsIEhvc3RDbWRfQ01EX0NIQU5fUkVQT1JUX1JFUVVFU1QsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE2OS1cXHRcXHRcXHRcXHRIb3N0Q21kX0FDVF9HRU5fU0VULCAwLCBcXHUwMDI2cmFkYXJfcGFyYW1zLCB0cnVlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xNzQtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjE3NTp2b2lkIG13aWZpZXhfYWJvcnRfY2FjKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE3Ni17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE3Ny1cXHRpZiAocHJpdi1cXHUwMDNld2Rldi5saW5rc1swXS5jYWNfc3RhcnRlZCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxNzg6XFx0XFx0aWYgKG13aWZpZXhfc3RvcF9yYWRhcl9kZXRlY3Rpb24ocHJpdiwgXFx1MDAyNnByaXYtXFx1MDAzZWRmc19jaGFuZGVmKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTc5OlxcdFxcdFxcdG13aWZpZXhfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIEVSUk9SLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xODAtXFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gc3RvcCBDQUMgaW4gRldcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxODE6XFx0XFx0bXdpZmlleF9kYmcocHJpdi1cXHUwMDNlYWRhcHRlciwgTVNHLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xODItXFx0XFx0XFx0ICAgIFxcXCJBYm9ydGluZyBkZWxheWVkIHdvcmsgZm9yIENBQy5cXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE5My0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTk0OmludCBtd2lmaWV4XzExaF9oYW5kbGVfY2hhbnJwdF9yZWFkeShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xOTUtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE5Ny1cXHRzdHJ1Y3QgaG9zdF9jbWRfZHNfY2hhbl9ycHRfZXZlbnQgKnJwdF9ldmVudDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTk4OlxcdHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2NoYW5fcnB0X2RhdGEgKnJwdDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTk5LVxcdHUxNiBldmVudF9sZW4sIHRsdl9sZW47XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjA1LVxcdGlmIChsZTMyX3RvX2NwdShycHRfZXZlbnQtXFx1MDAzZXJlc3VsdCkgIT0gSG9zdENtZF9SRVNVTFRfT0spIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjA2OlxcdFxcdG13aWZpZXhfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIEVSUk9SLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yMDctXFx0XFx0XFx0ICAgIFxcXCJFcnJvciBpbiBjaGFubmVsIHJlcG9ydCBldmVudFxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjEwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyMTE6XFx0d2hpbGUgKGV2ZW50X2xlbiBcXHUwMDNlPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yMTItXFx0XFx0cnB0ID0gKHZvaWQgKilcXHUwMDI2cnB0X2V2ZW50LVxcdTAwM2V0bHZidWY7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjE3LVxcdFxcdFxcdGlmIChycHQtXFx1MDAzZW1hcC5yYWRhcikge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyMTg6XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcocHJpdi1cXHUwMDNlYWRhcHRlciwgTVNHLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yMTktXFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJSQURBUiBEZXRlY3RlZCBvbiBjaGFubmVsICVkIVxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yMzgtLyogSGFuZGxlciBmb3IgcmFkYXIgZGV0ZWN0ZWQgZXZlbnQgZnJvbSBGVy4qL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyMzk6aW50IG13aWZpZXhfMTFoX2hhbmRsZV9yYWRhcl9kZXRlY3RlZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNDAtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjQxLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjQyOlxcdHN0cnVjdCBtd2lmaWV4X3JhZGFyX2RldF9ldmVudCAqcmRyX2V2ZW50O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNDMtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjQ1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyNDY6XFx0bXdpZmlleF9kYmcocHJpdi1cXHUwMDNlYWRhcHRlciwgTVNHLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNDctXFx0XFx0ICAgIFxcXCJyYWRhciBkZXRlY3RlZDsgaW5kaWNhdGluZyBrZXJuZWxcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyNDg6XFx0aWYgKG13aWZpZXhfc3RvcF9yYWRhcl9kZXRlY3Rpb24ocHJpdiwgXFx1MDAyNnByaXYtXFx1MDAzZWRmc19jaGFuZGVmKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjQ5OlxcdFxcdG13aWZpZXhfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIEVSUk9SLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNTAtXFx0XFx0XFx0ICAgIFxcXCJGYWlsZWQgdG8gc3RvcCBDQUMgaW4gRldcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI1Mi1cXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyNTM6XFx0bXdpZmlleF9kYmcocHJpdi1cXHUwMDNlYWRhcHRlciwgTVNHLCBcXFwicmVnZG9tYWluOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjU0LVxcdFxcdCAgICByZHJfZXZlbnQtXFx1MDAzZXJlZ19kb21haW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyNTU6XFx0bXdpZmlleF9kYmcocHJpdi1cXHUwMDNlYWRhcHRlciwgTVNHLCBcXFwicmFkYXIgZGV0ZWN0aW9uIHR5cGU6ICVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNTYtXFx0XFx0ICAgIHJkcl9ldmVudC1cXHUwMDNlZGV0X3R5cGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI2NS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjY2OnZvaWQgbXdpZmlleF9kZnNfY2hhbl9zd193b3JrX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjY3LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjY4OlxcdHN0cnVjdCBtd2lmaWV4X3VhcF9ic3NfcGFyYW0gKmJzc19jZmc7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI2OS1cXHRzdHJ1Y3QgZGVsYXllZF93b3JrICpkZWxheWVkX3dvcmsgPSB0b19kZWxheWVkX3dvcmsod29yayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjI3MDpcXHRzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjcxOlxcdFxcdFxcdGNvbnRhaW5lcl9vZihkZWxheWVkX3dvcmssIHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI3Mi1cXHRcXHRcXHRcXHQgICAgIGRmc19jaGFuX3N3X3dvcmspO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI3NS1cXHRpZiAoIWJzc19jZmctXFx1MDAzZWJlYWNvbl9wZXJpb2QpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6Mjc2OlxcdFxcdG13aWZpZXhfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIEVSUk9SLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNzctXFx0XFx0XFx0ICAgIFxcXCJjaGFubmVsIHN3aXRjaDogQVAgYWxyZWFkeSBzdG9wcGVkXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yODAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjI4MTpcXHRtd2lmaWV4X3VhcF9zZXRfY2hhbm5lbChwcml2LCBic3NfY2ZnLCBwcml2LVxcdTAwM2VkZnNfY2hhbmRlZik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI4Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjgzOlxcdGlmIChtd2lmaWV4X2NvbmZpZ19zdGFydF91YXAocHJpdiwgYnNzX2NmZykpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6Mjg0OlxcdFxcdG13aWZpZXhfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIEVSUk9SLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yODUtXFx0XFx0XFx0ICAgIFxcXCJGYWlsZWQgdG8gc3RhcnQgQVAgYWZ0ZXIgY2hhbm5lbCBzd2l0Y2hcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI4OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6Mjg5OlxcdG13aWZpZXhfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIE1TRyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjkwLVxcdFxcdCAgICBcXFwiaW5kaWNhdGluZyBjaGFubmVsIHN3aXRjaCBjb21wbGV0aW9uIHRvIGtlcm5lbFxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMjQtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjI1OmludCBtd2lmaWV4X2ZpbGxfY2FwX2luZm8oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggcmFkaW9fdHlwZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMjYtXFx0XFx0XFx0ICBzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCAqaHRfY2FwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTMyLVxcdGlmIChXQVJOX09OX09OQ0UoIXNiYW5kKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMzpcXHRcXHRtd2lmaWV4X2RiZyhwcml2LVxcdTAwM2VhZGFwdGVyLCBFUlJPUiwgXFxcIkludmFsaWQgcmFkaW8gdHlwZSFcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zNC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy02OS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NzA6c3RhdGljIHN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo3MTptd2lmaWV4X2dldF9iYV9zdGF0dXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NzI6XFx0XFx0ICAgICAgZW51bSBtd2lmaWV4X2JhX3N0YXR1cyBiYV9zdGF0dXMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTczLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NzQ6XFx0c3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqdHhfYmFfdHNyX3RibDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNzUtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtOTUtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjk2OmludCBtd2lmaWV4X3JldF8xMW5fZGVsYmEoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtOTctXFx0XFx0XFx0ICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy05OS1cXHRpbnQgdGlkO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoxMDA6XFx0c3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqdHhfYmFfdGJsO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xMDEtXFx0c3RydWN0IGhvc3RfY21kX2RzXzExbl9kZWxiYSAqZGVsX2JhID0gXFx1MDAyNnJlc3AtXFx1MDAzZXBhcmFtcy5kZWxfYmE7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTA1LVxcdGlmIChkZWxfYmEtXFx1MDAzZWRlbF9yZXN1bHQgPT0gQkFfUkVTVUxUX1NVQ0NFU1MpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTA2OlxcdFxcdG13aWZpZXhfZGVsX2JhX3RibChwcml2LCB0aWQsIGRlbF9iYS1cXHUwMDNlcGVlcl9tYWNfYWRkcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTA3LVxcdFxcdFxcdFxcdCAgIFRZUEVfREVMQkFfU0VOVCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xMDktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjExMDpcXHRcXHR0eF9iYV90YmwgPSBtd2lmaWV4X2dldF9iYV9zdGF0dXMocHJpdiwgQkFfU0VUVVBfSU5QUk9HUkVTUyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTExMS1cXHRcXHRpZiAodHhfYmFfdGJsKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoxMTI6XFx0XFx0XFx0bXdpZmlleF9zZW5kX2FkZGJhKHByaXYsIHR4X2JhX3RibC1cXHUwMDNldGlkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xMTMtXFx0XFx0XFx0XFx0XFx0ICAgdHhfYmFfdGJsLVxcdTAwM2VyYSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTIwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoxMjE6XFx0XFx0bXdpZmlleF9jcmVhdGVfYmFfdGJsKHByaXYsIGRlbF9iYS1cXHUwMDNlcGVlcl9tYWNfYWRkciwgdGlkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xMjItXFx0XFx0XFx0XFx0ICAgICAgQkFfU0VUVVBfSU5QUk9HUkVTUyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTEyMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTI0OlxcdFxcdHR4X2JhX3RibCA9IG13aWZpZXhfZ2V0X2JhX3N0YXR1cyhwcml2LCBCQV9TRVRVUF9JTlBST0dSRVNTKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTI1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xMjYtXFx0XFx0aWYgKHR4X2JhX3RibClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTI3OlxcdFxcdFxcdG13aWZpZXhfZGVsX2JhX3RibChwcml2LCB0eF9iYV90YmwtXFx1MDAzZXRpZCwgdHhfYmFfdGJsLVxcdTAwM2VyYSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTI4LVxcdFxcdFxcdFxcdFxcdCAgIFRZUEVfREVMQkFfU0VOVCwgdHJ1ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTQxLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoxNDI6aW50IG13aWZpZXhfcmV0XzExbl9hZGRiYV9yZXEoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTQzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTE0Ni1cXHRzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2FkZGJhX3JzcCAqYWRkX2JhX3JzcCA9IFxcdTAwMjZyZXNwLVxcdTAwM2VwYXJhbXMuYWRkX2JhX3JzcDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTQ3OlxcdHN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKnR4X2JhX3RibDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTQ4OlxcdHN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICpyYV9saXN0O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xNDktXFx0dTE2IGJsb2NrX2Fja19wYXJhbV9zZXQgPSBsZTE2X3RvX2NwdShhZGRfYmFfcnNwLVxcdTAwM2VibG9ja19hY2tfcGFyYW1fc2V0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xNTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjE1NzpcXHR0aWRfZG93biA9IG13aWZpZXhfd21tX2Rvd25ncmFkZV90aWQocHJpdiwgdGlkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTU4OlxcdHJhX2xpc3QgPSBtd2lmaWV4X3dtbV9nZXRfcmFsaXN0X25vZGUocHJpdiwgdGlkX2Rvd24sIGFkZF9iYV9yc3AtXFx1MDAzZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xNTktXFx0XFx0cGVlcl9tYWNfYWRkcik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTY0LVxcdFxcdH1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTY1OlxcdFxcdG13aWZpZXhfZGVsX2JhX3RibChwcml2LCB0aWQsIGFkZF9iYV9yc3AtXFx1MDAzZXBlZXJfbWFjX2FkZHIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTE2Ni1cXHRcXHRcXHRcXHQgICBUWVBFX0RFTEJBX1NFTlQsIHRydWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTE3Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTczOlxcdHR4X2JhX3RibCA9IG13aWZpZXhfZ2V0X2JhX3RibChwcml2LCB0aWQsIGFkZF9iYV9yc3AtXFx1MDAzZXBlZXJfbWFjX2FkZHIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xNzQtXFx0aWYgKHR4X2JhX3RibCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoxNzU6XFx0XFx0bXdpZmlleF9kYmcocHJpdi1cXHUwMDNlYWRhcHRlciwgRVZFTlQsIFxcXCJpbmZvOiBCQSBzdHJlYW0gY29tcGxldGVcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xNzYtXFx0XFx0dHhfYmFfdGJsLVxcdTAwM2ViYV9zdGF0dXMgPSBCQV9TRVRVUF9DT01QTEVURTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xODctXFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTg4OlxcdFxcdG13aWZpZXhfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIEVSUk9SLCBcXFwiQkEgc3RyZWFtIG5vdCBjcmVhdGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTg5LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0yMDEtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjIwMjppbnQgbXdpZmlleF9jbWRfcmVjZmdfdHhfYnVmKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTIwMy1cXHRcXHRcXHQgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsIGludCBjbWRfYWN0aW9uLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTIxNC1cXHRjYXNlIEhvc3RDbWRfQUNUX0dFTl9TRVQ6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjIxNTpcXHRcXHRtd2lmaWV4X2RiZyhwcml2LVxcdTAwM2VhZGFwdGVyLCBDTUQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTIxNi1cXHRcXHRcXHQgICAgXFxcImNtZDogc2V0IHR4X2J1Zj0lZFxcXFxuXFxcIiwgKmJ1Zl9zaXplKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0yMzQtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjIzNTppbnQgbXdpZmlleF9jbWRfYW1zZHVfYWdncl9jdHJsKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTIzNi1cXHRcXHRcXHRcXHRpbnQgY21kX2FjdGlvbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MjM3OlxcdFxcdFxcdFxcdHN0cnVjdCBtd2lmaWV4X2RzXzExbl9hbXNkdV9hZ2dyX2N0cmwgKmFhX2N0cmwpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTIzOC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMjY3LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoyNjg6aW50IG13aWZpZXhfY21kXzExbl9jZmcoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMjY5LVxcdFxcdFxcdHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsIHUxNiBjbWRfYWN0aW9uLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoyNzA6XFx0XFx0XFx0c3RydWN0IG13aWZpZXhfZHNfMTFuX3R4X2NmZyAqdHhjZmcpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTI3MS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM9Mjk4PWludFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoyOTk6bXdpZmlleF9jbWRfYXBwZW5kXzExbl90bHYoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzAwOlxcdFxcdFxcdCAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMDEtXFx0XFx0XFx0ICAgdTggKipidWZmZXIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTMwMi17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjMwMzpcXHRzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGNhcCAqaHRfY2FwO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMDQ6XFx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRpbmZvICpodF9pbmZvO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMDU6XFx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfY2hhbl9saXN0X3BhcmFtX3NldCAqY2hhbl9saXN0O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMDY6XFx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfMjA0MGJzc2NvICpic3NfY29fMjA0MDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzA3OlxcdHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2V4dGNhcCAqZXh0X2NhcDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzA4LVxcdGludCByZXRfbGVuID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMTUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjMxNjpcXHRyYWRpb190eXBlID0gbXdpZmlleF9iYW5kX3RvX3JhZGlvX3R5cGUoKHU4KSBic3NfZGVzYy1cXHUwMDNlYnNzX2JhbmQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMTctXFx0c2JhbmQgPSBwcml2LVxcdTAwM2V3ZGV2LndpcGh5LVxcdTAwM2ViYW5kc1tyYWRpb190eXBlXTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMTktXFx0aWYgKGJzc19kZXNjLVxcdTAwM2ViY25faHRfY2FwKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjMyMDpcXHRcXHRodF9jYXAgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXAgKikgKmJ1ZmZlcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzIxOlxcdFxcdG1lbXNldChodF9jYXAsIDAsIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGNhcCkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMjItXFx0XFx0aHRfY2FwLVxcdTAwM2VoZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFdMQU5fRUlEX0hUX0NBUEFCSUxJVFkpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTMyNC1cXHRcXHRcXHRcXHRjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzI1OlxcdFxcdG1lbWNweSgodTggKikgaHRfY2FwICsgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTMyNi1cXHRcXHQgICAgICAgKHU4ICopYnNzX2Rlc2MtXFx1MDAzZWJjbl9odF9jYXAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzI4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMjk6XFx0XFx0bXdpZmlleF9maWxsX2NhcF9pbmZvKHByaXYsIHJhZGlvX3R5cGUsIFxcdTAwMjZodF9jYXAtXFx1MDAzZWh0X2NhcCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTMzMC1cXHRcXHQvKiBVcGRhdGUgSFQ0MCBjYXBhYmlsaXR5IGZyb20gY3VycmVudCBjaGFubmVsIGluZm9ybWF0aW9uICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzMzLVxcdFxcdFxcdHU4IHJhZGlvID1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzM0OlxcdFxcdFxcdG13aWZpZXhfYmFuZF90b19yYWRpb190eXBlKGJzc19kZXNjLVxcdTAwM2Vic3NfYmFuZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTMzNS1cXHRcXHRcXHRpbnQgZnJlcSA9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzYyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozNjM6XFx0XFx0KmJ1ZmZlciArPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozNjQ6XFx0XFx0cmV0X2xlbiArPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zNjUtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM2OC1cXHRcXHRpZiAocHJpdi1cXHUwMDNlYnNzX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzY5OlxcdFxcdFxcdGh0X2luZm8gPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRpbmZvICopICpidWZmZXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM3MC1cXHRcXHRcXHRtZW1zZXQoaHRfaW5mbywgMCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzcxOlxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRpbmZvKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM3Mi1cXHRcXHRcXHRodF9pbmZvLVxcdTAwM2VoZWFkZXIudHlwZSA9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzc4LVxcdFxcdFxcdG1lbWNweSgodTggKikgaHRfaW5mbyArXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjM3OTpcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM4MC1cXHRcXHRcXHQgICAgICAgKHU4ICopYnNzX2Rlc2MtXFx1MDAzZWJjbl9odF9vcGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM4OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6Mzg5OlxcdFxcdFxcdCpidWZmZXIgKz0gc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0aW5mbyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjM5MDpcXHRcXHRcXHRyZXRfbGVuICs9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGluZm8pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zOTEtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM5My1cXHRcXHRjaGFuX2xpc3QgPVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozOTQ6XFx0XFx0XFx0KHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2NoYW5fbGlzdF9wYXJhbV9zZXQgKikgKmJ1ZmZlcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzk1LVxcdFxcdG1lbXNldChjaGFuX2xpc3QsIDAsIHN0cnVjdF9zaXplKGNoYW5fbGlzdCwgY2hhbl9zY2FuX3BhcmFtLCAxKSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzk3LVxcdFxcdGNoYW5fbGlzdC1cXHUwMDNlaGVhZGVyLmxlbiA9XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjM5ODpcXHRcXHRcXHRjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IG13aWZpZXhfY2hhbl9zY2FuX3BhcmFtX3NldCkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zOTktXFx0XFx0Y2hhbl9saXN0LVxcdTAwM2VjaGFuX3NjYW5fcGFyYW1bMF0uY2hhbl9udW1iZXIgPVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQwMS1cXHRcXHRjaGFuX2xpc3QtXFx1MDAzZWNoYW5fc2Nhbl9wYXJhbVswXS5yYWRpb190eXBlID1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDAyOlxcdFxcdFxcdG13aWZpZXhfYmFuZF90b19yYWRpb190eXBlKCh1OCkgYnNzX2Rlc2MtXFx1MDAzZWJzc19iYW5kKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDAzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQxNi1cXHRpZiAoYnNzX2Rlc2MtXFx1MDAzZWJjbl9ic3NfY29fMjA0MCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0MTc6XFx0XFx0YnNzX2NvXzIwNDAgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfMjA0MGJzc2NvICopICpidWZmZXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQxOC1cXHRcXHRtZW1zZXQoYnNzX2NvXzIwNDAsIDAsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjQxOTpcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzXzIwNDBic3NjbykpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy00MjAtXFx0XFx0YnNzX2NvXzIwNDAtXFx1MDAzZWhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoV0xBTl9FSURfQlNTX0NPRVhfMjA0MCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDI0LVxcdFxcdG1lbWNweSgodTggKikgYnNzX2NvXzIwNDAgK1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0MjU6XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy00MjYtXFx0XFx0ICAgICAgIGJzc19kZXNjLVxcdTAwM2ViY25fYnNzX2NvXzIwNDAgK1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQyOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDMwOlxcdFxcdCpidWZmZXIgKz0gc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzXzIwNDBic3Njbyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjQzMTpcXHRcXHRyZXRfbGVuICs9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc18yMDQwYnNzY28pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy00MzItXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQzNS1cXHRcXHRoZHIgPSAodm9pZCAqKWJzc19kZXNjLVxcdTAwM2ViY25fZXh0X2NhcDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDM2OlxcdFxcdGV4dF9jYXAgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfZXh0Y2FwICopICpidWZmZXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjQzNzpcXHRcXHRtZW1zZXQoZXh0X2NhcCwgMCwgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2V4dGNhcCkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy00MzgtXFx0XFx0ZXh0X2NhcC1cXHUwMDNlaGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihXTEFOX0VJRF9FWFRfQ0FQQUJJTElUWSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDUwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0NTE6XFx0XFx0KmJ1ZmZlciArPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfZXh0Y2FwKSArIGhkci1cXHUwMDNlbGVuO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0NTI6XFx0XFx0cmV0X2xlbiArPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfZXh0Y2FwKSArIGhkci1cXHUwMDNlbGVuO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy00NTMtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ2MS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDYyOnN0YXRpYyBpbnQgbXdpZmlleF9pc190eF9iYV9zdHJlYW1fcHRyX3ZhbGlkKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjQ2MzpcXHRcXHRcXHRcXHRzdHJ1Y3QgbXdpZmlleF90eF9iYV9zdHJlYW1fdGJsICp0eF90YmxfcHRyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy00NjQte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0NjU6XFx0c3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqdHhfYmFfdHNyX3RibDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDY2LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ4MC0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDgxOnZvaWQgbXdpZmlleF8xMW5fZGVsZXRlX3R4X2JhX3N0cmVhbV90YmxfZW50cnkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDgyOlxcdFxcdFxcdFxcdHN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKnR4X2JhX3Rzcl90YmwpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ4My17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ4NC1cXHRpZiAoIXR4X2JhX3Rzcl90YmwgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDg1OlxcdCAgICBtd2lmaWV4X2lzX3R4X2JhX3N0cmVhbV9wdHJfdmFsaWQocHJpdiwgdHhfYmFfdHNyX3RibCkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ4Ni1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ4Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDg4OlxcdG13aWZpZXhfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIElORk8sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ4OS1cXHRcXHQgICAgXFxcImluZm86IHR4X2JhX3Rzcl90YmwgJXBcXFxcblxcXCIsIHR4X2JhX3Rzcl90YmwpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ5OC0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDk5OnZvaWQgbXdpZmlleF8xMW5fZGVsZXRlX2FsbF90eF9iYV9zdHJlYW1fdGJsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTUwMC17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTUwMS1cXHRpbnQgaTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NTAyOlxcdHN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKmRlbF90YmxfcHRyLCAqdG1wX25vZGU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTUwMy1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy01MDYtXFx0XFx0XFx0XFx0IFxcdTAwMjZwcml2LVxcdTAwM2V0eF9iYV9zdHJlYW1fdGJsX3B0ciwgbGlzdClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NTA3OlxcdFxcdG13aWZpZXhfMTFuX2RlbGV0ZV90eF9iYV9zdHJlYW1fdGJsX2VudHJ5KHByaXYsIGRlbF90YmxfcHRyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNTA4LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwcml2LVxcdTAwM2V0eF9iYV9zdHJlYW1fdGJsX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTUyMC0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NTIxOnN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo1MjI6bXdpZmlleF9nZXRfYmFfdGJsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGludCB0aWQsIHU4ICpyYSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNTIzLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NTI0OlxcdHN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKnR4X2JhX3Rzcl90Ymw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTUyNS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy01NDEtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjU0Mjp2b2lkIG13aWZpZXhfY3JlYXRlX2JhX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqcmEsIGludCB0aWQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjU0MzpcXHRcXHRcXHQgICBlbnVtIG13aWZpZXhfYmFfc3RhdHVzIGJhX3N0YXR1cylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNTQ0LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NTQ1OlxcdHN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKm5ld19ub2RlO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo1NDY6XFx0c3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKnJhX2xpc3Q7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTU0Ny1cXHRpbnQgdGlkX2Rvd247XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTU0OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NTQ5OlxcdGlmICghbXdpZmlleF9nZXRfYmFfdGJsKHByaXYsIHRpZCwgcmEpKSB7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjMzOjI1LjI0MTExMDY4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3OTE2ODMxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgYG13aWZpZXhgIERyaXZlcjogQSBUYXJnZXRlZCBBcHByb2FjaCoqXG5cbk9rYXksIHNvIHRoZSBgbXdpZmlleGAgZHJpdmVyIGlzIHRoZSB0YXJnZXQuIEl0J3MgbXVsdGktZmFjZXRlZCwgc3VwcG9ydGluZyBVU0IsIFBDSWUsIGFuZCBTRElPLCB3aGljaCBpcyBnb29kIG5ld3MgYmVjYXVzZSB0aGF0IG9wZW5zIHVwIHNldmVyYWwgZnV6emluZyBhdmVudWVzLiBTcGVjaWZpY2FsbHksIHNpbmNlIGl0IHN1cHBvcnRzIFVTQiwgdGhlIGR1bW15IEhDRCAoVVNCIGZ1enplcikgYmVjb21lcyBhIHZpYWJsZSB0b29sLCBhbmQgdGhhdCBpbW1lZGlhdGVseSBnZXRzIG15IGF0dGVudGlvbi5cblxuVGhlIGNvcmUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZnV6emluZyBlZmZvcnQgYWN0dWFsbHkgKndvcnRoKiB0aGUgdGltZT8gWWVzLCBkZWZpbml0ZWx5LiBJdCBoYW5kbGVzIFdpLUZpIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpLCB3aGljaCBhcmUgbm90b3Jpb3VzbHkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgcmlwZSBmb3IgdnVsbmVyYWJpbGl0eSBkaXNjb3ZlcnkuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aXRoaW4gYG13aWZpZXhfc2VhcmNoX291aV9pbl9pZWAuIE5pY2UhXG5cbk5vdywgdGhlIGNydWNpYWwgc3RlcDogRGV0ZXJtaW5pbmcgdGhlIGF0dGFjayBzdXJmYWNlIGZvciBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYC4gQ2FuIHRoaXMgZnVuY3Rpb24gYmUgdHJpZ2dlcmVkIGZyb20gdGhlIGhvc3QsIG9yIGlzIGl0IGV4Y2x1c2l2ZWx5IGEgZGV2aWNlLXNpZGUgcm91dGluZT8gSXQgYXBwZWFycyB0aGUgZnVuY3Rpb24gcGFyc2VzIElFcyBmcm9tIGBic3NfZGVzYy1cdTAwM2ViY25fcnNuX2llYCBhbmQgYGJzc19kZXNjLVx1MDAzZWJjbl93cGFfaWVgLiBBaGEsIHRoZXNlIGFyZSBiZWFjb24vcHJvYmUgcmVzcG9uc2UgSUVzLCBhbmQgdGhlc2UgY29tZSBmcm9tIHRoZSBBUCEgU28sIHRoZSBkZXZpY2UvZmlybXdhcmUgY29udHJvbHMgdGhlIGRhdGEgd2UncmUgbG9va2luZyBhdC5cblxuVGhpcyBpcyB3aGVyZSB0aGUgYXJjaGl0ZWN0dXJlIGtub3dsZWRnZSBjb21lcyBpbiBoYW5keS4gYG13aWZpZXhgJ3MgZmlybXdhcmUgaGFuZGxlcyB0aGUgV2ktRmkgTUFDLCBhbmQgdGhlIGhvc3QgZHJpdmVyIGNvbW11bmljYXRlcyB2aWEgY29tbWFuZHMgYW5kIGV2ZW50cy4gS25vd2luZyB0aGlzLCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZGV0ZXJtaW5lIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSB2dWxuZXJhYmxlIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgbXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnRgIGFuZCBgbXdpZmlleF9pc193cGFfb3VpX3ByZXNlbnRgIGFyZSBjYWxsZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluZGljYXRpb24gb24gd2hlcmUgdG8gZm9jdXMgdGhlIGZ1enppbmcgZWZmb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc3NCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozMzozMS4wMzI3OTU2MjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNTk3ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfaXNfcnNuX291aV9wcmVzZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0xNDc9c3RhdGljIHU4XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoxNDg6bXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnQoc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MsIHUzMiBjaXBoZXIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNDkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0zNDQ9bXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtNDA4LVxcdFxcdFxcdCAgICAgYnNzX2Rlc2MtXFx1MDAzZWJjbl9odF9jYXApIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzo0MDk6XFx0XFx0XFx0ICAgICFtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudChic3NfZGVzYyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTQxMC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRDSVBIRVJfU1VJVEVfQ0NNUCkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTQxMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjQxMjpcXHRcXHRcXHRcXHRpZiAobXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTQxMy1cXHRcXHRcXHRcXHRcXHRcXHQoYnNzX2Rlc2MsIENJUEhFUl9TVUlURV9US0lQKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozMzozMS4xNDYzOTc5MThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMzODc0NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBtd2lmaWV4IE5ldHdvcmsgQ29tcGF0aWJpbGl0eSBDaGVjayoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhlIGBtd2lmaWV4YCBkcml2ZXIgYWdhaW4uIEkgc2VlIHRoYXQgYG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlYCBpcyBhIGtleSBmdW5jdGlvbiwgYW5kIGl0J3MgYmVpbmcgaW52b2tlZCBkdXJpbmcgYm90aCB0aGUgc2NhbiByZXN1bHQgcHJvY2Vzc2luZyBhbmQgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwaGFzZXMuIFRoaXMgc3VnZ2VzdHMgaXQncyBhIGNyaXRpY2FsIGdhdGVrZWVwZXIgZm9yIGRldGVybWluaW5nIHdoaWNoIG5ldHdvcmtzIHRoZSBkZXZpY2Ugd2lsbCBldmVuICpjb25zaWRlciouIEludGVyZXN0aW5nLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhhdCBnYXRla2VlcGluZy4gTXkgbmV4dCBzdGVwLCBuYXR1cmFsbHksIGlzIHRvIHRyYWNlIGFsbCB0aGUgY2FsbCBzaXRlcyBvZiBgbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVgLiBJIG5lZWQgdG8gcHJlY2lzZWx5IHVuZGVyc3RhbmQgKndoZW4qIGFuZCAqd2h5KiB0aGlzIGNvbXBhdGliaWxpdHkgY2hlY2sgaXMgYmVpbmcgcnVuLiBJcyBpdCBqdXN0IGFib3V0IHNlY3VyaXR5IHNldHRpbmdzPyBJbmZyYXN0cnVjdHVyZSBtb2RlIHZlcnN1cyBhZC1ob2M/IFJlZ3VsYXRvcnkgZG9tYWluIGNvbnNpZGVyYXRpb25zPyBJJ2xsIHBpbnBvaW50IGV2ZXJ5IGNhbGwsIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgY29udGV4dCwgYW5kIHRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IG5ldHdvcmsgY29tcGF0aWJpbGl0eSBpcyBkZXRlcm1pbmVkIHdpdGhpbiB0aGlzIGRyaXZlci4gS25vd2luZyB0aGUgc3BlY2lmaWMgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgYSBuZXR3b3JrIHRvIGJlIGNvbnNpZGVyZWQgaW5jb21wYXRpYmxlIHdpbGwgYmUgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGFueSBjb25uZWN0aW9uIGlzc3Vlcy4gQW5kLCBwb3RlbnRpYWxseSwgaWRlbnRpZnlpbmcgYW55IHZ1bG5lcmFiaWxpdGllcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTgxMywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjMzOjM0Ljc4MDI3NTU2OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDQ2OTM2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MzQzPXN0YXRpYyBzMzJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjM0NDptd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMzQ1LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLCB1MzIgbW9kZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MTYxNj1pbnQgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTYyOC1cXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM6MTYyOTpcXHRcXHRcXHRyZXQgPSBtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZShwcml2LCBic3NfZGVzYyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE2MzAtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHByaXYtXFx1MDAzZWJzc19tb2RlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzM6MzQuODU0NzQ5Mzc0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3OTI0NTU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5YCdzIEludm9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgYG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5YC4gVGhlIGNvcmUgcXVlc3Rpb24gaXM6IHdoZW4gZG9lcyB0aGlzIGZ1bmN0aW9uIGdldCBjYWxsZWQgaW4gdGhlIGBtd2lmaWV4YCBkcml2ZXI/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBuZXR3b3JrIGNvbXBhdGliaWxpdHkgY2hlY2tzIGFuZCBob3cgdGhleSBhcmUgaW1wbGVtZW50ZWQuIFRoaXMgZnVuY3Rpb24ncyB0aW1pbmcgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBkcml2ZXIgYmVoYXZpb3IsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIGFueSBjb21wYXRpYmlsaXR5LXJlbGF0ZWQgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSB0cmlnZ2VycywgdGhlIHN1cnJvdW5kaW5nIGNvbnRyb2wgZmxvdywgYW5kIGFueSBkZXBlbmRlbmNpZXMgdGhpcyBmdW5jdGlvbiBoYXMuIFNvLCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZmlndXJlIHRoaXMgb3V0IGFuZCBzdGFydCB3aXRoIHRoZSBjYWxsZXIgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDI1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzM6MzcuOTMzOTk3ODMzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDk2Mzc0OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oPTE1NDE9aW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE1NDItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19lbnRyeSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaDoxNTQzOmludCBtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTU0NC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTE1OTE9aW50IG13aWZpZXhfY21kXzgwMl8xMV9zY2FuKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE2MTUtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoxNjE2OmludCBtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTYxNy1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MTcwMz1zdGF0aWMgaW50IG13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNzE3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM6MTcxODpcXHRyZXQgPSBtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eShwcml2LCBic3NfZGVzYyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNzE5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM9MzE4PWludCBtd2lmaWV4X2Jzc19zdGFydChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtMzYwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYzozNjE6XFx0XFx0cmV0ID0gbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHkocHJpdiwgYnNzX2Rlc2MpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy0zNjItXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy00MDgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jOjQwOTpcXHRcXHRyZXQgPSBtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eShwcml2LCBic3NfZGVzYyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jLTQxMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzM6MzguMTgzNjQ2Mzk2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTYyOTYxNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBtd2lmaWV4IENvbmZpZ3VyYXRpb24gYW5kIFBvdGVudGlhbCBTZWN1cml0eSBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHRoZSBwb2ludCB3aGVuIGEgc3RhdGlvbiBjb25uZWN0cyB0byBhIEJhc2ljIFNlcnZpY2UgU2V0IChCU1MpIG9yIGluaXRpYXRlcyBvbmUuIFRoZSBCU1MgZGVzY3JpcHRvciwgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbmV0d29yaywgZ2V0cyBwb3B1bGF0ZWQgZWl0aGVyIGZyb20gdGhlIHJlc3VsdHMgb2YgYSBzY2FuIG9yIGRpcmVjdGx5IGZyb20gZXZlbnRzIHJlcG9ydGVkIGJ5IHRoZSBmaXJtd2FyZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCBwYXJ0aWN1bGFybHkgc2luY2UgbXdpZmlleCBzdXBwb3J0cyBVU0IuIFRoaXMgbWVhbnMgdGhhdCBmaXJtd2FyZSByZXNwb25zZXMsIHdoaWNoIGluY2x1ZGUgdGhlIGVzc2VudGlhbCBiZWFjb24gYW5kIHByb2JlIHJlc3BvbnNlIGRhdGEsIGFyZSBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIGZ1enppbmcgdGhyb3VnaCB0aGUgVVNCIGludGVyZmFjZS4gSXQgc291bmRzIGxpa2UgYSBzb2xpZCBhdHRhY2sgdmVjdG9yLCBidXQgbGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBlbmFibGVkLCBhbmQgaWYgdGhpcyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBpcyBleHBvc2VkLCBvciBpZiBpdCBjYW4gYmUgYWRkcmVzc2VkIHdpdGggYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmb3IgbXdpZmlleCBhbmQgc2VlIHdoYXQgYnVpbGQgb3B0aW9ucyBhcmUgaW4gcGxheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNvbmZpZ3VyZWQgdG8gc2VlIGp1c3QgaG93IGV4cG9zZWQgdGhpcyBtaWdodCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzNjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozMzo0Mi40OTk5NDQ3MjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1Mzc2Nzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNV0lGSUVYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzoyOmNvbmZpZyBNV0lGSUVYXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBXaUZpLUV4IERyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTExLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjEyOmNvbmZpZyBNV0lGSUVYX1NESU9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xMy1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgU0Q4Nzg2L1NEODc4Ny9TRDg3OTcvU0Q4ODg3L1NEODg5Ny9TRDg5NzcvU0Q4OTc4L1NEODk4Ny9TRDg5OTdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0yNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzoyNTpjb25maWcgTVdJRklFWF9QQ0lFXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMjYtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFBDSUUgODc2Ni84ODk3Lzg5OTdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzozNzpjb25maWcgTVdJRklFWF9VU0JcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zOC1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgVVNCODc2Ni84Nzk3Lzg5OTdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjMzOjQyLjU2NTMzMDM1N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTMzNDc3MTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTVdJRklFWCBDb25maWd1cmF0aW9uIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE1XSUZJRVhgIGFuZCBgTVdJRklFWF9VU0JgIOKAkyB0aG9zZSBhcmUgdGhlIGtleSBjb25maWdzIGZvciB0aGUgTWFydmVsbCBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBmdXp6aW5nLiBSaWdodCwgYE1XSUZJRVhgIGlzIHRoZSBjb3JlIGRyaXZlciwgYW5kIGBNV0lGSUVYX1VTQmAgaXMgdGhlIFVTQi1zcGVjaWZpYyBkcml2ZXIuIFRoZSBpZGVhIGlzIHRvIGxldmVyYWdlIHRoZSBVU0IgZHJpdmVyIGZvciBmdXp6aW5nLiBJZiB3ZSBlbmFibGUgYE1XSUZJRVhfVVNCYCwgdGhhdCBnaXZlcyB1cyBhIGRpcmVjdCBlbnRyeSBwb2ludCB2aWEgdGhlIFVTQiBpbnRlcmZhY2UsIHdoaWNoIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IHF1ZXN0aW9uIG5vdyBpczogQ2FuIHdlIHJlYWNoIHNvbWV0aGluZyBsaWtlIGBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVgIChvciBzaW1pbGFyLCBsaWtlIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGluZm9ybWF0aW9uIGVsZW1lbnRzKSBmcm9tIGEgVVNCIGZ1enppbmcgcGVyc3BlY3RpdmU/IEl04oCZcyBjcnVjaWFsIHRvIG1hcCB0aGF0IG91dC4gVGhpbmtpbmcgYWJvdXQgaXQsIHRoZSBVU0IgZHJpdmVyIHNob3VsZCBiZSByZWNlaXZpbmcgZGF0YSBmcm9tIHRoZSBVU0IgZGV2aWNlIGl0c2VsZiBhbmQgdGhlbiBwYXNzaW5nIGl0IGFsb25nIHRvIHRoZSBjb3JlIGRyaXZlci4gU28sIG15IGZvY3VzIHNob3VsZCBiZSBvbiBmdW5jdGlvbnMgd2l0aGluIHRoZSBVU0IgZHJpdmVyIHRoYXQgaGFuZGxlIGluY29taW5nIGRhdGEuIEkgbmVlZCB0byBkaWcgaW50byBzb21ldGhpbmcgbGlrZSBgbXdpZmlleF91c2JfcnhfY29tcGxldGVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgc2VlIGhvdyB0aGUgZGF0YSBmbG93IGxvb2tzLCB0aGUgZGF0YSBoYW5kbGluZyBhbmQgaG93IGluZm9ybWF0aW9uIGZyb20gdGhlIFVTQiBpbnRlcmZhY2UgaW50ZWdyYXRlcyB3aXRoIHRoZSBjb3JlIGZ1bmN0aW9ucy4gSSB0aGluayB0aGF0J3MgdGhlIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTAzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjMzOjQ2LjY5ODgwOTk1NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzODk2NzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfdXNiX3J4X2NvbXBsZXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jPTQ2PXN0YXRpYyBpbnQgbXdpZmlleF91c2JfcmVjdihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTE1MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmM6MTUyOnN0YXRpYyB2b2lkIG13aWZpZXhfdXNiX3J4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMTUzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYz0yODU9c3RhdGljIGludCBtd2lmaWV4X3VzYl9zdWJtaXRfcnhfdXJiKHN0cnVjdCB1cmJfY29udGV4dCAqY3R4LCBpbnQgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYy0zMTUtXFx0XFx0XFx0XFx0IHVzYl9yY3ZpbnRwaXBlKGNhcmQtXFx1MDAzZXVkZXYsIGN0eC1cXHUwMDNlZXApLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYzozMTY6XFx0XFx0XFx0XFx0IGN0eC1cXHUwMDNlc2tiLVxcdTAwM2VkYXRhLCBzaXplLCBtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMzE3LVxcdFxcdFxcdFxcdCAodm9pZCAqKWN0eCwgY2FyZC1cXHUwMDNlcnhfY21kX2ludGVydmFsKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYy0zMjAtXFx0XFx0XFx0XFx0ICB1c2JfcmN2YnVsa3BpcGUoY2FyZC1cXHUwMDNldWRldiwgY3R4LVxcdTAwM2VlcCksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jOjMyMTpcXHRcXHRcXHRcXHQgIGN0eC1cXHUwMDNlc2tiLVxcdTAwM2VkYXRhLCBzaXplLCBtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMzIyLVxcdFxcdFxcdFxcdCAgKHZvaWQgKiljdHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozMzo0Ni44MTI3MTE3NzZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzNTYxMzY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGJhc2VkIG9uIHRoYXQgcHJvY2VzcyBkZXNjcmlwdGlvbi5cblxuKipNeSBBbmFseXNpcyBvZiB0aGUgVVNCIFJlY2VpdmUgUGF0aCoqXG5cbkFscmlnaHQsIHNvIHRoZSBgbXdpZmlleF91c2JfcnhfY29tcGxldGVgIGZ1bmN0aW9uIGlzIHRoZSBpbml0aWFsIGVudHJ5IHBvaW50IGZvciBpbmNvbWluZyBkYXRhIG9uIHRoZSBVU0IgYnVzIOKAkyB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBkYXRhIEknbSBnZXR0aW5nIGZyb20gdGhlcmUgaXMgaGFuZGVkIG9mZiB0byBgbXdpZmlleF91c2JfcmVjdmAuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gYmVnaW5zLCB3aGVyZSBJIGV4cGVjdCB0aGUgZGF0YSBpcyBmdXJ0aGVyIGV4YW1pbmVkIGFuZCBwcm9iYWJseSBwYXJzZWQuIEl0J3MgbGlrZWx5IGBtd2lmaWV4X3VzYl9yZWN2YCB0aGVuIGNhbGxzIGEgaGFuZGxlciBmdW5jdGlvbiBsaWtlIGBtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXRgLCBvciBzb21ldGhpbmcgdmVyeSBzaW1pbGFyLCB0byBhY3R1YWxseSAqZG8qIHNvbWV0aGluZyB3aXRoIHRoZSByZWNlaXZlZCBkYXRhLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2NhbiByZXN1bHRzIGZsb3cgdGhyb3VnaCBhbGwgb2YgdGhpcy4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWMgdGhyb3VnaCB0aGVzZSBmdW5jdGlvbnMgdG8gc2VlIGhvdyB0aGUgV2ktRmkgc2NhbiBkYXRhIG1ha2VzIGl0cyB3YXkgdG8gdGhlIGFwcHJvcHJpYXRlIHByb2Nlc3Npbmcgcm91dGluZXMuIEkgbmVlZCB0byB0cmFjZSB0aGlzIHBhdGggc3BlY2lmaWNhbGx5IGZyb20gdGhlIHBvaW50IHRoYXQgZGF0YSBpcyByZWNlaXZlZCBvbiB0aGUgVVNCIGFsbCB0aGUgd2F5IHRvIGl0cyBmaW5hbCBmb3JtLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NjMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozMzo1MC43NDgzMjcyMzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5ODAyOTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfaGFuZGxlX3J4X3BhY2tldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9MTc0PXN0YXRpYyBpbnQgbXdpZmlleF9wcm9jZXNzX3J4KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTIwNC1cXHRcXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6MjA1OlxcdFxcdFxcdG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldChhZGFwdGVyLCBza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMjA2LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg9MTEwMj12b2lkIG13aWZpZXhfcHJvY2Vzc19hc3NvY19yZXNwKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTEwMzppbnQgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xMTA0LVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvcGNpZS5jPTE1MjY9c3RhdGljIGludCBtd2lmaWV4X3BjaWVfcHJvY2Vzc19yZWN2X2RhdGEoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9wY2llLmMtMTU4OC1cXHRcXHRcXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9wY2llLmM6MTU4OTpcXHRcXHRcXHRcXHRtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXQoYWRhcHRlciwgc2tiX2RhdGEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9wY2llLmMtMTU5MC1cXHRcXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jPTE1OTM9c3RhdGljIHZvaWQgbXdpZmlleF9kZWFnZ3Jfc2Rpb19wa3Qoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmMtMTYzMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jOjE2MzQ6XFx0XFx0bXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KGFkYXB0ZXIsIHNrYl9kZWFnZ3IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmMtMTYzNS1cXHRcXHRkYXRhICs9IGJsa19zaXplO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYz0xNjQ3PXN0YXRpYyBpbnQgbXdpZmlleF9kZWNvZGVfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jLTE2ODQtXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jOjE2ODU6XFx0XFx0XFx0bXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KGFkYXB0ZXIsIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYy0xNjg2LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90eHJ4LmMtMjMtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYzoyNDppbnQgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYy0yNS1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jLTU5LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jOjYwOkVYUE9SVF9TWU1CT0xfR1BMKG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYy02MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzM6NTAuODI4MTM1ODAyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzEzMDUwMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKlJYIFBhY2tldCBQcm9jZXNzaW5nIERpc2NyZXBhbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgTWFydmVsbCBXaS1GaSBkcml2ZXIgY29kZSBhZ2Fpbi4gSSB3YXMganVzdCBsb29raW5nIGF0IGBtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXRgLCBhbmQgaXQncyBzdHJpa2luZyBtZSBhcyBiZWluZyAqZXhjbHVzaXZlbHkqIGZvY3VzZWQgb24gZGF0YSBwYWNrZXRzLiBUaGF0J3Mgd2hhdCB0aGUgbmFtZSBhbmQgdGhlIGNvZGUgc2VlbSB0byBpbmRpY2F0ZS4gQnV0IHRoYXQgY2FuJ3QgYmUgdGhlICp3aG9sZSogc3RvcnksIGNhbiBpdD8gV2hlcmUgYXJlIHRoZSBjb21tYW5kIGFuZCBldmVudCBwYWNrZXRzIGhhbmRsZWQ/IFdlIGNhbid0IGp1c3QgYmUgZHJvcHBpbmcgdGhvc2Ugb24gdGhlIGZsb29yIVxuXG5BaCwgcmlnaHQsIG5vdyBpdCdzIGNvbWluZyBiYWNrIHRvIG1lLiBUaGUgVVNCIHJlY2VpdmUgY29tcGxldGlvbiBoYW5kbGVyLCBgbXdpZmlleF91c2JfcnhfY29tcGxldGVgLCAqdGhhdCdzKiB0aGUgb25lIHRoYXQgc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIGJvdGggZGF0YSBwYWNrZXRzIGFuZCB0aG9zZSBjb21tYW5kL2V2ZW50IHBhY2tldHMuIEl0J3MgaGFuZGxpbmcgdGhlIGNvbXBsZXRpb24gb2YgYSByZWNlaXZlIG9wZXJhdGlvbiBmcm9tIHRoZSBVU0IgaW50ZXJmYWNlLCBzbyBpdCBtYWtlcyBzZW5zZSB0aGF0IGl0IHdvdWxkIG5lZWQgdG8gbWFrZSB0aGUgZGlzdGluY3Rpb24uIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG15IGF0dGVudGlvbiB0aGVyZSB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTc5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzM6NTQuMzk5NDQ0MDU3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjI2MDQ4NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXdpZmlleF9wcm9jZXNzX3J4X2NvbW1hbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzM6NTQuNDU1NzI3OTIzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODE4OTM1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqUmV2aXNpdGluZyBtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZSoqXG5cbk9rYXksIGxldCdzIGNpcmNsZSBiYWNrIHRvIGBtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZWAuIEkgbmVlZCB0byByZS1leGFtaW5lIHRoYXQgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIHJlY2VudCByZXBvcnRzLiBHaXZlbiB0aGUgaW50cmljYWNpZXMgb2YgdGhlIFVTQiByZWNlaXZlIHBhdGggaW4gdGhlIE1hcnZlbGwgV2lGaSBkcml2ZXIsIGl0J3MgY3JpdGljYWwgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyB3aXRoIHRoZSBETUEgZW5naW5lIGx1cmtpbmcgaW4gdGhhdCByb3V0aW5lLiBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoZSBoYW5kbGluZyBvZiBkZXNjcmlwdG9yIGNoYWlucywgYnVmZmVyIG93bmVyc2hpcCwgYW5kIGludGVycnVwdCBjb2FsZXNjaW5nLiBUaGUgcGVyZm9ybWFuY2UgaXNzdWVzIHdlIGFyZSBzZWVpbmcgZmVlbCBsaWtlIHRoZXkgY291bGQgc3RlbSBmcm9tIGltcHJvcGVyIGhhbmRsaW5nIG9mIHJlY2VpdmUgYnVmZmVycywgb3IgcG90ZW50aWFsbHkgYW4gaXNzdWUgaW4gdGhlIGludGVycnVwdCBzZXJ2aWNpbmcgZmxvdy4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IGFnYWluIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgYW5kIGhvdyB0aGV5IGFyZSBhZmZlY3RlZCBieSBkaWZmZXJlbnQgaG9zdCBjb25maWd1cmF0aW9ucyBhbmQgZHJpdmVyIHZlcnNpb25zLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgd2hldGhlciBlcnJvcnMgYXJlIGdyYWNlZnVsbHkgbWFuYWdlZCB0byBwcmV2ZW50IGNhc2NhZGluZyBmYWlsdXJlcy4gSXTigJlzIHRpbWUgZm9yIGEgZGVlcCBkaXZlLCBhZ2Fpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1MDMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozMzo1Ny40Mzc2MjQyNzlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTIsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUyOlxcdHN0YXRpYyB2b2lkIG13aWZpZXhfdXNiX3J4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4gMTUzOlxcdHtcXG4gMTU0OlxcdFxcdHN0cnVjdCB1cmJfY29udGV4dCAqY29udGV4dCA9IChzdHJ1Y3QgdXJiX2NvbnRleHQgKil1cmItXFx1MDAzZWNvbnRleHQ7XFxuIDE1NTpcXHRcXHRzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gY29udGV4dC1cXHUwMDNlYWRhcHRlcjtcXG4gMTU2OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBjb250ZXh0LVxcdTAwM2Vza2I7XFxuIDE1NzpcXHRcXHRzdHJ1Y3QgdXNiX2NhcmRfcmVjICpjYXJkO1xcbiAxNTg6XFx0XFx0aW50IHJlY3ZfbGVuZ3RoID0gdXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoO1xcbiAxNTk6XFx0XFx0aW50IHNpemUsIHN0YXR1cztcXG4gMTYwOlxcdFxcbiAxNjE6XFx0XFx0aWYgKCFhZGFwdGVyIHx8ICFhZGFwdGVyLVxcdTAwM2VjYXJkKSB7XFxuIDE2MjpcXHRcXHRcXHRwcl9lcnIoXFxcIm13aWZpZXggYWRhcHRlciBvciBjYXJkIHN0cnVjdHVyZSBpcyBub3QgdmFsaWRcXFxcblxcXCIpO1xcbiAxNjM6XFx0XFx0XFx0cmV0dXJuO1xcbiAxNjQ6XFx0XFx0fVxcbiAxNjU6XFx0XFxuIDE2NjpcXHRcXHRjYXJkID0gKHN0cnVjdCB1c2JfY2FyZF9yZWMgKilhZGFwdGVyLVxcdTAwM2VjYXJkO1xcbiAxNjc6XFx0XFx0aWYgKGNhcmQtXFx1MDAzZXJ4X2NtZF9lcCA9PSBjb250ZXh0LVxcdTAwM2VlcClcXG4gMTY4OlxcdFxcdFxcdGF0b21pY19kZWMoXFx1MDAyNmNhcmQtXFx1MDAzZXJ4X2NtZF91cmJfcGVuZGluZyk7XFxuIDE2OTpcXHRcXHRlbHNlXFxuIDE3MDpcXHRcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZjYXJkLVxcdTAwM2VyeF9kYXRhX3VyYl9wZW5kaW5nKTtcXG4gMTcxOlxcdFxcbiAxNzI6XFx0XFx0aWYgKHJlY3ZfbGVuZ3RoKSB7XFxuIDE3MzpcXHRcXHRcXHRpZiAodXJiLVxcdTAwM2VzdGF0dXMgfHxcXG4gMTc0OlxcdFxcdFxcdCAgICB0ZXN0X2JpdChNV0lGSUVYX1NVUlBSSVNFX1JFTU9WRUQsIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V3b3JrX2ZsYWdzKSkge1xcbiAxNzU6XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXFxuIDE3NjpcXHRcXHRcXHRcXHRcXHQgICAgXFxcIlVSQiBzdGF0dXMgaXMgZmFpbGVkOiAlZFxcXFxuXFxcIiwgdXJiLVxcdTAwM2VzdGF0dXMpO1xcbiAxNzc6XFx0XFx0XFx0XFx0LyogRG8gbm90IGZyZWUgc2tiIGluIGNhc2Ugb2YgY29tbWFuZCBlcCAqL1xcbiAxNzg6XFx0XFx0XFx0XFx0aWYgKGNhcmQtXFx1MDAzZXJ4X2NtZF9lcCAhPSBjb250ZXh0LVxcdTAwM2VlcClcXG4gMTc5OlxcdFxcdFxcdFxcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIDE4MDpcXHRcXHRcXHRcXHRnb3RvIHNldHVwX2Zvcl9uZXh0O1xcbiAxODE6XFx0XFx0XFx0fVxcbiAxODI6XFx0XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2UgcmVjdl9sZW5ndGgpXFxuIDE4MzpcXHRcXHRcXHRcXHRza2JfdHJpbShza2IsIHJlY3ZfbGVuZ3RoKTtcXG4gMTg0OlxcdFxcdFxcdGVsc2VcXG4gMTg1OlxcdFxcdFxcdFxcdHNrYl9wdXQoc2tiLCByZWN2X2xlbmd0aCAtIHNrYi1cXHUwMDNlbGVuKTtcXG4gMTg2OlxcdFxcbiAxODc6XFx0XFx0XFx0c3RhdHVzID0gbXdpZmlleF91c2JfcmVjdihhZGFwdGVyLCBza2IsIGNvbnRleHQtXFx1MDAzZWVwKTtcXG4gMTg4OlxcdFxcbiAxODk6XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgSU5GTyxcXG4gMTkwOlxcdFxcdFxcdFxcdCAgICBcXFwiaW5mbzogcmVjdl9sZW5ndGg9JWQsIHN0YXR1cz0lZFxcXFxuXFxcIixcXG4gMTkxOlxcdFxcdFxcdFxcdCAgICByZWN2X2xlbmd0aCwgc3RhdHVzKTtcXG4gMTkyOlxcdFxcdFxcdGlmIChzdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7XFxuIDE5MzpcXHRcXHRcXHRcXHRtd2lmaWV4X3F1ZXVlX21haW5fd29yayhhZGFwdGVyKTtcXG4gMTk0OlxcdFxcbiAxOTU6XFx0XFx0XFx0XFx0LyogdXJiIGZvciBkYXRhX2VwIGlzIHJlLXN1Ym1pdHRlZCBub3c7XFxuIDE5NjpcXHRcXHRcXHRcXHQgKiB1cmIgZm9yIGNtZF9lcCB3aWxsIGJlIHJlLXN1Ym1pdHRlZCBpbiBjYWxsYmFja1xcbiAxOTc6XFx0XFx0XFx0XFx0ICogbXdpZmlleF91c2JfcmVjdl9jb21wbGV0ZVxcbiAxOTg6XFx0XFx0XFx0XFx0ICovXFxuIDE5OTpcXHRcXHRcXHRcXHRpZiAoY2FyZC1cXHUwMDNlcnhfY21kX2VwID09IGNvbnRleHQtXFx1MDAzZWVwKVxcbiAyMDA6XFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAyMDE6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMjAyOlxcdFxcdFxcdFxcdGlmIChzdGF0dXMgPT0gLTEpXFxuIDIwMzpcXHRcXHRcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG4gMjA0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwicmVjZWl2ZWQgZGF0YSBwcm9jZXNzaW5nIGZhaWxlZCFcXFxcblxcXCIpO1xcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHRcXHRcXHQvKiBEbyBub3QgZnJlZSBza2IgaW4gY2FzZSBvZiBjb21tYW5kIGVwICovXFxuIDIwNzpcXHRcXHRcXHRcXHRpZiAoY2FyZC1cXHUwMDNlcnhfY21kX2VwICE9IGNvbnRleHQtXFx1MDAzZWVwKVxcbiAyMDg6XFx0XFx0XFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gMjA5OlxcdFxcdFxcdH1cXG4gMjEwOlxcdFxcdH0gZWxzZSBpZiAodXJiLVxcdTAwM2VzdGF0dXMpIHtcXG4gMjExOlxcdFxcdFxcdGlmICghdGVzdF9iaXQoTVdJRklFWF9JU19TVVNQRU5ERUQsIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V3b3JrX2ZsYWdzKSkge1xcbiAyMTI6XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRkFUQUwsXFxuIDIxMzpcXHRcXHRcXHRcXHRcXHQgICAgXFxcIkNhcmQgaXMgcmVtb3ZlZDogJWRcXFxcblxcXCIsIHVyYi1cXHUwMDNlc3RhdHVzKTtcXG4gMjE0OlxcdFxcdFxcdFxcdHNldF9iaXQoTVdJRklFWF9TVVJQUklTRV9SRU1PVkVELCBcXHUwMDI2YWRhcHRlci1cXHUwMDNld29ya19mbGFncyk7XFxuIDIxNTpcXHRcXHRcXHR9XFxuIDIxNjpcXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbiAyMTc6XFx0XFx0XFx0cmV0dXJuO1xcbiAyMTg6XFx0XFx0fSBlbHNlIHtcXG4gMjE5OlxcdFxcdFxcdC8qIERvIG5vdCBmcmVlIHNrYiBpbiBjYXNlIG9mIGNvbW1hbmQgZXAgKi9cXG4gMjIwOlxcdFxcdFxcdGlmIChjYXJkLVxcdTAwM2VyeF9jbWRfZXAgIT0gY29udGV4dC1cXHUwMDNlZXApXFxuIDIyMTpcXHRcXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbiAyMjI6XFx0XFxuIDIyMzpcXHRcXHRcXHQvKiBmYWxsIHRocm91Z2ggc2V0dXBfZm9yX25leHQgKi9cXG4gMjI0OlxcdFxcdH1cXG4gMjI1OlxcdFxcbiAyMjY6XFx0c2V0dXBfZm9yX25leHQ6XFxuIDIyNzpcXHRcXHRpZiAoY2FyZC1cXHUwMDNlcnhfY21kX2VwID09IGNvbnRleHQtXFx1MDAzZWVwKVxcbiAyMjg6XFx0XFx0XFx0c2l6ZSA9IE1XSUZJRVhfUlhfQ01EX0JVRl9TSVpFO1xcbiAyMjk6XFx0XFx0ZWxzZVxcbiAyMzA6XFx0XFx0XFx0c2l6ZSA9IE1XSUZJRVhfUlhfREFUQV9CVUZfU0laRTtcXG4gMjMxOlxcdFxcbiAyMzI6XFx0XFx0aWYgKGNhcmQtXFx1MDAzZXJ4X2NtZF9lcCA9PSBjb250ZXh0LVxcdTAwM2VlcCkge1xcbiAyMzM6XFx0XFx0XFx0bXdpZmlleF91c2Jfc3VibWl0X3J4X3VyYihjb250ZXh0LCBzaXplKTtcXG4gMjM0OlxcdFxcdH0gZWxzZSB7XFxuIDIzNTpcXHRcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXJ4X3BlbmRpbmcpIFxcdTAwM2M9IEhJR0hfUlhfUEVORElORykge1xcbiAyMzY6XFx0XFx0XFx0XFx0bXdpZmlleF91c2Jfc3VibWl0X3J4X3VyYihjb250ZXh0LCBzaXplKTtcXG4gMjM3OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDIzODpcXHRcXHRcXHRcXHRjb250ZXh0LVxcdTAwM2Vza2IgPSBOVUxMO1xcbiAyMzk6XFx0XFx0XFx0fVxcbiAyNDA6XFx0XFx0fVxcbiAyNDE6XFx0XFxuIDI0MjpcXHRcXHRyZXR1cm47XFxuIDI0MzpcXHR9XFxuIDI0NDpcXHRcXG4gMjQ1OlxcdHN0YXRpYyB2b2lkIG13aWZpZXhfdXNiX3R4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4gMjQ2OlxcdHtcXG4gMjQ3OlxcdFxcdHN0cnVjdCB1cmJfY29udGV4dCAqY29udGV4dCA9IChzdHJ1Y3QgdXJiX2NvbnRleHQgKikodXJiLVxcdTAwM2Vjb250ZXh0KTtcXG4gMjQ4OlxcdFxcdHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250ZXh0LVxcdTAwM2VhZGFwdGVyO1xcbiAyNDk6XFx0XFx0c3RydWN0IHVzYl9jYXJkX3JlYyAqY2FyZCA9IGFkYXB0ZXItXFx1MDAzZWNhcmQ7XFxuIDI1MDpcXHRcXHRzdHJ1Y3QgdXNiX3R4X2RhdGFfcG9ydCAqcG9ydDtcXG4gMjUxOlxcdFxcdGludCBpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozMzo1Ny40Mzc3NDk0NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDgxMDk2OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIERhdGEgUmVjZXB0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZm9jdXNpbmcgb24gdGhlIGBtd2lmaWV4X3VzYl9yZWN2YCBmdW5jdGlvbi4gTXkgYW5hbHlzaXMgbmVlZHMgdG8gYmVnaW4gaGVyZSwgYXMgdGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgd2l0aCByZXNwZWN0IHRvIHRoZSByZWNlaXZlZCBkYXRhLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBtYW5hZ2luZyB0aGUgaW5jb21pbmcgdHJhZmZpYy4gV2hhdCBhcmUgdGhlIGtleSBwcm9jZXNzZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBib3R0bGVuZWNrcz8gSSdsbCBiZSBsb29raW5nIGZvciBudWFuY2VzIGhlcmUsIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgYW55IHJlY2VpdmVkIGRhdGEuIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgdGhhdCBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQuIElzIHRoaXMgd2hlcmUgdGhlIGNyaXRpY2FsIGRlY2lzaW9ucyBhcmUgbWFkZSBhYm91dCBwYWNrZXQgcGFyc2luZywgZXJyb3IgaGFuZGxpbmcsIGFuZCB1bHRpbWF0ZWx5LCB3aGVyZSB0aGUgZGF0YSBpcyBwYXNzZWQgdXAgdG8gdGhlIGhpZ2hlciBsYXllcnM/IExldCdzIGZpZ3VyZSB0aGlzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzNzAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjAxLjUxODg0ODY3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ2OlxcdHN0YXRpYyBpbnQgbXdpZmlleF91c2JfcmVjdihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbiAgNDc6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHU4IGVwKVxcbiAgNDg6XFx0e1xcbiAgNDk6XFx0XFx0dTMyIHJlY3ZfdHlwZTtcXG4gIDUwOlxcdFxcdF9fbGUzMiB0bXA7XFxuICA1MTpcXHRcXHRpbnQgcmV0O1xcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHRpZiAoYWRhcHRlci1cXHUwMDNlaHNfYWN0aXZhdGVkKVxcbiAgNTQ6XFx0XFx0XFx0bXdpZmlleF9wcm9jZXNzX2hzX2NvbmZpZyhhZGFwdGVyKTtcXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2MgSU5URl9IRUFERVJfTEVOKSB7XFxuICA1NzpcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG4gIDU4OlxcdFxcdFxcdFxcdCAgICBcXFwiJXM6IGludmFsaWQgc2tiLVxcdTAwM2VsZW5cXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gIDU5OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gIDYwOlxcdFxcdH1cXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0c3dpdGNoIChlcCkge1xcbiAgNjM6XFx0XFx0Y2FzZSBNV0lGSUVYX1VTQl9FUF9DTURfRVZFTlQ6XFxuICA2NDpcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFVkVOVCxcXG4gIDY1OlxcdFxcdFxcdFxcdCAgICBcXFwiJXM6IEVQX0NNRF9FVkVOVFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiAgNjY6XFx0XFx0XFx0c2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIFxcdTAwMjZ0bXAsIElOVEZfSEVBREVSX0xFTik7XFxuICA2NzpcXHRcXHRcXHRyZWN2X3R5cGUgPSBsZTMyX3RvX2NwdSh0bXApO1xcbiAgNjg6XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBJTlRGX0hFQURFUl9MRU4pO1xcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHRcXHRzd2l0Y2ggKHJlY3ZfdHlwZSkge1xcbiAgNzE6XFx0XFx0XFx0Y2FzZSBNV0lGSUVYX1VTQl9UWVBFX0NNRDpcXG4gIDcyOlxcdFxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNlIE1XSUZJRVhfU0laRV9PRl9DTURfQlVGRkVSKSB7XFxuICA3MzpcXHRcXHRcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG4gIDc0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwiQ01EOiBza2ItXFx1MDAzZWxlbiB0b28gbGFyZ2VcXFxcblxcXCIpO1xcbiAgNzU6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLTE7XFxuICA3NjpcXHRcXHRcXHRcXHRcXHRnb3RvIGV4aXRfcmVzdG9yZV9za2I7XFxuICA3NzpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKCFhZGFwdGVyLVxcdTAwM2VjdXJyX2NtZCkge1xcbiAgNzg6XFx0XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgV0FSTiwgXFxcIkNNRDogbm8gY3Vycl9jbWRcXFxcblxcXCIpO1xcbiAgNzk6XFx0XFx0XFx0XFx0XFx0aWYgKGFkYXB0ZXItXFx1MDAzZXBzX3N0YXRlID09IFBTX1NUQVRFX1NMRUVQX0NGTSkge1xcbiAgODA6XFx0XFx0XFx0XFx0XFx0XFx0bXdpZmlleF9wcm9jZXNzX3NsZWVwX2NvbmZpcm1fcmVzcChcXG4gIDgxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGFkYXB0ZXIsIHNrYi1cXHUwMDNlZGF0YSxcXG4gIDgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlbGVuKTtcXG4gIDgzOlxcdFxcdFxcdFxcdFxcdFxcdHJldCA9IDA7XFxuICA4NDpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIGV4aXRfcmVzdG9yZV9za2I7XFxuICA4NTpcXHRcXHRcXHRcXHRcXHR9XFxuICA4NjpcXHRcXHRcXHRcXHRcXHRyZXQgPSAtMTtcXG4gIDg3OlxcdFxcdFxcdFxcdFxcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcXG4gIDg4OlxcdFxcdFxcdFxcdH1cXG4gIDg5OlxcdFxcbiAgOTA6XFx0XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlY3Vycl9jbWQtXFx1MDAzZXJlc3Bfc2tiID0gc2tiO1xcbiAgOTE6XFx0XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlY21kX3Jlc3BfcmVjZWl2ZWQgPSB0cnVlO1xcbiAgOTI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuICA5MzpcXHRcXHRcXHRjYXNlIE1XSUZJRVhfVVNCX1RZUEVfRVZFTlQ6XFxuICA5NDpcXHRcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBzaXplb2YodTMyKSkge1xcbiAgOTU6XFx0XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXFxuICA5NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFxcIkVWRU5UOiBza2ItXFx1MDAzZWxlbiB0b28gc21hbGxcXFxcblxcXCIpO1xcbiAgOTc6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLTE7XFxuICA5ODpcXHRcXHRcXHRcXHRcXHRnb3RvIGV4aXRfcmVzdG9yZV9za2I7XFxuICA5OTpcXHRcXHRcXHRcXHR9XFxuIDEwMDpcXHRcXHRcXHRcXHRza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgXFx1MDAyNnRtcCwgc2l6ZW9mKHUzMikpO1xcbiAxMDE6XFx0XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlZXZlbnRfY2F1c2UgPSBsZTMyX3RvX2NwdSh0bXApO1xcbiAxMDI6XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVZFTlQsXFxuIDEwMzpcXHRcXHRcXHRcXHRcXHQgICAgXFxcImV2ZW50X2NhdXNlICUjeFxcXFxuXFxcIiwgYWRhcHRlci1cXHUwMDNlZXZlbnRfY2F1c2UpO1xcbiAxMDQ6XFx0XFxuIDEwNTpcXHRcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzZSBNQVhfRVZFTlRfU0laRSkge1xcbiAxMDY6XFx0XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXFxuIDEwNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFxcIkVWRU5UOiBldmVudCBib2R5IHRvbyBsYXJnZVxcXFxuXFxcIik7XFxuIDEwODpcXHRcXHRcXHRcXHRcXHRyZXQgPSAtMTtcXG4gMTA5OlxcdFxcdFxcdFxcdFxcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcXG4gMTEwOlxcdFxcdFxcdFxcdH1cXG4gMTExOlxcdFxcbiAxMTI6XFx0XFx0XFx0XFx0bWVtY3B5KGFkYXB0ZXItXFx1MDAzZWV2ZW50X2JvZHksIHNrYi1cXHUwMDNlZGF0YSArXFxuIDExMzpcXHRcXHRcXHRcXHQgICAgICAgTVdJRklFWF9FVkVOVF9IRUFERVJfTEVOLCBza2ItXFx1MDAzZWxlbik7XFxuIDExNDpcXHRcXG4gMTE1OlxcdFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZWV2ZW50X3JlY2VpdmVkID0gdHJ1ZTtcXG4gMTE2OlxcdFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZWV2ZW50X3NrYiA9IHNrYjtcXG4gMTE3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMTg6XFx0XFx0XFx0ZGVmYXVsdDpcXG4gMTE5OlxcdFxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxcbiAxMjA6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJ1bmtub3duIHJlY3ZfdHlwZSAlI3hcXFxcblxcXCIsIHJlY3ZfdHlwZSk7XFxuIDEyMTpcXHRcXHRcXHRcXHRyZXQgPSAtMTtcXG4gMTIyOlxcdFxcdFxcdFxcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcXG4gMTIzOlxcdFxcdFxcdH1cXG4gMTI0OlxcdFxcdFxcdGJyZWFrO1xcbiAxMjU6XFx0XFx0Y2FzZSBNV0lGSUVYX1VTQl9FUF9EQVRBOlxcbiAxMjY6XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgREFUQSwgXFxcIiVzOiBFUF9EQVRBXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIDEyNzpcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzZSBNV0lGSUVYX1JYX0RBVEFfQlVGX1NJWkUpIHtcXG4gMTI4OlxcdFxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxcbiAxMjk6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJEQVRBOiBza2ItXFx1MDAzZWxlbiB0b28gbGFyZ2VcXFxcblxcXCIpO1xcbiAxMzA6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAxMzE6XFx0XFx0XFx0fVxcbiAxMzI6XFx0XFxuIDEzMzpcXHRcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2YWRhcHRlci1cXHUwMDNlcnhfZGF0YV9xLCBza2IpO1xcbiAxMzQ6XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlZGF0YV9yZWNlaXZlZCA9IHRydWU7XFxuIDEzNTpcXHRcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VyeF9wZW5kaW5nKTtcXG4gMTM2OlxcdFxcdFxcdGJyZWFrO1xcbiAxMzc6XFx0XFx0ZGVmYXVsdDpcXG4gMTM4OlxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxcbiAxMzk6XFx0XFx0XFx0XFx0ICAgIFxcXCIlczogdW5rbm93biBlbmRwb3J0ICUjeFxcXFxuXFxcIiwgX19mdW5jX18sIGVwKTtcXG4gMTQwOlxcdFxcdFxcdHJldHVybiAtMTtcXG4gMTQxOlxcdFxcdH1cXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0cmV0dXJuIC1FSU5QUk9HUkVTUztcXG4gMTQ0OlxcdFxcbiAxNDU6XFx0ZXhpdF9yZXN0b3JlX3NrYjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzQ6MDEuNTE4OTY0NzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyNjYyMDU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHByb2Nlc3MsIGJyZWFraW5nIGl0IGRvd24gc3RlcC1ieS1zdGVwOlxuXG4qKk5ldHdvcmsgRHJpdmVyIERhdGEgRmxvdyBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGlzIE1hcnZlbGwgV2ktRmkgZHJpdmVyIGhhbmRsZXMgaW5jb21pbmcgZGF0YS4gSXQgc2VlbXMgbGlrZSB0aGUgYG13aWZpZXhfdXNiX3JlY3ZgIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIHJlY2VpdmluZyBkYXRhIG92ZXIgdGhlIFVTQiBpbnRlcmZhY2UuIE15IGltbWVkaWF0ZSBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoZSBmdW5jdGlvbiBzZXRzIGZsYWdzIGluZGljYXRpbmcgcmVjZWlwdCBvZiBlaXRoZXIgYSBjb21tYW5kIHJlc3BvbnNlIG9yIGFuIGV2ZW50IOKAkyBzcGVjaWZpY2FsbHksIGBhZGFwdGVyLVx1MDAzZWNtZF9yZXNwX3JlY2VpdmVkID0gdHJ1ZWAgb3IgYGFkYXB0ZXItXHUwMDNlZXZlbnRfcmVjZWl2ZWQgPSB0cnVlYC4gVGhlbiwgYXMgaXMgb2Z0ZW4gdGhlIGNhc2Ugd2hlbiBkZWFsaW5nIHdpdGggYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMsIGl0IHJldHVybnMgYC1FSU5QUk9HUkVTU2AuIFRoaXMgc2lnbmFscyB0aGF0IHRoZSByZWNlaXZpbmcgaXMgaW4gcHJvZ3Jlc3MsIGFuZCB0aGUgc3lzdGVtIG5lZWRzIHRvIGRvIG90aGVyIHRoaW5ncyBhbmQgcmV0dXJuIGJhY2sgd2hlbiB0aGUgYWN0aW9uIGhhcyBmaW5pc2hlZC5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgYWZ0ZXJtYXRoLiBVcG9uIGNvbXBsZXRpb24gb2YgdGhlIFVTQiByZWNlaXZlIG9wZXJhdGlvbiDigJMgYXMgaGFuZGxlZCBpbiBgbXdpZmlleF91c2JfcnhfY29tcGxldGVgIOKAkyBhIGNhbGwgaXMgbWFkZSB0byBgbXdpZmlleF9xdWV1ZV9tYWluX3dvcmsoYWRhcHRlcilgLiBUaGlzIGxvb2tzIGxpa2UgdGhlIGRyaXZlcidzIHdheSBvZiBkZWZlcnJpbmcgdGhlIGFjdHVhbCBwcm9jZXNzaW5nIG9mIHRoZSBkYXRhIGl0IGp1c3QgcmVjZWl2ZWQuIFdoaWNoIG1ha2VzIHNlbnNlLCBlc3BlY2lhbGx5IGluIGEgZHJpdmVyIGNvbnRleHQsIHdoZXJlIHlvdSB3YW50IHRvIG1pbmltaXplIHRoZSBhbW91bnQgb2YgdGltZSB5b3UncmUgYmxvY2tpbmcgdGhlIFVTQiByZWNlaXZlIHBhdGguXG5cbkZpbmFsbHksIHRoZSBtYWluIHdvcmsgcXVldWUsIHRoZSBpbXBsaWNhdGlvbiBiZWluZyB0aGF0IHRoZSB3b3JrIHF1ZXVlIGl0c2VsZiBpcyByZXNwb25zaWJsZSBmb3IgcHJvY2Vzc2luZyBib3RoIGNvbW1hbmRzIGFuZCBldmVudHMuIEkgbmVlZCB0byBsb29rIGludG8gYG13aWZpZXhfbWFpbl9wcm9jZXNzYCBtb3JlIGNsb3NlbHkgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiBjb21tYW5kIHJlc3BvbnNlcyBhbmQgZXZlbnRzLCBhbmQgaG93IGl0IGhhbmRsZXMgdGhlbSBhcHByb3ByaWF0ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODEyNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzQ6MDUuODQ1NTg3Mjg0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTg5NTc3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtd2lmaWV4X21haW5fcHJvY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9MjE2PXN0YXRpYyB2b2lkIG1heWJlX3F1aXJrX2Z3X2Rpc2FibGVfZHMoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMjQ3LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6MjQ4OmludCBtd2lmaWV4X21haW5fcHJvY2VzcyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMjQ5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNDgxLX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjQ4MjpFWFBPUlRfU1lNQk9MX0dQTChtd2lmaWV4X21haW5fcHJvY2Vzcyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy00ODMtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jPTE0MTk9c3RhdGljIHZvaWQgbXdpZmlleF9tYWluX3dvcmtfcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0xNDI1LVxcdFxcdHJldHVybjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjE0MjY6XFx0bXdpZmlleF9tYWluX3Byb2Nlc3MoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0xNDI3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg9MTUyOT1pbnQgbXdpZmlleF9zZXRfdHhfcG93ZXIoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTUzMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oOjE1MzI6aW50IG13aWZpZXhfbWFpbl9wcm9jZXNzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNTMzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYz0xMzQwPW13aWZpZXhfc2Rpb19pbnRlcnJ1cHQoc3RydWN0IHNkaW9fZnVuYyAqZnVuYylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmMtMTM1Ni1cXHRtd2lmaWV4X2ludGVycnVwdF9zdGF0dXMoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYzoxMzU3OlxcdG13aWZpZXhfbWFpbl9wcm9jZXNzKGFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmMtMTM1OC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjA1LjkwMTQ4ODM3MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI0NDk5OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgQ29yZSBQcm9jZXNzaW5nIExvb3AgaW4gdGhlIERyaXZlcioqXG5cbk9rYXksIHNvIGBtd2lmaWV4X21haW5fcHJvY2Vzc2Agc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgZnVuY3Rpb24gZm9yIHRoaXMgV2ktRmkgZHJpdmVyLiBUaGF0IG1ha2VzIHNlbnNlLiBJdCdzIHRoZSBtYWluIGxvb3AsIHRoZSBoZWFydGJlYXQuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyAqaG93KiBpdCdzIGRvaW5nIGl0cyBqb2IuXG5cblRoZSB0ZXh0IHBvaW50cyBvdXQgdGhhdCBpdCdzIGNhbGxpbmcgdHdvIGtleSBmdW5jdGlvbnM6IGBtd2lmaWV4X3Byb2Nlc3NfY21kcmVzcGAgYW5kIGBtd2lmaWV4X3Byb2Nlc3NfZXZlbnRgLiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgcHJpbWFyeSBmdW5jdGlvbnMgdG8gcHJvY2VzcyBjb21tYW5kcyBhbmQgZXZlbnRzIHJlY2VpdmVkLiBPZiBjb3Vyc2UsIHRoYXQncyB3aGF0IEknZCBleHBlY3QuIGBjbWRyZXNwYCBpcyBmb3IgaGFuZGxpbmcgY29tbWFuZCByZXNwb25zZXMsIHRoYXQncyBwcmV0dHkgc2VsZi1leHBsYW5hdG9yeS4gQnV0IGV2ZW50cywgdGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBsaWVzLCByaWdodD8gU28gbGV0J3MgZGl2ZSBpbnRvIGBtd2lmaWV4X3Byb2Nlc3NfZXZlbnRgIGFuZCBzZWUgd2hhdCB0aGF0J3MgYWN0dWFsbHkgZG9pbmcuIFRoYXQncyB0aGUgcGFydCB0aGF0J2xsIGxpa2VseSByZXZlYWwgaG93IHRoZSBkcml2ZXIgaXMgcmVzcG9uZGluZyB0byB0aGUgZW52aXJvbm1lbnQsIHRoZSBuZXR3b3JrLCBhbmQgdGhlIGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTIwMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjA5LjMyNTk5MDI2NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUzNDU1MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXdpZmlleF9wcm9jZXNzX2V2ZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NtZGV2dC5jPTQyMT12b2lkIG13aWZpZXhfZnJlZV9jbWRfYnVmZmVyKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY21kZXZ0LmMtNDY5LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jbWRldnQuYzo0NzA6aW50IG13aWZpZXhfcHJvY2Vzc19ldmVudChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jbWRldnQuYy00NzEte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYz0yNDg9aW50IG13aWZpZXhfbWFpbl9wcm9jZXNzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTM1MC1cXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2VldmVudF9yZWNlaXZlZCA9IGZhbHNlO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6MzUxOlxcdFxcdFxcdG13aWZpZXhfcHJvY2Vzc19ldmVudChhZGFwdGVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTM1Mi1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oPTEwNzE9aW50IG13aWZpZXhfcHJvY2Vzc19tZ210X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xMDczLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTA3NDppbnQgbXdpZmlleF9wcm9jZXNzX2V2ZW50KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTA3NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzQ6MDkuMzkxMzQwNTkyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTY0NjgzMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBtd2lmaWV4X3Byb2Nlc3NfZXZlbnRgKipcblxuT2theSwgc28gd2UncmUgc3RhcnRpbmcgd2l0aCBgbXdpZmlleF9wcm9jZXNzX2V2ZW50YCBpbiBgY21kZXZ0LmNgLiBUaGF0J3MgYSBzb2xpZCBlbnRyeSBwb2ludCBmb3IgaW52ZXN0aWdhdGluZyBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGV2ZW50cywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgTWFydmVsbCBXaS1GaSBkcml2ZXIgY29udGV4dC4gVGhpcyBsaWtlbHkgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIGV2ZW50IGhhbmRsaW5nIGxvb3Agb3IgZGlzcGF0Y2ggbWVjaGFuaXNtLiBNeSBpbml0aWFsIGV4cGVjdGF0aW9uIGlzIHRvIGZpbmQgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciByZWNlaXZpbmcgZXZlbnRzIGZyb20gdGhlIGZpcm13YXJlIG9yIGhhcmR3YXJlIGFuZCB0aGVuIHJvdXRpbmcgdGhlbSB0byB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlcnMgYmFzZWQgb24gdGhlaXIgdHlwZS4gV2UncmUgcHJvYmFibHkgdGFsa2luZyBhYm91dCB0aGUgaGVhcnQgb2YgdGhlIGludGVycnVwdCBwcm9jZXNzaW5nIG9yIHBvbGxpbmcgbWVjaGFuaXNtIGhlcmUuIEknbSBrZWVuIHRvIHNlZSBpZiBpdCdzIGEgc2ltcGxlIHN3aXRjaC1jYXNlLCBhIG1vcmUgc29waGlzdGljYXRlZCBsb29rdXAgdGFibGUsIG9yIHNvbWV0aGluZyBldmVudC1kcml2ZW4gbGlrZSBhIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBzeXN0ZW0uIFRoZSBnb2FsIG5vdyBpcyB0byBsb29rIGF0IHRoZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTkyNywiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjEyLjY0NzgxMTE2OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NtZGV2dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzA6XFx0aW50IG13aWZpZXhfcHJvY2Vzc19ldmVudChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxcbiA0NzE6XFx0e1xcbiA0NzI6XFx0XFx0aW50IHJldCwgaTtcXG4gNDczOlxcdFxcdHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXY7XFxuIDQ3NDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYWRhcHRlci1cXHUwMDNlZXZlbnRfc2tiO1xcbiA0NzU6XFx0XFx0dTMyIGV2ZW50Y2F1c2U7XFxuIDQ3NjpcXHRcXHRzdHJ1Y3QgbXdpZmlleF9yeGluZm8gKnJ4X2luZm87XFxuIDQ3NzpcXHRcXG4gNDc4OlxcdFxcdGlmICgoYWRhcHRlci1cXHUwMDNlZXZlbnRfY2F1c2UgXFx1MDAyNiBFVkVOVF9JRF9NQVNLKSA9PSBFVkVOVF9SQURBUl9ERVRFQ1RFRCkge1xcbiA0Nzk6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFkYXB0ZXItXFx1MDAzZXByaXZfbnVtOyBpKyspIHtcXG4gNDgwOlxcdFxcdFxcdFxcdHByaXYgPSBhZGFwdGVyLVxcdTAwM2Vwcml2W2ldO1xcbiA0ODE6XFx0XFx0XFx0XFx0aWYgKG13aWZpZXhfaXNfMTFoX2FjdGl2ZShwcml2KSkge1xcbiA0ODI6XFx0XFx0XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlZXZlbnRfY2F1c2UgfD1cXG4gNDgzOlxcdFxcdFxcdFxcdFxcdFxcdCgocHJpdi1cXHUwMDNlYnNzX251bSBcXHUwMDI2IDB4ZmYpIFxcdTAwM2NcXHUwMDNjIDE2KSB8XFxuIDQ4NDpcXHRcXHRcXHRcXHRcXHRcXHQoKHByaXYtXFx1MDAzZWJzc190eXBlIFxcdTAwMjYgMHhmZikgXFx1MDAzY1xcdTAwM2MgMjQpO1xcbiA0ODU6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQ4NjpcXHRcXHRcXHRcXHR9XFxuIDQ4NzpcXHRcXHRcXHR9XFxuIDQ4ODpcXHRcXHR9XFxuIDQ4OTpcXHRcXG4gNDkwOlxcdFxcdGV2ZW50Y2F1c2UgPSBhZGFwdGVyLVxcdTAwM2VldmVudF9jYXVzZTtcXG4gNDkxOlxcdFxcbiA0OTI6XFx0XFx0LyogU2F2ZSB0aGUgbGFzdCBldmVudCB0byBkZWJ1ZyBsb2cgKi9cXG4gNDkzOlxcdFxcdGFkYXB0ZXItXFx1MDAzZWRiZy5sYXN0X2V2ZW50X2luZGV4ID1cXG4gNDk0OlxcdFxcdFxcdFxcdChhZGFwdGVyLVxcdTAwM2VkYmcubGFzdF9ldmVudF9pbmRleCArIDEpICUgREJHX0NNRF9OVU07XFxuIDQ5NTpcXHRcXHRhZGFwdGVyLVxcdTAwM2VkYmcubGFzdF9ldmVudFthZGFwdGVyLVxcdTAwM2VkYmcubGFzdF9ldmVudF9pbmRleF0gPVxcbiA0OTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0KHUxNikgZXZlbnRjYXVzZTtcXG4gNDk3OlxcdFxcbiA0OTg6XFx0XFx0LyogR2V0IEJTUyBudW1iZXIgYW5kIGNvcnJlc3BvbmRpbmcgcHJpdiAqL1xcbiA0OTk6XFx0XFx0cHJpdiA9IG13aWZpZXhfZ2V0X3ByaXZfYnlfaWQoYWRhcHRlciwgRVZFTlRfR0VUX0JTU19OVU0oZXZlbnRjYXVzZSksXFxuIDUwMDpcXHRcXHRcXHRcXHRcXHQgICAgICBFVkVOVF9HRVRfQlNTX1RZUEUoZXZlbnRjYXVzZSkpO1xcbiA1MDE6XFx0XFx0aWYgKCFwcml2KVxcbiA1MDI6XFx0XFx0XFx0cHJpdiA9IG13aWZpZXhfZ2V0X3ByaXYoYWRhcHRlciwgTVdJRklFWF9CU1NfUk9MRV9BTlkpO1xcbiA1MDM6XFx0XFxuIDUwNDpcXHRcXHQvKiBDbGVhciBCU1NfTk9fQklUUyBmcm9tIGV2ZW50ICovXFxuIDUwNTpcXHRcXHRldmVudGNhdXNlIFxcdTAwMjY9IEVWRU5UX0lEX01BU0s7XFxuIDUwNjpcXHRcXHRhZGFwdGVyLVxcdTAwM2VldmVudF9jYXVzZSA9IGV2ZW50Y2F1c2U7XFxuIDUwNzpcXHRcXG4gNTA4OlxcdFxcdGlmIChza2IpIHtcXG4gNTA5OlxcdFxcdFxcdHJ4X2luZm8gPSBNV0lGSUVYX1NLQl9SWENCKHNrYik7XFxuIDUxMDpcXHRcXHRcXHRtZW1zZXQocnhfaW5mbywgMCwgc2l6ZW9mKCpyeF9pbmZvKSk7XFxuIDUxMTpcXHRcXHRcXHRyeF9pbmZvLVxcdTAwM2Vic3NfbnVtID0gcHJpdi1cXHUwMDNlYnNzX251bTtcXG4gNTEyOlxcdFxcdFxcdHJ4X2luZm8tXFx1MDAzZWJzc190eXBlID0gcHJpdi1cXHUwMDNlYnNzX3R5cGU7XFxuIDUxMzpcXHRcXHRcXHRtd2lmaWV4X2RiZ19kdW1wKGFkYXB0ZXIsIEVWVF9ELCBcXFwiRXZlbnQgQnVmOlxcXCIsXFxuIDUxNDpcXHRcXHRcXHRcXHRcXHQgc2tiLVxcdTAwM2VkYXRhLCBza2ItXFx1MDAzZWxlbik7XFxuIDUxNTpcXHRcXHR9XFxuIDUxNjpcXHRcXG4gNTE3OlxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVWRU5ULCBcXFwiRVZFTlQ6IGNhdXNlOiAlI3hcXFxcblxcXCIsIGV2ZW50Y2F1c2UpO1xcbiA1MTg6XFx0XFxuIDUxOTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlYnNzX3JvbGUgPT0gTVdJRklFWF9CU1NfUk9MRV9VQVApXFxuIDUyMDpcXHRcXHRcXHRyZXQgPSBtd2lmaWV4X3Byb2Nlc3NfdWFwX2V2ZW50KHByaXYpO1xcbiA1MjE6XFx0XFx0ZWxzZVxcbiA1MjI6XFx0XFx0XFx0cmV0ID0gbXdpZmlleF9wcm9jZXNzX3N0YV9ldmVudChwcml2KTtcXG4gNTIzOlxcdFxcbiA1MjQ6XFx0XFx0YWRhcHRlci1cXHUwMDNlZXZlbnRfY2F1c2UgPSAwO1xcbiA1MjU6XFx0XFx0YWRhcHRlci1cXHUwMDNlZXZlbnRfc2tiID0gTlVMTDtcXG4gNTI2OlxcdFxcdGFkYXB0ZXItXFx1MDAzZWlmX29wcy5ldmVudF9jb21wbGV0ZShhZGFwdGVyLCBza2IpO1xcbiA1Mjc6XFx0XFxuIDUyODpcXHRcXHRyZXR1cm4gcmV0O1xcbiA1Mjk6XFx0fVxcbiA1MzA6XFx0XFxuIDUzMTpcXHQvKlxcbiA1MzI6XFx0ICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBhIGNvbW1hbmQgYW5kIHNlbmQgaXQgdG8gdGhlIGZpcm13YXJlLlxcbiA1MzM6XFx0ICpcXG4gNTM0OlxcdCAqIFByZXBhcmF0aW9uIGluY2x1ZGVzIC1cXG4gNTM1OlxcdCAqICAgICAgLSBTYW5pdHkgdGVzdHMgdG8gbWFrZSBzdXJlIHRoZSBjYXJkIGlzIHN0aWxsIHByZXNlbnQgb3IgdGhlIEZXXFxuIDUzNjpcXHQgKiAgICAgICAgaXMgbm90IHJlc2V0XFxuIDUzNzpcXHQgKiAgICAgIC0gR2V0dGluZyBhIG5ldyBjb21tYW5kIG5vZGUgZnJvbSB0aGUgY29tbWFuZCBmcmVlIHF1ZXVlXFxuIDUzODpcXHQgKiAgICAgIC0gSW5pdGlhbGl6aW5nIHRoZSBjb21tYW5kIG5vZGUgZm9yIGRlZmF1bHQgcGFyYW1ldGVyc1xcbiA1Mzk6XFx0ICogICAgICAtIEZpbGwgdXAgdGhlIG5vbi1kZWZhdWx0IHBhcmFtZXRlcnMgYW5kIGJ1ZmZlciBwb2ludGVyc1xcbiA1NDA6XFx0ICogICAgICAtIEFkZCB0aGUgY29tbWFuZCB0byBwZW5kaW5nIHF1ZXVlXFxuIDU0MTpcXHQgKi9cXG4gNTQyOlxcdGludCBtd2lmaWV4X3NlbmRfY21kKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHUxNiBjbWRfbm8sXFxuIDU0MzpcXHRcXHRcXHQgICAgIHUxNiBjbWRfYWN0aW9uLCB1MzIgY21kX29pZCwgdm9pZCAqZGF0YV9idWYsIGJvb2wgc3luYylcXG4gNTQ0OlxcdHtcXG4gNTQ1OlxcdFxcdGludCByZXQ7XFxuIDU0NjpcXHRcXHRzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi1cXHUwMDNlYWRhcHRlcjtcXG4gNTQ3OlxcdFxcdHN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRfbm9kZTtcXG4gNTQ4OlxcdFxcdHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWRfcHRyO1xcbiA1NDk6XFx0XFxuIDU1MDpcXHRcXHRpZiAoIWFkYXB0ZXIpIHtcXG4gNTUxOlxcdFxcdFxcdHByX2VycihcXFwiUFJFUF9DTUQ6IGFkYXB0ZXIgaXMgTlVMTFxcXFxuXFxcIik7XFxuIDU1MjpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDU1MzpcXHRcXHR9XFxuIDU1NDpcXHRcXG4gNTU1OlxcdFxcdGlmICh0ZXN0X2JpdChNV0lGSUVYX0lTX1NVU1BFTkRFRCwgXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXdvcmtfZmxhZ3MpKSB7XFxuIDU1NjpcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG4gNTU3OlxcdFxcdFxcdFxcdCAgICBcXFwiUFJFUF9DTUQ6IGRldmljZSBpbiBzdXNwZW5kZWQgc3RhdGVcXFxcblxcXCIpO1xcbiA1NTg6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA1NTk6XFx0XFx0fVxcbiA1NjA6XFx0XFxuIDU2MTpcXHRcXHRpZiAodGVzdF9iaXQoTVdJRklFWF9JU19IU19FTkFCTElORywgXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXdvcmtfZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxuIDU2MjpcXHRcXHQgICAgY21kX25vICE9IEhvc3RDbWRfQ01EXzgwMl8xMV9IU19DRkdfRU5IKSB7XFxuIDU2MzpcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG4gNTY0OlxcdFxcdFxcdFxcdCAgICBcXFwiUFJFUF9DTUQ6IGhvc3QgZW50ZXJpbmcgc2xlZXAgc3RhdGVcXFxcblxcXCIpO1xcbiA1NjU6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA1NjY6XFx0XFx0fVxcbiA1Njc6XFx0XFxuIDU2ODpcXHRcXHRpZiAodGVzdF9iaXQoTVdJRklFWF9TVVJQUklTRV9SRU1PVkVELCBcXHUwMDI2YWRhcHRlci1cXHUwMDNld29ya19mbGFncykpIHtcXG4gNTY5OlxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozNDoxMi42NDc5NzAyNDlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1MDM2MTY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBTVEEgRXZlbnQgSGFuZGxpbmcgaW4gbXdpZmlleF9wcm9jZXNzX3N0YV9ldmVudCoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gYG13aWZpZXhfcHJvY2Vzc19zdGFfZXZlbnRgLiBTdGFuZGFyZCBTdGF0aW9uIChTVEEpIGV2ZW50cy4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBiZSB0aGUgZm9jYWwgcG9pbnQgZm9yIGhhbmRsaW5nIGEgdmFyaWV0eSBvZiBTVEEtcmVsYXRlZCBldmVudHMuIEJ1dCB3aGF0IEkgbmVlZCB0byBwaW5wb2ludCBpcyBob3cgdGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgYW55IHNjYW4gcmVzdWx0cyB0aGF0IG1heSBiZSBhc3NvY2lhdGVkIHdpdGggaXQuIElzIHRoaXMgd2hlcmUgdGhlIGluY29taW5nIHNjYW4gcmVzdWx0cyBnZXQgcGFyc2VkIG9yIHVzZWQ/IEl04oCZcyBsb2dpY2FsIHRoYXQgYW4gU1RBIGV2ZW50IGhhbmRsZXIgd291bGQgbmVlZCB0byBkZWFsIHdpdGggc2NhbiBkYXRhIGV2ZW50dWFsbHksIGJ1dCBJIG11c3Qga25vdyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0J3MgcmVzcG9uc2libGUgZm9yIHRoZSBpbW1lZGlhdGUgaGFuZGxpbmcsIG9yIGlmIGl0IGRpc3BhdGNoZXMgdGhlIHNjYW4gcmVzdWx0cyB0byBvdGhlciBtb2R1bGVzIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjb2RlIGZsb3cgaGVyZSBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4NDAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjE1Ljg5ODMzNTY3NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0OTc2MzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfcHJvY2Vzc19zdGFfZXZlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY21kZXZ0LmM9NDcwPWludCBtd2lmaWV4X3Byb2Nlc3NfZXZlbnQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jbWRldnQuYy01MjEtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jbWRldnQuYzo1MjI6XFx0XFx0cmV0ID0gbXdpZmlleF9wcm9jZXNzX3N0YV9ldmVudChwcml2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY21kZXZ0LmMtNTIzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xMTQzPWludCBtd2lmaWV4X2hhbmRsZV91YXBfcnhfZm9yd2FyZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTE0NC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTE0NTppbnQgbXdpZmlleF9wcm9jZXNzX3N0YV9ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICopO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTE0Ni1pbnQgbXdpZmlleF9wcm9jZXNzX3VhcF9ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICopO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9ldmVudC5jPTU4Nz1td2lmaWV4X2Z3X2R1bXBfaW5mb19ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9ldmVudC5jLTY5NS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2V2ZW50LmM6Njk2OmludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX2V2ZW50KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9ldmVudC5jLTY5Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjE2LjAzMzMxODE2N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI1MzYzMTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTVEEgRXZlbnQgUHJvY2Vzc2luZyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbXdpZmlleF9wcm9jZXNzX3N0YV9ldmVudGAgZnVuY3Rpb24gd2l0aGluIGBzdGFfZXZlbnQuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCB3aGVuIGl0IGNvbWVzIHRvIGhhbmRsaW5nIHN0YXRpb24tcmVsYXRlZCBldmVudHMg4oCTIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIGZvciBTVEEgYmVoYXZpb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBkcml2ZXIgaXMgcmVzcG9uZGluZyB0byB0aGVzZSBldmVudHMuIFdoYXQgYXJlIHRoZSBrZXkgZGVjaXNpb24gcG9pbnRzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBldmVudCB0eXBlcz8gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgd2hlcmUgZnVydGhlciBvcHRpbWl6YXRpb24gY291bGQgYmUgYWNoaWV2ZWQuIE15IGZvY3VzIGlzIG9uIHRoZSBlZmZpY2llbmN5IGFuZCByb2J1c3RuZXNzIG9mIHRoZSBoYW5kbGluZywgYW5kIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gcmFjZSBjb25kaXRpb25zIG9yIGFueSB1bnVzdWFsIGNvbnRyb2wgZmxvdy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHNlY3JldHMgdGhpcyBmdW5jdGlvbiBob2xkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1NjAsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozNDoxOS4xNTg2ODQxNzNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfZXZlbnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTYsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjk2OlxcdGludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX2V2ZW50KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXFxuIDY5NzpcXHR7XFxuIDY5ODpcXHRcXHRzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi1cXHUwMDNlYWRhcHRlcjtcXG4gNjk5OlxcdFxcdGludCByZXQgPSAwLCBpO1xcbiA3MDA6XFx0XFx0dTMyIGV2ZW50Y2F1c2UgPSBhZGFwdGVyLVxcdTAwM2VldmVudF9jYXVzZTtcXG4gNzAxOlxcdFxcdHUxNiBjdHJsLCByZWFzb25fY29kZTtcXG4gNzAyOlxcdFxcdHU4IGlic3Nfc3RhX2FkZHJbRVRIX0FMRU5dO1xcbiA3MDM6XFx0XFx0c3RydWN0IG13aWZpZXhfc3RhX25vZGUgKnN0YV9wdHI7XFxuIDcwNDpcXHRcXG4gNzA1OlxcdFxcdHN3aXRjaCAoZXZlbnRjYXVzZSkge1xcbiA3MDY6XFx0XFx0Y2FzZSBFVkVOVF9EVU1NWV9IT1NUX1dBS0VVUF9TSUdOQUw6XFxuIDcwNzpcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG4gNzA4OlxcdFxcdFxcdFxcdCAgICBcXFwiaW52YWxpZCBFVkVOVDogRFVNTVlfSE9TVF9XQUtFVVBfU0lHTkFMLCBpZ25vcmUgaXRcXFxcblxcXCIpO1xcbiA3MDk6XFx0XFx0XFx0YnJlYWs7XFxuIDcxMDpcXHRcXHRjYXNlIEVWRU5UX0xJTktfU0VOU0VEOlxcbiA3MTE6XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVZFTlQsIFxcXCJldmVudDogTElOS19TRU5TRURcXFxcblxcXCIpO1xcbiA3MTI6XFx0XFx0XFx0aWYgKCFuZXRpZl9jYXJyaWVyX29rKHByaXYtXFx1MDAzZW5ldGRldikpXFxuIDcxMzpcXHRcXHRcXHRcXHRuZXRpZl9jYXJyaWVyX29uKHByaXYtXFx1MDAzZW5ldGRldik7XFxuIDcxNDpcXHRcXHRcXHRtd2lmaWV4X3dha2VfdXBfbmV0X2Rldl9xdWV1ZShwcml2LVxcdTAwM2VuZXRkZXYsIGFkYXB0ZXIpO1xcbiA3MTU6XFx0XFx0XFx0YnJlYWs7XFxuIDcxNjpcXHRcXG4gNzE3OlxcdFxcdGNhc2UgRVZFTlRfREVBVVRIRU5USUNBVEVEOlxcbiA3MTg6XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVZFTlQsIFxcXCJldmVudDogRGVhdXRoZW50aWNhdGVkXFxcXG5cXFwiKTtcXG4gNzE5OlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2V3cHMuc2Vzc2lvbl9lbmFibGUpIHtcXG4gNzIwOlxcdFxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIElORk8sXFxuIDcyMTpcXHRcXHRcXHRcXHRcXHQgICAgXFxcImluZm86IHJlY2VpdmUgZGVhdXRoIGV2ZW50IGluIHdwcyBzZXNzaW9uXFxcXG5cXFwiKTtcXG4gNzIyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA3MjM6XFx0XFx0XFx0fVxcbiA3MjQ6XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlZGJnLm51bV9ldmVudF9kZWF1dGgrKztcXG4gNzI1OlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VtZWRpYV9jb25uZWN0ZWQpIHtcXG4gNzI2OlxcdFxcdFxcdFxcdHJlYXNvbl9jb2RlID1cXG4gNzI3OlxcdFxcdFxcdFxcdFxcdGdldF91bmFsaWduZWRfbGUxNihhZGFwdGVyLVxcdTAwM2VldmVudF9ib2R5KTtcXG4gNzI4OlxcdFxcdFxcdFxcdG13aWZpZXhfcmVzZXRfY29ubmVjdF9zdGF0ZShwcml2LCByZWFzb25fY29kZSwgdHJ1ZSk7XFxuIDcyOTpcXHRcXHRcXHR9XFxuIDczMDpcXHRcXHRcXHRicmVhaztcXG4gNzMxOlxcdFxcbiA3MzI6XFx0XFx0Y2FzZSBFVkVOVF9ESVNBU1NPQ0lBVEVEOlxcbiA3MzM6XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVZFTlQsIFxcXCJldmVudDogRGlzYXNzb2NpYXRlZFxcXFxuXFxcIik7XFxuIDczNDpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNld3BzLnNlc3Npb25fZW5hYmxlKSB7XFxuIDczNTpcXHRcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBJTkZPLFxcbiA3MzY6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJpbmZvOiByZWNlaXZlIGRpc2Fzc29jIGV2ZW50IGluIHdwcyBzZXNzaW9uXFxcXG5cXFwiKTtcXG4gNzM3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA3Mzg6XFx0XFx0XFx0fVxcbiA3Mzk6XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlZGJnLm51bV9ldmVudF9kaXNhc3NvYysrO1xcbiA3NDA6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZW1lZGlhX2Nvbm5lY3RlZCkge1xcbiA3NDE6XFx0XFx0XFx0XFx0cmVhc29uX2NvZGUgPVxcbiA3NDI6XFx0XFx0XFx0XFx0XFx0Z2V0X3VuYWxpZ25lZF9sZTE2KGFkYXB0ZXItXFx1MDAzZWV2ZW50X2JvZHkpO1xcbiA3NDM6XFx0XFx0XFx0XFx0bXdpZmlleF9yZXNldF9jb25uZWN0X3N0YXRlKHByaXYsIHJlYXNvbl9jb2RlLCB0cnVlKTtcXG4gNzQ0OlxcdFxcdFxcdH1cXG4gNzQ1OlxcdFxcdFxcdGJyZWFrO1xcbiA3NDY6XFx0XFxuIDc0NzpcXHRcXHRjYXNlIEVWRU5UX0xJTktfTE9TVDpcXG4gNzQ4OlxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVWRU5ULCBcXFwiZXZlbnQ6IExpbmsgbG9zdFxcXFxuXFxcIik7XFxuIDc0OTpcXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2VkYmcubnVtX2V2ZW50X2xpbmtfbG9zdCsrO1xcbiA3NTA6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZW1lZGlhX2Nvbm5lY3RlZCkge1xcbiA3NTE6XFx0XFx0XFx0XFx0cmVhc29uX2NvZGUgPVxcbiA3NTI6XFx0XFx0XFx0XFx0XFx0Z2V0X3VuYWxpZ25lZF9sZTE2KGFkYXB0ZXItXFx1MDAzZWV2ZW50X2JvZHkpO1xcbiA3NTM6XFx0XFx0XFx0XFx0aWYgKGFkYXB0ZXItXFx1MDAzZWhvc3RfbWxtZV9lbmFibGVkKSB7XFxuIDc1NDpcXHRcXHRcXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2Vwcml2X2xpbmtfbG9zdCA9IHByaXY7XFxuIDc1NTpcXHRcXHRcXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2Vob3N0X21sbWVfbGlua19sb3N0ID0gdHJ1ZTtcXG4gNzU2OlxcdFxcdFxcdFxcdFxcdHF1ZXVlX3dvcmsoYWRhcHRlci1cXHUwMDNlaG9zdF9tbG1lX3dvcmtxdWV1ZSxcXG4gNzU3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2Vob3N0X21sbWVfd29yayk7XFxuIDc1ODpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiA3NTk6XFx0XFx0XFx0XFx0XFx0bXdpZmlleF9yZXNldF9jb25uZWN0X3N0YXRlKHByaXYsIHJlYXNvbl9jb2RlLFxcbiA3NjA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHRydWUpO1xcbiA3NjE6XFx0XFx0XFx0XFx0fVxcbiA3NjI6XFx0XFx0XFx0fVxcbiA3NjM6XFx0XFx0XFx0YnJlYWs7XFxuIDc2NDpcXHRcXG4gNzY1OlxcdFxcdGNhc2UgRVZFTlRfUFNfU0xFRVA6XFxuIDc2NjpcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFVkVOVCwgXFxcImluZm86IEVWRU5UOiBTTEVFUFxcXFxuXFxcIik7XFxuIDc2NzpcXHRcXG4gNzY4OlxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZXBzX3N0YXRlID0gUFNfU1RBVEVfUFJFX1NMRUVQO1xcbiA3Njk6XFx0XFxuIDc3MDpcXHRcXHRcXHRtd2lmaWV4X2NoZWNrX3BzX2NvbmQoYWRhcHRlcik7XFxuIDc3MTpcXHRcXHRcXHRicmVhaztcXG4gNzcyOlxcdFxcbiA3NzM6XFx0XFx0Y2FzZSBFVkVOVF9QU19BV0FLRTpcXG4gNzc0OlxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVWRU5ULCBcXFwiaW5mbzogRVZFTlQ6IEFXQUtFXFxcXG5cXFwiKTtcXG4gNzc1OlxcdFxcdFxcdGlmICghYWRhcHRlci1cXHUwMDNlcHBzX3VhcHNkX21vZGUgXFx1MDAyNlxcdTAwMjZcXG4gNzc2OlxcdFxcdFxcdCAgICAocHJpdi1cXHUwMDNlcG9ydF9vcGVuIHx8XFxuIDc3NzpcXHRcXHRcXHQgICAgIChwcml2LVxcdTAwM2Vic3NfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykpIFxcdTAwMjZcXHUwMDI2XFxuIDc3ODpcXHRcXHRcXHQgICAgcHJpdi1cXHUwMDNlbWVkaWFfY29ubmVjdGVkIFxcdTAwMjZcXHUwMDI2IGFkYXB0ZXItXFx1MDAzZXNsZWVwX3BlcmlvZC5wZXJpb2QpIHtcXG4gNzc5OlxcdFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZXBwc191YXBzZF9tb2RlID0gdHJ1ZTtcXG4gNzgwOlxcdFxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVWRU5ULFxcbiA3ODE6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJldmVudDogUFBTL1VBUFNEIG1vZGUgYWN0aXZhdGVkXFxcXG5cXFwiKTtcXG4gNzgyOlxcdFxcdFxcdH1cXG4gNzgzOlxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZXR4X2xvY2tfZmxhZyA9IGZhbHNlO1xcbiA3ODQ6XFx0XFx0XFx0aWYgKGFkYXB0ZXItXFx1MDAzZXBwc191YXBzZF9tb2RlIFxcdTAwMjZcXHUwMDI2IGFkYXB0ZXItXFx1MDAzZWdlbl9udWxsX3BrdCkge1xcbiA3ODU6XFx0XFx0XFx0XFx0aWYgKG13aWZpZXhfY2hlY2tfbGFzdF9wYWNrZXRfaW5kaWNhdGlvbihwcml2KSkge1xcbiA3ODY6XFx0XFx0XFx0XFx0XFx0aWYgKGFkYXB0ZXItXFx1MDAzZWRhdGFfc2VudCB8fFxcbiA3ODc6XFx0XFx0XFx0XFx0XFx0ICAgIChhZGFwdGVyLVxcdTAwM2VpZl9vcHMuaXNfcG9ydF9yZWFkeSBcXHUwMDI2XFx1MDAyNlxcbiA3ODg6XFx0XFx0XFx0XFx0XFx0ICAgICAhYWRhcHRlci1cXHUwMDNlaWZfb3BzLmlzX3BvcnRfcmVhZHkocHJpdikpKSB7XFxuIDc4OTpcXHRcXHRcXHRcXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2Vwc19zdGF0ZSA9IFBTX1NUQVRFX0FXQUtFO1xcbiA3OTA6XFx0XFx0XFx0XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlcG1fd2FrZXVwX2NhcmRfcmVxID0gZmFsc2U7XFxuIDc5MTpcXHRcXHRcXHRcXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2VwbV93YWtldXBfZndfdHJ5ID0gZmFsc2U7XFxuIDc5MjpcXHRcXHRcXHRcXHRcXHRcXHR0aW1lcl9kZWxldGUoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXdha2V1cF90aW1lcik7XFxuIDc5MzpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNzk0OlxcdFxcdFxcdFxcdFxcdH1cXG4gNzk1OlxcdFxcdFxcdFxcdFxcdGlmICghbXdpZmlleF9zZW5kX251bGxfcGFja2V0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjE5LjE1ODgwNDcyM1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTUwNjIwNTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIEZ1bmN0aW9uIENhbGwgQ2hhaW4qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG13aWZpZXhgIGNvZGUgYWdhaW4sIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBuZXR3b3JrIGNvbXBhdGliaWxpdHkgaXMgYWN0dWFsbHkgZGV0ZXJtaW5lZC4gSXQgbG9va3MgbGlrZSBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYCBpcyBhIGtleSBmdW5jdGlvbiBoZXJlLiBJIHNlZSB0aGF0IGl0J3MgYmVpbmcgY2FsbGVkIGJ5IGBtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudGAgYW5kIGBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudGAsIHdoaWNoLCBpbiB0dXJuLCBhcmUgY2FsbGVkIGZyb20gYG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlYC4gVGhhdCBtYWtlcyBzZW5zZTsgY2hlY2tpbmcgZm9yIE9VSSBwcmVzZW5jZSBpcyBhIGdvb2QgaW5kaWNhdG9yIG9mIGNvbXBhdGliaWxpdHksIGVzcGVjaWFsbHkgd2l0aCBXUEEvUlNOIHNlY3VyaXR5LlxuXG5Ob3csIGBtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZWAgZmVlZHMgaW50byBgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlgLiBUaGlzIG9uZSdzIGludGVyZXN0aW5nLCBhbmQgaXMgd2hlcmUgdGhpbmdzIHN0YXJ0IHRvIGdldCBtb3JlIGNvbnRleHR1YWxseSByZWxldmFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93ICp0aGlzKiBmdW5jdGlvbiBpcyB1c2VkLlxuXG5BbHJpZ2h0LCBgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlgIGlzIGNhbGxlZCBieSBgbXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zYCBhbmQgYG13aWZpZXhfYnNzX3N0YXJ0YC4gYG13aWZpZXhfYnNzX3N0YXJ0YCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCdzIGxpa2VseSBhIGZ1bmN0aW9uIHRoYXQgaW5pdGlhdGVzIHRoZSBjb25uZWN0aW9uIHRvIGEgbmV0d29yay4gSG93ZXZlciwgYG13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtc2AgaXMgYWxzbyBjYWxsaW5nIHRoaXMuIEkgdGhvdWdodCB0aGF0IGZ1bmN0aW9uIHdhcyBjYWxsZWQgYnkgYG13aWZpZXhfY21kXzgwMl8xMV9zY2FuYCwgYnV0IEkgc2hvdWxkIHZlcmlmeSB0aGF0LiBMZXQgbWUgZG91YmxlLWNoZWNrIGhvdyBgbXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zYCBpcyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQ4MCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjIzLjcwOTQyODE5MloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYwNTEyNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0xNjU5PXN0YXRpYyBpbnQgbXdpZmlleF9zYXZlX2hpZGRlbl9zc2lkX2NoYW5uZWxzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE3MDItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoxNzAzOnN0YXRpYyBpbnQgbXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNzA0LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0xNzQzPW13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1ZihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqKmJzc19pbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xODkwLVxcdFxcdFxcdFxcdFxcdCAgICBFVEhfQUxFTikpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoxODkxOlxcdFxcdFxcdFxcdFxcdG13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtcyhwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTg5Mi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgYnNzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzQ6MjMuNzc1NDgzODA4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTEwMjMzOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgV2ktRmkgU2NhbiBSZXNwb25zZSoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBwcm9jZXNzaW5nIGhhcHBlbmluZyBpbiB0aGUgV2ktRmkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHNjYW4gcmVzdWx0cy4gSSBzZWUgdGhhdCBgbXdpZmlleF9wYXJzZV9zaW5nbGVfcmVzcG9uc2VfYnVmYCBnZXRzIGNhbGxlZCwgYW5kIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gaXRzIG9yaWdpbnM6IGVpdGhlciBgbXdpZmlleF9yZXRfODAyXzExX3NjYW5gIG9yIGEgdmVyeSBzaW1pbGFyIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgcmVzcG9uc2UgYWZ0ZXIgYSBXaS1GaSBzY2FuIHJlcXVlc3QuIFRoYXQgZnVuY3Rpb24gaXMgY2xlYXJseSBhIGtleSBjb21wb25lbnQgaW4gZGlzc2VjdGluZyB0aGUgZGF0YSByZXR1cm5lZCBieSB0aGUgd2lyZWxlc3MgYWRhcHRlciBhZnRlciBpdCdzIGdvbmUgb3V0IGFuZCBsb29rZWQgZm9yIGF2YWlsYWJsZSBuZXR3b3Jrcy4gSXQncyB0aGUgcG9pbnQgd2hlcmUgd2Ugc3RhcnQgcHVsbGluZyBhcGFydCB0aGF0IHJhdyBidWZmZXIsIGxpa2VseSBmaWxsZWQgd2l0aCA4MDIuMTEgaW5mb3JtYXRpb24gZWxlbWVudHMgKElFcyksIHRvIGV4dHJhY3QgdGhlIG1lYW5pbmdmdWwgZGF0YSBsaWtlIFNTSUQsIGNoYW5uZWwsIHNpZ25hbCBzdHJlbmd0aCwgc2VjdXJpdHkgY2FwYWJpbGl0aWVzLCBhbmQgYWxsIHRoZSBqdWljeSBkZXRhaWxzIHdlIG5lZWQgdG8gcG9wdWxhdGUgb3VyIHNjYW4gcmVzdWx0cy4gSSdtIGltYWdpbmluZyBpdCdzIGEgY3JpdGljYWwgZnVuY3Rpb24sIHBvdGVudGlhbGx5IGNvbXBsZXggd2l0aCBhbGwgdGhlIHBvc3NpYmxlIHZhcmlhdGlvbnMgaW4gODAyLjExIGZyYW1lIGZvcm1hdHMgYW5kIHZlbmRvci1zcGVjaWZpYyBleHRlbnNpb25zLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhpcyBwYXJ0IGlzIHdoZXJlIHRoaW5ncyBjYW4gZ2V0IHRyaWNreSwgZGVhbGluZyB3aXRoIGFsbCB0aGUgZGlmZmVyZW50IHdheXMgdmVuZG9ycyBpbXBsZW1lbnQgdGhpbmdzLiBJIG5lZWQgdG8gYmUgc3VyZSBpdCBoYW5kbGVzIGV2ZXJ5dGhpbmcgcHJvcGVybHksIGVuc3VyaW5nIG5vIGRhdGEgbG9zcyBvciBjb3JydXB0aW9uLCBhbmQgdGhhdCBpdCByZW1haW5zIGVmZmljaWVudCBmb3IgZ29vZCBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUzNTYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozNDoyNy4zODY1MDk4MjFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTMxODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MTc0Mj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoxNzQzOm13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1ZihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqKmJzc19pbmZvLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTc0NC1cXHRcXHRcXHRcXHQgIHUzMiAqYnl0ZXNfbGVmdCwgdTY0IGZ3X3RzZiwgdTggKnJhZGlvX3R5cGUsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTIxMDI9aW50IG13aWZpZXhfcmV0XzgwMl8xMV9zY2FuKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTIyMjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoyMjI5OlxcdFxcdHJldCA9IG13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1Zihwcml2LCBcXHUwMDI2YnNzX2luZm8sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0yMjMwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZieXRlc19sZWZ0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0yNjAzPWludCBtd2lmaWV4X2hhbmRsZV9ldmVudF9leHRfc2Nhbl9yZXBvcnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMjcxOS1cXHRcXHR9XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoyNzIwOlxcdFxcdHJldCA9IG13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1Zihwcml2LCBcXHUwMDI2YnNzX2luZm8sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0yNzIxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZieXRlc19sZWZ0LCBmd190c2YsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjI3LjQ0OTY0NjU0NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjcxNDQ5MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQXR0YWNrIFN1cmZhY2U6IFNjYW4gQ29tbWFuZCBIYW5kbGVycyoqXG5cbk9rYXksIHNvIGBtd2lmaWV4X3JldF84MDJfMTFfc2NhbmAgaXMgKnRoZSogZnVuY3Rpb24gSSBuZWVkIHRvIGxvb2sgYXQ7IGl0J3MgdGhlIGNvbW1hbmQgcmVzcG9uc2UgaGFuZGxlciBmb3Igc2NhbiBjb21tYW5kcy4gSSBrbm93IHRoYXQgYG13aWZpZXhfaGFuZGxlX2V2ZW50X2V4dF9zY2FuX3JlcG9ydGAgaXMgYWxzbyBpbXBvcnRhbnQgYXMgaXQgaGFuZGxlcyBzY2FuIHJlcG9ydHMuIEJvdGggb2YgdGhlc2UgYXJlIGludGVyZXN0aW5nIGJlY2F1c2UgdGhleSBnZXQgdGhlaXIgZGF0YSBmcm9tIHRoZSBmaXJtd2FyZSwgd2hpY2ggbWVhbnMgdGhhdCBJIGNhbiBwb3RlbnRpYWxseSBmZWVkIHRoZW0gZnV6emluZyBkYXRhIHRocm91Z2ggVVNCLiBUaGlzIGNvbmZpcm1zIHRoZSBtb2RpZmllZCBjb2RlIGlzIGluZGVlZCByZWFjaGFibGUgYW5kLCBjcnVjaWFsbHksIHByb2Nlc3NlcyAqdW50cnVzdGVkKiBkYXRhIGRpcmVjdGx5IGZyb20gdGhlIGRldmljZS9maXJtd2FyZS5cblxuQ29uc2lkZXJpbmcgdGhpcyBpcyBhIGJ1ZyBmaXggZm9yIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIHBhcnNpbmcgV2ktRmkgSUVzLCBJJ20gdGhpbmtpbmcsIFwiQWJzb2x1dGVseSwgdGhpcyBpcyBmdXp6LXdvcnRoeS5cIiBUaGUgcG90ZW50aWFsIGZvciBhIHJlbGlhYmxlIGNyYXNoIGhlcmUgaXMgaGlnaCwgYW5kIHRoaXMgc291bmRzIGxpa2UgYSBncmVhdCB1c2UgY2FzZSBmb3IgZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgTVdJRklFWGAgYW5kIGBNV0lGSUVYX1VTQmAgYXJlIGVuYWJsZWQgZm9yIHRoZSB0ZXN0IGFuZCBlbnN1cmUgSSBkbyBub3QgbmVnbGVjdCBhbnkgcG90ZW50aWFsbHkgcmVsYXRlZCBjb25maWdzLlxuTGV0IG1lIGNoZWNrIHRob3NlIGNvbmZpZ3VyYXRpb25zLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MTY5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjMxLjcyMTA5ODc2NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5MzEyNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1XSUZJRVhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjI6Y29uZmlnIE1XSUZJRVhcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMTEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6MTI6Y29uZmlnIE1XSUZJRVhfU0RJT1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTEzLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBTRDg3ODYvU0Q4Nzg3L1NEODc5Ny9TRDg4ODcvU0Q4ODk3L1NEODk3Ny9TRDg5NzgvU0Q4OTg3L1NEODk5N1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTI0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjI1OmNvbmZpZyBNV0lGSUVYX1BDSUVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0yNi1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgUENJRSA4NzY2Lzg4OTcvODk5N1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTM2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjM3OmNvbmZpZyBNV0lGSUVYX1VTQlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTM4LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBVU0I4NzY2Lzg3OTcvODk5N1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzQ6MzEuNzc3MDM0NjlaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQzMDc0NjMzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIFRhcmdldCBmb3IgRnV6emluZzogQSBEZWVwIERpdmUgaW50byBNV0lGSUVYIENvbXBhdGliaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHplcm9lZCBpbiBvbiB0aGUgYE1XSUZJRVhgIGFuZCBgTVdJRklFWF9VU0JgIG1vZHVsZXMgYXMgdGhlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBjb250ZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBpZGVudGlmeSBrZXkgZnVuY3Rpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBoYXMgbGVkIG1lIHRvIGEgZmV3IHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgZnVuY3Rpb25zLCBzbyBsZXQncyB3YWxrIHRocm91Z2ggbXkgcmVhc29uaW5nLlxuXG5Jbml0aWFsbHksIEkgaWRlbnRpZmllZCBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYCBhbmQgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQ6IGBtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudGAsIGBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudGAuIFRoZXNlIGFyZSB1bHRpbWF0ZWx5IGNhbGxlZCBieSBgbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVgLiBUaGUgZm9jdXMgaXMgdG8gZGV0ZXJtaW5lIG5ldHdvcmsgY29tcGF0aWJpbGl0eS4gSSB0aGVuIGFkZGVkIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWxhdGVkIHRvIHRoZXNlOiBgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlgLCBgbXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zYCwgYW5kIGBtd2lmaWV4X3BhcnNlX3NpbmdsZV9yZXNwb25zZV9idWZgLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZWlyIHN0YXRpYyBzdGF0dXMuIEkgY29uZmlybWVkIHRoYXQgYG13aWZpZXhfc2VhcmNoX291aV9pbl9pZWAsIGBtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudGAsIGBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudGAsIGBtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZWAsIGFuZCBgbXdpZmlleF9wYXJzZV9zaW5nbGVfcmVzcG9uc2VfYnVmYCBhcmUgc3RhdGljLCB3aGlsZSBgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlgLCBgbXdpZmlleF9yZXRfODAyXzExX3NjYW5gLCBhbmQgYG13aWZpZXhfaGFuZGxlX2V2ZW50X2V4dF9zY2FuX3JlcG9ydGAgYXJlIG5vdC5cblxuTmV4dCwgSSBjb21waWxlZCBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgbmVlZCBhdHRlbnRpb246XG4qICAgYG13aWZpZXhfc2VhcmNoX291aV9pbl9pZWBcbiogICBgbXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnRgXG4qICAgYG13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50YFxuKiAgIGBtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZWBcbiogICBgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlgXG4qICAgYG13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtc2BcbiogICBgbXdpZmlleF9wYXJzZV9zaW5nbGVfcmVzcG9uc2VfYnVmYFxuKiAgIGBtd2lmaWV4X3JldF84MDJfMTFfc2NhbmBcbiogICBgbXdpZmlleF9oYW5kbGVfZXZlbnRfZXh0X3NjYW5fcmVwb3J0YFxuXG5UaGVuLCBJIGxvb2tlZCBhdCB0aGUgY2FsbGVycyBvZiBgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlgLiBJIGZvdW5kIGBtd2lmaWV4X2Jzc19zdGFydGAgaW4gYHN0YV9pb2N0bC5jYCwgc28gSSBzaG91bGQgYWRkIHRoYXQgb25lLlxuXG5Ob3csIGEgY3J1Y2lhbCBwb2ludDogSXMgdGhpcyBldmVuIHJlYWNoYWJsZSB0aHJvdWdoIFVTQiBmdXp6aW5nPyBUaGUgYW5zd2VyIGlzIHllcy4gVGhlIFVTQiBkcml2ZXIgcmVjZWl2ZXMgZGF0YSBmcm9tIHRoZSBkZXZpY2UgaW4gdGhlIGZvcm0gb2YgY29tbWFuZCByZXNwb25zZXMgb3IgZXZlbnRzLiBTcGVjaWZpY2FsbHksIGBtd2lmaWV4X3JldF84MDJfMTFfc2NhbmAgaGFuZGxlcyBjb21tYW5kIHJlc3BvbnNlcyBhbmQgYG13aWZpZXhfaGFuZGxlX2V2ZW50X2V4dF9zY2FuX3JlcG9ydGAgaGFuZGxlcyBldmVudHMuIFRoaXMgbWVhbnMgYm90aCBhcmUgcmVhY2hhYmxlIHRocm91Z2ggZW11bGF0aW9uIG9mIHRoZSBVU0IgZGV2aWNlIHNlbmRpbmcgcmVzcG9uc2VzIG9yIGV2ZW50cyBmcm9tIGEgc2NhbiBjb21tYW5kLiBUaGVzZSBhcmUgZGVmaW5pdGVseSBnb29kIGZ1enppbmcgdGFyZ2V0cy5cblxuRmluYWxseSwgbGV0IG1lIHJlLWV2YWx1YXRlIG15IGxpc3QgZm9yIHRoZSBtb3N0IGVmZmVjdGl2ZSBmdXp6aW5nIHNjb3BlLiBgbXdpZmlleF9ic3Nfc3RhcnRgIG1pZ2h0IGJlIHRoZSBlbnRyeSBwb2ludCB0byBmdXp6aW5nIGEgbG90IG9mIHRoZSBjb21wYXRpYmlsaXR5IGNoZWNrcy4gV2hpbGUgaXQncyBjYWxsZWQgdGhyb3VnaCBhbiBpb2N0bC9jZmc4MDIxMSBjYWxsYmFjayAobGlrZSBmcm9tIGBtd2lmaWV4X3NldF9ic3NfcGFyYW1zYCksIGl0IGNhbGxzIGBtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eWAgb24gYSBCU1MgZGVzY3JpcHRvci4gVGhpcyBCU1MgZGVzY3JpcHRvciBpcywgaW1wb3J0YW50bHksIHBvcHVsYXRlZCBmcm9tIHNjYW4gcmVzdWx0cy4gU2NhbiByZXN1bHRzLCBpbiB0dXJuLCAqY29tZSBmcm9tIHRoZSBkZXZpY2UqLiBTbywgdGhlIGRhdGEgd2l0aGluIHRoZSBCU1MgZGVzY3JpcHRvciBpcyBpbmRlZWQgZGV2aWNlLWNvbnRyb2xsZWQgYW5kIGZ1enphYmxlLlxuXG5TbyB0aGUgcmVmaW5lZCBmb2N1cyBzeW1ib2xzIGFyZTpcblxuKiAgIGBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVgXG4qICAgYG13aWZpZXhfaXNfcnNuX291aV9wcmVzZW50YFxuKiAgIGBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudGBcbiogICBgbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVgXG4qICAgYG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5YFxuKiAgIGBtd2lmaWV4X3VwZGF0ZV9jdXJyX2Jzc19wYXJhbXNgXG4qICAgYG13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1ZmBcbiogICBgbXdpZmlleF9yZXRfODAyXzExX3NjYW5gXG4qICAgYG13aWZpZXhfaGFuZGxlX2V2ZW50X2V4dF9zY2FuX3JlcG9ydGBcbiogICBgbXdpZmlleF9ic3Nfc3RhcnRgXG5cbk5vdywgbGV0J3MgZXhwbG9yZSBgbXdpZmlleF9ic3Nfc3RhcnRgIGluIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcwMTksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjQ2LjA4NDUwMDUzMVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgxNTYwMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXdpZmlleF9ic3Nfc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYz0yMjY2PW13aWZpZXhfY2ZnODAyMTFfYXNzb2Moc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgc2l6ZV90IHNzaWRfbGVuLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmMtMjQwNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYzoyNDA2OlxcdHJldCA9IG13aWZpZXhfYnNzX3N0YXJ0KHByaXYsIGJzcywgXFx1MDAyNnJlcV9zc2lkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYy0yNDA3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYz00NDI4PW13aWZpZXhfY2ZnODAyMTFfYXNzb2NpYXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYy00NTIwLVxcdGNmZzgwMjExX3JlZl9ic3MoYWRhcHRlci1cXHUwMDNld2lwaHksIHJlcS1cXHUwMDNlYnNzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYzo0NTIxOlxcdHJldCA9IG13aWZpZXhfYnNzX3N0YXJ0KHByaXYsIHJlcS1cXHUwMDNlYnNzLCBcXHUwMDI2cmVxX3NzaWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jLTQ1MjItXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xNDc4PWludCBtd2lmaWV4X3dhaXRfcXVldWVfY29tcGxldGUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE0NzktXFx0XFx0XFx0XFx0c3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZF9xdWV1ZWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTQ4MDppbnQgbXdpZmlleF9ic3Nfc3RhcnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTQ4MS1cXHRcXHQgICAgICBzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqcmVxX3NzaWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jPTI0OT1zdGF0aWMgaW50IG13aWZpZXhfcHJvY2Vzc19jb3VudHJ5X2llKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtMzE3LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYzozMTg6aW50IG13aWZpZXhfYnNzX3N0YXJ0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtMzE5LVxcdFxcdCAgICAgIHN0cnVjdCBjZmc4MDIxMV9zc2lkICpyZXFfc3NpZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzQ6NDYuMTQyNjYzODY3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDA3Nzk2MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWFydmVsbCBXaS1GaSBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBtd2lmaWV4X2Jzc19zdGFydGAgdXNlcyBhIGBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3NgLiBUaGlzIGlzIHBvcHVsYXRlZCBieSBgbWFjODAyMTEvY2ZnODAyMTFgLCByaWdodD8gQW5kIHRoYXQgaW5mb3JtYXRpb24gKmNvbWVzIGZyb20qIHRoZSBzY2FuIHJlc3VsdHMgcHJvdmlkZWQgYnkgdGhlIGRyaXZlciBpdHNlbGYsIGhhbmRlZCBvZmYgdG8gYGNmZzgwMjExYCwgdGhlbiBwYXNzZWQgYmFjayBkdXJpbmcgYXNzb2NpYXRpb24uIEdvdCBpdCDigJMgdGhlIGRldmljZSBpcyB0aGUgc291cmNlIG9mIHRoZSBCU1MgZGF0YS4gVGhhdCBjb25maXJtcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBkYXRhIGZsb3csIHdoaWNoIGlzIGhlbHBmdWwuIEFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlLCBhcyBleHBlY3RlZCwgYSBzb2xpZCBzdGFydGluZyBwb2ludC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBgRW5hYmxlQ29uZmlnc2AuIFdlIGhhdmU6XG5cbiogICBgTVdJRklFWGBcbiogICBgTVdJRklFWF9VU0JgXG4qICAgYE1XSUZJRVhfU0RJT2BcbiogICBgTVdJRklFWF9QQ0lFYFxuXG5Gb3IgdGVzdGluZyB0aGUgY29yZSBsb2dpYyB0aHJvdWdoIFVTQiBmdXp6aW5nLCBpdCBzZWVtcyBsaWtlIGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCBzaG91bGQgYmUgZW5vdWdoLiBUaGF0J2xsIGtlZXAgdGhlIHNjb3BlIG1hbmFnZWFibGUgZm9yIG5vdy5cblxuQnV0IHdhaXQgYSBzZWNvbmQuLi4gYmVmb3JlIEkgY29tbWl0IHRvIHRoYXQsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcuIERvZXMgYE1XSUZJRVhfVVNCYCBkZXBlbmQgb24gYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zPyBCZXN0IHRvIGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWdgIGZpbGUgcXVpY2tseSwganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gVGhhdCBjb3VsZCBpbXBhY3Qgb3VyIHRlc3Rpbmcgc3RyYXRlZ3kuIEknbGwgdGFrZSBhIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzcxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjUwLjk4MzQ0NTg3NloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE1XSUZJRVhcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gTWFydmVsbFxcbiAgIDc6XFx0XFx0ICA4MDIuMTFuL2FjIGNoaXBzZXRzLlxcbiAgIDg6XFx0XFxuICAgOTpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXFxuICAxMDpcXHRcXHQgIG13aWZpZXguXFxuICAxMTpcXHRcXG4gIDEyOlxcdGNvbmZpZyBNV0lGSUVYX1NESU9cXG4gIDEzOlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBTRDg3ODYvU0Q4Nzg3L1NEODc5Ny9TRDg4ODcvU0Q4ODk3L1NEODk3Ny9TRDg5NzgvU0Q4OTg3L1NEODk5N1xcXCJcXG4gIDE0OlxcdFxcdGRlcGVuZHMgb24gTVdJRklFWCBcXHUwMDI2XFx1MDAyNiBNTUNcXG4gIDE1OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDE2OlxcdFxcdHNlbGVjdCBXQU5UX0RFVl9DT1JFRFVNUFxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gTWFydmVsbFxcbiAgMTk6XFx0XFx0ICA4Nzg2Lzg3ODcvODc5Ny84ODg3Lzg4OTcvODk3Ny84OTc4Lzg5ODcvODk5NyBjaGlwc2V0cyB3aXRoXFxuICAyMDpcXHRcXHQgIFNESU8gaW50ZXJmYWNlLiBTRDg5NzggaXMgYWxzbyBrbm93biBhcyBOWFAgSVc0MTYuXFxuICAyMTpcXHRcXG4gIDIyOlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWRcXG4gIDIzOlxcdFxcdCAgbXdpZmlleF9zZGlvLlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRjb25maWcgTVdJRklFWF9QQ0lFXFxuICAyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgUENJRSA4NzY2Lzg4OTcvODk5N1xcXCJcXG4gIDI3OlxcdFxcdGRlcGVuZHMgb24gTVdJRklFWCBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gIDI4OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDI5OlxcdFxcdHNlbGVjdCBXQU5UX0RFVl9DT1JFRFVNUFxcbiAgMzA6XFx0XFx0aGVscFxcbiAgMzE6XFx0XFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gTWFydmVsbFxcbiAgMzI6XFx0XFx0ICA4NzY2Lzg4OTcvODk5NyBjaGlwc2V0cyB3aXRoIFBDSWUgaW50ZXJmYWNlLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXFxuICAzNTpcXHRcXHQgIG13aWZpZXhfcGNpZS5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0Y29uZmlnIE1XSUZJRVhfVVNCXFxuICAzODpcXHRcXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgVVNCODc2Ni84Nzk3Lzg5OTdcXFwiXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIE1XSUZJRVggXFx1MDAyNlxcdTAwMjYgVVNCXFxuICA0MDpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICA0MTpcXHRcXHRoZWxwXFxuICA0MjpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBNYXJ2ZWxsXFxuICA0MzpcXHRcXHQgIDg3OTcvODk5NyBjaGlwc2V0IHdpdGggVVNCIGludGVyZmFjZS5cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGl0IGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZFxcbiAgNDY6XFx0XFx0ICBtd2lmaWV4X3VzYi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzQ6NTAuOTgzNTEzODc2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NDExODY4MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE1XSUZJRVggRHJpdmVyKipcblxuT2theSwgc28gSSd2ZSB6ZXJvZWQgaW4gb24gdGhlIGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCBtb2R1bGVzLiBUaGV5J3JlIGNsZWFybHkgdGhlIGtleSBwbGF5ZXJzIGhlcmUsIHJlbHlpbmcgb24gYENGRzgwMjExYCBhbmQgdGhlIGBVU0JgIHN1YnN5c3RlbSwgd2hpY2ggYXJlIHVzdWFsbHkgYmFrZWQgaW50byBTeXprYWxsZXIgY29uZmlndXJhdGlvbnMsIG1ha2luZyB0aGVtIHByZXR0eSBhY2Nlc3NpYmxlIHRhcmdldHMuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIHN0cmF0ZWd5LiBUaGlzIGlzIHdoYXQncyBsb29raW5nIHByb21pc2luZzpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFllcywgYWJzb2x1dGVseS4gVGhpcyBpcyBwcm9taXNpbmcuXG4qICAgKipGb2N1cyBTeW1ib2xzOioqIFdlIGhhdmUgYSBzb2xpZCBsaXN0IG9mIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGVzZSBpbiBtb3JlIGRldGFpbCwgYnV0IHRoZSBpbml0aWFsIGltcHJlc3Npb25zIGFyZSBnb29kLiBUaGV5J3JlIHJlbGF0ZWQgdG8gcGFyc2luZyBXaS1GaSBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUVzKSwgaGFuZGxpbmcgc2NhbiByZXN1bHRzLCBhbmQgbWFuYWdpbmcgbmV0d29yayBjb21wYXRpYmlsaXR5LCBhbGwgb2Ygd2hpY2ggYXJlIGNvbW1vbiBmdXp6aW5nIHRhcmdldHM6XG4gICAgKiAgIGBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVgXG4gICAgKiAgIGBtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudGBcbiAgICAqICAgYG13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50YFxuICAgICogICBgbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVgXG4gICAgKiAgIGBtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eWBcbiAgICAqICAgYG13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtc2BcbiAgICAqICAgYG13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1ZmBcbiAgICAqICAgYG13aWZpZXhfcmV0XzgwMl8xMV9zY2FuYFxuICAgICogICBgbXdpZmlleF9oYW5kbGVfZXZlbnRfZXh0X3NjYW5fcmVwb3J0YFxuICAgICogICBgbXdpZmlleF9ic3Nfc3RhcnRgXG4qICAgKipFbmFibGVDb25maWdzOioqIFRoZSBgTVdJRklFWGAgYW5kIGBNV0lGSUVYX1VTQmAgY29uZmlndXJhdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkLlxuKiAgICoqUmVhc29uaW5nOioqIFRoZSBpbml0aWFsIG1vdGl2YXRpb24gc3RlbXMgZnJvbSBhIHBhdGNoIHRoYXQgZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgaW4gYG13aWZpZXhfc2VhcmNoX291aV9pbl9pZWAgd2hlbiBkZWFsaW5nIHdpdGggV2ktRmkgSUVzLiBCZWNhdXNlIHRoZSBkcml2ZXIgb3BlcmF0ZXMgb3ZlciBVU0IsIHRoaXMgc3VnZ2VzdHMgdGhlIGZpcm13YXJlIHJlc3BvbnNlcyBjYW4gYmUgZnV6emVkIHZpYSB0aGUgVVNCIHN1YnN5c3RlbS4gVGhhdCdzIGEgZ29vZCBhdHRhY2sgc3VyZmFjZS5cblxuTm93LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGNhbGwgZ3JhcGhzIHRvIGVuc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSd2ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGF0IGBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVgIGlzIG9ubHkgY2FsbGVkIGJ5IGBtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudGAgYW5kIGBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudGAuIGBtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudGAgZ2V0cyBjYWxsZWQgYnkgYG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlYCwgc28gd2UgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhpcyBhcmVhLiBXZSBuZWVkIHRvIGNoZWNrIGlmIGBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudGAgaXMgY2FsbGVkIGVsc2V3aGVyZS4gVGhhdCBoZWxwcyB1cyBzb2xpZGlmeSB0aGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXR0YWNrIHN1cmZhY2UsIGJ5IG1hcHBpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IHVsdGltYXRlbHkgY2FsbCB0aGUgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTEwMiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjU4LjYyNDcwMjgyNFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMjM1MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0xNzY9c3RhdGljIHU4XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoxNzc6bXdpZmlleF9pc193cGFfb3VpX3ByZXNlbnQoc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MsIHUzMiBjaXBoZXIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNzgte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0zNDQ9bXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMzg5LVxcdFxcdFxcdCAgICAgYnNzX2Rlc2MtXFx1MDAzZWJjbl9odF9jYXApIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzozOTA6XFx0XFx0XFx0ICAgICFtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudChic3NfZGVzYyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTM5MS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgQ0lQSEVSX1NVSVRFX0NDTVApKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0zOTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzozOTM6XFx0XFx0XFx0XFx0aWYgKG13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0zOTQtXFx0XFx0XFx0XFx0XFx0XFx0KGJzc19kZXNjLCBDSVBIRVJfU1VJVEVfVEtJUCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzQ6NTguNzM3OTQ3ODY2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NDA5NzE1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgZXhwcmVzc2VkIGFzIHRob3VnaCBJJ20gdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipBbmFseXNpcyBDb21wbGV0ZTogRm9jdXMgb24gQ29tcGF0aWJpbGl0eSBDaGVjayoqXG5cbkFscmlnaHQsIHRoYXQgd2FzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhbmFseXNpcy4gSSd2ZSBkcmlsbGVkIGRvd24sIGFuZCBpdCdzIGNsZWFyIHRoZSByZWxldmFudCBpc3N1ZSByZXNpZGVzICpleGNsdXNpdmVseSogd2l0aGluIGBtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZWAuIE5vdGhpbmcgZWxzZSBzZWVtcyB0byBmYWN0b3IgaW50byB0aGlzLiBNeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24gaXMgc29saWQsIGFuZCBJJ20gY29uZmlkZW50IGluIG15IGNvbmNsdXNpb25zLiBJJ3ZlIGdvdCBhIGNvbXByZWhlbnNpdmUgcGljdHVyZSBvZiB3aGF0J3MgZ29pbmcgb24uIFRpbWUgdG8gbW92ZSBmb3J3YXJkIOKAkyBJJ2xsIGluaXRpYXRlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuIExldCdzIGdldCB0aGVzZSBmaW5kaW5ncyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI2MDksIk91dHB1dFRva2VucyI6MjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzU6MDMuMjc4OTIxNTM1WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NTc0OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNV0lGSUVYXCIsXG4gICAgXCJNV0lGSUVYX1VTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm13aWZpZXhfc2VhcmNoX291aV9pbl9pZVwiLFxuICAgIFwibXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnRcIixcbiAgICBcIm13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50XCIsXG4gICAgXCJtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZVwiLFxuICAgIFwibXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlcIixcbiAgICBcIm13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtc1wiLFxuICAgIFwibXdpZmlleF9wYXJzZV9zaW5nbGVfcmVzcG9uc2VfYnVmXCIsXG4gICAgXCJtd2lmaWV4X3JldF84MDJfMTFfc2NhblwiLFxuICAgIFwibXdpZmlleF9oYW5kbGVfZXZlbnRfZXh0X3NjYW5fcmVwb3J0XCIsXG4gICAgXCJtd2lmaWV4X2Jzc19zdGFydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYCB3aGVuIHBhcnNpbmcgV2ktRmkgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gdGhlIGRyaXZlciBwcm9jZXNzZXMgc2NhbiByZXN1bHRzIG9yIGV2ZW50cyBmcm9tIHRoZSBmaXJtd2FyZS4gU2luY2UgdGhlIG13aWZpZXggZHJpdmVyIHN1cHBvcnRzIFVTQiwgdGhlIGZpcm13YXJlIHJlc3BvbnNlcyBjYW4gYmUgZnV6emVkIHZpYSB0aGUgVVNCIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNV0lGSUVYXCIsXG4gICAgXCJNV0lGSUVYX1VTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm13aWZpZXhfc2VhcmNoX291aV9pbl9pZVwiLFxuICAgIFwibXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnRcIixcbiAgICBcIm13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50XCIsXG4gICAgXCJtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZVwiLFxuICAgIFwibXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlcIixcbiAgICBcIm13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtc1wiLFxuICAgIFwibXdpZmlleF9wYXJzZV9zaW5nbGVfcmVzcG9uc2VfYnVmXCIsXG4gICAgXCJtd2lmaWV4X3JldF84MDJfMTFfc2NhblwiLFxuICAgIFwibXdpZmlleF9oYW5kbGVfZXZlbnRfZXh0X3NjYW5fcmVwb3J0XCIsXG4gICAgXCJtd2lmaWV4X2Jzc19zdGFydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYCB3aGVuIHBhcnNpbmcgV2ktRmkgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gdGhlIGRyaXZlciBwcm9jZXNzZXMgc2NhbiByZXN1bHRzIG9yIGV2ZW50cyBmcm9tIHRoZSBmaXJtd2FyZS4gU2luY2UgdGhlIG13aWZpZXggZHJpdmVyIHN1cHBvcnRzIFVTQiwgdGhlIGZpcm13YXJlIHJlc3BvbnNlcyBjYW4gYmUgZnV6emVkIHZpYSB0aGUgVVNCIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowhvdfm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-12 00:10:10 +0000 UTC FinishedAt: 2026-07-12 00:35:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "44696aa3a489d2baf58efa61b37833f100072bee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MWIFIEX", "MWIFIEX_USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "44696aa3a489d2baf58efa61b37833f100072bee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MWIFIEX", "MWIFIEX_USB" ], "series_id": "b1fdcdc4-2083-4115-8fde-d385e180e1ea" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mwifiex_search_oui_in_ie", "mwifiex_is_rsn_oui_present", "mwifiex_is_wpa_oui_present", "mwifiex_is_network_compatible", "mwifiex_check_network_compatibility", "mwifiex_update_curr_bss_params", "mwifiex_parse_single_response_buf", "mwifiex_ret_802_11_scan", "mwifiex_handle_event_ext_scan_report", "mwifiex_bss_start" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01XSUZJRVgmIzM0OywKICAgICYjMzQ7TVdJRklFWF9VU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttd2lmaWV4X3NlYXJjaF9vdWlfaW5faWUmIzM0OywKICAgICYjMzQ7bXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnQmIzM0OywKICAgICYjMzQ7bXdpZmlleF9pc193cGFfb3VpX3ByZXNlbnQmIzM0OywKICAgICYjMzQ7bXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGUmIzM0OywKICAgICYjMzQ7bXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHkmIzM0OywKICAgICYjMzQ7bXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zJiMzNDssCiAgICAmIzM0O213aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1ZiYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3JldF84MDJfMTFfc2NhbiYjMzQ7LAogICAgJiMzNDttd2lmaWV4X2hhbmRsZV9ldmVudF9leHRfc2Nhbl9yZXBvcnQmIzM0OywKICAgICYjMzQ7bXdpZmlleF9ic3Nfc3RhcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGluIGBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVgIHdoZW4gcGFyc2luZyBXaS1GaSBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUVzKS4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgd2hlbiB0aGUgZHJpdmVyIHByb2Nlc3NlcyBzY2FuIHJlc3VsdHMgb3IgZXZlbnRzIGZyb20gdGhlIGZpcm13YXJlLiBTaW5jZSB0aGUgbXdpZmlleCBkcml2ZXIgc3VwcG9ydHMgVVNCLCB0aGUgZmlybXdhcmUgcmVzcG9uc2VzIGNhbiBiZSBmdXp6ZWQgdmlhIHRoZSBVU0Igc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmM1NWVjYWZhNmY0YTBiMmMyYWFhMWEwMzc5MDIyNmE2NmUwODExYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDEyIDAwOjMzOjE4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jXG5pbmRleCA5N2MwZWMzYjgyMmU3MC4uM2E1NWZjNmYxYjU0OGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jXG5AQCAtMTA0LDEyICYjNDM7MTA0LDIxIEBAIGhhc192ZW5kb3JfaGRyKHN0cnVjdCBpZWVlX3R5cGVzX3ZlbmRvcl9zcGVjaWZpYyAqaWUsIHU4IGtleSlcbiAgKiBhIGdpdmVuIG91aSBpbiBQVEsuXG4gICovXG4gc3RhdGljIHU4XG4tbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKHN0cnVjdCBpZV9ib2R5ICppZWJvZHksIHU4ICpvdWkpXG4mIzQzO213aWZpZXhfc2VhcmNoX291aV9pbl9pZShzdHJ1Y3QgaWVfYm9keSAqaWVib2R5LCB1OCAqb3VpLCBpbnQgaWVfbGVuKVxuIHtcbiBcdHU4IGNvdW50O1xuIFxuJiM0MztcdC8qIE5lZWQgZ3JwX2tleV9vdWlbNF0gJiM0MzsgcHRrX2NudFsyXSBiZWZvcmUgcmVhZGluZyB0aGUgT1VJIGNvdW50LiAqL1xuJiM0MztcdGlmIChpZV9sZW4gXHUwMDNjIChpbnQpb2Zmc2V0b2Yoc3RydWN0IGllX2JvZHksIHB0a19ib2R5KSlcbiYjNDM7XHRcdHJldHVybiBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVDtcbiYjNDM7XG4gXHRjb3VudCA9IGllYm9keS1cdTAwM2VwdGtfY250WzBdO1xuIFxuJiM0MztcdC8qIFJlamVjdCBhbiBPVUkgY291bnQgd2hvc2UgbGlzdCB3b3VsZCBydW4gcGFzdCB0aGUgZWxlbWVudC4gKi9cbiYjNDM7XHRpZiAob2Zmc2V0b2Yoc3RydWN0IGllX2JvZHksIHB0a19ib2R5KSAmIzQzO1xuJiM0MztcdCAgICBjb3VudCAqIHNpemVvZihpZWJvZHktXHUwMDNlcHRrX2JvZHkpIFx1MDAzZSAoc2l6ZV90KWllX2xlbilcbiYjNDM7XHRcdHJldHVybiBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVDtcbiYjNDM7XG4gXHQvKiBUaGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBPVUlzIGZvciBQVEsgaGVuY2VcbiBcdCAgIDEpIFRha2UgdGhlIGxlbmd0aC5cbiBcdCAgIDIpIENoZWNrIGFsbCB0aGUgT1VJcyBmb3IgQUVTLlxuQEAgLTE0MywxMSAmIzQzOzE1MiwxNCBAQCBtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudChzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYywgdTMyIGNpcGhlcilcbiBcdHU4IHJldCA9IE1XSUZJRVhfT1VJX05PVF9QUkVTRU5UO1xuIFxuIFx0aWYgKGhhc19pZWVlX2hkcihic3NfZGVzYy1cdTAwM2ViY25fcnNuX2llLCBXTEFOX0VJRF9SU04pKSB7XG4mIzQzO1x0XHRpbnQgaWVfbGVuID0gKGludClic3NfZGVzYy1cdTAwM2ViY25fcnNuX2llLVx1MDAzZWllZWVfaGRyLmxlbiAtXG4mIzQzO1x0XHRcdCAgICAgUlNOX0dUS19PVUlfT0ZGU0VUO1xuJiM0MztcbiBcdFx0aWVib2R5ID0gKHN0cnVjdCBpZV9ib2R5ICopXG4gXHRcdFx0ICgoKHU4ICopIGJzc19kZXNjLVx1MDAzZWJjbl9yc25faWUtXHUwMDNlZGF0YSkgJiM0MztcbiBcdFx0XHQgIFJTTl9HVEtfT1VJX09GRlNFVCk7XG4gXHRcdG91aSA9IFx1MDAyNm13aWZpZXhfcnNuX291aVtjaXBoZXJdWzBdO1xuLVx0XHRyZXQgPSBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWUoaWVib2R5LCBvdWkpO1xuJiM0MztcdFx0cmV0ID0gbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKGllYm9keSwgb3VpLCBpZV9sZW4pO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXHR9XG5AQCAtMTY5LDEwICYjNDM7MTgxLDE0IEBAIG13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50KHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLCB1MzIgY2lwaGVyKVxuIFx0dTggcmV0ID0gTVdJRklFWF9PVUlfTk9UX1BSRVNFTlQ7XG4gXG4gXHRpZiAoaGFzX3ZlbmRvcl9oZHIoYnNzX2Rlc2MtXHUwMDNlYmNuX3dwYV9pZSwgV0xBTl9FSURfVkVORE9SX1NQRUNJRklDKSkge1xuJiM0MztcdFx0aW50IGllX2xlbiA9IChpbnQpYnNzX2Rlc2MtXHUwMDNlYmNuX3dwYV9pZS1cdTAwM2V2ZW5kX2hkci5sZW4gLVxuJiM0MztcdFx0XHQgICAgIChpbnQpc2l6ZW9mKGJzc19kZXNjLVx1MDAzZWJjbl93cGFfaWUtXHUwMDNldmVuZF9oZHIub3VpKSAtXG4mIzQzO1x0XHRcdCAgICAgV1BBX0dUS19PVUlfT0ZGU0VUO1xuJiM0MztcbiBcdFx0aWVib2R5ID0gKHN0cnVjdCBpZV9ib2R5ICopKCh1OCAqKWJzc19kZXNjLVx1MDAzZWJjbl93cGFfaWUtXHUwMDNlZGF0YSAmIzQzO1xuIFx0XHRcdFx0XHQgICAgV1BBX0dUS19PVUlfT0ZGU0VUKTtcbiBcdFx0b3VpID0gXHUwMDI2bXdpZmlleF93cGFfb3VpW2NpcGhlcl1bMF07XG4tXHRcdHJldCA9IG13aWZpZXhfc2VhcmNoX291aV9pbl9pZShpZWJvZHksIG91aSk7XG4mIzQzO1x0XHRyZXQgPSBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWUoaWVib2R5LCBvdWksIGllX2xlbik7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNV0lGSUVYJiMzNDssCiAgICAmIzM0O01XSUZJRVhfVVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXdpZmlleF9zZWFyY2hfb3VpX2luX2llJiMzNDssCiAgICAmIzM0O213aWZpZXhfaXNfcnNuX291aV9wcmVzZW50JiMzNDssCiAgICAmIzM0O213aWZpZXhfaXNfd3BhX291aV9wcmVzZW50JiMzNDssCiAgICAmIzM0O213aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlJiMzNDssCiAgICAmIzM0O213aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5JiMzNDssCiAgICAmIzM0O213aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtcyYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3BhcnNlX3NpbmdsZV9yZXNwb25zZV9idWYmIzM0OywKICAgICYjMzQ7bXdpZmlleF9yZXRfODAyXzExX3NjYW4mIzM0OywKICAgICYjMzQ7bXdpZmlleF9oYW5kbGVfZXZlbnRfZXh0X3NjYW5fcmVwb3J0JiMzNDssCiAgICAmIzM0O213aWZpZXhfYnNzX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYCB3aGVuIHBhcnNpbmcgV2ktRmkgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gdGhlIGRyaXZlciBwcm9jZXNzZXMgc2NhbiByZXN1bHRzIG9yIGV2ZW50cyBmcm9tIHRoZSBmaXJtd2FyZS4gU2luY2UgdGhlIG13aWZpZXggZHJpdmVyIHN1cHBvcnRzIFVTQiwgdGhlIGZpcm13YXJlIHJlc3BvbnNlcyBjYW4gYmUgZnV6emVkIHZpYSB0aGUgVVNCIHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmM1NWVjYWZhNmY0YTBiMmMyYWFhMWEwMzc5MDIyNmE2NmUwODExYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDEyIDAwOjMzOjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMKaW5kZXggOTdjMGVjM2I4MjJlNzAuLjNhNTVmYzZmMWI1NDhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMKQEAgLTEwNCwxMiAmIzQzOzEwNCwyMSBAQCBoYXNfdmVuZG9yX2hkcihzdHJ1Y3QgaWVlZV90eXBlc192ZW5kb3Jfc3BlY2lmaWMgKmllLCB1OCBrZXkpCiAgKiBhIGdpdmVuIG91aSBpbiBQVEsuCiAgKi8KIHN0YXRpYyB1OAotbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKHN0cnVjdCBpZV9ib2R5ICppZWJvZHksIHU4ICpvdWkpCiYjNDM7bXdpZmlleF9zZWFyY2hfb3VpX2luX2llKHN0cnVjdCBpZV9ib2R5ICppZWJvZHksIHU4ICpvdWksIGludCBpZV9sZW4pCiB7CiAJdTggY291bnQ7CiAKJiM0MzsJLyogTmVlZCBncnBfa2V5X291aVs0XSAmIzQzOyBwdGtfY250WzJdIGJlZm9yZSByZWFkaW5nIHRoZSBPVUkgY291bnQuICovCiYjNDM7CWlmIChpZV9sZW4gJmx0OyAoaW50KW9mZnNldG9mKHN0cnVjdCBpZV9ib2R5LCBwdGtfYm9keSkpCiYjNDM7CQlyZXR1cm4gTVdJRklFWF9PVUlfTk9UX1BSRVNFTlQ7CiYjNDM7CiAJY291bnQgPSBpZWJvZHktJmd0O3B0a19jbnRbMF07CiAKJiM0MzsJLyogUmVqZWN0IGFuIE9VSSBjb3VudCB3aG9zZSBsaXN0IHdvdWxkIHJ1biBwYXN0IHRoZSBlbGVtZW50LiAqLwomIzQzOwlpZiAob2Zmc2V0b2Yoc3RydWN0IGllX2JvZHksIHB0a19ib2R5KSAmIzQzOwomIzQzOwkgICAgY291bnQgKiBzaXplb2YoaWVib2R5LSZndDtwdGtfYm9keSkgJmd0OyAoc2l6ZV90KWllX2xlbikKJiM0MzsJCXJldHVybiBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVDsKJiM0MzsKIAkvKiBUaGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBPVUlzIGZvciBQVEsgaGVuY2UKIAkgICAxKSBUYWtlIHRoZSBsZW5ndGguCiAJICAgMikgQ2hlY2sgYWxsIHRoZSBPVUlzIGZvciBBRVMuCkBAIC0xNDMsMTEgJiM0MzsxNTIsMTQgQEAgbXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnQoc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MsIHUzMiBjaXBoZXIpCiAJdTggcmV0ID0gTVdJRklFWF9PVUlfTk9UX1BSRVNFTlQ7CiAKIAlpZiAoaGFzX2llZWVfaGRyKGJzc19kZXNjLSZndDtiY25fcnNuX2llLCBXTEFOX0VJRF9SU04pKSB7CiYjNDM7CQlpbnQgaWVfbGVuID0gKGludClic3NfZGVzYy0mZ3Q7YmNuX3Jzbl9pZS0mZ3Q7aWVlZV9oZHIubGVuIC0KJiM0MzsJCQkgICAgIFJTTl9HVEtfT1VJX09GRlNFVDsKJiM0MzsKIAkJaWVib2R5ID0gKHN0cnVjdCBpZV9ib2R5ICopCiAJCQkgKCgodTggKikgYnNzX2Rlc2MtJmd0O2Jjbl9yc25faWUtJmd0O2RhdGEpICYjNDM7CiAJCQkgIFJTTl9HVEtfT1VJX09GRlNFVCk7CiAJCW91aSA9ICZhbXA7bXdpZmlleF9yc25fb3VpW2NpcGhlcl1bMF07Ci0JCXJldCA9IG13aWZpZXhfc2VhcmNoX291aV9pbl9pZShpZWJvZHksIG91aSk7CiYjNDM7CQlyZXQgPSBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWUoaWVib2R5LCBvdWksIGllX2xlbik7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0KQEAgLTE2OSwxMCAmIzQzOzE4MSwxNCBAQCBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudChzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYywgdTMyIGNpcGhlcikKIAl1OCByZXQgPSBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVDsKIAogCWlmIChoYXNfdmVuZG9yX2hkcihic3NfZGVzYy0mZ3Q7YmNuX3dwYV9pZSwgV0xBTl9FSURfVkVORE9SX1NQRUNJRklDKSkgewomIzQzOwkJaW50IGllX2xlbiA9IChpbnQpYnNzX2Rlc2MtJmd0O2Jjbl93cGFfaWUtJmd0O3ZlbmRfaGRyLmxlbiAtCiYjNDM7CQkJICAgICAoaW50KXNpemVvZihic3NfZGVzYy0mZ3Q7YmNuX3dwYV9pZS0mZ3Q7dmVuZF9oZHIub3VpKSAtCiYjNDM7CQkJICAgICBXUEFfR1RLX09VSV9PRkZTRVQ7CiYjNDM7CiAJCWllYm9keSA9IChzdHJ1Y3QgaWVfYm9keSAqKSgodTggKilic3NfZGVzYy0mZ3Q7YmNuX3dwYV9pZS0mZ3Q7ZGF0YSAmIzQzOwogCQkJCQkgICAgV1BBX0dUS19PVUlfT0ZGU0VUKTsKIAkJb3VpID0gJmFtcDttd2lmaWV4X3dwYV9vdWlbY2lwaGVyXVswXTsKLQkJcmV0ID0gbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKGllYm9keSwgb3VpKTsKJiM0MzsJCXJldCA9IG13aWZpZXhfc2VhcmNoX291aV9pbl9pZShpZWJvZHksIG91aSwgaWVfbGVuKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjU2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFdpLUZpIERyaXZlciBQYXRjaDogU2VjdXJpdHkgYW5kIEZ1enppbmcgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jYC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZpeCDigJMgYWRkaW5nIGJvdW5kcyBjaGVja2luZyB0byBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYC4gU2VlbXMgbGlrZSBhIHN0YW5kYXJkIGRlZmVuc2UgYWdhaW5zdCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcGFyc2luZyBJbmZvcm1hdGlvbiBFbGVtZW50cyBmcm9tIFdpLUZpIGJlYWNvbnMgb3IgcHJvYmUgcmVzcG9uc2VzLiBHb29kLCBwcm9hY3RpdmUgc2VjdXJpdHkgaXMgYWx3YXlzIGFwcHJlY2lhdGVkLiBJdCYjMzk7cyBmdW5jdGlvbmFsIGNvZGUgd2l0aGluIGEgd2lyZWxlc3MgZHJpdmVyLCB3aGljaCBpcyB3aGVyZSB0aGluZ3Mgc3RhcnQgdG8gZ2V0IGludGVyZXN0aW5nIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gd2UgZnV6eiB0aGlzPyBXaXRoIFdpLUZpIGRyaXZlcnMsIG1hYzgwMjExX2h3c2ltIGlzIG9mdGVuIHRoZSBnby10by4gQnV0LCB0aGlzIGlzICptd2lmaWV4KiwgYSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIuIFNvLCB0aGUgcXVlc3Rpb24gYmVjb21lczogY2FuIHdlIGZ1enogKm13aWZpZXgqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFRoYXQmIzM5O3MgdGhlIHJlYWwgY2hhbGxlbmdlIHdpdGggaGFyZHdhcmUgZHJpdmVycywgcmlnaHQ/IFRoZXkmIzM5O3JlIG9mdGVuIHRpZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUuIEl0JiMzOTtzIG5vdCBhbHdheXMgZWFzeSB1bmxlc3MgdGhlcmUgaXMgc3BlY2lmaWMgZW11bGF0aW9uIGZvciB0aGUgaGFyZHdhcmUgb3IgaXTigJlzIGEgVVNCLCBTRElPLCBvciBQQ0llIGRldmljZSwgd2hlcmUgd2UgY2FuIHBvdGVudGlhbGx5IGZ1enogdGhlIGJ1cy4KCkhtbSwgZG9lcyBtd2lmaWV4ICpoYXZlKiBVU0Igc3VwcG9ydD8gVGhhdCBtaWdodCBvcGVuIHVwIHNvbWUgZnV6emluZyBwb3NzaWJpbGl0aWVzLiBMZXQgbWUgY2hlY2suLi4gWWVwLCB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuY2AgZmlsZSBleGlzdHMuIE9rYXksIHRoaXMgaXMgZ29vZC4gVGltZSB0byBkaWcgYSBiaXQgZGVlcGVyIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZG8gd2l0aCB0aGlzIGRyaXZlciBhbmQgaXRzIFVTQiBpbnRlcmZhY2UuIE1heWJlIHdlJiMzOTtyZSBvbnRvIHNvbWV0aGluZyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxODUyOCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYz00Mj1zdGF0aWMgdTE2XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjQzOm13aWZpZXhfY29udmVydF9tY3NtYXBfdG9fbWF4cmF0ZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy00NC1cdFx0XHRcdCAgdTggYmFuZHMsIHUxNiBtY3NfbWFwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtNDgtXHR1MzIgdXNyX3ZodF9jYXBfaW5mbyA9IDA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjQ5Olx0c3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtXHUwMDNlYWRhcHRlcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtNTAtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYz04NT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzo4Njptd2lmaWV4X2ZpbGxfdmh0X2NhcF9pbmZvKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTg3LVx0XHRcdCAgc3RydWN0IGllZWU4MDIxMV92aHRfY2FwICp2aHRfY2FwLCB1OCBiYW5kcylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtODgte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzo4OTpcdHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LVx1MDAzZWFkYXB0ZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTkwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtOTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjk5OnZvaWQgbXdpZmlleF9maWxsX3ZodF9jYXBfdGx2KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTEwMC1cdFx0XHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZodF9jYXAgKnZodF9jYXAsIHU4IGJhbmRzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xMDEte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxMDI6XHRzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi1cdTAwM2VhZGFwdGVyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xMDMtXHR1MTYgbWNzX21hcF91c2VyLCBtY3NfbWFwX3Jlc3AsIG1jc19tYXBfcmVzdWx0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTA2LVx0LyogRmlsbCBWSFQgY2FwIGluZm8gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MTA3Olx0bXdpZmlleF9maWxsX3ZodF9jYXBfaW5mbyhwcml2LCB2aHRfY2FwLCBiYW5kcyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTEwOC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTEyOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MTI5Olx0dG1wID0gbXdpZmlleF9jb252ZXJ0X21jc21hcF90b19tYXhyYXRlKHByaXYsIGJhbmRzLCBtY3NfbWFwX3Jlc3VsdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTEzMC1cdHZodF9jYXAtXHUwMDNlc3VwcF9tY3MucnhfaGlnaGVzdCA9IGNwdV90b19sZTE2KHRtcCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xNTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjE1MTpcdHRtcCA9IG13aWZpZXhfY29udmVydF9tY3NtYXBfdG9fbWF4cmF0ZShwcml2LCBiYW5kcywgbWNzX21hcF9yZXN1bHQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xNTItXHR2aHRfY2FwLVx1MDAzZXN1cHBfbWNzLnR4X2hpZ2hlc3QgPSBjcHVfdG9fbGUxNih0bXApO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTU2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxNTc6aW50IG13aWZpZXhfY21kX2FwcGVuZF8xMWFjX3RsdihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxNTg6XHRcdFx0ICAgICBzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTU5LVx0XHRcdCAgICAgdTggKipidWZmZXIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE2MC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjE2MTpcdHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3ZodGNhcCAqdmh0X2NhcDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MTYyOlx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfb3Blcl9tb2RlX250ZiAqb3Blcl9udGY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE2My1cdHN0cnVjdCBpZWVlX3R5cGVzX29wZXJfbW9kZV9udGYgKmllZWVfb3Blcl9udGY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjE2NDpcdHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3ZodF9vcGVyICp2aHRfb3A7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjE2NTpcdHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LVx1MDAzZWFkYXB0ZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE2Ni1cdHU4IHN1cHBfY2h3ZF9zZXQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xNzYtXHRpZiAoYnNzX2Rlc2MtXHUwMDNlYmNuX3ZodF9jYXApIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MTc3Olx0XHR2aHRfY2FwID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3ZodGNhcCAqKSpidWZmZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE3OC1cdFx0bWVtc2V0KHZodF9jYXAsIDAsIHNpemVvZigqdmh0X2NhcCkpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTgxLVx0XHRcdFx0Y3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdmh0X2NhcCkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxODI6XHRcdG1lbWNweSgodTggKil2aHRfY2FwICYjNDM7IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xODMtXHRcdCAgICAgICAodTggKilic3NfZGVzYy1cdTAwM2ViY25fdmh0X2NhcCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE4NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MTg2Olx0XHRtd2lmaWV4X2ZpbGxfdmh0X2NhcF90bHYocHJpdiwgXHUwMDI2dmh0X2NhcC1cdTAwM2V2aHRfY2FwLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xODctXHRcdFx0XHRcdCBic3NfZGVzYy1cdTAwM2Vic3NfYmFuZCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xOTQtXHRcdGlmIChwcml2LVx1MDAzZWJzc19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MTk1Olx0XHRcdHZodF9vcCA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc192aHRfb3BlciAqKSpidWZmZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE5Ni1cdFx0XHRtZW1zZXQodmh0X29wLCAwLCBzaXplb2YoKnZodF9vcCkpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTk5LVx0XHRcdHZodF9vcC1cdTAwM2VoZWFkZXIubGVuICA9IGNwdV90b19sZTE2KHNpemVvZigqdmh0X29wKSAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjIwMDpcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMjAxLVx0XHRcdG1lbWNweSgodTggKil2aHRfb3AgJiM0MztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MjAyOlx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTIwMy1cdFx0XHQgICAgICAgKHU4ICopYnNzX2Rlc2MtXHUwMDNlYmNuX3ZodF9vcGVyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMjUyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoyNTM6aW50IG13aWZpZXhfY21kXzExYWNfY2ZnKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTI1NC1cdFx0XHQgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwgdTE2IGNtZF9hY3Rpb24sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjI1NTpcdFx0XHQgc3RydWN0IG13aWZpZXhfMTFhY192aHRfY2ZnICpjZmcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTI1Ni17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0yNzItLyogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgQmxvY2tBQ0sgc2V0dXAgaW5mb3JtYXRpb24gZm9yIGdpdmVuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjI3MzogKiBtd2lmaWV4X3ByaXZhdGUgc3RydWN0dXJlIGZvciAxMWFjIGVuYWJsZWQgbmV0d29ya3MuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTI3NC0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6Mjc1OnZvaWQgbXdpZmlleF9zZXRfMTFhY19iYV9wYXJhbXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMjc2LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTI5My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6Mjk0OmJvb2wgbXdpZmlleF9pc19ic3NfaW5fMTFhY19tb2RlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTI5NS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjI5NjpcdHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0yOTctXHRzdHJ1Y3QgaWVlZTgwMjExX3ZodF9vcGVyYXRpb24gKnZodF9vcGVyO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMzEwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzozMTE6dTggbXdpZmlleF9nZXRfY2VudGVyX2ZyZXFfaW5kZXgoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggYmFuZCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMzEyLVx0XHRcdFx0IHUzMiBwcmlfY2hhbiwgdTggY2hhbl9idylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5oPTE0PWVudW0gdmh0X2NmZ19taXNjX2NvbmZpZyB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuaC0yNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmg6MjU6aW50IG13aWZpZXhfY21kX2FwcGVuZF8xMWFjX3RsdihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuaDoyNjpcdFx0XHRcdHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuaC0yNy1cdFx0XHRcdHU4ICoqYnVmZmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmg6Mjg6aW50IG13aWZpZXhfY21kXzExYWNfY2ZnKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5oLTI5LVx0XHRcdCBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLCB1MTYgY21kX2FjdGlvbixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmg6MzA6XHRcdFx0IHN0cnVjdCBtd2lmaWV4XzExYWNfdmh0X2NmZyAqY2ZnKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmg6MzE6dm9pZCBtd2lmaWV4X2ZpbGxfdmh0X2NhcF90bHYoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmgtMzItXHRcdFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV92aHRfY2FwICp2aHRfY2FwLCB1OCBiYW5kcyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTExLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjEyOnZvaWQgbXdpZmlleF9pbml0XzExaF9wYXJhbXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xMy17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjE4OmlubGluZSBpbnQgbXdpZmlleF9pc18xMWhfYWN0aXZlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYz0yNT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjI2Om13aWZpZXhfMTFoX3Byb2Nlc3NfaW5mcmFfam9pbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqKmJ1ZmZlcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyNzpcdFx0XHQgICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjgte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjI5Olx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyICppZV9oZWFkZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MzA6XHRzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19wd3JfY2FwYWJpbGl0eSAqY2FwO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjMxOlx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfbG9jYWxfcHdyX2NvbnN0cmFpbnQgKmNvbnN0cmFpbnQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMzItXHRzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMzgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6Mzk6XHRyYWRpb190eXBlID0gbXdpZmlleF9iYW5kX3RvX3JhZGlvX3R5cGUoKHU4KSBic3NfZGVzYy1cdTAwM2Vic3NfYmFuZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtNDAtXHRzYmFuZCA9IHByaXYtXHUwMDNld2Rldi53aXBoeS1cdTAwM2ViYW5kc1tyYWRpb190eXBlXTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy00MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzo0MjpcdGNhcCA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19wd3JfY2FwYWJpbGl0eSAqKSpidWZmZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtNDMtXHRjYXAtXHUwMDNlaGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihXTEFOX0VJRF9QV1JfQ0FQQUJJTElUWSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTQ4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjQ5Olx0Y29uc3RyYWludCA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19sb2NhbF9wd3JfY29uc3RyYWludCAqKSpidWZmZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtNTAtXHRjb25zdHJhaW50LVx1MDAzZWhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoV0xBTl9FSURfUFdSX0NPTlNUUkFJTlQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy01NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzo1NjpcdGllX2hlYWRlciA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgKikqYnVmZmVyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTU3LVx0aWVfaGVhZGVyLVx1MDAzZXR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9QQVNTVEhST1VHSCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTY5LS8qIEVuYWJsZSBvciBkaXNhYmxlIHRoZSAxMWggZXh0ZW5zaW9ucyBpbiB0aGUgZmlybXdhcmUgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzo3MDppbnQgbXdpZmlleF8xMWhfYWN0aXZhdGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgYm9vbCBmbGFnKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTcxLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtNzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6Nzg6XHRyZXR1cm4gbXdpZmlleF9zZW5kX2NtZChwcml2LCBIb3N0Q21kX0NNRF84MDJfMTFfU05NUF9NSUIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtNzktXHRcdFx0XHRIb3N0Q21kX0FDVF9HRU5fU0VULCBET1QxMUhfSSwgXHUwMDI2ZW5hYmxlLCB0cnVlKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtODctICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6ODg6dm9pZCBtd2lmaWV4XzExaF9wcm9jZXNzX2pvaW4oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKipidWZmZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6ODk6XHRcdFx0ICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtOTAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy05NC1cdFx0ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6OTU6XHRcdG13aWZpZXhfMTFoX2FjdGl2YXRlKHByaXYsIHRydWUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTk2LVx0XHRwcml2LVx1MDAzZXN0YXRlXzExaC5pc18xMWhfYWN0aXZlID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy05Ny1cdFx0YnNzX2Rlc2MtXHUwMDNlY2FwX2luZm9fYml0bWFwIHw9IFdMQU5fQ0FQQUJJTElUWV9TUEVDVFJVTV9NR01UO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjk4Olx0XHRtd2lmaWV4XzExaF9wcm9jZXNzX2luZnJhX2pvaW4ocHJpdiwgYnVmZmVyLCBic3NfZGVzYyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtOTktXHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTEwMC1cdFx0LyogRGVhY3RpdmF0ZSAxMWggZnVuY3Rpb25zIGluIHRoZSBmaXJtd2FyZSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjEwMTpcdFx0bXdpZmlleF8xMWhfYWN0aXZhdGUocHJpdiwgZmFsc2UpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTEwMi1cdFx0cHJpdi1cdTAwM2VzdGF0ZV8xMWguaXNfMTFoX2FjdGl2ZSA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xMTAtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTExOnZvaWQgbXdpZmlleF9kZnNfY2FjX3dvcmtfcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTExMi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTExNC1cdHN0cnVjdCBkZWxheWVkX3dvcmsgKmRlbGF5ZWRfd29yayA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxMTU6XHRzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxMTY6XHRcdFx0Y29udGFpbmVyX29mKGRlbGF5ZWRfd29yaywgc3RydWN0IG13aWZpZXhfcHJpdmF0ZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xMTctXHRcdFx0XHQgICAgIGRmc19jYWNfd29yayk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTEyMC1cdGlmIChwcml2LVx1MDAzZXdkZXYubGlua3NbMF0uY2FjX3N0YXJ0ZWQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxMjE6XHRcdG13aWZpZXhfZGJnKHByaXYtXHUwMDNlYWRhcHRlciwgTVNHLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTEyMi1cdFx0XHQgICAgXCYjMzQ7Q0FDIHRpbWVyIGZpbmlzaGVkOyBObyByYWRhciBkZXRlY3RlZFxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTEzMS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxMzI6aW50IG13aWZpZXhfY21kX2lzc3VlX2NoYW5fcmVwb3J0X3JlcXVlc3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xMzMtXHRcdFx0XHRcdCAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTM2LVx0c3RydWN0IGhvc3RfY21kX2RzX2NoYW5fcnB0X3JlcSAqY3JfcmVxID0gXHUwMDI2Y21kLVx1MDAzZXBhcmFtcy5jaGFuX3JwdF9yZXE7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTM3Olx0c3RydWN0IG13aWZpZXhfcmFkYXJfcGFyYW1zICpyYWRhcl9wYXJhbXMgPSAodm9pZCAqKWRhdGFfYnVmO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTEzOC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTQ5LVx0aWYgKHJhZGFyX3BhcmFtcy1cdTAwM2VjYWNfdGltZV9tcylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxNTA6XHRcdG13aWZpZXhfZGJnKHByaXYtXHUwMDNlYWRhcHRlciwgTVNHLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE1MS1cdFx0XHQgICAgXCYjMzQ7MTFoOiBpc3N1aW5nIERGUyBSYWRhciBjaGVjayBmb3IgY2hhbm5lbD0lZFxcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTUzLVx0ZWxzZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjE1NDpcdFx0bXdpZmlleF9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBNU0csIFwmIzM0O2NhbmNlbGxpbmcgQ0FDXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xNTUtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE1OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxNTk6aW50IG13aWZpZXhfc3RvcF9yYWRhcl9kZXRlY3Rpb24oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xNjAtXHRcdFx0XHQgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE2MS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTYyOlx0c3RydWN0IG13aWZpZXhfcmFkYXJfcGFyYW1zIHJhZGFyX3BhcmFtcztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xNjMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTY0Olx0bWVtc2V0KFx1MDAyNnJhZGFyX3BhcmFtcywgMCwgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3JhZGFyX3BhcmFtcykpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE2NS1cdHJhZGFyX3BhcmFtcy5jaGFuZGVmID0gY2hhbmRlZjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTY3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjE2ODpcdHJldHVybiBtd2lmaWV4X3NlbmRfY21kKHByaXYsIEhvc3RDbWRfQ01EX0NIQU5fUkVQT1JUX1JFUVVFU1QsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTY5LVx0XHRcdFx0SG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwgXHUwMDI2cmFkYXJfcGFyYW1zLCB0cnVlKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTc0LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjE3NTp2b2lkIG13aWZpZXhfYWJvcnRfY2FjKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTc2LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xNzctXHRpZiAocHJpdi1cdTAwM2V3ZGV2LmxpbmtzWzBdLmNhY19zdGFydGVkKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTc4Olx0XHRpZiAobXdpZmlleF9zdG9wX3JhZGFyX2RldGVjdGlvbihwcml2LCBcdTAwMjZwcml2LVx1MDAzZWRmc19jaGFuZGVmKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxNzk6XHRcdFx0bXdpZmlleF9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBFUlJPUixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xODAtXHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIHN0b3AgQ0FDIGluIEZXXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxODE6XHRcdG13aWZpZXhfZGJnKHByaXYtXHUwMDNlYWRhcHRlciwgTVNHLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE4Mi1cdFx0XHQgICAgXCYjMzQ7QWJvcnRpbmcgZGVsYXllZCB3b3JrIGZvciBDQUMuXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTkzLSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjE5NDppbnQgbXdpZmlleF8xMWhfaGFuZGxlX2NoYW5ycHRfcmVhZHkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xOTUtXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE5Ny1cdHN0cnVjdCBob3N0X2NtZF9kc19jaGFuX3JwdF9ldmVudCAqcnB0X2V2ZW50O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjE5ODpcdHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2NoYW5fcnB0X2RhdGEgKnJwdDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xOTktXHR1MTYgZXZlbnRfbGVuLCB0bHZfbGVuO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yMDUtXHRpZiAobGUzMl90b19jcHUocnB0X2V2ZW50LVx1MDAzZXJlc3VsdCkgIT0gSG9zdENtZF9SRVNVTFRfT0spIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyMDY6XHRcdG13aWZpZXhfZGJnKHByaXYtXHUwMDNlYWRhcHRlciwgRVJST1IsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjA3LVx0XHRcdCAgICBcJiMzNDtFcnJvciBpbiBjaGFubmVsIHJlcG9ydCBldmVudFxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTIxMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyMTE6XHR3aGlsZSAoZXZlbnRfbGVuIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlcikpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yMTItXHRcdHJwdCA9ICh2b2lkICopXHUwMDI2cnB0X2V2ZW50LVx1MDAzZXRsdmJ1Zjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjE3LVx0XHRcdGlmIChycHQtXHUwMDNlbWFwLnJhZGFyKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjE4Olx0XHRcdFx0bXdpZmlleF9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBNU0csXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjE5LVx0XHRcdFx0XHQgICAgXCYjMzQ7UkFEQVIgRGV0ZWN0ZWQgb24gY2hhbm5lbCAlZCFcXG5cJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTIzOC0vKiBIYW5kbGVyIGZvciByYWRhciBkZXRlY3RlZCBldmVudCBmcm9tIEZXLiovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjM5OmludCBtd2lmaWV4XzExaF9oYW5kbGVfcmFkYXJfZGV0ZWN0ZWQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNDAtXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI0MS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjQyOlx0c3RydWN0IG13aWZpZXhfcmFkYXJfZGV0X2V2ZW50ICpyZHJfZXZlbnQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjQzLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNDUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjQ2Olx0bXdpZmlleF9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBNU0csXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjQ3LVx0XHQgICAgXCYjMzQ7cmFkYXIgZGV0ZWN0ZWQ7IGluZGljYXRpbmcga2VybmVsXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyNDg6XHRpZiAobXdpZmlleF9zdG9wX3JhZGFyX2RldGVjdGlvbihwcml2LCBcdTAwMjZwcml2LVx1MDAzZWRmc19jaGFuZGVmKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyNDk6XHRcdG13aWZpZXhfZGJnKHByaXYtXHUwMDNlYWRhcHRlciwgRVJST1IsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjUwLVx0XHRcdCAgICBcJiMzNDtGYWlsZWQgdG8gc3RvcCBDQUMgaW4gRldcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNTItXHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyNTM6XHRtd2lmaWV4X2RiZyhwcml2LVx1MDAzZWFkYXB0ZXIsIE1TRywgXCYjMzQ7cmVnZG9tYWluOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNTQtXHRcdCAgICByZHJfZXZlbnQtXHUwMDNlcmVnX2RvbWFpbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjU1Olx0bXdpZmlleF9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBNU0csIFwmIzM0O3JhZGFyIGRldGVjdGlvbiB0eXBlOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNTYtXHRcdCAgICByZHJfZXZlbnQtXHUwMDNlZGV0X3R5cGUpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNjUtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjY2OnZvaWQgbXdpZmlleF9kZnNfY2hhbl9zd193b3JrX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNjcte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjI2ODpcdHN0cnVjdCBtd2lmaWV4X3VhcF9ic3NfcGFyYW0gKmJzc19jZmc7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjY5LVx0c3RydWN0IGRlbGF5ZWRfd29yayAqZGVsYXllZF93b3JrID0gdG9fZGVsYXllZF93b3JrKHdvcmspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjI3MDpcdHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjI3MTpcdFx0XHRjb250YWluZXJfb2YoZGVsYXllZF93b3JrLCBzdHJ1Y3QgbXdpZmlleF9wcml2YXRlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI3Mi1cdFx0XHRcdCAgICAgZGZzX2NoYW5fc3dfd29yayk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI3NS1cdGlmICghYnNzX2NmZy1cdTAwM2ViZWFjb25fcGVyaW9kKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6Mjc2Olx0XHRtd2lmaWV4X2RiZyhwcml2LVx1MDAzZWFkYXB0ZXIsIEVSUk9SLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI3Ny1cdFx0XHQgICAgXCYjMzQ7Y2hhbm5lbCBzd2l0Y2g6IEFQIGFscmVhZHkgc3RvcHBlZFxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI4MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyODE6XHRtd2lmaWV4X3VhcF9zZXRfY2hhbm5lbChwcml2LCBic3NfY2ZnLCBwcml2LVx1MDAzZWRmc19jaGFuZGVmKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yODItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjgzOlx0aWYgKG13aWZpZXhfY29uZmlnX3N0YXJ0X3VhcChwcml2LCBic3NfY2ZnKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjI4NDpcdFx0bXdpZmlleF9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBFUlJPUixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yODUtXHRcdFx0ICAgIFwmIzM0O0ZhaWxlZCB0byBzdGFydCBBUCBhZnRlciBjaGFubmVsIHN3aXRjaFxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI4OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyODk6XHRtd2lmaWV4X2RiZyhwcml2LVx1MDAzZWFkYXB0ZXIsIE1TRyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yOTAtXHRcdCAgICBcJiMzNDtpbmRpY2F0aW5nIGNoYW5uZWwgc3dpdGNoIGNvbXBsZXRpb24gdG8ga2VybmVsXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMjQtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MjU6aW50IG13aWZpZXhfZmlsbF9jYXBfaW5mbyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCByYWRpb190eXBlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTI2LVx0XHRcdCAgc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKmh0X2NhcClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzItXHRpZiAoV0FSTl9PTl9PTkNFKCFzYmFuZCkpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMzpcdFx0bXdpZmlleF9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBFUlJPUiwgXCYjMzQ7SW52YWxpZCByYWRpbyB0eXBlIVxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzQtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy02OS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo3MDpzdGF0aWMgc3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NzE6bXdpZmlleF9nZXRfYmFfc3RhdHVzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NzI6XHRcdCAgICAgIGVudW0gbXdpZmlleF9iYV9zdGF0dXMgYmFfc3RhdHVzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTczLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo3NDpcdHN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKnR4X2JhX3Rzcl90Ymw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNzUtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTk1LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjk2OmludCBtd2lmaWV4X3JldF8xMW5fZGVsYmEoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy05Ny1cdFx0XHQgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy05OS1cdGludCB0aWQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTAwOlx0c3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqdHhfYmFfdGJsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTEwMS1cdHN0cnVjdCBob3N0X2NtZF9kc18xMW5fZGVsYmEgKmRlbF9iYSA9IFx1MDAyNnJlc3AtXHUwMDNlcGFyYW1zLmRlbF9iYTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTA1LVx0aWYgKGRlbF9iYS1cdTAwM2VkZWxfcmVzdWx0ID09IEJBX1JFU1VMVF9TVUNDRVNTKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTA2Olx0XHRtd2lmaWV4X2RlbF9iYV90YmwocHJpdiwgdGlkLCBkZWxfYmEtXHUwMDNlcGVlcl9tYWNfYWRkcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xMDctXHRcdFx0XHQgICBUWVBFX0RFTEJBX1NFTlQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTEwOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoxMTA6XHRcdHR4X2JhX3RibCA9IG13aWZpZXhfZ2V0X2JhX3N0YXR1cyhwcml2LCBCQV9TRVRVUF9JTlBST0dSRVNTKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xMTEtXHRcdGlmICh0eF9iYV90YmwpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTEyOlx0XHRcdG13aWZpZXhfc2VuZF9hZGRiYShwcml2LCB0eF9iYV90YmwtXHUwMDNldGlkLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTExMy1cdFx0XHRcdFx0ICAgdHhfYmFfdGJsLVx1MDAzZXJhKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTIwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjEyMTpcdFx0bXdpZmlleF9jcmVhdGVfYmFfdGJsKHByaXYsIGRlbF9iYS1cdTAwM2VwZWVyX21hY19hZGRyLCB0aWQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTIyLVx0XHRcdFx0ICAgICAgQkFfU0VUVVBfSU5QUk9HUkVTUyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTIzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjEyNDpcdFx0dHhfYmFfdGJsID0gbXdpZmlleF9nZXRfYmFfc3RhdHVzKHByaXYsIEJBX1NFVFVQX0lOUFJPR1JFU1MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTEyNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xMjYtXHRcdGlmICh0eF9iYV90YmwpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTI3Olx0XHRcdG13aWZpZXhfZGVsX2JhX3RibChwcml2LCB0eF9iYV90YmwtXHUwMDNldGlkLCB0eF9iYV90YmwtXHUwMDNlcmEsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTI4LVx0XHRcdFx0XHQgICBUWVBFX0RFTEJBX1NFTlQsIHRydWUpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xNDEtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTQyOmludCBtd2lmaWV4X3JldF8xMW5fYWRkYmFfcmVxKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTQzLVx0XHRcdCAgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xNDYtXHRzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2FkZGJhX3JzcCAqYWRkX2JhX3JzcCA9IFx1MDAyNnJlc3AtXHUwMDNlcGFyYW1zLmFkZF9iYV9yc3A7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTQ3Olx0c3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqdHhfYmFfdGJsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjE0ODpcdHN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICpyYV9saXN0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTE0OS1cdHUxNiBibG9ja19hY2tfcGFyYW1fc2V0ID0gbGUxNl90b19jcHUoYWRkX2JhX3JzcC1cdTAwM2VibG9ja19hY2tfcGFyYW1fc2V0KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTU2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjE1NzpcdHRpZF9kb3duID0gbXdpZmlleF93bW1fZG93bmdyYWRlX3RpZChwcml2LCB0aWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjE1ODpcdHJhX2xpc3QgPSBtd2lmaWV4X3dtbV9nZXRfcmFsaXN0X25vZGUocHJpdiwgdGlkX2Rvd24sIGFkZF9iYV9yc3AtXHUwMDNlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTU5LVx0XHRwZWVyX21hY19hZGRyKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTY0LVx0XHR9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTY1Olx0XHRtd2lmaWV4X2RlbF9iYV90YmwocHJpdiwgdGlkLCBhZGRfYmFfcnNwLVx1MDAzZXBlZXJfbWFjX2FkZHIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTY2LVx0XHRcdFx0ICAgVFlQRV9ERUxCQV9TRU5ULCB0cnVlKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTcyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjE3MzpcdHR4X2JhX3RibCA9IG13aWZpZXhfZ2V0X2JhX3RibChwcml2LCB0aWQsIGFkZF9iYV9yc3AtXHUwMDNlcGVlcl9tYWNfYWRkcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTc0LVx0aWYgKHR4X2JhX3RibCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjE3NTpcdFx0bXdpZmlleF9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBFVkVOVCwgXCYjMzQ7aW5mbzogQkEgc3RyZWFtIGNvbXBsZXRlXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xNzYtXHRcdHR4X2JhX3RibC1cdTAwM2ViYV9zdGF0dXMgPSBCQV9TRVRVUF9DT01QTEVURTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTg3LVx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoxODg6XHRcdG13aWZpZXhfZGJnKHByaXYtXHUwMDNlYWRhcHRlciwgRVJST1IsIFwmIzM0O0JBIHN0cmVhbSBub3QgY3JlYXRlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTg5LVx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0yMDEtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MjAyOmludCBtd2lmaWV4X2NtZF9yZWNmZ190eF9idWYoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0yMDMtXHRcdFx0ICAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLCBpbnQgY21kX2FjdGlvbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMjE0LVx0Y2FzZSBIb3N0Q21kX0FDVF9HRU5fU0VUOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjIxNTpcdFx0bXdpZmlleF9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBDTUQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMjE2LVx0XHRcdCAgICBcJiMzNDtjbWQ6IHNldCB0eF9idWY9JWRcXG5cJiMzNDssICpidWZfc2l6ZSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTIzNC0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoyMzU6aW50IG13aWZpZXhfY21kX2Ftc2R1X2FnZ3JfY3RybChzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTIzNi1cdFx0XHRcdGludCBjbWRfYWN0aW9uLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjIzNzpcdFx0XHRcdHN0cnVjdCBtd2lmaWV4X2RzXzExbl9hbXNkdV9hZ2dyX2N0cmwgKmFhX2N0cmwpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMjM4LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMjY3LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjI2ODppbnQgbXdpZmlleF9jbWRfMTFuX2NmZyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTI2OS1cdFx0XHRzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLCB1MTYgY21kX2FjdGlvbixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoyNzA6XHRcdFx0c3RydWN0IG13aWZpZXhfZHNfMTFuX3R4X2NmZyAqdHhjZmcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMjcxLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM9Mjk4PWludFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjI5OTptd2lmaWV4X2NtZF9hcHBlbmRfMTFuX3RsdihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjMwMDpcdFx0XHQgICBzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMDEtXHRcdFx0ICAgdTggKipidWZmZXIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzAyLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMDM6XHRzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGNhcCAqaHRfY2FwO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjMwNDpcdHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0aW5mbyAqaHRfaW5mbztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMDU6XHRzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19jaGFuX2xpc3RfcGFyYW1fc2V0ICpjaGFuX2xpc3Q7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzA2Olx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfMjA0MGJzc2NvICpic3NfY29fMjA0MDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMDc6XHRzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19leHRjYXAgKmV4dF9jYXA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzA4LVx0aW50IHJldF9sZW4gPSAwO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzE2Olx0cmFkaW9fdHlwZSA9IG13aWZpZXhfYmFuZF90b19yYWRpb190eXBlKCh1OCkgYnNzX2Rlc2MtXHUwMDNlYnNzX2JhbmQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTMxNy1cdHNiYW5kID0gcHJpdi1cdTAwM2V3ZGV2LndpcGh5LVx1MDAzZWJhbmRzW3JhZGlvX3R5cGVdO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMTktXHRpZiAoYnNzX2Rlc2MtXHUwMDNlYmNuX2h0X2NhcCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjMyMDpcdFx0aHRfY2FwID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0Y2FwICopICpidWZmZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzIxOlx0XHRtZW1zZXQoaHRfY2FwLCAwLCBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXApKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMjItXHRcdGh0X2NhcC1cdTAwM2VoZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFdMQU5fRUlEX0hUX0NBUEFCSUxJVFkpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMjQtXHRcdFx0XHRjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMjU6XHRcdG1lbWNweSgodTggKikgaHRfY2FwICYjNDM7IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTMyNi1cdFx0ICAgICAgICh1OCAqKWJzc19kZXNjLVx1MDAzZWJjbl9odF9jYXAsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTMyOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMjk6XHRcdG13aWZpZXhfZmlsbF9jYXBfaW5mbyhwcml2LCByYWRpb190eXBlLCBcdTAwMjZodF9jYXAtXHUwMDNlaHRfY2FwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMzAtXHRcdC8qIFVwZGF0ZSBIVDQwIGNhcGFiaWxpdHkgZnJvbSBjdXJyZW50IGNoYW5uZWwgaW5mb3JtYXRpb24gKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzMzLVx0XHRcdHU4IHJhZGlvID1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMzQ6XHRcdFx0bXdpZmlleF9iYW5kX3RvX3JhZGlvX3R5cGUoYnNzX2Rlc2MtXHUwMDNlYnNzX2JhbmQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTMzNS1cdFx0XHRpbnQgZnJlcSA9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM2Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozNjM6XHRcdCpidWZmZXIgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGNhcCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzY0Olx0XHRyZXRfbGVuICYjNDM7PSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM2NS1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzY4LVx0XHRpZiAocHJpdi1cdTAwM2Vic3NfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjM2OTpcdFx0XHRodF9pbmZvID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0aW5mbyAqKSAqYnVmZmVyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM3MC1cdFx0XHRtZW1zZXQoaHRfaW5mbywgMCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozNzE6XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGluZm8pKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zNzItXHRcdFx0aHRfaW5mby1cdTAwM2VoZWFkZXIudHlwZSA9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM3OC1cdFx0XHRtZW1jcHkoKHU4ICopIGh0X2luZm8gJiM0MztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozNzk6XHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM4MC1cdFx0XHQgICAgICAgKHU4ICopYnNzX2Rlc2MtXHUwMDNlYmNuX2h0X29wZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM4OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozODk6XHRcdFx0KmJ1ZmZlciAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0aW5mbyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzkwOlx0XHRcdHJldF9sZW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGluZm8pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM5MS1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zOTMtXHRcdGNoYW5fbGlzdCA9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6Mzk0Olx0XHRcdChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19jaGFuX2xpc3RfcGFyYW1fc2V0ICopICpidWZmZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzk1LVx0XHRtZW1zZXQoY2hhbl9saXN0LCAwLCBzdHJ1Y3Rfc2l6ZShjaGFuX2xpc3QsIGNoYW5fc2Nhbl9wYXJhbSwgMSkpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zOTctXHRcdGNoYW5fbGlzdC1cdTAwM2VoZWFkZXIubGVuID1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozOTg6XHRcdFx0Y3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2NoYW5fc2Nhbl9wYXJhbV9zZXQpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zOTktXHRcdGNoYW5fbGlzdC1cdTAwM2VjaGFuX3NjYW5fcGFyYW1bMF0uY2hhbl9udW1iZXIgPVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy00MDEtXHRcdGNoYW5fbGlzdC1cdTAwM2VjaGFuX3NjYW5fcGFyYW1bMF0ucmFkaW9fdHlwZSA9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDAyOlx0XHRcdG13aWZpZXhfYmFuZF90b19yYWRpb190eXBlKCh1OCkgYnNzX2Rlc2MtXHUwMDNlYnNzX2JhbmQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQwMy1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDE2LVx0aWYgKGJzc19kZXNjLVx1MDAzZWJjbl9ic3NfY29fMjA0MCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjQxNzpcdFx0YnNzX2NvXzIwNDAgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfMjA0MGJzc2NvICopICpidWZmZXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDE4LVx0XHRtZW1zZXQoYnNzX2NvXzIwNDAsIDAsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDE5Olx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzXzIwNDBic3NjbykpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQyMC1cdFx0YnNzX2NvXzIwNDAtXHUwMDNlaGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihXTEFOX0VJRF9CU1NfQ09FWF8yMDQwKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDI0LVx0XHRtZW1jcHkoKHU4ICopIGJzc19jb18yMDQwICYjNDM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDI1Olx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDI2LVx0XHQgICAgICAgYnNzX2Rlc2MtXHUwMDNlYmNuX2Jzc19jb18yMDQwICYjNDM7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQyOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0MzA6XHRcdCpidWZmZXIgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc18yMDQwYnNzY28pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjQzMTpcdFx0cmV0X2xlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzXzIwNDBic3Njbyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDMyLVx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy00MzUtXHRcdGhkciA9ICh2b2lkICopYnNzX2Rlc2MtXHUwMDNlYmNuX2V4dF9jYXA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDM2Olx0XHRleHRfY2FwID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2V4dGNhcCAqKSAqYnVmZmVyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjQzNzpcdFx0bWVtc2V0KGV4dF9jYXAsIDAsIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19leHRjYXApKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy00MzgtXHRcdGV4dF9jYXAtXHUwMDNlaGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihXTEFOX0VJRF9FWFRfQ0FQQUJJTElUWSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ1MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0NTE6XHRcdCpidWZmZXIgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19leHRjYXApICYjNDM7IGhkci1cdTAwM2VsZW47XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDUyOlx0XHRyZXRfbGVuICYjNDM7PSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfZXh0Y2FwKSAmIzQzOyBoZHItXHUwMDNlbGVuO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ1My1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDYxLSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjQ2MjpzdGF0aWMgaW50IG13aWZpZXhfaXNfdHhfYmFfc3RyZWFtX3B0cl92YWxpZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjQ2MzpcdFx0XHRcdHN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKnR4X3RibF9wdHIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDY0LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0NjU6XHRzdHJ1Y3QgbXdpZmlleF90eF9iYV9zdHJlYW1fdGJsICp0eF9iYV90c3JfdGJsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ2Ni1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDgwLSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjQ4MTp2b2lkIG13aWZpZXhfMTFuX2RlbGV0ZV90eF9iYV9zdHJlYW1fdGJsX2VudHJ5KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDgyOlx0XHRcdFx0c3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqdHhfYmFfdHNyX3RibClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy00ODMte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ4NC1cdGlmICghdHhfYmFfdHNyX3RibCBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0ODU6XHQgICAgbXdpZmlleF9pc190eF9iYV9zdHJlYW1fcHRyX3ZhbGlkKHByaXYsIHR4X2JhX3Rzcl90YmwpKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ4Ni1cdFx0cmV0dXJuO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ4Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0ODg6XHRtd2lmaWV4X2RiZyhwcml2LVx1MDAzZWFkYXB0ZXIsIElORk8sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDg5LVx0XHQgICAgXCYjMzQ7aW5mbzogdHhfYmFfdHNyX3RibCAlcFxcblwmIzM0OywgdHhfYmFfdHNyX3RibCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ5OC0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0OTk6dm9pZCBtd2lmaWV4XzExbl9kZWxldGVfYWxsX3R4X2JhX3N0cmVhbV90Ymwoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy01MDAte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTUwMS1cdGludCBpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjUwMjpcdHN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKmRlbF90YmxfcHRyLCAqdG1wX25vZGU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNTAzLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy01MDYtXHRcdFx0XHQgXHUwMDI2cHJpdi1cdTAwM2V0eF9iYV9zdHJlYW1fdGJsX3B0ciwgbGlzdClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo1MDc6XHRcdG13aWZpZXhfMTFuX2RlbGV0ZV90eF9iYV9zdHJlYW1fdGJsX2VudHJ5KHByaXYsIGRlbF90YmxfcHRyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy01MDgtXHRzcGluX3VubG9ja19iaChcdTAwMjZwcml2LVx1MDAzZXR4X2JhX3N0cmVhbV90YmxfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTUyMC0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo1MjE6c3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NTIyOm13aWZpZXhfZ2V0X2JhX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBpbnQgdGlkLCB1OCAqcmEpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNTIzLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo1MjQ6XHRzdHJ1Y3QgbXdpZmlleF90eF9iYV9zdHJlYW1fdGJsICp0eF9iYV90c3JfdGJsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTUyNS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNTQxLSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjU0Mjp2b2lkIG13aWZpZXhfY3JlYXRlX2JhX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqcmEsIGludCB0aWQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NTQzOlx0XHRcdCAgIGVudW0gbXdpZmlleF9iYV9zdGF0dXMgYmFfc3RhdHVzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTU0NC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NTQ1Olx0c3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqbmV3X25vZGU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NTQ2Olx0c3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKnJhX2xpc3Q7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNTQ3LVx0aW50IHRpZF9kb3duO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTU0OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo1NDk6XHRpZiAoIW13aWZpZXhfZ2V0X2JhX3RibChwcml2LCB0aWQsIHJhKSkge1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3NzQKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYG13aWZpZXhgIERyaXZlcjogQSBUYXJnZXRlZCBBcHByb2FjaCoqCgpPa2F5LCBzbyB0aGUgYG13aWZpZXhgIGRyaXZlciBpcyB0aGUgdGFyZ2V0LiBJdCYjMzk7cyBtdWx0aS1mYWNldGVkLCBzdXBwb3J0aW5nIFVTQiwgUENJZSwgYW5kIFNESU8sIHdoaWNoIGlzIGdvb2QgbmV3cyBiZWNhdXNlIHRoYXQgb3BlbnMgdXAgc2V2ZXJhbCBmdXp6aW5nIGF2ZW51ZXMuIFNwZWNpZmljYWxseSwgc2luY2UgaXQgc3VwcG9ydHMgVVNCLCB0aGUgZHVtbXkgSENEIChVU0IgZnV6emVyKSBiZWNvbWVzIGEgdmlhYmxlIHRvb2wsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IGdldHMgbXkgYXR0ZW50aW9uLgoKVGhlIGNvcmUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZnV6emluZyBlZmZvcnQgYWN0dWFsbHkgKndvcnRoKiB0aGUgdGltZT8gWWVzLCBkZWZpbml0ZWx5LiBJdCBoYW5kbGVzIFdpLUZpIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpLCB3aGljaCBhcmUgbm90b3Jpb3VzbHkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgcmlwZSBmb3IgdnVsbmVyYWJpbGl0eSBkaXNjb3ZlcnkuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aXRoaW4gYG13aWZpZXhfc2VhcmNoX291aV9pbl9pZWAuIE5pY2UhCgpOb3csIHRoZSBjcnVjaWFsIHN0ZXA6IERldGVybWluaW5nIHRoZSBhdHRhY2sgc3VyZmFjZSBmb3IgYG13aWZpZXhfc2VhcmNoX291aV9pbl9pZWAuIENhbiB0aGlzIGZ1bmN0aW9uIGJlIHRyaWdnZXJlZCBmcm9tIHRoZSBob3N0LCBvciBpcyBpdCBleGNsdXNpdmVseSBhIGRldmljZS1zaWRlIHJvdXRpbmU/IEl0IGFwcGVhcnMgdGhlIGZ1bmN0aW9uIHBhcnNlcyBJRXMgZnJvbSBgYnNzX2Rlc2MtJmd0O2Jjbl9yc25faWVgIGFuZCBgYnNzX2Rlc2MtJmd0O2Jjbl93cGFfaWVgLiBBaGEsIHRoZXNlIGFyZSBiZWFjb24vcHJvYmUgcmVzcG9uc2UgSUVzLCBhbmQgdGhlc2UgY29tZSBmcm9tIHRoZSBBUCEgU28sIHRoZSBkZXZpY2UvZmlybXdhcmUgY29udHJvbHMgdGhlIGRhdGEgd2UmIzM5O3JlIGxvb2tpbmcgYXQuCgpUaGlzIGlzIHdoZXJlIHRoZSBhcmNoaXRlY3R1cmUga25vd2xlZGdlIGNvbWVzIGluIGhhbmR5LiBgbXdpZmlleGAmIzM5O3MgZmlybXdhcmUgaGFuZGxlcyB0aGUgV2ktRmkgTUFDLCBhbmQgdGhlIGhvc3QgZHJpdmVyIGNvbW11bmljYXRlcyB2aWEgY29tbWFuZHMgYW5kIGV2ZW50cy4gS25vd2luZyB0aGlzLCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZGV0ZXJtaW5lIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSB2dWxuZXJhYmxlIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgbXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnRgIGFuZCBgbXdpZmlleF9pc193cGFfb3VpX3ByZXNlbnRgIGFyZSBjYWxsZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluZGljYXRpb24gb24gd2hlcmUgdG8gZm9jdXMgdGhlIGZ1enppbmcgZWZmb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXhfaXNfcnNuX291aV9wcmVzZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTE0Nz1zdGF0aWMgdThcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM6MTQ4Om13aWZpZXhfaXNfcnNuX291aV9wcmVzZW50KHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLCB1MzIgY2lwaGVyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNDkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MzQ0PW13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy00MDgtXHRcdFx0ICAgICBic3NfZGVzYy1cdTAwM2ViY25faHRfY2FwKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM6NDA5Olx0XHRcdCAgICAhbXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnQoYnNzX2Rlc2MsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTQxMC1cdFx0XHRcdFx0XHRcdENJUEhFUl9TVUlURV9DQ01QKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy00MTEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjQxMjpcdFx0XHRcdGlmIChtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy00MTMtXHRcdFx0XHRcdFx0KGJzc19kZXNjLCBDSVBIRVJfU1VJVEVfVEtJUCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgxMwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIG13aWZpZXggTmV0d29yayBDb21wYXRpYmlsaXR5IENoZWNrKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBgbXdpZmlleGAgZHJpdmVyIGFnYWluLiBJIHNlZSB0aGF0IGBtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZWAgaXMgYSBrZXkgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBiZWluZyBpbnZva2VkIGR1cmluZyBib3RoIHRoZSBzY2FuIHJlc3VsdCBwcm9jZXNzaW5nIGFuZCB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHBoYXNlcy4gVGhpcyBzdWdnZXN0cyBpdCYjMzk7cyBhIGNyaXRpY2FsIGdhdGVrZWVwZXIgZm9yIGRldGVybWluaW5nIHdoaWNoIG5ldHdvcmtzIHRoZSBkZXZpY2Ugd2lsbCBldmVuICpjb25zaWRlciouIEludGVyZXN0aW5nLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhhdCBnYXRla2VlcGluZy4gTXkgbmV4dCBzdGVwLCBuYXR1cmFsbHksIGlzIHRvIHRyYWNlIGFsbCB0aGUgY2FsbCBzaXRlcyBvZiBgbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVgLiBJIG5lZWQgdG8gcHJlY2lzZWx5IHVuZGVyc3RhbmQgKndoZW4qIGFuZCAqd2h5KiB0aGlzIGNvbXBhdGliaWxpdHkgY2hlY2sgaXMgYmVpbmcgcnVuLiBJcyBpdCBqdXN0IGFib3V0IHNlY3VyaXR5IHNldHRpbmdzPyBJbmZyYXN0cnVjdHVyZSBtb2RlIHZlcnN1cyBhZC1ob2M/IFJlZ3VsYXRvcnkgZG9tYWluIGNvbnNpZGVyYXRpb25zPyBJJiMzOTtsbCBwaW5wb2ludCBldmVyeSBjYWxsLCB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHQsIGFuZCB0aGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBuZXR3b3JrIGNvbXBhdGliaWxpdHkgaXMgZGV0ZXJtaW5lZCB3aXRoaW4gdGhpcyBkcml2ZXIuIEtub3dpbmcgdGhlIHNwZWNpZmljIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGEgbmV0d29yayB0byBiZSBjb25zaWRlcmVkIGluY29tcGF0aWJsZSB3aWxsIGJlIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbnkgY29ubmVjdGlvbiBpc3N1ZXMuIEFuZCwgcG90ZW50aWFsbHksIGlkZW50aWZ5aW5nIGFueSB2dWxuZXJhYmlsaXRpZXMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0zNDM9c3RhdGljIHMzMlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzozNDQ6bXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMzQ1LVx0XHRcdCAgICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLCB1MzIgbW9kZSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTE2MTY9aW50IG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNjI4LVx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoxNjI5Olx0XHRcdHJldCA9IG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlKHByaXYsIGJzc19kZXNjLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNjMwLVx0XHRcdFx0XHRcdFx0ICAgIHByaXYtXHUwMDNlYnNzX21vZGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDI1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5YCYjMzk7cyBJbnZvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgYG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5YC4gVGhlIGNvcmUgcXVlc3Rpb24gaXM6IHdoZW4gZG9lcyB0aGlzIGZ1bmN0aW9uIGdldCBjYWxsZWQgaW4gdGhlIGBtd2lmaWV4YCBkcml2ZXI/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBuZXR3b3JrIGNvbXBhdGliaWxpdHkgY2hlY2tzIGFuZCBob3cgdGhleSBhcmUgaW1wbGVtZW50ZWQuIFRoaXMgZnVuY3Rpb24mIzM5O3MgdGltaW5nIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgZHJpdmVyIGJlaGF2aW9yLCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFuZCBhbnkgY29tcGF0aWJpbGl0eS1yZWxhdGVkIGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSB0aGUgdHJpZ2dlcnMsIHRoZSBzdXJyb3VuZGluZyBjb250cm9sIGZsb3csIGFuZCBhbnkgZGVwZW5kZW5jaWVzIHRoaXMgZnVuY3Rpb24gaGFzLiBTbywgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGZpZ3VyZSB0aGlzIG91dCBhbmQgc3RhcnQgd2l0aCB0aGUgY2FsbGVyIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xNTQxPWludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE1NDItXHRcdFx0XHQgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2VudHJ5KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTU0MzppbnQgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTU0NC1cdFx0XHRcdFx0c3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MTU5MT1pbnQgbXdpZmlleF9jbWRfODAyXzExX3NjYW4oc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE2MTUtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjE2MTY6aW50IG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE2MTctXHRcdFx0XHRcdHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MTcwMz1zdGF0aWMgaW50IG13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTcxNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM6MTcxODpcdHJldCA9IG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5KHByaXYsIGJzc19kZXNjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTcxOS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jPTMxOD1pbnQgbXdpZmlleF9ic3Nfc3RhcnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy0zNjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM6MzYxOlx0XHRyZXQgPSBtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eShwcml2LCBic3NfZGVzYyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtMzYyLVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy00MDgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM6NDA5Olx0XHRyZXQgPSBtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eShwcml2LCBic3NfZGVzYyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtNDEwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTM2OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbXdpZmlleCBDb25maWd1cmF0aW9uIGFuZCBQb3RlbnRpYWwgU2VjdXJpdHkgSW1wbGljYXRpb25zKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBwb2ludCB3aGVuIGEgc3RhdGlvbiBjb25uZWN0cyB0byBhIEJhc2ljIFNlcnZpY2UgU2V0IChCU1MpIG9yIGluaXRpYXRlcyBvbmUuIFRoZSBCU1MgZGVzY3JpcHRvciwgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbmV0d29yaywgZ2V0cyBwb3B1bGF0ZWQgZWl0aGVyIGZyb20gdGhlIHJlc3VsdHMgb2YgYSBzY2FuIG9yIGRpcmVjdGx5IGZyb20gZXZlbnRzIHJlcG9ydGVkIGJ5IHRoZSBmaXJtd2FyZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCBwYXJ0aWN1bGFybHkgc2luY2UgbXdpZmlleCBzdXBwb3J0cyBVU0IuIFRoaXMgbWVhbnMgdGhhdCBmaXJtd2FyZSByZXNwb25zZXMsIHdoaWNoIGluY2x1ZGUgdGhlIGVzc2VudGlhbCBiZWFjb24gYW5kIHByb2JlIHJlc3BvbnNlIGRhdGEsIGFyZSBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIGZ1enppbmcgdGhyb3VnaCB0aGUgVVNCIGludGVyZmFjZS4gSXQgc291bmRzIGxpa2UgYSBzb2xpZCBhdHRhY2sgdmVjdG9yLCBidXQgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGVuYWJsZWQsIGFuZCBpZiB0aGlzIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGlzIGV4cG9zZWQsIG9yIGlmIGl0IGNhbiBiZSBhZGRyZXNzZWQgd2l0aCBhcHByb3ByaWF0ZSBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZvciBtd2lmaWV4IGFuZCBzZWUgd2hhdCBidWlsZCBvcHRpb25zIGFyZSBpbiBwbGF5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNvbmZpZ3VyZWQgdG8gc2VlIGp1c3QgaG93IGV4cG9zZWQgdGhpcyBtaWdodCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1XSUZJRVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzoyOmNvbmZpZyBNV0lGSUVYXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBXaUZpLUV4IERyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTExLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6MTI6Y29uZmlnIE1XSUZJRVhfU0RJT1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMTMtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBTRDg3ODYvU0Q4Nzg3L1NEODc5Ny9TRDg4ODcvU0Q4ODk3L1NEODk3Ny9TRDg5NzgvU0Q4OTg3L1NEODk5N1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTI0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6MjU6Y29uZmlnIE1XSUZJRVhfUENJRVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBQQ0lFIDg3NjYvODg5Ny84OTk3XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMzYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzozNzpjb25maWcgTVdJRklFWF9VU0JcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTM4LVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgVVNCODc2Ni84Nzk3Lzg5OTdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxMDMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNV0lGSUVYIENvbmZpZ3VyYXRpb24gZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCDigJMgdGhvc2UgYXJlIHRoZSBrZXkgY29uZmlncyBmb3IgdGhlIE1hcnZlbGwgV2ktRmkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gZnV6emluZy4gUmlnaHQsIGBNV0lGSUVYYCBpcyB0aGUgY29yZSBkcml2ZXIsIGFuZCBgTVdJRklFWF9VU0JgIGlzIHRoZSBVU0Itc3BlY2lmaWMgZHJpdmVyLiBUaGUgaWRlYSBpcyB0byBsZXZlcmFnZSB0aGUgVVNCIGRyaXZlciBmb3IgZnV6emluZy4gSWYgd2UgZW5hYmxlIGBNV0lGSUVYX1VTQmAsIHRoYXQgZ2l2ZXMgdXMgYSBkaXJlY3QgZW50cnkgcG9pbnQgdmlhIHRoZSBVU0IgaW50ZXJmYWNlLCB3aGljaCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgcXVlc3Rpb24gbm93IGlzOiBDYW4gd2UgcmVhY2ggc29tZXRoaW5nIGxpa2UgYG13aWZpZXhfc2VhcmNoX291aV9pbl9pZWAgKG9yIHNpbWlsYXIsIGxpa2UgYSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgaW5mb3JtYXRpb24gZWxlbWVudHMpIGZyb20gYSBVU0IgZnV6emluZyBwZXJzcGVjdGl2ZT8gSXTigJlzIGNydWNpYWwgdG8gbWFwIHRoYXQgb3V0LiBUaGlua2luZyBhYm91dCBpdCwgdGhlIFVTQiBkcml2ZXIgc2hvdWxkIGJlIHJlY2VpdmluZyBkYXRhIGZyb20gdGhlIFVTQiBkZXZpY2UgaXRzZWxmIGFuZCB0aGVuIHBhc3NpbmcgaXQgYWxvbmcgdG8gdGhlIGNvcmUgZHJpdmVyLiBTbywgbXkgZm9jdXMgc2hvdWxkIGJlIG9uIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIFVTQiBkcml2ZXIgdGhhdCBoYW5kbGUgaW5jb21pbmcgZGF0YS4gSSBuZWVkIHRvIGRpZyBpbnRvIHNvbWV0aGluZyBsaWtlIGBtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZWAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCBzZWUgaG93IHRoZSBkYXRhIGZsb3cgbG9va3MsIHRoZSBkYXRhIGhhbmRsaW5nIGFuZCBob3cgaW5mb3JtYXRpb24gZnJvbSB0aGUgVVNCIGludGVyZmFjZSBpbnRlZ3JhdGVzIHdpdGggdGhlIGNvcmUgZnVuY3Rpb25zLiBJIHRoaW5rIHRoYXQmIzM5O3MgdGhlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXhfdXNiX3J4X2NvbXBsZXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmM9NDY9c3RhdGljIGludCBtd2lmaWV4X3VzYl9yZWN2KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTE1MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYzoxNTI6c3RhdGljIHZvaWQgbXdpZmlleF91c2JfcnhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTE1My17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jPTI4NT1zdGF0aWMgaW50IG13aWZpZXhfdXNiX3N1Ym1pdF9yeF91cmIoc3RydWN0IHVyYl9jb250ZXh0ICpjdHgsIGludCBzaXplKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYy0zMTUtXHRcdFx0XHQgdXNiX3JjdmludHBpcGUoY2FyZC1cdTAwM2V1ZGV2LCBjdHgtXHUwMDNlZXApLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jOjMxNjpcdFx0XHRcdCBjdHgtXHUwMDNlc2tiLVx1MDAzZWRhdGEsIHNpemUsIG13aWZpZXhfdXNiX3J4X2NvbXBsZXRlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTMxNy1cdFx0XHRcdCAodm9pZCAqKWN0eCwgY2FyZC1cdTAwM2VyeF9jbWRfaW50ZXJ2YWwpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYy0zMjAtXHRcdFx0XHQgIHVzYl9yY3ZidWxrcGlwZShjYXJkLVx1MDAzZXVkZXYsIGN0eC1cdTAwM2VlcCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmM6MzIxOlx0XHRcdFx0ICBjdHgtXHUwMDNlc2tiLVx1MDAzZWRhdGEsIHNpemUsIG13aWZpZXhfdXNiX3J4X2NvbXBsZXRlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTMyMi1cdFx0XHRcdCAgKHZvaWQgKiljdHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjk2MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGJhc2VkIG9uIHRoYXQgcHJvY2VzcyBkZXNjcmlwdGlvbi4KCioqTXkgQW5hbHlzaXMgb2YgdGhlIFVTQiBSZWNlaXZlIFBhdGgqKgoKQWxyaWdodCwgc28gdGhlIGBtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZWAgZnVuY3Rpb24gaXMgdGhlIGluaXRpYWwgZW50cnkgcG9pbnQgZm9yIGluY29taW5nIGRhdGEgb24gdGhlIFVTQiBidXMg4oCTIHRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIGRhdGEgSSYjMzk7bSBnZXR0aW5nIGZyb20gdGhlcmUgaXMgaGFuZGVkIG9mZiB0byBgbXdpZmlleF91c2JfcmVjdmAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGJlZ2lucywgd2hlcmUgSSBleHBlY3QgdGhlIGRhdGEgaXMgZnVydGhlciBleGFtaW5lZCBhbmQgcHJvYmFibHkgcGFyc2VkLiBJdCYjMzk7cyBsaWtlbHkgYG13aWZpZXhfdXNiX3JlY3ZgIHRoZW4gY2FsbHMgYSBoYW5kbGVyIGZ1bmN0aW9uIGxpa2UgYG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldGAsIG9yIHNvbWV0aGluZyB2ZXJ5IHNpbWlsYXIsIHRvIGFjdHVhbGx5ICpkbyogc29tZXRoaW5nIHdpdGggdGhlIHJlY2VpdmVkIGRhdGEuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2NhbiByZXN1bHRzIGZsb3cgdGhyb3VnaCBhbGwgb2YgdGhpcy4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGxvZ2ljIHRocm91Z2ggdGhlc2UgZnVuY3Rpb25zIHRvIHNlZSBob3cgdGhlIFdpLUZpIHNjYW4gZGF0YSBtYWtlcyBpdHMgd2F5IHRvIHRoZSBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIHJvdXRpbmVzLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBwYXRoIHNwZWNpZmljYWxseSBmcm9tIHRoZSBwb2ludCB0aGF0IGRhdGEgaXMgcmVjZWl2ZWQgb24gdGhlIFVTQiBhbGwgdGhlIHdheSB0byBpdHMgZmluYWwgZm9ybS4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXhfaGFuZGxlX3J4X3BhY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYz0xNzQ9c3RhdGljIGludCBtd2lmaWV4X3Byb2Nlc3Nfcngoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTIwNC1cdFx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6MjA1Olx0XHRcdG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldChhZGFwdGVyLCBza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0yMDYtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oPTExMDI9dm9pZCBtd2lmaWV4X3Byb2Nlc3NfYXNzb2NfcmVzcChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTEwMzppbnQgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTExMDQtXHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvcGNpZS5jPTE1MjY9c3RhdGljIGludCBtd2lmaWV4X3BjaWVfcHJvY2Vzc19yZWN2X2RhdGEoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvcGNpZS5jLTE1ODgtXHRcdFx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9wY2llLmM6MTU4OTpcdFx0XHRcdG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldChhZGFwdGVyLCBza2JfZGF0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvcGNpZS5jLTE1OTAtXHRcdFx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmM9MTU5Mz1zdGF0aWMgdm9pZCBtd2lmaWV4X2RlYWdncl9zZGlvX3BrdChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmMtMTYzMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmM6MTYzNDpcdFx0bXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KGFkYXB0ZXIsIHNrYl9kZWFnZ3IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYy0xNjM1LVx0XHRkYXRhICYjNDM7PSBibGtfc2l6ZTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jPTE2NDc9c3RhdGljIGludCBtd2lmaWV4X2RlY29kZV9yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jLTE2ODQtXHRcdH0gZWxzZSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jOjE2ODU6XHRcdFx0bXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KGFkYXB0ZXIsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jLTE2ODYtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jLTIzLSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYzoyNDppbnQgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jLTI1LVx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jLTU5LX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90eHJ4LmM6NjA6RVhQT1JUX1NZTUJPTF9HUEwobXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90eHJ4LmMtNjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTc5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqUlggUGFja2V0IFByb2Nlc3NpbmcgRGlzY3JlcGFuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIE1hcnZlbGwgV2ktRmkgZHJpdmVyIGNvZGUgYWdhaW4uIEkgd2FzIGp1c3QgbG9va2luZyBhdCBgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0YCwgYW5kIGl0JiMzOTtzIHN0cmlraW5nIG1lIGFzIGJlaW5nICpleGNsdXNpdmVseSogZm9jdXNlZCBvbiBkYXRhIHBhY2tldHMuIFRoYXQmIzM5O3Mgd2hhdCB0aGUgbmFtZSBhbmQgdGhlIGNvZGUgc2VlbSB0byBpbmRpY2F0ZS4gQnV0IHRoYXQgY2FuJiMzOTt0IGJlIHRoZSAqd2hvbGUqIHN0b3J5LCBjYW4gaXQ/IFdoZXJlIGFyZSB0aGUgY29tbWFuZCBhbmQgZXZlbnQgcGFja2V0cyBoYW5kbGVkPyBXZSBjYW4mIzM5O3QganVzdCBiZSBkcm9wcGluZyB0aG9zZSBvbiB0aGUgZmxvb3IhCgpBaCwgcmlnaHQsIG5vdyBpdCYjMzk7cyBjb21pbmcgYmFjayB0byBtZS4gVGhlIFVTQiByZWNlaXZlIGNvbXBsZXRpb24gaGFuZGxlciwgYG13aWZpZXhfdXNiX3J4X2NvbXBsZXRlYCwgKnRoYXQmIzM5O3MqIHRoZSBvbmUgdGhhdCBzZWVtcyB0byBiZSB0aGUgY2VudHJhbCBwb2ludCBmb3IgYm90aCBkYXRhIHBhY2tldHMgYW5kIHRob3NlIGNvbW1hbmQvZXZlbnQgcGFja2V0cy4gSXQmIzM5O3MgaGFuZGxpbmcgdGhlIGNvbXBsZXRpb24gb2YgYSByZWNlaXZlIG9wZXJhdGlvbiBmcm9tIHRoZSBVU0IgaW50ZXJmYWNlLCBzbyBpdCBtYWtlcyBzZW5zZSB0aGF0IGl0IHdvdWxkIG5lZWQgdG8gbWFrZSB0aGUgZGlzdGluY3Rpb24uIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG15IGF0dGVudGlvbiB0aGVyZSB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXdpZmlleF9wcm9jZXNzX3J4X2NvbW1hbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1MDMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlJldmlzaXRpbmcgbXdpZmlleF91c2JfcnhfY29tcGxldGUqKgoKT2theSwgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIGBtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZWAuIEkgbmVlZCB0byByZS1leGFtaW5lIHRoYXQgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIHJlY2VudCByZXBvcnRzLiBHaXZlbiB0aGUgaW50cmljYWNpZXMgb2YgdGhlIFVTQiByZWNlaXZlIHBhdGggaW4gdGhlIE1hcnZlbGwgV2lGaSBkcml2ZXIsIGl0JiMzOTtzIGNyaXRpY2FsIHRvIGVuc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIERNQSBlbmdpbmUgbHVya2luZyBpbiB0aGF0IHJvdXRpbmUuIEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhlIGhhbmRsaW5nIG9mIGRlc2NyaXB0b3IgY2hhaW5zLCBidWZmZXIgb3duZXJzaGlwLCBhbmQgaW50ZXJydXB0IGNvYWxlc2NpbmcuIFRoZSBwZXJmb3JtYW5jZSBpc3N1ZXMgd2UgYXJlIHNlZWluZyBmZWVsIGxpa2UgdGhleSBjb3VsZCBzdGVtIGZyb20gaW1wcm9wZXIgaGFuZGxpbmcgb2YgcmVjZWl2ZSBidWZmZXJzLCBvciBwb3RlbnRpYWxseSBhbiBpc3N1ZSBpbiB0aGUgaW50ZXJydXB0IHNlcnZpY2luZyBmbG93LiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgYWdhaW4gdGhlIHNlcXVlbmNlIG9mIGV2ZW50cyBhbmQgaG93IHRoZXkgYXJlIGFmZmVjdGVkIGJ5IGRpZmZlcmVudCBob3N0IGNvbmZpZ3VyYXRpb25zIGFuZCBkcml2ZXIgdmVyc2lvbnMuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIGVycm9yIGhhbmRsaW5nIGFuZCB3aGV0aGVyIGVycm9ycyBhcmUgZ3JhY2VmdWxseSBtYW5hZ2VkIHRvIHByZXZlbnQgY2FzY2FkaW5nIGZhaWx1cmVzLiBJdOKAmXMgdGltZSBmb3IgYSBkZWVwIGRpdmUsIGFnYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE1MjpcdHN0YXRpYyB2b2lkIG13aWZpZXhfdXNiX3J4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbiAxNTM6XHR7XG4gMTU0Olx0XHRzdHJ1Y3QgdXJiX2NvbnRleHQgKmNvbnRleHQgPSAoc3RydWN0IHVyYl9jb250ZXh0ICopdXJiLVx1MDAzZWNvbnRleHQ7XG4gMTU1Olx0XHRzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gY29udGV4dC1cdTAwM2VhZGFwdGVyO1xuIDE1NjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGNvbnRleHQtXHUwMDNlc2tiO1xuIDE1NzpcdFx0c3RydWN0IHVzYl9jYXJkX3JlYyAqY2FyZDtcbiAxNTg6XHRcdGludCByZWN2X2xlbmd0aCA9IHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoO1xuIDE1OTpcdFx0aW50IHNpemUsIHN0YXR1cztcbiAxNjA6XHRcbiAxNjE6XHRcdGlmICghYWRhcHRlciB8fCAhYWRhcHRlci1cdTAwM2VjYXJkKSB7XG4gMTYyOlx0XHRcdHByX2VycihcJiMzNDttd2lmaWV4IGFkYXB0ZXIgb3IgY2FyZCBzdHJ1Y3R1cmUgaXMgbm90IHZhbGlkXFxuXCYjMzQ7KTtcbiAxNjM6XHRcdFx0cmV0dXJuO1xuIDE2NDpcdFx0fVxuIDE2NTpcdFxuIDE2NjpcdFx0Y2FyZCA9IChzdHJ1Y3QgdXNiX2NhcmRfcmVjICopYWRhcHRlci1cdTAwM2VjYXJkO1xuIDE2NzpcdFx0aWYgKGNhcmQtXHUwMDNlcnhfY21kX2VwID09IGNvbnRleHQtXHUwMDNlZXApXG4gMTY4Olx0XHRcdGF0b21pY19kZWMoXHUwMDI2Y2FyZC1cdTAwM2VyeF9jbWRfdXJiX3BlbmRpbmcpO1xuIDE2OTpcdFx0ZWxzZVxuIDE3MDpcdFx0XHRhdG9taWNfZGVjKFx1MDAyNmNhcmQtXHUwMDNlcnhfZGF0YV91cmJfcGVuZGluZyk7XG4gMTcxOlx0XG4gMTcyOlx0XHRpZiAocmVjdl9sZW5ndGgpIHtcbiAxNzM6XHRcdFx0aWYgKHVyYi1cdTAwM2VzdGF0dXMgfHxcbiAxNzQ6XHRcdFx0ICAgIHRlc3RfYml0KE1XSUZJRVhfU1VSUFJJU0VfUkVNT1ZFRCwgXHUwMDI2YWRhcHRlci1cdTAwM2V3b3JrX2ZsYWdzKSkge1xuIDE3NTpcdFx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuIDE3NjpcdFx0XHRcdFx0ICAgIFwmIzM0O1VSQiBzdGF0dXMgaXMgZmFpbGVkOiAlZFxcblwmIzM0OywgdXJiLVx1MDAzZXN0YXR1cyk7XG4gMTc3Olx0XHRcdFx0LyogRG8gbm90IGZyZWUgc2tiIGluIGNhc2Ugb2YgY29tbWFuZCBlcCAqL1xuIDE3ODpcdFx0XHRcdGlmIChjYXJkLVx1MDAzZXJ4X2NtZF9lcCAhPSBjb250ZXh0LVx1MDAzZWVwKVxuIDE3OTpcdFx0XHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiAxODA6XHRcdFx0XHRnb3RvIHNldHVwX2Zvcl9uZXh0O1xuIDE4MTpcdFx0XHR9XG4gMTgyOlx0XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzZSByZWN2X2xlbmd0aClcbiAxODM6XHRcdFx0XHRza2JfdHJpbShza2IsIHJlY3ZfbGVuZ3RoKTtcbiAxODQ6XHRcdFx0ZWxzZVxuIDE4NTpcdFx0XHRcdHNrYl9wdXQoc2tiLCByZWN2X2xlbmd0aCAtIHNrYi1cdTAwM2VsZW4pO1xuIDE4NjpcdFxuIDE4NzpcdFx0XHRzdGF0dXMgPSBtd2lmaWV4X3VzYl9yZWN2KGFkYXB0ZXIsIHNrYiwgY29udGV4dC1cdTAwM2VlcCk7XG4gMTg4Olx0XG4gMTg5Olx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIElORk8sXG4gMTkwOlx0XHRcdFx0ICAgIFwmIzM0O2luZm86IHJlY3ZfbGVuZ3RoPSVkLCBzdGF0dXM9JWRcXG5cJiMzNDssXG4gMTkxOlx0XHRcdFx0ICAgIHJlY3ZfbGVuZ3RoLCBzdGF0dXMpO1xuIDE5MjpcdFx0XHRpZiAoc3RhdHVzID09IC1FSU5QUk9HUkVTUykge1xuIDE5MzpcdFx0XHRcdG13aWZpZXhfcXVldWVfbWFpbl93b3JrKGFkYXB0ZXIpO1xuIDE5NDpcdFxuIDE5NTpcdFx0XHRcdC8qIHVyYiBmb3IgZGF0YV9lcCBpcyByZS1zdWJtaXR0ZWQgbm93O1xuIDE5NjpcdFx0XHRcdCAqIHVyYiBmb3IgY21kX2VwIHdpbGwgYmUgcmUtc3VibWl0dGVkIGluIGNhbGxiYWNrXG4gMTk3Olx0XHRcdFx0ICogbXdpZmlleF91c2JfcmVjdl9jb21wbGV0ZVxuIDE5ODpcdFx0XHRcdCAqL1xuIDE5OTpcdFx0XHRcdGlmIChjYXJkLVx1MDAzZXJ4X2NtZF9lcCA9PSBjb250ZXh0LVx1MDAzZWVwKVxuIDIwMDpcdFx0XHRcdFx0cmV0dXJuO1xuIDIwMTpcdFx0XHR9IGVsc2Uge1xuIDIwMjpcdFx0XHRcdGlmIChzdGF0dXMgPT0gLTEpXG4gMjAzOlx0XHRcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcbiAyMDQ6XHRcdFx0XHRcdFx0ICAgIFwmIzM0O3JlY2VpdmVkIGRhdGEgcHJvY2Vzc2luZyBmYWlsZWQhXFxuXCYjMzQ7KTtcbiAyMDU6XHRcbiAyMDY6XHRcdFx0XHQvKiBEbyBub3QgZnJlZSBza2IgaW4gY2FzZSBvZiBjb21tYW5kIGVwICovXG4gMjA3Olx0XHRcdFx0aWYgKGNhcmQtXHUwMDNlcnhfY21kX2VwICE9IGNvbnRleHQtXHUwMDNlZXApXG4gMjA4Olx0XHRcdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIDIwOTpcdFx0XHR9XG4gMjEwOlx0XHR9IGVsc2UgaWYgKHVyYi1cdTAwM2VzdGF0dXMpIHtcbiAyMTE6XHRcdFx0aWYgKCF0ZXN0X2JpdChNV0lGSUVYX0lTX1NVU1BFTkRFRCwgXHUwMDI2YWRhcHRlci1cdTAwM2V3b3JrX2ZsYWdzKSkge1xuIDIxMjpcdFx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEZBVEFMLFxuIDIxMzpcdFx0XHRcdFx0ICAgIFwmIzM0O0NhcmQgaXMgcmVtb3ZlZDogJWRcXG5cJiMzNDssIHVyYi1cdTAwM2VzdGF0dXMpO1xuIDIxNDpcdFx0XHRcdHNldF9iaXQoTVdJRklFWF9TVVJQUklTRV9SRU1PVkVELCBcdTAwMjZhZGFwdGVyLVx1MDAzZXdvcmtfZmxhZ3MpO1xuIDIxNTpcdFx0XHR9XG4gMjE2Olx0XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gMjE3Olx0XHRcdHJldHVybjtcbiAyMTg6XHRcdH0gZWxzZSB7XG4gMjE5Olx0XHRcdC8qIERvIG5vdCBmcmVlIHNrYiBpbiBjYXNlIG9mIGNvbW1hbmQgZXAgKi9cbiAyMjA6XHRcdFx0aWYgKGNhcmQtXHUwMDNlcnhfY21kX2VwICE9IGNvbnRleHQtXHUwMDNlZXApXG4gMjIxOlx0XHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiAyMjI6XHRcbiAyMjM6XHRcdFx0LyogZmFsbCB0aHJvdWdoIHNldHVwX2Zvcl9uZXh0ICovXG4gMjI0Olx0XHR9XG4gMjI1Olx0XG4gMjI2Olx0c2V0dXBfZm9yX25leHQ6XG4gMjI3Olx0XHRpZiAoY2FyZC1cdTAwM2VyeF9jbWRfZXAgPT0gY29udGV4dC1cdTAwM2VlcClcbiAyMjg6XHRcdFx0c2l6ZSA9IE1XSUZJRVhfUlhfQ01EX0JVRl9TSVpFO1xuIDIyOTpcdFx0ZWxzZVxuIDIzMDpcdFx0XHRzaXplID0gTVdJRklFWF9SWF9EQVRBX0JVRl9TSVpFO1xuIDIzMTpcdFxuIDIzMjpcdFx0aWYgKGNhcmQtXHUwMDNlcnhfY21kX2VwID09IGNvbnRleHQtXHUwMDNlZXApIHtcbiAyMzM6XHRcdFx0bXdpZmlleF91c2Jfc3VibWl0X3J4X3VyYihjb250ZXh0LCBzaXplKTtcbiAyMzQ6XHRcdH0gZWxzZSB7XG4gMjM1Olx0XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZhZGFwdGVyLVx1MDAzZXJ4X3BlbmRpbmcpIFx1MDAzYz0gSElHSF9SWF9QRU5ESU5HKSB7XG4gMjM2Olx0XHRcdFx0bXdpZmlleF91c2Jfc3VibWl0X3J4X3VyYihjb250ZXh0LCBzaXplKTtcbiAyMzc6XHRcdFx0fSBlbHNlIHtcbiAyMzg6XHRcdFx0XHRjb250ZXh0LVx1MDAzZXNrYiA9IE5VTEw7XG4gMjM5Olx0XHRcdH1cbiAyNDA6XHRcdH1cbiAyNDE6XHRcbiAyNDI6XHRcdHJldHVybjtcbiAyNDM6XHR9XG4gMjQ0Olx0XG4gMjQ1Olx0c3RhdGljIHZvaWQgbXdpZmlleF91c2JfdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuIDI0NjpcdHtcbiAyNDc6XHRcdHN0cnVjdCB1cmJfY29udGV4dCAqY29udGV4dCA9IChzdHJ1Y3QgdXJiX2NvbnRleHQgKikodXJiLVx1MDAzZWNvbnRleHQpO1xuIDI0ODpcdFx0c3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRleHQtXHUwMDNlYWRhcHRlcjtcbiAyNDk6XHRcdHN0cnVjdCB1c2JfY2FyZF9yZWMgKmNhcmQgPSBhZGFwdGVyLVx1MDAzZWNhcmQ7XG4gMjUwOlx0XHRzdHJ1Y3QgdXNiX3R4X2RhdGFfcG9ydCAqcG9ydDtcbiAyNTE6XHRcdGludCBpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjM3MAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgRGF0YSBSZWNlcHRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYG13aWZpZXhfdXNiX3JlY3ZgIGZ1bmN0aW9uLiBNeSBhbmFseXNpcyBuZWVkcyB0byBiZWdpbiBoZXJlLCBhcyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgd2l0aCByZXNwZWN0IHRvIHRoZSByZWNlaXZlZCBkYXRhLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBtYW5hZ2luZyB0aGUgaW5jb21pbmcgdHJhZmZpYy4gV2hhdCBhcmUgdGhlIGtleSBwcm9jZXNzZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBib3R0bGVuZWNrcz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgbnVhbmNlcyBoZXJlLCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gcHJvY2Vzc2VzIGFueSByZWNlaXZlZCBkYXRhLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSB0aGF0IGFyZSBiZWluZyBtYW5pcHVsYXRlZC4gSXMgdGhpcyB3aGVyZSB0aGUgY3JpdGljYWwgZGVjaXNpb25zIGFyZSBtYWRlIGFib3V0IHBhY2tldCBwYXJzaW5nLCBlcnJvciBoYW5kbGluZywgYW5kIHVsdGltYXRlbHksIHdoZXJlIHRoZSBkYXRhIGlzIHBhc3NlZCB1cCB0byB0aGUgaGlnaGVyIGxheWVycz8gTGV0JiMzOTtzIGZpZ3VyZSB0aGlzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0NjpcdHN0YXRpYyBpbnQgbXdpZmlleF91c2JfcmVjdihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuICA0NzpcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBlcClcbiAgNDg6XHR7XG4gIDQ5Olx0XHR1MzIgcmVjdl90eXBlO1xuICA1MDpcdFx0X19sZTMyIHRtcDtcbiAgNTE6XHRcdGludCByZXQ7XG4gIDUyOlx0XG4gIDUzOlx0XHRpZiAoYWRhcHRlci1cdTAwM2Voc19hY3RpdmF0ZWQpXG4gIDU0Olx0XHRcdG13aWZpZXhfcHJvY2Vzc19oc19jb25maWcoYWRhcHRlcik7XG4gIDU1Olx0XG4gIDU2Olx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgSU5URl9IRUFERVJfTEVOKSB7XG4gIDU3Olx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuICA1ODpcdFx0XHRcdCAgICBcJiMzNDslczogaW52YWxpZCBza2ItXHUwMDNlbGVuXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gIDU5Olx0XHRcdHJldHVybiAtMTtcbiAgNjA6XHRcdH1cbiAgNjE6XHRcbiAgNjI6XHRcdHN3aXRjaCAoZXApIHtcbiAgNjM6XHRcdGNhc2UgTVdJRklFWF9VU0JfRVBfQ01EX0VWRU5UOlxuICA2NDpcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFVkVOVCxcbiAgNjU6XHRcdFx0XHQgICAgXCYjMzQ7JXM6IEVQX0NNRF9FVkVOVFxcblwmIzM0OywgX19mdW5jX18pO1xuICA2NjpcdFx0XHRza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgXHUwMDI2dG1wLCBJTlRGX0hFQURFUl9MRU4pO1xuICA2NzpcdFx0XHRyZWN2X3R5cGUgPSBsZTMyX3RvX2NwdSh0bXApO1xuICA2ODpcdFx0XHRza2JfcHVsbChza2IsIElOVEZfSEVBREVSX0xFTik7XG4gIDY5Olx0XG4gIDcwOlx0XHRcdHN3aXRjaCAocmVjdl90eXBlKSB7XG4gIDcxOlx0XHRcdGNhc2UgTVdJRklFWF9VU0JfVFlQRV9DTUQ6XG4gIDcyOlx0XHRcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNlIE1XSUZJRVhfU0laRV9PRl9DTURfQlVGRkVSKSB7XG4gIDczOlx0XHRcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcbiAgNzQ6XHRcdFx0XHRcdFx0ICAgIFwmIzM0O0NNRDogc2tiLVx1MDAzZWxlbiB0b28gbGFyZ2VcXG5cJiMzNDspO1xuICA3NTpcdFx0XHRcdFx0cmV0ID0gLTE7XG4gIDc2Olx0XHRcdFx0XHRnb3RvIGV4aXRfcmVzdG9yZV9za2I7XG4gIDc3Olx0XHRcdFx0fSBlbHNlIGlmICghYWRhcHRlci1cdTAwM2VjdXJyX2NtZCkge1xuICA3ODpcdFx0XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgV0FSTiwgXCYjMzQ7Q01EOiBubyBjdXJyX2NtZFxcblwmIzM0Oyk7XG4gIDc5Olx0XHRcdFx0XHRpZiAoYWRhcHRlci1cdTAwM2Vwc19zdGF0ZSA9PSBQU19TVEFURV9TTEVFUF9DRk0pIHtcbiAgODA6XHRcdFx0XHRcdFx0bXdpZmlleF9wcm9jZXNzX3NsZWVwX2NvbmZpcm1fcmVzcChcbiAgODE6XHRcdFx0XHRcdFx0XHRcdGFkYXB0ZXIsIHNrYi1cdTAwM2VkYXRhLFxuICA4MjpcdFx0XHRcdFx0XHRcdFx0c2tiLVx1MDAzZWxlbik7XG4gIDgzOlx0XHRcdFx0XHRcdHJldCA9IDA7XG4gIDg0Olx0XHRcdFx0XHRcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcbiAgODU6XHRcdFx0XHRcdH1cbiAgODY6XHRcdFx0XHRcdHJldCA9IC0xO1xuICA4NzpcdFx0XHRcdFx0Z290byBleGl0X3Jlc3RvcmVfc2tiO1xuICA4ODpcdFx0XHRcdH1cbiAgODk6XHRcbiAgOTA6XHRcdFx0XHRhZGFwdGVyLVx1MDAzZWN1cnJfY21kLVx1MDAzZXJlc3Bfc2tiID0gc2tiO1xuICA5MTpcdFx0XHRcdGFkYXB0ZXItXHUwMDNlY21kX3Jlc3BfcmVjZWl2ZWQgPSB0cnVlO1xuICA5MjpcdFx0XHRcdGJyZWFrO1xuICA5MzpcdFx0XHRjYXNlIE1XSUZJRVhfVVNCX1RZUEVfRVZFTlQ6XG4gIDk0Olx0XHRcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZih1MzIpKSB7XG4gIDk1Olx0XHRcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcbiAgOTY6XHRcdFx0XHRcdFx0ICAgIFwmIzM0O0VWRU5UOiBza2ItXHUwMDNlbGVuIHRvbyBzbWFsbFxcblwmIzM0Oyk7XG4gIDk3Olx0XHRcdFx0XHRyZXQgPSAtMTtcbiAgOTg6XHRcdFx0XHRcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcbiAgOTk6XHRcdFx0XHR9XG4gMTAwOlx0XHRcdFx0c2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIFx1MDAyNnRtcCwgc2l6ZW9mKHUzMikpO1xuIDEwMTpcdFx0XHRcdGFkYXB0ZXItXHUwMDNlZXZlbnRfY2F1c2UgPSBsZTMyX3RvX2NwdSh0bXApO1xuIDEwMjpcdFx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVWRU5ULFxuIDEwMzpcdFx0XHRcdFx0ICAgIFwmIzM0O2V2ZW50X2NhdXNlICUjeFxcblwmIzM0OywgYWRhcHRlci1cdTAwM2VldmVudF9jYXVzZSk7XG4gMTA0Olx0XG4gMTA1Olx0XHRcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNlIE1BWF9FVkVOVF9TSVpFKSB7XG4gMTA2Olx0XHRcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcbiAxMDc6XHRcdFx0XHRcdFx0ICAgIFwmIzM0O0VWRU5UOiBldmVudCBib2R5IHRvbyBsYXJnZVxcblwmIzM0Oyk7XG4gMTA4Olx0XHRcdFx0XHRyZXQgPSAtMTtcbiAxMDk6XHRcdFx0XHRcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcbiAxMTA6XHRcdFx0XHR9XG4gMTExOlx0XG4gMTEyOlx0XHRcdFx0bWVtY3B5KGFkYXB0ZXItXHUwMDNlZXZlbnRfYm9keSwgc2tiLVx1MDAzZWRhdGEgJiM0MztcbiAxMTM6XHRcdFx0XHQgICAgICAgTVdJRklFWF9FVkVOVF9IRUFERVJfTEVOLCBza2ItXHUwMDNlbGVuKTtcbiAxMTQ6XHRcbiAxMTU6XHRcdFx0XHRhZGFwdGVyLVx1MDAzZWV2ZW50X3JlY2VpdmVkID0gdHJ1ZTtcbiAxMTY6XHRcdFx0XHRhZGFwdGVyLVx1MDAzZWV2ZW50X3NrYiA9IHNrYjtcbiAxMTc6XHRcdFx0XHRicmVhaztcbiAxMTg6XHRcdFx0ZGVmYXVsdDpcbiAxMTk6XHRcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcbiAxMjA6XHRcdFx0XHRcdCAgICBcJiMzNDt1bmtub3duIHJlY3ZfdHlwZSAlI3hcXG5cJiMzNDssIHJlY3ZfdHlwZSk7XG4gMTIxOlx0XHRcdFx0cmV0ID0gLTE7XG4gMTIyOlx0XHRcdFx0Z290byBleGl0X3Jlc3RvcmVfc2tiO1xuIDEyMzpcdFx0XHR9XG4gMTI0Olx0XHRcdGJyZWFrO1xuIDEyNTpcdFx0Y2FzZSBNV0lGSUVYX1VTQl9FUF9EQVRBOlxuIDEyNjpcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBEQVRBLCBcJiMzNDslczogRVBfREFUQVxcblwmIzM0OywgX19mdW5jX18pO1xuIDEyNzpcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2UgTVdJRklFWF9SWF9EQVRBX0JVRl9TSVpFKSB7XG4gMTI4Olx0XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXG4gMTI5Olx0XHRcdFx0XHQgICAgXCYjMzQ7REFUQTogc2tiLVx1MDAzZWxlbiB0b28gbGFyZ2VcXG5cJiMzNDspO1xuIDEzMDpcdFx0XHRcdHJldHVybiAtMTtcbiAxMzE6XHRcdFx0fVxuIDEzMjpcdFxuIDEzMzpcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZhZGFwdGVyLVx1MDAzZXJ4X2RhdGFfcSwgc2tiKTtcbiAxMzQ6XHRcdFx0YWRhcHRlci1cdTAwM2VkYXRhX3JlY2VpdmVkID0gdHJ1ZTtcbiAxMzU6XHRcdFx0YXRvbWljX2luYyhcdTAwMjZhZGFwdGVyLVx1MDAzZXJ4X3BlbmRpbmcpO1xuIDEzNjpcdFx0XHRicmVhaztcbiAxMzc6XHRcdGRlZmF1bHQ6XG4gMTM4Olx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuIDEzOTpcdFx0XHRcdCAgICBcJiMzNDslczogdW5rbm93biBlbmRwb3J0ICUjeFxcblwmIzM0OywgX19mdW5jX18sIGVwKTtcbiAxNDA6XHRcdFx0cmV0dXJuIC0xO1xuIDE0MTpcdFx0fVxuIDE0MjpcdFxuIDE0MzpcdFx0cmV0dXJuIC1FSU5QUk9HUkVTUztcbiAxNDQ6XHRcbiAxNDU6XHRleGl0X3Jlc3RvcmVfc2tiOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODEyNgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHByb2Nlc3MsIGJyZWFraW5nIGl0IGRvd24gc3RlcC1ieS1zdGVwOgoKKipOZXR3b3JrIERyaXZlciBEYXRhIEZsb3cgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIE1hcnZlbGwgV2ktRmkgZHJpdmVyIGhhbmRsZXMgaW5jb21pbmcgZGF0YS4gSXQgc2VlbXMgbGlrZSB0aGUgYG13aWZpZXhfdXNiX3JlY3ZgIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIHJlY2VpdmluZyBkYXRhIG92ZXIgdGhlIFVTQiBpbnRlcmZhY2UuIE15IGltbWVkaWF0ZSBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoZSBmdW5jdGlvbiBzZXRzIGZsYWdzIGluZGljYXRpbmcgcmVjZWlwdCBvZiBlaXRoZXIgYSBjb21tYW5kIHJlc3BvbnNlIG9yIGFuIGV2ZW50IOKAkyBzcGVjaWZpY2FsbHksIGBhZGFwdGVyLSZndDtjbWRfcmVzcF9yZWNlaXZlZCA9IHRydWVgIG9yIGBhZGFwdGVyLSZndDtldmVudF9yZWNlaXZlZCA9IHRydWVgLiBUaGVuLCBhcyBpcyBvZnRlbiB0aGUgY2FzZSB3aGVuIGRlYWxpbmcgd2l0aCBhc3luY2hyb25vdXMgb3BlcmF0aW9ucywgaXQgcmV0dXJucyBgLUVJTlBST0dSRVNTYC4gVGhpcyBzaWduYWxzIHRoYXQgdGhlIHJlY2VpdmluZyBpcyBpbiBwcm9ncmVzcywgYW5kIHRoZSBzeXN0ZW0gbmVlZHMgdG8gZG8gb3RoZXIgdGhpbmdzIGFuZCByZXR1cm4gYmFjayB3aGVuIHRoZSBhY3Rpb24gaGFzIGZpbmlzaGVkLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgYWZ0ZXJtYXRoLiBVcG9uIGNvbXBsZXRpb24gb2YgdGhlIFVTQiByZWNlaXZlIG9wZXJhdGlvbiDigJMgYXMgaGFuZGxlZCBpbiBgbXdpZmlleF91c2JfcnhfY29tcGxldGVgIOKAkyBhIGNhbGwgaXMgbWFkZSB0byBgbXdpZmlleF9xdWV1ZV9tYWluX3dvcmsoYWRhcHRlcilgLiBUaGlzIGxvb2tzIGxpa2UgdGhlIGRyaXZlciYjMzk7cyB3YXkgb2YgZGVmZXJyaW5nIHRoZSBhY3R1YWwgcHJvY2Vzc2luZyBvZiB0aGUgZGF0YSBpdCBqdXN0IHJlY2VpdmVkLiBXaGljaCBtYWtlcyBzZW5zZSwgZXNwZWNpYWxseSBpbiBhIGRyaXZlciBjb250ZXh0LCB3aGVyZSB5b3Ugd2FudCB0byBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIHRpbWUgeW91JiMzOTtyZSBibG9ja2luZyB0aGUgVVNCIHJlY2VpdmUgcGF0aC4KCkZpbmFsbHksIHRoZSBtYWluIHdvcmsgcXVldWUsIHRoZSBpbXBsaWNhdGlvbiBiZWluZyB0aGF0IHRoZSB3b3JrIHF1ZXVlIGl0c2VsZiBpcyByZXNwb25zaWJsZSBmb3IgcHJvY2Vzc2luZyBib3RoIGNvbW1hbmRzIGFuZCBldmVudHMuIEkgbmVlZCB0byBsb29rIGludG8gYG13aWZpZXhfbWFpbl9wcm9jZXNzYCBtb3JlIGNsb3NlbHkgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiBjb21tYW5kIHJlc3BvbnNlcyBhbmQgZXZlbnRzLCBhbmQgaG93IGl0IGhhbmRsZXMgdGhlbSBhcHByb3ByaWF0ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X21haW5fcHJvY2VzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYz0yMTY9c3RhdGljIHZvaWQgbWF5YmVfcXVpcmtfZndfZGlzYWJsZV9kcyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMjQ3LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzoyNDg6aW50IG13aWZpZXhfbWFpbl9wcm9jZXNzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTI0OS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy00ODEtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzo0ODI6RVhQT1JUX1NZTUJPTF9HUEwobXdpZmlleF9tYWluX3Byb2Nlc3MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy00ODMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYz0xNDE5PXN0YXRpYyB2b2lkIG13aWZpZXhfbWFpbl93b3JrX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTE0MjUtXHRcdHJldHVybjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6MTQyNjpcdG13aWZpZXhfbWFpbl9wcm9jZXNzKGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0xNDI3LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oPTE1Mjk9aW50IG13aWZpZXhfc2V0X3R4X3Bvd2VyKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNTMxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaDoxNTMyOmludCBtd2lmaWV4X21haW5fcHJvY2VzcyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICopO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNTMzLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmM9MTM0MD1td2lmaWV4X3NkaW9faW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYy0xMzU2LVx0bXdpZmlleF9pbnRlcnJ1cHRfc3RhdHVzKGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYzoxMzU3Olx0bXdpZmlleF9tYWluX3Byb2Nlc3MoYWRhcHRlcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jLTEzNTgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTIwMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBDb3JlIFByb2Nlc3NpbmcgTG9vcCBpbiB0aGUgRHJpdmVyKioKCk9rYXksIHNvIGBtd2lmaWV4X21haW5fcHJvY2Vzc2Agc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgZnVuY3Rpb24gZm9yIHRoaXMgV2ktRmkgZHJpdmVyLiBUaGF0IG1ha2VzIHNlbnNlLiBJdCYjMzk7cyB0aGUgbWFpbiBsb29wLCB0aGUgaGVhcnRiZWF0LiBUaGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgKmhvdyogaXQmIzM5O3MgZG9pbmcgaXRzIGpvYi4KClRoZSB0ZXh0IHBvaW50cyBvdXQgdGhhdCBpdCYjMzk7cyBjYWxsaW5nIHR3byBrZXkgZnVuY3Rpb25zOiBgbXdpZmlleF9wcm9jZXNzX2NtZHJlc3BgIGFuZCBgbXdpZmlleF9wcm9jZXNzX2V2ZW50YC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHByaW1hcnkgZnVuY3Rpb25zIHRvIHByb2Nlc3MgY29tbWFuZHMgYW5kIGV2ZW50cyByZWNlaXZlZC4gT2YgY291cnNlLCB0aGF0JiMzOTtzIHdoYXQgSSYjMzk7ZCBleHBlY3QuIGBjbWRyZXNwYCBpcyBmb3IgaGFuZGxpbmcgY29tbWFuZCByZXNwb25zZXMsIHRoYXQmIzM5O3MgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnkuIEJ1dCBldmVudHMsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGxpZXMsIHJpZ2h0PyBTbyBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBtd2lmaWV4X3Byb2Nlc3NfZXZlbnRgIGFuZCBzZWUgd2hhdCB0aGF0JiMzOTtzIGFjdHVhbGx5IGRvaW5nLiBUaGF0JiMzOTtzIHRoZSBwYXJ0IHRoYXQmIzM5O2xsIGxpa2VseSByZXZlYWwgaG93IHRoZSBkcml2ZXIgaXMgcmVzcG9uZGluZyB0byB0aGUgZW52aXJvbm1lbnQsIHRoZSBuZXR3b3JrLCBhbmQgdGhlIGhhcmR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X3Byb2Nlc3NfZXZlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jbWRldnQuYz00MjE9dm9pZCBtd2lmaWV4X2ZyZWVfY21kX2J1ZmZlcihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jbWRldnQuYy00NjktICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY21kZXZ0LmM6NDcwOmludCBtd2lmaWV4X3Byb2Nlc3NfZXZlbnQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jbWRldnQuYy00NzEte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9MjQ4PWludCBtd2lmaWV4X21haW5fcHJvY2VzcyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMzUwLVx0XHRcdGFkYXB0ZXItXHUwMDNlZXZlbnRfcmVjZWl2ZWQgPSBmYWxzZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6MzUxOlx0XHRcdG13aWZpZXhfcHJvY2Vzc19ldmVudChhZGFwdGVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMzUyLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xMDcxPWludCBtd2lmaWV4X3Byb2Nlc3NfbWdtdF9wYWNrZXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTEwNzMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oOjEwNzQ6aW50IG13aWZpZXhfcHJvY2Vzc19ldmVudChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTA3NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5MjcKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbXdpZmlleF9wcm9jZXNzX2V2ZW50YCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aCBgbXdpZmlleF9wcm9jZXNzX2V2ZW50YCBpbiBgY21kZXZ0LmNgLiBUaGF0JiMzOTtzIGEgc29saWQgZW50cnkgcG9pbnQgZm9yIGludmVzdGlnYXRpbmcgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBldmVudHMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIE1hcnZlbGwgV2ktRmkgZHJpdmVyIGNvbnRleHQuIFRoaXMgbGlrZWx5IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgZXZlbnQgaGFuZGxpbmcgbG9vcCBvciBkaXNwYXRjaCBtZWNoYW5pc20uIE15IGluaXRpYWwgZXhwZWN0YXRpb24gaXMgdG8gZmluZCB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHJlY2VpdmluZyBldmVudHMgZnJvbSB0aGUgZmlybXdhcmUgb3IgaGFyZHdhcmUgYW5kIHRoZW4gcm91dGluZyB0aGVtIHRvIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVycyBiYXNlZCBvbiB0aGVpciB0eXBlLiBXZSYjMzk7cmUgcHJvYmFibHkgdGFsa2luZyBhYm91dCB0aGUgaGVhcnQgb2YgdGhlIGludGVycnVwdCBwcm9jZXNzaW5nIG9yIHBvbGxpbmcgbWVjaGFuaXNtIGhlcmUuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgaXQmIzM5O3MgYSBzaW1wbGUgc3dpdGNoLWNhc2UsIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGxvb2t1cCB0YWJsZSwgb3Igc29tZXRoaW5nIGV2ZW50LWRyaXZlbiBsaWtlIGEgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIHN5c3RlbS4gVGhlIGdvYWwgbm93IGlzIHRvIGxvb2sgYXQgdGhlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NtZGV2dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDcwOlx0aW50IG13aWZpZXhfcHJvY2Vzc19ldmVudChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxuIDQ3MTpcdHtcbiA0NzI6XHRcdGludCByZXQsIGk7XG4gNDczOlx0XHRzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2O1xuIDQ3NDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFkYXB0ZXItXHUwMDNlZXZlbnRfc2tiO1xuIDQ3NTpcdFx0dTMyIGV2ZW50Y2F1c2U7XG4gNDc2Olx0XHRzdHJ1Y3QgbXdpZmlleF9yeGluZm8gKnJ4X2luZm87XG4gNDc3Olx0XG4gNDc4Olx0XHRpZiAoKGFkYXB0ZXItXHUwMDNlZXZlbnRfY2F1c2UgXHUwMDI2IEVWRU5UX0lEX01BU0spID09IEVWRU5UX1JBREFSX0RFVEVDVEVEKSB7XG4gNDc5Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFkYXB0ZXItXHUwMDNlcHJpdl9udW07IGkmIzQzOyYjNDM7KSB7XG4gNDgwOlx0XHRcdFx0cHJpdiA9IGFkYXB0ZXItXHUwMDNlcHJpdltpXTtcbiA0ODE6XHRcdFx0XHRpZiAobXdpZmlleF9pc18xMWhfYWN0aXZlKHByaXYpKSB7XG4gNDgyOlx0XHRcdFx0XHRhZGFwdGVyLVx1MDAzZWV2ZW50X2NhdXNlIHw9XG4gNDgzOlx0XHRcdFx0XHRcdCgocHJpdi1cdTAwM2Vic3NfbnVtIFx1MDAyNiAweGZmKSBcdTAwM2NcdTAwM2MgMTYpIHxcbiA0ODQ6XHRcdFx0XHRcdFx0KChwcml2LVx1MDAzZWJzc190eXBlIFx1MDAyNiAweGZmKSBcdTAwM2NcdTAwM2MgMjQpO1xuIDQ4NTpcdFx0XHRcdFx0YnJlYWs7XG4gNDg2Olx0XHRcdFx0fVxuIDQ4NzpcdFx0XHR9XG4gNDg4Olx0XHR9XG4gNDg5Olx0XG4gNDkwOlx0XHRldmVudGNhdXNlID0gYWRhcHRlci1cdTAwM2VldmVudF9jYXVzZTtcbiA0OTE6XHRcbiA0OTI6XHRcdC8qIFNhdmUgdGhlIGxhc3QgZXZlbnQgdG8gZGVidWcgbG9nICovXG4gNDkzOlx0XHRhZGFwdGVyLVx1MDAzZWRiZy5sYXN0X2V2ZW50X2luZGV4ID1cbiA0OTQ6XHRcdFx0XHQoYWRhcHRlci1cdTAwM2VkYmcubGFzdF9ldmVudF9pbmRleCAmIzQzOyAxKSAlIERCR19DTURfTlVNO1xuIDQ5NTpcdFx0YWRhcHRlci1cdTAwM2VkYmcubGFzdF9ldmVudFthZGFwdGVyLVx1MDAzZWRiZy5sYXN0X2V2ZW50X2luZGV4XSA9XG4gNDk2Olx0XHRcdFx0XHRcdFx0XHQodTE2KSBldmVudGNhdXNlO1xuIDQ5NzpcdFxuIDQ5ODpcdFx0LyogR2V0IEJTUyBudW1iZXIgYW5kIGNvcnJlc3BvbmRpbmcgcHJpdiAqL1xuIDQ5OTpcdFx0cHJpdiA9IG13aWZpZXhfZ2V0X3ByaXZfYnlfaWQoYWRhcHRlciwgRVZFTlRfR0VUX0JTU19OVU0oZXZlbnRjYXVzZSksXG4gNTAwOlx0XHRcdFx0XHQgICAgICBFVkVOVF9HRVRfQlNTX1RZUEUoZXZlbnRjYXVzZSkpO1xuIDUwMTpcdFx0aWYgKCFwcml2KVxuIDUwMjpcdFx0XHRwcml2ID0gbXdpZmlleF9nZXRfcHJpdihhZGFwdGVyLCBNV0lGSUVYX0JTU19ST0xFX0FOWSk7XG4gNTAzOlx0XG4gNTA0Olx0XHQvKiBDbGVhciBCU1NfTk9fQklUUyBmcm9tIGV2ZW50ICovXG4gNTA1Olx0XHRldmVudGNhdXNlIFx1MDAyNj0gRVZFTlRfSURfTUFTSztcbiA1MDY6XHRcdGFkYXB0ZXItXHUwMDNlZXZlbnRfY2F1c2UgPSBldmVudGNhdXNlO1xuIDUwNzpcdFxuIDUwODpcdFx0aWYgKHNrYikge1xuIDUwOTpcdFx0XHRyeF9pbmZvID0gTVdJRklFWF9TS0JfUlhDQihza2IpO1xuIDUxMDpcdFx0XHRtZW1zZXQocnhfaW5mbywgMCwgc2l6ZW9mKCpyeF9pbmZvKSk7XG4gNTExOlx0XHRcdHJ4X2luZm8tXHUwMDNlYnNzX251bSA9IHByaXYtXHUwMDNlYnNzX251bTtcbiA1MTI6XHRcdFx0cnhfaW5mby1cdTAwM2Vic3NfdHlwZSA9IHByaXYtXHUwMDNlYnNzX3R5cGU7XG4gNTEzOlx0XHRcdG13aWZpZXhfZGJnX2R1bXAoYWRhcHRlciwgRVZUX0QsIFwmIzM0O0V2ZW50IEJ1ZjpcJiMzNDssXG4gNTE0Olx0XHRcdFx0XHQgc2tiLVx1MDAzZWRhdGEsIHNrYi1cdTAwM2VsZW4pO1xuIDUxNTpcdFx0fVxuIDUxNjpcdFxuIDUxNzpcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVZFTlQsIFwmIzM0O0VWRU5UOiBjYXVzZTogJSN4XFxuXCYjMzQ7LCBldmVudGNhdXNlKTtcbiA1MTg6XHRcbiA1MTk6XHRcdGlmIChwcml2LVx1MDAzZWJzc19yb2xlID09IE1XSUZJRVhfQlNTX1JPTEVfVUFQKVxuIDUyMDpcdFx0XHRyZXQgPSBtd2lmaWV4X3Byb2Nlc3NfdWFwX2V2ZW50KHByaXYpO1xuIDUyMTpcdFx0ZWxzZVxuIDUyMjpcdFx0XHRyZXQgPSBtd2lmaWV4X3Byb2Nlc3Nfc3RhX2V2ZW50KHByaXYpO1xuIDUyMzpcdFxuIDUyNDpcdFx0YWRhcHRlci1cdTAwM2VldmVudF9jYXVzZSA9IDA7XG4gNTI1Olx0XHRhZGFwdGVyLVx1MDAzZWV2ZW50X3NrYiA9IE5VTEw7XG4gNTI2Olx0XHRhZGFwdGVyLVx1MDAzZWlmX29wcy5ldmVudF9jb21wbGV0ZShhZGFwdGVyLCBza2IpO1xuIDUyNzpcdFxuIDUyODpcdFx0cmV0dXJuIHJldDtcbiA1Mjk6XHR9XG4gNTMwOlx0XG4gNTMxOlx0LypcbiA1MzI6XHQgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGEgY29tbWFuZCBhbmQgc2VuZCBpdCB0byB0aGUgZmlybXdhcmUuXG4gNTMzOlx0ICpcbiA1MzQ6XHQgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtXG4gNTM1Olx0ICogICAgICAtIFNhbml0eSB0ZXN0cyB0byBtYWtlIHN1cmUgdGhlIGNhcmQgaXMgc3RpbGwgcHJlc2VudCBvciB0aGUgRldcbiA1MzY6XHQgKiAgICAgICAgaXMgbm90IHJlc2V0XG4gNTM3Olx0ICogICAgICAtIEdldHRpbmcgYSBuZXcgY29tbWFuZCBub2RlIGZyb20gdGhlIGNvbW1hbmQgZnJlZSBxdWV1ZVxuIDUzODpcdCAqICAgICAgLSBJbml0aWFsaXppbmcgdGhlIGNvbW1hbmQgbm9kZSBmb3IgZGVmYXVsdCBwYXJhbWV0ZXJzXG4gNTM5Olx0ICogICAgICAtIEZpbGwgdXAgdGhlIG5vbi1kZWZhdWx0IHBhcmFtZXRlcnMgYW5kIGJ1ZmZlciBwb2ludGVyc1xuIDU0MDpcdCAqICAgICAgLSBBZGQgdGhlIGNvbW1hbmQgdG8gcGVuZGluZyBxdWV1ZVxuIDU0MTpcdCAqL1xuIDU0MjpcdGludCBtd2lmaWV4X3NlbmRfY21kKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHUxNiBjbWRfbm8sXG4gNTQzOlx0XHRcdCAgICAgdTE2IGNtZF9hY3Rpb24sIHUzMiBjbWRfb2lkLCB2b2lkICpkYXRhX2J1ZiwgYm9vbCBzeW5jKVxuIDU0NDpcdHtcbiA1NDU6XHRcdGludCByZXQ7XG4gNTQ2Olx0XHRzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi1cdTAwM2VhZGFwdGVyO1xuIDU0NzpcdFx0c3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZF9ub2RlO1xuIDU0ODpcdFx0c3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZF9wdHI7XG4gNTQ5Olx0XG4gNTUwOlx0XHRpZiAoIWFkYXB0ZXIpIHtcbiA1NTE6XHRcdFx0cHJfZXJyKFwmIzM0O1BSRVBfQ01EOiBhZGFwdGVyIGlzIE5VTExcXG5cJiMzNDspO1xuIDU1MjpcdFx0XHRyZXR1cm4gLTE7XG4gNTUzOlx0XHR9XG4gNTU0Olx0XG4gNTU1Olx0XHRpZiAodGVzdF9iaXQoTVdJRklFWF9JU19TVVNQRU5ERUQsIFx1MDAyNmFkYXB0ZXItXHUwMDNld29ya19mbGFncykpIHtcbiA1NTY6XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXG4gNTU3Olx0XHRcdFx0ICAgIFwmIzM0O1BSRVBfQ01EOiBkZXZpY2UgaW4gc3VzcGVuZGVkIHN0YXRlXFxuXCYjMzQ7KTtcbiA1NTg6XHRcdFx0cmV0dXJuIC0xO1xuIDU1OTpcdFx0fVxuIDU2MDpcdFxuIDU2MTpcdFx0aWYgKHRlc3RfYml0KE1XSUZJRVhfSVNfSFNfRU5BQkxJTkcsIFx1MDAyNmFkYXB0ZXItXHUwMDNld29ya19mbGFncykgXHUwMDI2XHUwMDI2XG4gNTYyOlx0XHQgICAgY21kX25vICE9IEhvc3RDbWRfQ01EXzgwMl8xMV9IU19DRkdfRU5IKSB7XG4gNTYzOlx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuIDU2NDpcdFx0XHRcdCAgICBcJiMzNDtQUkVQX0NNRDogaG9zdCBlbnRlcmluZyBzbGVlcCBzdGF0ZVxcblwmIzM0Oyk7XG4gNTY1Olx0XHRcdHJldHVybiAtMTtcbiA1NjY6XHRcdH1cbiA1Njc6XHRcbiA1Njg6XHRcdGlmICh0ZXN0X2JpdChNV0lGSUVYX1NVUlBSSVNFX1JFTU9WRUQsIFx1MDAyNmFkYXB0ZXItXHUwMDNld29ya19mbGFncykpIHtcbiA1Njk6XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODQwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgU1RBIEV2ZW50IEhhbmRsaW5nIGluIG13aWZpZXhfcHJvY2Vzc19zdGFfZXZlbnQqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gYG13aWZpZXhfcHJvY2Vzc19zdGFfZXZlbnRgLiBTdGFuZGFyZCBTdGF0aW9uIChTVEEpIGV2ZW50cy4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBiZSB0aGUgZm9jYWwgcG9pbnQgZm9yIGhhbmRsaW5nIGEgdmFyaWV0eSBvZiBTVEEtcmVsYXRlZCBldmVudHMuIEJ1dCB3aGF0IEkgbmVlZCB0byBwaW5wb2ludCBpcyBob3cgdGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgYW55IHNjYW4gcmVzdWx0cyB0aGF0IG1heSBiZSBhc3NvY2lhdGVkIHdpdGggaXQuIElzIHRoaXMgd2hlcmUgdGhlIGluY29taW5nIHNjYW4gcmVzdWx0cyBnZXQgcGFyc2VkIG9yIHVzZWQ/IEl04oCZcyBsb2dpY2FsIHRoYXQgYW4gU1RBIGV2ZW50IGhhbmRsZXIgd291bGQgbmVlZCB0byBkZWFsIHdpdGggc2NhbiBkYXRhIGV2ZW50dWFsbHksIGJ1dCBJIG11c3Qga25vdyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciB0aGUgaW1tZWRpYXRlIGhhbmRsaW5nLCBvciBpZiBpdCBkaXNwYXRjaGVzIHRoZSBzY2FuIHJlc3VsdHMgdG8gb3RoZXIgbW9kdWxlcyBmb3IgZnVydGhlciBwcm9jZXNzaW5nLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIGNvZGUgZmxvdyBoZXJlIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X3Byb2Nlc3Nfc3RhX2V2ZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY21kZXZ0LmM9NDcwPWludCBtd2lmaWV4X3Byb2Nlc3NfZXZlbnQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY21kZXZ0LmMtNTIxLVx0ZWxzZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NtZGV2dC5jOjUyMjpcdFx0cmV0ID0gbXdpZmlleF9wcm9jZXNzX3N0YV9ldmVudChwcml2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jbWRldnQuYy01MjMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xMTQzPWludCBtd2lmaWV4X2hhbmRsZV91YXBfcnhfZm9yd2FyZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xMTQ0LVx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTE0NTppbnQgbXdpZmlleF9wcm9jZXNzX3N0YV9ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICopO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xMTQ2LWludCBtd2lmaWV4X3Byb2Nlc3NfdWFwX2V2ZW50KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9ldmVudC5jPTU4Nz1td2lmaWV4X2Z3X2R1bXBfaW5mb19ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfZXZlbnQuYy02OTUtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2V2ZW50LmM6Njk2OmludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX2V2ZW50KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2V2ZW50LmMtNjk3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1NjAKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBTVEEgRXZlbnQgUHJvY2Vzc2luZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbXdpZmlleF9wcm9jZXNzX3N0YV9ldmVudGAgZnVuY3Rpb24gd2l0aGluIGBzdGFfZXZlbnQuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCB3aGVuIGl0IGNvbWVzIHRvIGhhbmRsaW5nIHN0YXRpb24tcmVsYXRlZCBldmVudHMg4oCTIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIGZvciBTVEEgYmVoYXZpb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBkcml2ZXIgaXMgcmVzcG9uZGluZyB0byB0aGVzZSBldmVudHMuIFdoYXQgYXJlIHRoZSBrZXkgZGVjaXNpb24gcG9pbnRzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBldmVudCB0eXBlcz8gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIGZ1cnRoZXIgb3B0aW1pemF0aW9uIGNvdWxkIGJlIGFjaGlldmVkLiBNeSBmb2N1cyBpcyBvbiB0aGUgZWZmaWNpZW5jeSBhbmQgcm9idXN0bmVzcyBvZiB0aGUgaGFuZGxpbmcsIGFuZCBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiByYWNlIGNvbmRpdGlvbnMgb3IgYW55IHVudXN1YWwgY29udHJvbCBmbG93LiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIGZ1bmN0aW9uIGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfZXZlbnQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5NjpcdGludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX2V2ZW50KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXG4gNjk3Olx0e1xuIDY5ODpcdFx0c3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtXHUwMDNlYWRhcHRlcjtcbiA2OTk6XHRcdGludCByZXQgPSAwLCBpO1xuIDcwMDpcdFx0dTMyIGV2ZW50Y2F1c2UgPSBhZGFwdGVyLVx1MDAzZWV2ZW50X2NhdXNlO1xuIDcwMTpcdFx0dTE2IGN0cmwsIHJlYXNvbl9jb2RlO1xuIDcwMjpcdFx0dTggaWJzc19zdGFfYWRkcltFVEhfQUxFTl07XG4gNzAzOlx0XHRzdHJ1Y3QgbXdpZmlleF9zdGFfbm9kZSAqc3RhX3B0cjtcbiA3MDQ6XHRcbiA3MDU6XHRcdHN3aXRjaCAoZXZlbnRjYXVzZSkge1xuIDcwNjpcdFx0Y2FzZSBFVkVOVF9EVU1NWV9IT1NUX1dBS0VVUF9TSUdOQUw6XG4gNzA3Olx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuIDcwODpcdFx0XHRcdCAgICBcJiMzNDtpbnZhbGlkIEVWRU5UOiBEVU1NWV9IT1NUX1dBS0VVUF9TSUdOQUwsIGlnbm9yZSBpdFxcblwmIzM0Oyk7XG4gNzA5Olx0XHRcdGJyZWFrO1xuIDcxMDpcdFx0Y2FzZSBFVkVOVF9MSU5LX1NFTlNFRDpcbiA3MTE6XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVZFTlQsIFwmIzM0O2V2ZW50OiBMSU5LX1NFTlNFRFxcblwmIzM0Oyk7XG4gNzEyOlx0XHRcdGlmICghbmV0aWZfY2Fycmllcl9vayhwcml2LVx1MDAzZW5ldGRldikpXG4gNzEzOlx0XHRcdFx0bmV0aWZfY2Fycmllcl9vbihwcml2LVx1MDAzZW5ldGRldik7XG4gNzE0Olx0XHRcdG13aWZpZXhfd2FrZV91cF9uZXRfZGV2X3F1ZXVlKHByaXYtXHUwMDNlbmV0ZGV2LCBhZGFwdGVyKTtcbiA3MTU6XHRcdFx0YnJlYWs7XG4gNzE2Olx0XG4gNzE3Olx0XHRjYXNlIEVWRU5UX0RFQVVUSEVOVElDQVRFRDpcbiA3MTg6XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVZFTlQsIFwmIzM0O2V2ZW50OiBEZWF1dGhlbnRpY2F0ZWRcXG5cJiMzNDspO1xuIDcxOTpcdFx0XHRpZiAocHJpdi1cdTAwM2V3cHMuc2Vzc2lvbl9lbmFibGUpIHtcbiA3MjA6XHRcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBJTkZPLFxuIDcyMTpcdFx0XHRcdFx0ICAgIFwmIzM0O2luZm86IHJlY2VpdmUgZGVhdXRoIGV2ZW50IGluIHdwcyBzZXNzaW9uXFxuXCYjMzQ7KTtcbiA3MjI6XHRcdFx0XHRicmVhaztcbiA3MjM6XHRcdFx0fVxuIDcyNDpcdFx0XHRhZGFwdGVyLVx1MDAzZWRiZy5udW1fZXZlbnRfZGVhdXRoJiM0MzsmIzQzOztcbiA3MjU6XHRcdFx0aWYgKHByaXYtXHUwMDNlbWVkaWFfY29ubmVjdGVkKSB7XG4gNzI2Olx0XHRcdFx0cmVhc29uX2NvZGUgPVxuIDcyNzpcdFx0XHRcdFx0Z2V0X3VuYWxpZ25lZF9sZTE2KGFkYXB0ZXItXHUwMDNlZXZlbnRfYm9keSk7XG4gNzI4Olx0XHRcdFx0bXdpZmlleF9yZXNldF9jb25uZWN0X3N0YXRlKHByaXYsIHJlYXNvbl9jb2RlLCB0cnVlKTtcbiA3Mjk6XHRcdFx0fVxuIDczMDpcdFx0XHRicmVhaztcbiA3MzE6XHRcbiA3MzI6XHRcdGNhc2UgRVZFTlRfRElTQVNTT0NJQVRFRDpcbiA3MzM6XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVZFTlQsIFwmIzM0O2V2ZW50OiBEaXNhc3NvY2lhdGVkXFxuXCYjMzQ7KTtcbiA3MzQ6XHRcdFx0aWYgKHByaXYtXHUwMDNld3BzLnNlc3Npb25fZW5hYmxlKSB7XG4gNzM1Olx0XHRcdFx0bXdpZmlleF9kYmcoYWRhcHRlciwgSU5GTyxcbiA3MzY6XHRcdFx0XHRcdCAgICBcJiMzNDtpbmZvOiByZWNlaXZlIGRpc2Fzc29jIGV2ZW50IGluIHdwcyBzZXNzaW9uXFxuXCYjMzQ7KTtcbiA3Mzc6XHRcdFx0XHRicmVhaztcbiA3Mzg6XHRcdFx0fVxuIDczOTpcdFx0XHRhZGFwdGVyLVx1MDAzZWRiZy5udW1fZXZlbnRfZGlzYXNzb2MmIzQzOyYjNDM7O1xuIDc0MDpcdFx0XHRpZiAocHJpdi1cdTAwM2VtZWRpYV9jb25uZWN0ZWQpIHtcbiA3NDE6XHRcdFx0XHRyZWFzb25fY29kZSA9XG4gNzQyOlx0XHRcdFx0XHRnZXRfdW5hbGlnbmVkX2xlMTYoYWRhcHRlci1cdTAwM2VldmVudF9ib2R5KTtcbiA3NDM6XHRcdFx0XHRtd2lmaWV4X3Jlc2V0X2Nvbm5lY3Rfc3RhdGUocHJpdiwgcmVhc29uX2NvZGUsIHRydWUpO1xuIDc0NDpcdFx0XHR9XG4gNzQ1Olx0XHRcdGJyZWFrO1xuIDc0NjpcdFxuIDc0NzpcdFx0Y2FzZSBFVkVOVF9MSU5LX0xPU1Q6XG4gNzQ4Olx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVWRU5ULCBcJiMzNDtldmVudDogTGluayBsb3N0XFxuXCYjMzQ7KTtcbiA3NDk6XHRcdFx0YWRhcHRlci1cdTAwM2VkYmcubnVtX2V2ZW50X2xpbmtfbG9zdCYjNDM7JiM0Mzs7XG4gNzUwOlx0XHRcdGlmIChwcml2LVx1MDAzZW1lZGlhX2Nvbm5lY3RlZCkge1xuIDc1MTpcdFx0XHRcdHJlYXNvbl9jb2RlID1cbiA3NTI6XHRcdFx0XHRcdGdldF91bmFsaWduZWRfbGUxNihhZGFwdGVyLVx1MDAzZWV2ZW50X2JvZHkpO1xuIDc1MzpcdFx0XHRcdGlmIChhZGFwdGVyLVx1MDAzZWhvc3RfbWxtZV9lbmFibGVkKSB7XG4gNzU0Olx0XHRcdFx0XHRhZGFwdGVyLVx1MDAzZXByaXZfbGlua19sb3N0ID0gcHJpdjtcbiA3NTU6XHRcdFx0XHRcdGFkYXB0ZXItXHUwMDNlaG9zdF9tbG1lX2xpbmtfbG9zdCA9IHRydWU7XG4gNzU2Olx0XHRcdFx0XHRxdWV1ZV93b3JrKGFkYXB0ZXItXHUwMDNlaG9zdF9tbG1lX3dvcmtxdWV1ZSxcbiA3NTc6XHRcdFx0XHRcdFx0ICAgXHUwMDI2YWRhcHRlci1cdTAwM2Vob3N0X21sbWVfd29yayk7XG4gNzU4Olx0XHRcdFx0fSBlbHNlIHtcbiA3NTk6XHRcdFx0XHRcdG13aWZpZXhfcmVzZXRfY29ubmVjdF9zdGF0ZShwcml2LCByZWFzb25fY29kZSxcbiA3NjA6XHRcdFx0XHRcdFx0XHRcdCAgICB0cnVlKTtcbiA3NjE6XHRcdFx0XHR9XG4gNzYyOlx0XHRcdH1cbiA3NjM6XHRcdFx0YnJlYWs7XG4gNzY0Olx0XG4gNzY1Olx0XHRjYXNlIEVWRU5UX1BTX1NMRUVQOlxuIDc2NjpcdFx0XHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFVkVOVCwgXCYjMzQ7aW5mbzogRVZFTlQ6IFNMRUVQXFxuXCYjMzQ7KTtcbiA3Njc6XHRcbiA3Njg6XHRcdFx0YWRhcHRlci1cdTAwM2Vwc19zdGF0ZSA9IFBTX1NUQVRFX1BSRV9TTEVFUDtcbiA3Njk6XHRcbiA3NzA6XHRcdFx0bXdpZmlleF9jaGVja19wc19jb25kKGFkYXB0ZXIpO1xuIDc3MTpcdFx0XHRicmVhaztcbiA3NzI6XHRcbiA3NzM6XHRcdGNhc2UgRVZFTlRfUFNfQVdBS0U6XG4gNzc0Olx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVWRU5ULCBcJiMzNDtpbmZvOiBFVkVOVDogQVdBS0VcXG5cJiMzNDspO1xuIDc3NTpcdFx0XHRpZiAoIWFkYXB0ZXItXHUwMDNlcHBzX3VhcHNkX21vZGUgXHUwMDI2XHUwMDI2XG4gNzc2Olx0XHRcdCAgICAocHJpdi1cdTAwM2Vwb3J0X29wZW4gfHxcbiA3Nzc6XHRcdFx0ICAgICAocHJpdi1cdTAwM2Vic3NfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykpIFx1MDAyNlx1MDAyNlxuIDc3ODpcdFx0XHQgICAgcHJpdi1cdTAwM2VtZWRpYV9jb25uZWN0ZWQgXHUwMDI2XHUwMDI2IGFkYXB0ZXItXHUwMDNlc2xlZXBfcGVyaW9kLnBlcmlvZCkge1xuIDc3OTpcdFx0XHRcdGFkYXB0ZXItXHUwMDNlcHBzX3VhcHNkX21vZGUgPSB0cnVlO1xuIDc4MDpcdFx0XHRcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVWRU5ULFxuIDc4MTpcdFx0XHRcdFx0ICAgIFwmIzM0O2V2ZW50OiBQUFMvVUFQU0QgbW9kZSBhY3RpdmF0ZWRcXG5cJiMzNDspO1xuIDc4MjpcdFx0XHR9XG4gNzgzOlx0XHRcdGFkYXB0ZXItXHUwMDNldHhfbG9ja19mbGFnID0gZmFsc2U7XG4gNzg0Olx0XHRcdGlmIChhZGFwdGVyLVx1MDAzZXBwc191YXBzZF9tb2RlIFx1MDAyNlx1MDAyNiBhZGFwdGVyLVx1MDAzZWdlbl9udWxsX3BrdCkge1xuIDc4NTpcdFx0XHRcdGlmIChtd2lmaWV4X2NoZWNrX2xhc3RfcGFja2V0X2luZGljYXRpb24ocHJpdikpIHtcbiA3ODY6XHRcdFx0XHRcdGlmIChhZGFwdGVyLVx1MDAzZWRhdGFfc2VudCB8fFxuIDc4NzpcdFx0XHRcdFx0ICAgIChhZGFwdGVyLVx1MDAzZWlmX29wcy5pc19wb3J0X3JlYWR5IFx1MDAyNlx1MDAyNlxuIDc4ODpcdFx0XHRcdFx0ICAgICAhYWRhcHRlci1cdTAwM2VpZl9vcHMuaXNfcG9ydF9yZWFkeShwcml2KSkpIHtcbiA3ODk6XHRcdFx0XHRcdFx0YWRhcHRlci1cdTAwM2Vwc19zdGF0ZSA9IFBTX1NUQVRFX0FXQUtFO1xuIDc5MDpcdFx0XHRcdFx0XHRhZGFwdGVyLVx1MDAzZXBtX3dha2V1cF9jYXJkX3JlcSA9IGZhbHNlO1xuIDc5MTpcdFx0XHRcdFx0XHRhZGFwdGVyLVx1MDAzZXBtX3dha2V1cF9md190cnkgPSBmYWxzZTtcbiA3OTI6XHRcdFx0XHRcdFx0dGltZXJfZGVsZXRlKFx1MDAyNmFkYXB0ZXItXHUwMDNld2FrZXVwX3RpbWVyKTtcbiA3OTM6XHRcdFx0XHRcdFx0YnJlYWs7XG4gNzk0Olx0XHRcdFx0XHR9XG4gNzk1Olx0XHRcdFx0XHRpZiAoIW13aWZpZXhfc2VuZF9udWxsX3BhY2tldFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQ4MAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUcmFjaW5nIHRoZSBGdW5jdGlvbiBDYWxsIENoYWluKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYG13aWZpZXhgIGNvZGUgYWdhaW4sIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBuZXR3b3JrIGNvbXBhdGliaWxpdHkgaXMgYWN0dWFsbHkgZGV0ZXJtaW5lZC4gSXQgbG9va3MgbGlrZSBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYCBpcyBhIGtleSBmdW5jdGlvbiBoZXJlLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBieSBgbXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnRgIGFuZCBgbXdpZmlleF9pc193cGFfb3VpX3ByZXNlbnRgLCB3aGljaCwgaW4gdHVybiwgYXJlIGNhbGxlZCBmcm9tIGBtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZWAuIFRoYXQgbWFrZXMgc2Vuc2U7IGNoZWNraW5nIGZvciBPVUkgcHJlc2VuY2UgaXMgYSBnb29kIGluZGljYXRvciBvZiBjb21wYXRpYmlsaXR5LCBlc3BlY2lhbGx5IHdpdGggV1BBL1JTTiBzZWN1cml0eS4KCk5vdywgYG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlYCBmZWVkcyBpbnRvIGBtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eWAuIFRoaXMgb25lJiMzOTtzIGludGVyZXN0aW5nLCBhbmQgaXMgd2hlcmUgdGhpbmdzIHN0YXJ0IHRvIGdldCBtb3JlIGNvbnRleHR1YWxseSByZWxldmFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93ICp0aGlzKiBmdW5jdGlvbiBpcyB1c2VkLgoKQWxyaWdodCwgYG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5YCBpcyBjYWxsZWQgYnkgYG13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtc2AgYW5kIGBtd2lmaWV4X2Jzc19zdGFydGAuIGBtd2lmaWV4X2Jzc19zdGFydGAgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MgbGlrZWx5IGEgZnVuY3Rpb24gdGhhdCBpbml0aWF0ZXMgdGhlIGNvbm5lY3Rpb24gdG8gYSBuZXR3b3JrLiBIb3dldmVyLCBgbXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zYCBpcyBhbHNvIGNhbGxpbmcgdGhpcy4gSSB0aG91Z2h0IHRoYXQgZnVuY3Rpb24gd2FzIGNhbGxlZCBieSBgbXdpZmlleF9jbWRfODAyXzExX3NjYW5gLCBidXQgSSBzaG91bGQgdmVyaWZ5IHRoYXQuIExldCBtZSBkb3VibGUtY2hlY2sgaG93IGBtd2lmaWV4X3VwZGF0ZV9jdXJyX2Jzc19wYXJhbXNgIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0xNjU5PXN0YXRpYyBpbnQgbXdpZmlleF9zYXZlX2hpZGRlbl9zc2lkX2NoYW5uZWxzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNzAyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoxNzAzOnN0YXRpYyBpbnQgbXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE3MDQtXHRcdFx0XHRcdCAgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MTc0Mz1td2lmaWV4X3BhcnNlX3NpbmdsZV9yZXNwb25zZV9idWYoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKipic3NfaW5mbyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE4OTAtXHRcdFx0XHRcdCAgICBFVEhfQUxFTikpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjE4OTE6XHRcdFx0XHRcdG13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtcyhwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xODkyLVx0XHRcdFx0XHRcdFx0XHQgICAgICAgYnNzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzNTYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBXaS1GaSBTY2FuIFJlc3BvbnNlKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgcHJvY2Vzc2luZyBoYXBwZW5pbmcgaW4gdGhlIFdpLUZpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBzY2FuIHJlc3VsdHMuIEkgc2VlIHRoYXQgYG13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1ZmAgZ2V0cyBjYWxsZWQsIGFuZCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGl0cyBvcmlnaW5zOiBlaXRoZXIgYG13aWZpZXhfcmV0XzgwMl8xMV9zY2FuYCBvciBhIHZlcnkgc2ltaWxhciBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIHJlc3BvbnNlIGFmdGVyIGEgV2ktRmkgc2NhbiByZXF1ZXN0LiBUaGF0IGZ1bmN0aW9uIGlzIGNsZWFybHkgYSBrZXkgY29tcG9uZW50IGluIGRpc3NlY3RpbmcgdGhlIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdpcmVsZXNzIGFkYXB0ZXIgYWZ0ZXIgaXQmIzM5O3MgZ29uZSBvdXQgYW5kIGxvb2tlZCBmb3IgYXZhaWxhYmxlIG5ldHdvcmtzLiBJdCYjMzk7cyB0aGUgcG9pbnQgd2hlcmUgd2Ugc3RhcnQgcHVsbGluZyBhcGFydCB0aGF0IHJhdyBidWZmZXIsIGxpa2VseSBmaWxsZWQgd2l0aCA4MDIuMTEgaW5mb3JtYXRpb24gZWxlbWVudHMgKElFcyksIHRvIGV4dHJhY3QgdGhlIG1lYW5pbmdmdWwgZGF0YSBsaWtlIFNTSUQsIGNoYW5uZWwsIHNpZ25hbCBzdHJlbmd0aCwgc2VjdXJpdHkgY2FwYWJpbGl0aWVzLCBhbmQgYWxsIHRoZSBqdWljeSBkZXRhaWxzIHdlIG5lZWQgdG8gcG9wdWxhdGUgb3VyIHNjYW4gcmVzdWx0cy4gSSYjMzk7bSBpbWFnaW5pbmcgaXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgcG90ZW50aWFsbHkgY29tcGxleCB3aXRoIGFsbCB0aGUgcG9zc2libGUgdmFyaWF0aW9ucyBpbiA4MDIuMTEgZnJhbWUgZm9ybWF0cyBhbmQgdmVuZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB0aGlzIHBhcnQgaXMgd2hlcmUgdGhpbmdzIGNhbiBnZXQgdHJpY2t5LCBkZWFsaW5nIHdpdGggYWxsIHRoZSBkaWZmZXJlbnQgd2F5cyB2ZW5kb3JzIGltcGxlbWVudCB0aGluZ3MuIEkgbmVlZCB0byBiZSBzdXJlIGl0IGhhbmRsZXMgZXZlcnl0aGluZyBwcm9wZXJseSwgZW5zdXJpbmcgbm8gZGF0YSBsb3NzIG9yIGNvcnJ1cHRpb24sIGFuZCB0aGF0IGl0IHJlbWFpbnMgZWZmaWNpZW50IGZvciBnb29kIHBlcmZvcm1hbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X3BhcnNlX3NpbmdsZV9yZXNwb25zZV9idWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MTc0Mj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjE3NDM6bXdpZmlleF9wYXJzZV9zaW5nbGVfcmVzcG9uc2VfYnVmKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4ICoqYnNzX2luZm8sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE3NDQtXHRcdFx0XHQgIHUzMiAqYnl0ZXNfbGVmdCwgdTY0IGZ3X3RzZiwgdTggKnJhZGlvX3R5cGUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0yMTAyPWludCBtd2lmaWV4X3JldF84MDJfMTFfc2NhbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMjIyOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM6MjIyOTpcdFx0cmV0ID0gbXdpZmlleF9wYXJzZV9zaW5nbGVfcmVzcG9uc2VfYnVmKHByaXYsIFx1MDAyNmJzc19pbmZvLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0yMjMwLVx0XHRcdFx0XHRcdFx0XHUwMDI2Ynl0ZXNfbGVmdCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTI2MDM9aW50IG13aWZpZXhfaGFuZGxlX2V2ZW50X2V4dF9zY2FuX3JlcG9ydChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMjcxOS1cdFx0fVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoyNzIwOlx0XHRyZXQgPSBtd2lmaWV4X3BhcnNlX3NpbmdsZV9yZXNwb25zZV9idWYocHJpdiwgXHUwMDI2YnNzX2luZm8sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTI3MjEtXHRcdFx0XHRcdFx0XHRcdTAwMjZieXRlc19sZWZ0LCBmd190c2YsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MTY5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQXR0YWNrIFN1cmZhY2U6IFNjYW4gQ29tbWFuZCBIYW5kbGVycyoqCgpPa2F5LCBzbyBgbXdpZmlleF9yZXRfODAyXzExX3NjYW5gIGlzICp0aGUqIGZ1bmN0aW9uIEkgbmVlZCB0byBsb29rIGF0OyBpdCYjMzk7cyB0aGUgY29tbWFuZCByZXNwb25zZSBoYW5kbGVyIGZvciBzY2FuIGNvbW1hbmRzLiBJIGtub3cgdGhhdCBgbXdpZmlleF9oYW5kbGVfZXZlbnRfZXh0X3NjYW5fcmVwb3J0YCBpcyBhbHNvIGltcG9ydGFudCBhcyBpdCBoYW5kbGVzIHNjYW4gcmVwb3J0cy4gQm90aCBvZiB0aGVzZSBhcmUgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGV5IGdldCB0aGVpciBkYXRhIGZyb20gdGhlIGZpcm13YXJlLCB3aGljaCBtZWFucyB0aGF0IEkgY2FuIHBvdGVudGlhbGx5IGZlZWQgdGhlbSBmdXp6aW5nIGRhdGEgdGhyb3VnaCBVU0IuIFRoaXMgY29uZmlybXMgdGhlIG1vZGlmaWVkIGNvZGUgaXMgaW5kZWVkIHJlYWNoYWJsZSBhbmQsIGNydWNpYWxseSwgcHJvY2Vzc2VzICp1bnRydXN0ZWQqIGRhdGEgZGlyZWN0bHkgZnJvbSB0aGUgZGV2aWNlL2Zpcm13YXJlLgoKQ29uc2lkZXJpbmcgdGhpcyBpcyBhIGJ1ZyBmaXggZm9yIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIHBhcnNpbmcgV2ktRmkgSUVzLCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0Fic29sdXRlbHksIHRoaXMgaXMgZnV6ei13b3J0aHkuJiMzNDsgVGhlIHBvdGVudGlhbCBmb3IgYSByZWxpYWJsZSBjcmFzaCBoZXJlIGlzIGhpZ2gsIGFuZCB0aGlzIHNvdW5kcyBsaWtlIGEgZ3JlYXQgdXNlIGNhc2UgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgYE1XSUZJRVhgIGFuZCBgTVdJRklFWF9VU0JgIGFyZSBlbmFibGVkIGZvciB0aGUgdGVzdCBhbmQgZW5zdXJlIEkgZG8gbm90IG5lZ2xlY3QgYW55IHBvdGVudGlhbGx5IHJlbGF0ZWQgY29uZmlncy4KTGV0IG1lIGNoZWNrIHRob3NlIGNvbmZpZ3VyYXRpb25zLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNV0lGSUVYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6Mjpjb25maWcgTVdJRklFWFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjEyOmNvbmZpZyBNV0lGSUVYX1NESU9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTEzLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgU0Q4Nzg2L1NEODc4Ny9TRDg3OTcvU0Q4ODg3L1NEODg5Ny9TRDg5NzcvU0Q4OTc4L1NEODk4Ny9TRDg5OTdcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0yNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjI1OmNvbmZpZyBNV0lGSUVYX1BDSUVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTI2LVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgUENJRSA4NzY2Lzg4OTcvODk5N1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTM2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6Mzc6Y29uZmlnIE1XSUZJRVhfVVNCXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zOC1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFVTQjg3NjYvODc5Ny84OTk3XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MDE5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgVGFyZ2V0IGZvciBGdXp6aW5nOiBBIERlZXAgRGl2ZSBpbnRvIE1XSUZJRVggQ29tcGF0aWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gdGhlIGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCBtb2R1bGVzIGFzIHRoZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgY29udGV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhbmQgaWRlbnRpZnkga2V5IGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaGFzIGxlZCBtZSB0byBhIGZldyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIGZ1bmN0aW9ucywgc28gbGV0JiMzOTtzIHdhbGsgdGhyb3VnaCBteSByZWFzb25pbmcuCgpJbml0aWFsbHksIEkgaWRlbnRpZmllZCBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYCBhbmQgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQ6IGBtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudGAsIGBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudGAuIFRoZXNlIGFyZSB1bHRpbWF0ZWx5IGNhbGxlZCBieSBgbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVgLiBUaGUgZm9jdXMgaXMgdG8gZGV0ZXJtaW5lIG5ldHdvcmsgY29tcGF0aWJpbGl0eS4gSSB0aGVuIGFkZGVkIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWxhdGVkIHRvIHRoZXNlOiBgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlgLCBgbXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zYCwgYW5kIGBtd2lmaWV4X3BhcnNlX3NpbmdsZV9yZXNwb25zZV9idWZgLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlaXIgc3RhdGljIHN0YXR1cy4gSSBjb25maXJtZWQgdGhhdCBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYCwgYG13aWZpZXhfaXNfcnNuX291aV9wcmVzZW50YCwgYG13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50YCwgYG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlYCwgYW5kIGBtd2lmaWV4X3BhcnNlX3NpbmdsZV9yZXNwb25zZV9idWZgIGFyZSBzdGF0aWMsIHdoaWxlIGBtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eWAsIGBtd2lmaWV4X3JldF84MDJfMTFfc2NhbmAsIGFuZCBgbXdpZmlleF9oYW5kbGVfZXZlbnRfZXh0X3NjYW5fcmVwb3J0YCBhcmUgbm90LgoKTmV4dCwgSSBjb21waWxlZCBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgbmVlZCBhdHRlbnRpb246CiogICBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYAoqICAgYG13aWZpZXhfaXNfcnNuX291aV9wcmVzZW50YAoqICAgYG13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50YAoqICAgYG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlYAoqICAgYG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5YAoqICAgYG13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtc2AKKiAgIGBtd2lmaWV4X3BhcnNlX3NpbmdsZV9yZXNwb25zZV9idWZgCiogICBgbXdpZmlleF9yZXRfODAyXzExX3NjYW5gCiogICBgbXdpZmlleF9oYW5kbGVfZXZlbnRfZXh0X3NjYW5fcmVwb3J0YAoKVGhlbiwgSSBsb29rZWQgYXQgdGhlIGNhbGxlcnMgb2YgYG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5YC4gSSBmb3VuZCBgbXdpZmlleF9ic3Nfc3RhcnRgIGluIGBzdGFfaW9jdGwuY2AsIHNvIEkgc2hvdWxkIGFkZCB0aGF0IG9uZS4KCk5vdywgYSBjcnVjaWFsIHBvaW50OiBJcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIHRocm91Z2ggVVNCIGZ1enppbmc/IFRoZSBhbnN3ZXIgaXMgeWVzLiBUaGUgVVNCIGRyaXZlciByZWNlaXZlcyBkYXRhIGZyb20gdGhlIGRldmljZSBpbiB0aGUgZm9ybSBvZiBjb21tYW5kIHJlc3BvbnNlcyBvciBldmVudHMuIFNwZWNpZmljYWxseSwgYG13aWZpZXhfcmV0XzgwMl8xMV9zY2FuYCBoYW5kbGVzIGNvbW1hbmQgcmVzcG9uc2VzIGFuZCBgbXdpZmlleF9oYW5kbGVfZXZlbnRfZXh0X3NjYW5fcmVwb3J0YCBoYW5kbGVzIGV2ZW50cy4gVGhpcyBtZWFucyBib3RoIGFyZSByZWFjaGFibGUgdGhyb3VnaCBlbXVsYXRpb24gb2YgdGhlIFVTQiBkZXZpY2Ugc2VuZGluZyByZXNwb25zZXMgb3IgZXZlbnRzIGZyb20gYSBzY2FuIGNvbW1hbmQuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IGdvb2QgZnV6emluZyB0YXJnZXRzLgoKRmluYWxseSwgbGV0IG1lIHJlLWV2YWx1YXRlIG15IGxpc3QgZm9yIHRoZSBtb3N0IGVmZmVjdGl2ZSBmdXp6aW5nIHNjb3BlLiBgbXdpZmlleF9ic3Nfc3RhcnRgIG1pZ2h0IGJlIHRoZSBlbnRyeSBwb2ludCB0byBmdXp6aW5nIGEgbG90IG9mIHRoZSBjb21wYXRpYmlsaXR5IGNoZWNrcy4gV2hpbGUgaXQmIzM5O3MgY2FsbGVkIHRocm91Z2ggYW4gaW9jdGwvY2ZnODAyMTEgY2FsbGJhY2sgKGxpa2UgZnJvbSBgbXdpZmlleF9zZXRfYnNzX3BhcmFtc2ApLCBpdCBjYWxscyBgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlgIG9uIGEgQlNTIGRlc2NyaXB0b3IuIFRoaXMgQlNTIGRlc2NyaXB0b3IgaXMsIGltcG9ydGFudGx5LCBwb3B1bGF0ZWQgZnJvbSBzY2FuIHJlc3VsdHMuIFNjYW4gcmVzdWx0cywgaW4gdHVybiwgKmNvbWUgZnJvbSB0aGUgZGV2aWNlKi4gU28sIHRoZSBkYXRhIHdpdGhpbiB0aGUgQlNTIGRlc2NyaXB0b3IgaXMgaW5kZWVkIGRldmljZS1jb250cm9sbGVkIGFuZCBmdXp6YWJsZS4KClNvIHRoZSByZWZpbmVkIGZvY3VzIHN5bWJvbHMgYXJlOgoKKiAgIGBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVgCiogICBgbXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnRgCiogICBgbXdpZmlleF9pc193cGFfb3VpX3ByZXNlbnRgCiogICBgbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVgCiogICBgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlgCiogICBgbXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zYAoqICAgYG13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1ZmAKKiAgIGBtd2lmaWV4X3JldF84MDJfMTFfc2NhbmAKKiAgIGBtd2lmaWV4X2hhbmRsZV9ldmVudF9leHRfc2Nhbl9yZXBvcnRgCiogICBgbXdpZmlleF9ic3Nfc3RhcnRgCgpOb3csIGxldCYjMzk7cyBleHBsb3JlIGBtd2lmaWV4X2Jzc19zdGFydGAgaW4gZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X2Jzc19zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmM9MjI2Nj1td2lmaWV4X2NmZzgwMjExX2Fzc29jKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHNpemVfdCBzc2lkX2xlbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYy0yNDA1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmM6MjQwNjpcdHJldCA9IG13aWZpZXhfYnNzX3N0YXJ0KHByaXYsIGJzcywgXHUwMDI2cmVxX3NzaWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmMtMjQwNy1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmM9NDQyOD1td2lmaWV4X2NmZzgwMjExX2Fzc29jaWF0ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jLTQ1MjAtXHRjZmc4MDIxMV9yZWZfYnNzKGFkYXB0ZXItXHUwMDNld2lwaHksIHJlcS1cdTAwM2Vic3MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmM6NDUyMTpcdHJldCA9IG13aWZpZXhfYnNzX3N0YXJ0KHByaXYsIHJlcS1cdTAwM2Vic3MsIFx1MDAyNnJlcV9zc2lkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jLTQ1MjItXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xNDc4PWludCBtd2lmaWV4X3dhaXRfcXVldWVfY29tcGxldGUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTQ3OS1cdFx0XHRcdHN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRfcXVldWVkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTQ4MDppbnQgbXdpZmlleF9ic3Nfc3RhcnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNDgxLVx0XHQgICAgICBzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqcmVxX3NzaWQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYz0yNDk9c3RhdGljIGludCBtd2lmaWV4X3Byb2Nlc3NfY291bnRyeV9pZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy0zMTctICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM6MzE4OmludCBtd2lmaWV4X2Jzc19zdGFydChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtMzE5LVx0XHQgICAgICBzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqcmVxX3NzaWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NzcxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1hcnZlbGwgV2ktRmkgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYG13aWZpZXhfYnNzX3N0YXJ0YCB1c2VzIGEgYHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzc2AuIFRoaXMgaXMgcG9wdWxhdGVkIGJ5IGBtYWM4MDIxMS9jZmc4MDIxMWAsIHJpZ2h0PyBBbmQgdGhhdCBpbmZvcm1hdGlvbiAqY29tZXMgZnJvbSogdGhlIHNjYW4gcmVzdWx0cyBwcm92aWRlZCBieSB0aGUgZHJpdmVyIGl0c2VsZiwgaGFuZGVkIG9mZiB0byBgY2ZnODAyMTFgLCB0aGVuIHBhc3NlZCBiYWNrIGR1cmluZyBhc3NvY2lhdGlvbi4gR290IGl0IOKAkyB0aGUgZGV2aWNlIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIEJTUyBkYXRhLiBUaGF0IGNvbmZpcm1zIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGRhdGEgZmxvdywgd2hpY2ggaXMgaGVscGZ1bC4gQW5kIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUsIGFzIGV4cGVjdGVkLCBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBXZSBoYXZlOgoKKiAgIGBNV0lGSUVYYAoqICAgYE1XSUZJRVhfVVNCYAoqICAgYE1XSUZJRVhfU0RJT2AKKiAgIGBNV0lGSUVYX1BDSUVgCgpGb3IgdGVzdGluZyB0aGUgY29yZSBsb2dpYyB0aHJvdWdoIFVTQiBmdXp6aW5nLCBpdCBzZWVtcyBsaWtlIGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCBzaG91bGQgYmUgZW5vdWdoLiBUaGF0JiMzOTtsbCBrZWVwIHRoZSBzY29wZSBtYW5hZ2VhYmxlIGZvciBub3cuCgpCdXQgd2FpdCBhIHNlY29uZC4uLiBiZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZy4gRG9lcyBgTVdJRklFWF9VU0JgIGRlcGVuZCBvbiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnM/IEJlc3QgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZ2AgZmlsZSBxdWlja2x5LCBqdXN0IHRvIGJlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gVGhhdCBjb3VsZCBpbXBhY3Qgb3VyIHRlc3Rpbmcgc3RyYXRlZ3kuIEkmIzM5O2xsIHRha2UgYSBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE1XSUZJRVhcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXJcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIE1hcnZlbGxcbiAgIDc6XHRcdCAgODAyLjExbi9hYyBjaGlwc2V0cy5cbiAgIDg6XHRcbiAgIDk6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWRcbiAgMTA6XHRcdCAgbXdpZmlleC5cbiAgMTE6XHRcbiAgMTI6XHRjb25maWcgTVdJRklFWF9TRElPXG4gIDEzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBTRDg3ODYvU0Q4Nzg3L1NEODc5Ny9TRDg4ODcvU0Q4ODk3L1NEODk3Ny9TRDg5NzgvU0Q4OTg3L1NEODk5N1wmIzM0O1xuICAxNDpcdFx0ZGVwZW5kcyBvbiBNV0lGSUVYIFx1MDAyNlx1MDAyNiBNTUNcbiAgMTU6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMTY6XHRcdHNlbGVjdCBXQU5UX0RFVl9DT1JFRFVNUFxuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gTWFydmVsbFxuICAxOTpcdFx0ICA4Nzg2Lzg3ODcvODc5Ny84ODg3Lzg4OTcvODk3Ny84OTc4Lzg5ODcvODk5NyBjaGlwc2V0cyB3aXRoXG4gIDIwOlx0XHQgIFNESU8gaW50ZXJmYWNlLiBTRDg5NzggaXMgYWxzbyBrbm93biBhcyBOWFAgSVc0MTYuXG4gIDIxOlx0XG4gIDIyOlx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXG4gIDIzOlx0XHQgIG13aWZpZXhfc2Rpby5cbiAgMjQ6XHRcbiAgMjU6XHRjb25maWcgTVdJRklFWF9QQ0lFXG4gIDI2Olx0XHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBQQ0lFIDg3NjYvODg5Ny84OTk3XCYjMzQ7XG4gIDI3Olx0XHRkZXBlbmRzIG9uIE1XSUZJRVggXHUwMDI2XHUwMDI2IFBDSVxuICAyODpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAyOTpcdFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBNYXJ2ZWxsXG4gIDMyOlx0XHQgIDg3NjYvODg5Ny84OTk3IGNoaXBzZXRzIHdpdGggUENJZSBpbnRlcmZhY2UuXG4gIDMzOlx0XG4gIDM0Olx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXG4gIDM1Olx0XHQgIG13aWZpZXhfcGNpZS5cbiAgMzY6XHRcbiAgMzc6XHRjb25maWcgTVdJRklFWF9VU0JcbiAgMzg6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFVTQjg3NjYvODc5Ny84OTk3XCYjMzQ7XG4gIDM5Olx0XHRkZXBlbmRzIG9uIE1XSUZJRVggXHUwMDI2XHUwMDI2IFVTQlxuICA0MDpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICA0MTpcdFx0aGVscFxuICA0MjpcdFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gTWFydmVsbFxuICA0MzpcdFx0ICA4Nzk3Lzg5OTcgY2hpcHNldCB3aXRoIFVTQiBpbnRlcmZhY2UuXG4gIDQ0Olx0XG4gIDQ1Olx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXG4gIDQ2Olx0XHQgIG13aWZpZXhfdXNiLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTEwMgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDQ3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogTVdJRklFWCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7dmUgemVyb2VkIGluIG9uIHRoZSBgTVdJRklFWGAgYW5kIGBNV0lGSUVYX1VTQmAgbW9kdWxlcy4gVGhleSYjMzk7cmUgY2xlYXJseSB0aGUga2V5IHBsYXllcnMgaGVyZSwgcmVseWluZyBvbiBgQ0ZHODAyMTFgIGFuZCB0aGUgYFVTQmAgc3Vic3lzdGVtLCB3aGljaCBhcmUgdXN1YWxseSBiYWtlZCBpbnRvIFN5emthbGxlciBjb25maWd1cmF0aW9ucywgbWFraW5nIHRoZW0gcHJldHR5IGFjY2Vzc2libGUgdGFyZ2V0cy4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBzdHJhdGVneS4gVGhpcyBpcyB3aGF0JiMzOTtzIGxvb2tpbmcgcHJvbWlzaW5nOgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFllcywgYWJzb2x1dGVseS4gVGhpcyBpcyBwcm9taXNpbmcuCiogICAqKkZvY3VzIFN5bWJvbHM6KiogV2UgaGF2ZSBhIHNvbGlkIGxpc3Qgb2YgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGVzZSBpbiBtb3JlIGRldGFpbCwgYnV0IHRoZSBpbml0aWFsIGltcHJlc3Npb25zIGFyZSBnb29kLiBUaGV5JiMzOTtyZSByZWxhdGVkIHRvIHBhcnNpbmcgV2ktRmkgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcyksIGhhbmRsaW5nIHNjYW4gcmVzdWx0cywgYW5kIG1hbmFnaW5nIG5ldHdvcmsgY29tcGF0aWJpbGl0eSwgYWxsIG9mIHdoaWNoIGFyZSBjb21tb24gZnV6emluZyB0YXJnZXRzOgogICAgKiAgIGBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVgCiAgICAqICAgYG13aWZpZXhfaXNfcnNuX291aV9wcmVzZW50YAogICAgKiAgIGBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudGAKICAgICogICBgbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVgCiAgICAqICAgYG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5YAogICAgKiAgIGBtd2lmaWV4X3VwZGF0ZV9jdXJyX2Jzc19wYXJhbXNgCiAgICAqICAgYG13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1ZmAKICAgICogICBgbXdpZmlleF9yZXRfODAyXzExX3NjYW5gCiAgICAqICAgYG13aWZpZXhfaGFuZGxlX2V2ZW50X2V4dF9zY2FuX3JlcG9ydGAKICAgICogICBgbXdpZmlleF9ic3Nfc3RhcnRgCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogVGhlIGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCBjb25maWd1cmF0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQuCiogICAqKlJlYXNvbmluZzoqKiBUaGUgaW5pdGlhbCBtb3RpdmF0aW9uIHN0ZW1zIGZyb20gYSBwYXRjaCB0aGF0IGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5IGluIGBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVgIHdoZW4gZGVhbGluZyB3aXRoIFdpLUZpIElFcy4gQmVjYXVzZSB0aGUgZHJpdmVyIG9wZXJhdGVzIG92ZXIgVVNCLCB0aGlzIHN1Z2dlc3RzIHRoZSBmaXJtd2FyZSByZXNwb25zZXMgY2FuIGJlIGZ1enplZCB2aWEgdGhlIFVTQiBzdWJzeXN0ZW0uIFRoYXQmIzM5O3MgYSBnb29kIGF0dGFjayBzdXJmYWNlLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBjYWxsIGdyYXBocyB0byBlbnN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJJiMzOTt2ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGF0IGBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVgIGlzIG9ubHkgY2FsbGVkIGJ5IGBtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudGAgYW5kIGBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudGAuIGBtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudGAgZ2V0cyBjYWxsZWQgYnkgYG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlYCwgc28gd2UgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhpcyBhcmVhLiBXZSBuZWVkIHRvIGNoZWNrIGlmIGBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudGAgaXMgY2FsbGVkIGVsc2V3aGVyZS4gVGhhdCBoZWxwcyB1cyBzb2xpZGlmeSB0aGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXR0YWNrIHN1cmZhY2UsIGJ5IG1hcHBpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IHVsdGltYXRlbHkgY2FsbCB0aGUgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0xNzY9c3RhdGljIHU4XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjE3Nzptd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudChzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYywgdTMyIGNpcGhlcilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTc4LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTM0ND1td2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMzg5LVx0XHRcdCAgICAgYnNzX2Rlc2MtXHUwMDNlYmNuX2h0X2NhcCkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjM5MDpcdFx0XHQgICAgIW13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50KGJzc19kZXNjLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0zOTEtXHRcdFx0XHRcdFx0XHQgQ0lQSEVSX1NVSVRFX0NDTVApKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTM5Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM6MzkzOlx0XHRcdFx0aWYgKG13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTM5NC1cdFx0XHRcdFx0XHQoYnNzX2Rlc2MsIENJUEhFUl9TVUlURV9US0lQKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjYwOQoJCQkJCQkJb3V0cHV0OiAyNTUKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgZXhwcmVzc2VkIGFzIHRob3VnaCBJJiMzOTttIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkFuYWx5c2lzIENvbXBsZXRlOiBGb2N1cyBvbiBDb21wYXRpYmlsaXR5IENoZWNrKioKCkFscmlnaHQsIHRoYXQgd2FzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhbmFseXNpcy4gSSYjMzk7dmUgZHJpbGxlZCBkb3duLCBhbmQgaXQmIzM5O3MgY2xlYXIgdGhlIHJlbGV2YW50IGlzc3VlIHJlc2lkZXMgKmV4Y2x1c2l2ZWx5KiB3aXRoaW4gYG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlYC4gTm90aGluZyBlbHNlIHNlZW1zIHRvIGZhY3RvciBpbnRvIHRoaXMuIE15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiBpcyBzb2xpZCwgYW5kIEkmIzM5O20gY29uZmlkZW50IGluIG15IGNvbmNsdXNpb25zLiBJJiMzOTt2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbi4gVGltZSB0byBtb3ZlIGZvcndhcmQg4oCTIEkmIzM5O2xsIGluaXRpYXRlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuIExldCYjMzk7cyBnZXQgdGhlc2UgZmluZGluZ3MgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDAwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNV0lGSUVYJiMzNDssCiAgICAmIzM0O01XSUZJRVhfVVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXdpZmlleF9zZWFyY2hfb3VpX2luX2llJiMzNDssCiAgICAmIzM0O213aWZpZXhfaXNfcnNuX291aV9wcmVzZW50JiMzNDssCiAgICAmIzM0O213aWZpZXhfaXNfd3BhX291aV9wcmVzZW50JiMzNDssCiAgICAmIzM0O213aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlJiMzNDssCiAgICAmIzM0O213aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5JiMzNDssCiAgICAmIzM0O213aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtcyYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3BhcnNlX3NpbmdsZV9yZXNwb25zZV9idWYmIzM0OywKICAgICYjMzQ7bXdpZmlleF9yZXRfODAyXzExX3NjYW4mIzM0OywKICAgICYjMzQ7bXdpZmlleF9oYW5kbGVfZXZlbnRfZXh0X3NjYW5fcmVwb3J0JiMzNDssCiAgICAmIzM0O213aWZpZXhfYnNzX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYCB3aGVuIHBhcnNpbmcgV2ktRmkgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gdGhlIGRyaXZlciBwcm9jZXNzZXMgc2NhbiByZXN1bHRzIG9yIGV2ZW50cyBmcm9tIHRoZSBmaXJtd2FyZS4gU2luY2UgdGhlIG13aWZpZXggZHJpdmVyIHN1cHBvcnRzIFVTQiwgdGhlIGZpcm13YXJlIHJlc3BvbnNlcyBjYW4gYmUgZnV6emVkIHZpYSB0aGUgVVNCIHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVdJRklFWCYjMzQ7LAogICAgJiMzNDtNV0lGSUVYX1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O213aWZpZXhfc2VhcmNoX291aV9pbl9pZSYjMzQ7LAogICAgJiMzNDttd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudCYjMzQ7LAogICAgJiMzNDttd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudCYjMzQ7LAogICAgJiMzNDttd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZSYjMzQ7LAogICAgJiMzNDttd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eSYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3VwZGF0ZV9jdXJyX2Jzc19wYXJhbXMmIzM0OywKICAgICYjMzQ7bXdpZmlleF9wYXJzZV9zaW5nbGVfcmVzcG9uc2VfYnVmJiMzNDssCiAgICAmIzM0O213aWZpZXhfcmV0XzgwMl8xMV9zY2FuJiMzNDssCiAgICAmIzM0O213aWZpZXhfaGFuZGxlX2V2ZW50X2V4dF9zY2FuX3JlcG9ydCYjMzQ7LAogICAgJiMzNDttd2lmaWV4X2Jzc19zdGFydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYG13aWZpZXhfc2VhcmNoX291aV9pbl9pZWAgd2hlbiBwYXJzaW5nIFdpLUZpIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB3aGVuIHRoZSBkcml2ZXIgcHJvY2Vzc2VzIHNjYW4gcmVzdWx0cyBvciBldmVudHMgZnJvbSB0aGUgZmlybXdhcmUuIFNpbmNlIHRoZSBtd2lmaWV4IGRyaXZlciBzdXBwb3J0cyBVU0IsIHRoZSBmaXJtd2FyZSByZXNwb25zZXMgY2FuIGJlIGZ1enplZCB2aWEgdGhlIFVTQiBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozMzoxOS41MzczMzE1MzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM4NjkxNzk0MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVdJRklFWFwiLFxuICAgIFwiTVdJRklFWF9VU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVcIixcbiAgICBcIm13aWZpZXhfaXNfcnNuX291aV9wcmVzZW50XCIsXG4gICAgXCJtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudFwiLFxuICAgIFwibXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVcIixcbiAgICBcIm13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5XCIsXG4gICAgXCJtd2lmaWV4X3VwZGF0ZV9jdXJyX2Jzc19wYXJhbXNcIixcbiAgICBcIm13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1ZlwiLFxuICAgIFwibXdpZmlleF9yZXRfODAyXzExX3NjYW5cIixcbiAgICBcIm13aWZpZXhfaGFuZGxlX2V2ZW50X2V4dF9zY2FuX3JlcG9ydFwiLFxuICAgIFwibXdpZmlleF9ic3Nfc3RhcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYG13aWZpZXhfc2VhcmNoX291aV9pbl9pZWAgd2hlbiBwYXJzaW5nIFdpLUZpIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB3aGVuIHRoZSBkcml2ZXIgcHJvY2Vzc2VzIHNjYW4gcmVzdWx0cyBvciBldmVudHMgZnJvbSB0aGUgZmlybXdhcmUuIFNpbmNlIHRoZSBtd2lmaWV4IGRyaXZlciBzdXBwb3J0cyBVU0IsIHRoZSBmaXJtd2FyZSByZXNwb25zZXMgY2FuIGJlIGZ1enplZCB2aWEgdGhlIFVTQiBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjMzOjE5LjUzNzMzNzAyMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NTYzOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmM1NWVjYWZhNmY0YTBiMmMyYWFhMWEwMzc5MDIyNmE2NmUwODExYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAxMiAwMDozMzoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uY1xcbmluZGV4IDk3YzBlYzNiODIyZTcwLi4zYTU1ZmM2ZjFiNTQ4ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uY1xcbkBAIC0xMDQsMTIgKzEwNCwyMSBAQCBoYXNfdmVuZG9yX2hkcihzdHJ1Y3QgaWVlZV90eXBlc192ZW5kb3Jfc3BlY2lmaWMgKmllLCB1OCBrZXkpXFxuICAqIGEgZ2l2ZW4gb3VpIGluIFBUSy5cXG4gICovXFxuIHN0YXRpYyB1OFxcbi1td2lmaWV4X3NlYXJjaF9vdWlfaW5faWUoc3RydWN0IGllX2JvZHkgKmllYm9keSwgdTggKm91aSlcXG4rbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKHN0cnVjdCBpZV9ib2R5ICppZWJvZHksIHU4ICpvdWksIGludCBpZV9sZW4pXFxuIHtcXG4gXFx0dTggY291bnQ7XFxuIFxcbitcXHQvKiBOZWVkIGdycF9rZXlfb3VpWzRdICsgcHRrX2NudFsyXSBiZWZvcmUgcmVhZGluZyB0aGUgT1VJIGNvdW50LiAqL1xcbitcXHRpZiAoaWVfbGVuIFxcdTAwM2MgKGludClvZmZzZXRvZihzdHJ1Y3QgaWVfYm9keSwgcHRrX2JvZHkpKVxcbitcXHRcXHRyZXR1cm4gTVdJRklFWF9PVUlfTk9UX1BSRVNFTlQ7XFxuK1xcbiBcXHRjb3VudCA9IGllYm9keS1cXHUwMDNlcHRrX2NudFswXTtcXG4gXFxuK1xcdC8qIFJlamVjdCBhbiBPVUkgY291bnQgd2hvc2UgbGlzdCB3b3VsZCBydW4gcGFzdCB0aGUgZWxlbWVudC4gKi9cXG4rXFx0aWYgKG9mZnNldG9mKHN0cnVjdCBpZV9ib2R5LCBwdGtfYm9keSkgK1xcbitcXHQgICAgY291bnQgKiBzaXplb2YoaWVib2R5LVxcdTAwM2VwdGtfYm9keSkgXFx1MDAzZSAoc2l6ZV90KWllX2xlbilcXG4rXFx0XFx0cmV0dXJuIE1XSUZJRVhfT1VJX05PVF9QUkVTRU5UO1xcbitcXG4gXFx0LyogVGhlcmUgY291bGQgYmUgbXVsdGlwbGUgT1VJcyBmb3IgUFRLIGhlbmNlXFxuIFxcdCAgIDEpIFRha2UgdGhlIGxlbmd0aC5cXG4gXFx0ICAgMikgQ2hlY2sgYWxsIHRoZSBPVUlzIGZvciBBRVMuXFxuQEAgLTE0MywxMSArMTUyLDE0IEBAIG13aWZpZXhfaXNfcnNuX291aV9wcmVzZW50KHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLCB1MzIgY2lwaGVyKVxcbiBcXHR1OCByZXQgPSBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVDtcXG4gXFxuIFxcdGlmIChoYXNfaWVlZV9oZHIoYnNzX2Rlc2MtXFx1MDAzZWJjbl9yc25faWUsIFdMQU5fRUlEX1JTTikpIHtcXG4rXFx0XFx0aW50IGllX2xlbiA9IChpbnQpYnNzX2Rlc2MtXFx1MDAzZWJjbl9yc25faWUtXFx1MDAzZWllZWVfaGRyLmxlbiAtXFxuK1xcdFxcdFxcdCAgICAgUlNOX0dUS19PVUlfT0ZGU0VUO1xcbitcXG4gXFx0XFx0aWVib2R5ID0gKHN0cnVjdCBpZV9ib2R5ICopXFxuIFxcdFxcdFxcdCAoKCh1OCAqKSBic3NfZGVzYy1cXHUwMDNlYmNuX3Jzbl9pZS1cXHUwMDNlZGF0YSkgK1xcbiBcXHRcXHRcXHQgIFJTTl9HVEtfT1VJX09GRlNFVCk7XFxuIFxcdFxcdG91aSA9IFxcdTAwMjZtd2lmaWV4X3Jzbl9vdWlbY2lwaGVyXVswXTtcXG4tXFx0XFx0cmV0ID0gbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKGllYm9keSwgb3VpKTtcXG4rXFx0XFx0cmV0ID0gbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKGllYm9keSwgb3VpLCBpZV9sZW4pO1xcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuQEAgLTE2OSwxMCArMTgxLDE0IEBAIG13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50KHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLCB1MzIgY2lwaGVyKVxcbiBcXHR1OCByZXQgPSBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVDtcXG4gXFxuIFxcdGlmIChoYXNfdmVuZG9yX2hkcihic3NfZGVzYy1cXHUwMDNlYmNuX3dwYV9pZSwgV0xBTl9FSURfVkVORE9SX1NQRUNJRklDKSkge1xcbitcXHRcXHRpbnQgaWVfbGVuID0gKGludClic3NfZGVzYy1cXHUwMDNlYmNuX3dwYV9pZS1cXHUwMDNldmVuZF9oZHIubGVuIC1cXG4rXFx0XFx0XFx0ICAgICAoaW50KXNpemVvZihic3NfZGVzYy1cXHUwMDNlYmNuX3dwYV9pZS1cXHUwMDNldmVuZF9oZHIub3VpKSAtXFxuK1xcdFxcdFxcdCAgICAgV1BBX0dUS19PVUlfT0ZGU0VUO1xcbitcXG4gXFx0XFx0aWVib2R5ID0gKHN0cnVjdCBpZV9ib2R5ICopKCh1OCAqKWJzc19kZXNjLVxcdTAwM2ViY25fd3BhX2llLVxcdTAwM2VkYXRhICtcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFdQQV9HVEtfT1VJX09GRlNFVCk7XFxuIFxcdFxcdG91aSA9IFxcdTAwMjZtd2lmaWV4X3dwYV9vdWlbY2lwaGVyXVswXTtcXG4tXFx0XFx0cmV0ID0gbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKGllYm9keSwgb3VpKTtcXG4rXFx0XFx0cmV0ID0gbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKGllYm9keSwgb3VpLCBpZV9sZW4pO1xcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjMzOjE5Ljk5NDYwMTExMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzNDExOTAwMjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1XSUZJRVhcIixcbiAgICBcIk1XSUZJRVhfVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXdpZmlleF9zZWFyY2hfb3VpX2luX2llXCIsXG4gICAgXCJtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudFwiLFxuICAgIFwibXdpZmlleF9pc193cGFfb3VpX3ByZXNlbnRcIixcbiAgICBcIm13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlXCIsXG4gICAgXCJtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eVwiLFxuICAgIFwibXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zXCIsXG4gICAgXCJtd2lmaWV4X3BhcnNlX3NpbmdsZV9yZXNwb25zZV9idWZcIixcbiAgICBcIm13aWZpZXhfcmV0XzgwMl8xMV9zY2FuXCIsXG4gICAgXCJtd2lmaWV4X2hhbmRsZV9ldmVudF9leHRfc2Nhbl9yZXBvcnRcIixcbiAgICBcIm13aWZpZXhfYnNzX3N0YXJ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGluIGBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVgIHdoZW4gcGFyc2luZyBXaS1GaSBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUVzKS4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgd2hlbiB0aGUgZHJpdmVyIHByb2Nlc3NlcyBzY2FuIHJlc3VsdHMgb3IgZXZlbnRzIGZyb20gdGhlIGZpcm13YXJlLiBTaW5jZSB0aGUgbXdpZmlleCBkcml2ZXIgc3VwcG9ydHMgVVNCLCB0aGUgZmlybXdhcmUgcmVzcG9uc2VzIGNhbiBiZSBmdXp6ZWQgdmlhIHRoZSBVU0Igc3Vic3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJjNTVlY2FmYTZmNGEwYjJjMmFhYTFhMDM3OTAyMjZhNjZlMDgxMWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxMiAwMDozMzoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jXG5pbmRleCA5N2MwZWMzYjgyMmU3MC4uM2E1NWZjNmYxYjU0OGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jXG5AQCAtMTA0LDEyICsxMDQsMjEgQEAgaGFzX3ZlbmRvcl9oZHIoc3RydWN0IGllZWVfdHlwZXNfdmVuZG9yX3NwZWNpZmljICppZSwgdTgga2V5KVxuICAqIGEgZ2l2ZW4gb3VpIGluIFBUSy5cbiAgKi9cbiBzdGF0aWMgdThcbi1td2lmaWV4X3NlYXJjaF9vdWlfaW5faWUoc3RydWN0IGllX2JvZHkgKmllYm9keSwgdTggKm91aSlcbittd2lmaWV4X3NlYXJjaF9vdWlfaW5faWUoc3RydWN0IGllX2JvZHkgKmllYm9keSwgdTggKm91aSwgaW50IGllX2xlbilcbiB7XG4gXHR1OCBjb3VudDtcbiBcbitcdC8qIE5lZWQgZ3JwX2tleV9vdWlbNF0gKyBwdGtfY250WzJdIGJlZm9yZSByZWFkaW5nIHRoZSBPVUkgY291bnQuICovXG4rXHRpZiAoaWVfbGVuIFx1MDAzYyAoaW50KW9mZnNldG9mKHN0cnVjdCBpZV9ib2R5LCBwdGtfYm9keSkpXG4rXHRcdHJldHVybiBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVDtcbitcbiBcdGNvdW50ID0gaWVib2R5LVx1MDAzZXB0a19jbnRbMF07XG4gXG4rXHQvKiBSZWplY3QgYW4gT1VJIGNvdW50IHdob3NlIGxpc3Qgd291bGQgcnVuIHBhc3QgdGhlIGVsZW1lbnQuICovXG4rXHRpZiAob2Zmc2V0b2Yoc3RydWN0IGllX2JvZHksIHB0a19ib2R5KSArXG4rXHQgICAgY291bnQgKiBzaXplb2YoaWVib2R5LVx1MDAzZXB0a19ib2R5KSBcdTAwM2UgKHNpemVfdClpZV9sZW4pXG4rXHRcdHJldHVybiBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVDtcbitcbiBcdC8qIFRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIE9VSXMgZm9yIFBUSyBoZW5jZVxuIFx0ICAgMSkgVGFrZSB0aGUgbGVuZ3RoLlxuIFx0ICAgMikgQ2hlY2sgYWxsIHRoZSBPVUlzIGZvciBBRVMuXG5AQCAtMTQzLDExICsxNTIsMTQgQEAgbXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnQoc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MsIHUzMiBjaXBoZXIpXG4gXHR1OCByZXQgPSBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVDtcbiBcbiBcdGlmIChoYXNfaWVlZV9oZHIoYnNzX2Rlc2MtXHUwMDNlYmNuX3Jzbl9pZSwgV0xBTl9FSURfUlNOKSkge1xuK1x0XHRpbnQgaWVfbGVuID0gKGludClic3NfZGVzYy1cdTAwM2ViY25fcnNuX2llLVx1MDAzZWllZWVfaGRyLmxlbiAtXG4rXHRcdFx0ICAgICBSU05fR1RLX09VSV9PRkZTRVQ7XG4rXG4gXHRcdGllYm9keSA9IChzdHJ1Y3QgaWVfYm9keSAqKVxuIFx0XHRcdCAoKCh1OCAqKSBic3NfZGVzYy1cdTAwM2ViY25fcnNuX2llLVx1MDAzZWRhdGEpICtcbiBcdFx0XHQgIFJTTl9HVEtfT1VJX09GRlNFVCk7XG4gXHRcdG91aSA9IFx1MDAyNm13aWZpZXhfcnNuX291aVtjaXBoZXJdWzBdO1xuLVx0XHRyZXQgPSBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWUoaWVib2R5LCBvdWkpO1xuK1x0XHRyZXQgPSBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWUoaWVib2R5LCBvdWksIGllX2xlbik7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbkBAIC0xNjksMTAgKzE4MSwxNCBAQCBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudChzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYywgdTMyIGNpcGhlcilcbiBcdHU4IHJldCA9IE1XSUZJRVhfT1VJX05PVF9QUkVTRU5UO1xuIFxuIFx0aWYgKGhhc192ZW5kb3JfaGRyKGJzc19kZXNjLVx1MDAzZWJjbl93cGFfaWUsIFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQykpIHtcbitcdFx0aW50IGllX2xlbiA9IChpbnQpYnNzX2Rlc2MtXHUwMDNlYmNuX3dwYV9pZS1cdTAwM2V2ZW5kX2hkci5sZW4gLVxuK1x0XHRcdCAgICAgKGludClzaXplb2YoYnNzX2Rlc2MtXHUwMDNlYmNuX3dwYV9pZS1cdTAwM2V2ZW5kX2hkci5vdWkpIC1cbitcdFx0XHQgICAgIFdQQV9HVEtfT1VJX09GRlNFVDtcbitcbiBcdFx0aWVib2R5ID0gKHN0cnVjdCBpZV9ib2R5ICopKCh1OCAqKWJzc19kZXNjLVx1MDAzZWJjbl93cGFfaWUtXHUwMDNlZGF0YSArXG4gXHRcdFx0XHRcdCAgICBXUEFfR1RLX09VSV9PRkZTRVQpO1xuIFx0XHRvdWkgPSBcdTAwMjZtd2lmaWV4X3dwYV9vdWlbY2lwaGVyXVswXTtcbi1cdFx0cmV0ID0gbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKGllYm9keSwgb3VpKTtcbitcdFx0cmV0ID0gbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKGllYm9keSwgb3VpLCBpZV9sZW4pO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozMzoxOS45OTQ2MDI2NzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTE0OTg5NjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFdpLUZpIERyaXZlciBQYXRjaDogU2VjdXJpdHkgYW5kIEZ1enppbmcgQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uY2AuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZpeCDigJMgYWRkaW5nIGJvdW5kcyBjaGVja2luZyB0byBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYC4gU2VlbXMgbGlrZSBhIHN0YW5kYXJkIGRlZmVuc2UgYWdhaW5zdCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcGFyc2luZyBJbmZvcm1hdGlvbiBFbGVtZW50cyBmcm9tIFdpLUZpIGJlYWNvbnMgb3IgcHJvYmUgcmVzcG9uc2VzLiBHb29kLCBwcm9hY3RpdmUgc2VjdXJpdHkgaXMgYWx3YXlzIGFwcHJlY2lhdGVkLiBJdCdzIGZ1bmN0aW9uYWwgY29kZSB3aXRoaW4gYSB3aXJlbGVzcyBkcml2ZXIsIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBzdGFydCB0byBnZXQgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHdlIGZ1enogdGhpcz8gV2l0aCBXaS1GaSBkcml2ZXJzLCBtYWM4MDIxMV9od3NpbSBpcyBvZnRlbiB0aGUgZ28tdG8uIEJ1dCwgdGhpcyBpcyAqbXdpZmlleCosIGEgc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyLiBTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGNhbiB3ZSBmdXp6ICptd2lmaWV4KiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGF0J3MgdGhlIHJlYWwgY2hhbGxlbmdlIHdpdGggaGFyZHdhcmUgZHJpdmVycywgcmlnaHQ/IFRoZXkncmUgb2Z0ZW4gdGllZCB0byBzcGVjaWZpYyBoYXJkd2FyZS4gSXQncyBub3QgYWx3YXlzIGVhc3kgdW5sZXNzIHRoZXJlIGlzIHNwZWNpZmljIGVtdWxhdGlvbiBmb3IgdGhlIGhhcmR3YXJlIG9yIGl04oCZcyBhIFVTQiwgU0RJTywgb3IgUENJZSBkZXZpY2UsIHdoZXJlIHdlIGNhbiBwb3RlbnRpYWxseSBmdXp6IHRoZSBidXMuXG5cbkhtbSwgZG9lcyBtd2lmaWV4ICpoYXZlKiBVU0Igc3VwcG9ydD8gVGhhdCBtaWdodCBvcGVuIHVwIHNvbWUgZnV6emluZyBwb3NzaWJpbGl0aWVzLiBMZXQgbWUgY2hlY2suLi4gWWVwLCB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuY2AgZmlsZSBleGlzdHMuIE9rYXksIHRoaXMgaXMgZ29vZC4gVGltZSB0byBkaWcgYSBiaXQgZGVlcGVyIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZG8gd2l0aCB0aGlzIGRyaXZlciBhbmQgaXRzIFVTQiBpbnRlcmZhY2UuIE1heWJlIHdlJ3JlIG9udG8gc29tZXRoaW5nIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozMzoyNC45MDk1OTQ5ODRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMxNTA5NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE4NTI4IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jPTQyPXN0YXRpYyB1MTZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjQzOm13aWZpZXhfY29udmVydF9tY3NtYXBfdG9fbWF4cmF0ZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtNDQtXFx0XFx0XFx0XFx0ICB1OCBiYW5kcywgdTE2IG1jc19tYXApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTQ4LVxcdHUzMiB1c3Jfdmh0X2NhcF9pbmZvID0gMDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjQ5OlxcdHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LVxcdTAwM2VhZGFwdGVyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtNTAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jPTg1PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzo4Njptd2lmaWV4X2ZpbGxfdmh0X2NhcF9pbmZvKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy04Ny1cXHRcXHRcXHQgIHN0cnVjdCBpZWVlODAyMTFfdmh0X2NhcCAqdmh0X2NhcCwgdTggYmFuZHMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy04OC17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzo4OTpcXHRzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi1cXHUwMDNlYWRhcHRlcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTkwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy05OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjk5OnZvaWQgbXdpZmlleF9maWxsX3ZodF9jYXBfdGx2KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xMDAtXFx0XFx0XFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV92aHRfY2FwICp2aHRfY2FwLCB1OCBiYW5kcylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTEwMS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxMDI6XFx0c3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtXFx1MDAzZWFkYXB0ZXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xMDMtXFx0dTE2IG1jc19tYXBfdXNlciwgbWNzX21hcF9yZXNwLCBtY3NfbWFwX3Jlc3VsdDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTA2LVxcdC8qIEZpbGwgVkhUIGNhcCBpbmZvICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxMDc6XFx0bXdpZmlleF9maWxsX3ZodF9jYXBfaW5mbyhwcml2LCB2aHRfY2FwLCBiYW5kcyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xMDgtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTEyOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjEyOTpcXHR0bXAgPSBtd2lmaWV4X2NvbnZlcnRfbWNzbWFwX3RvX21heHJhdGUocHJpdiwgYmFuZHMsIG1jc19tYXBfcmVzdWx0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTEzMC1cXHR2aHRfY2FwLVxcdTAwM2VzdXBwX21jcy5yeF9oaWdoZXN0ID0gY3B1X3RvX2xlMTYodG1wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTUwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MTUxOlxcdHRtcCA9IG13aWZpZXhfY29udmVydF9tY3NtYXBfdG9fbWF4cmF0ZShwcml2LCBiYW5kcywgbWNzX21hcF9yZXN1bHQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTUyLVxcdHZodF9jYXAtXFx1MDAzZXN1cHBfbWNzLnR4X2hpZ2hlc3QgPSBjcHVfdG9fbGUxNih0bXApO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xNTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxNTc6aW50IG13aWZpZXhfY21kX2FwcGVuZF8xMWFjX3RsdihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MTU4OlxcdFxcdFxcdCAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xNTktXFx0XFx0XFx0ICAgICB1OCAqKmJ1ZmZlcilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE2MC17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxNjE6XFx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfdmh0Y2FwICp2aHRfY2FwO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MTYyOlxcdHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX29wZXJfbW9kZV9udGYgKm9wZXJfbnRmO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTYzLVxcdHN0cnVjdCBpZWVlX3R5cGVzX29wZXJfbW9kZV9udGYgKmllZWVfb3Blcl9udGY7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxNjQ6XFx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfdmh0X29wZXIgKnZodF9vcDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjE2NTpcXHRzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi1cXHUwMDNlYWRhcHRlcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE2Ni1cXHR1OCBzdXBwX2Nod2Rfc2V0O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xNzYtXFx0aWYgKGJzc19kZXNjLVxcdTAwM2ViY25fdmh0X2NhcCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MTc3OlxcdFxcdHZodF9jYXAgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfdmh0Y2FwICopKmJ1ZmZlcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE3OC1cXHRcXHRtZW1zZXQodmh0X2NhcCwgMCwgc2l6ZW9mKCp2aHRfY2FwKSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE4MS1cXHRcXHRcXHRcXHRjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGllZWU4MDIxMV92aHRfY2FwKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxODI6XFx0XFx0bWVtY3B5KCh1OCAqKXZodF9jYXAgKyBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE4My1cXHRcXHQgICAgICAgKHU4ICopYnNzX2Rlc2MtXFx1MDAzZWJjbl92aHRfY2FwLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xODUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoxODY6XFx0XFx0bXdpZmlleF9maWxsX3ZodF9jYXBfdGx2KHByaXYsIFxcdTAwMjZ2aHRfY2FwLVxcdTAwM2V2aHRfY2FwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTg3LVxcdFxcdFxcdFxcdFxcdCBic3NfZGVzYy1cXHUwMDNlYnNzX2JhbmQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0xOTQtXFx0XFx0aWYgKHByaXYtXFx1MDAzZWJzc19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjE5NTpcXHRcXHRcXHR2aHRfb3AgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfdmh0X29wZXIgKikqYnVmZmVyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMTk2LVxcdFxcdFxcdG1lbXNldCh2aHRfb3AsIDAsIHNpemVvZigqdmh0X29wKSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTE5OS1cXHRcXHRcXHR2aHRfb3AtXFx1MDAzZWhlYWRlci5sZW4gID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCp2aHRfb3ApIC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjIwMDpcXHRcXHRcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0yMDEtXFx0XFx0XFx0bWVtY3B5KCh1OCAqKXZodF9vcCArXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoyMDI6XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0yMDMtXFx0XFx0XFx0ICAgICAgICh1OCAqKWJzc19kZXNjLVxcdTAwM2ViY25fdmh0X29wZXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTI1Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjI1MzppbnQgbXdpZmlleF9jbWRfMTFhY19jZmcoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTI1NC1cXHRcXHRcXHQgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwgdTE2IGNtZF9hY3Rpb24sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoyNTU6XFx0XFx0XFx0IHN0cnVjdCBtd2lmaWV4XzExYWNfdmh0X2NmZyAqY2ZnKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMjU2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMjcyLS8qIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIEJsb2NrQUNLIHNldHVwIGluZm9ybWF0aW9uIGZvciBnaXZlblxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MjczOiAqIG13aWZpZXhfcHJpdmF0ZSBzdHJ1Y3R1cmUgZm9yIDExYWMgZW5hYmxlZCBuZXR3b3Jrcy5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTI3NC0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jOjI3NTp2b2lkIG13aWZpZXhfc2V0XzExYWNfYmFfcGFyYW1zKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0yNzYte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0yOTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoyOTQ6Ym9vbCBtd2lmaWV4X2lzX2Jzc19pbl8xMWFjX21vZGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5jLTI5NS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYzoyOTY6XFx0c3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2M7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0yOTctXFx0c3RydWN0IGllZWU4MDIxMV92aHRfb3BlcmF0aW9uICp2aHRfb3BlcjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmMtMzEwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmM6MzExOnU4IG13aWZpZXhfZ2V0X2NlbnRlcl9mcmVxX2luZGV4KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4IGJhbmQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuYy0zMTItXFx0XFx0XFx0XFx0IHUzMiBwcmlfY2hhbiwgdTggY2hhbl9idylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmg9MTQ9ZW51bSB2aHRfY2ZnX21pc2NfY29uZmlnIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmgtMjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuaDoyNTppbnQgbXdpZmlleF9jbWRfYXBwZW5kXzExYWNfdGx2KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuaDoyNjpcXHRcXHRcXHRcXHRzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5oLTI3LVxcdFxcdFxcdFxcdHU4ICoqYnVmZmVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5oOjI4OmludCBtd2lmaWV4X2NtZF8xMWFjX2NmZyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmgtMjktXFx0XFx0XFx0IHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsIHUxNiBjbWRfYWN0aW9uLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWFjLmg6MzA6XFx0XFx0XFx0IHN0cnVjdCBtd2lmaWV4XzExYWNfdmh0X2NmZyAqY2ZnKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFhYy5oOjMxOnZvaWQgbXdpZmlleF9maWxsX3ZodF9jYXBfdGx2KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExYWMuaC0zMi1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZodF9jYXAgKnZodF9jYXAsIHU4IGJhbmRzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTI6dm9pZCBtd2lmaWV4X2luaXRfMTFoX3BhcmFtcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xMy17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjE4OmlubGluZSBpbnQgbXdpZmlleF9pc18xMWhfYWN0aXZlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYz0yNT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyNjptd2lmaWV4XzExaF9wcm9jZXNzX2luZnJhX2pvaW4oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKipidWZmZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjI3OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjgte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyOTpcXHRzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgKmllX2hlYWRlcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MzA6XFx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfcHdyX2NhcGFiaWxpdHkgKmNhcDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MzE6XFx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfbG9jYWxfcHdyX2NvbnN0cmFpbnQgKmNvbnN0cmFpbnQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTMyLVxcdHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzozOTpcXHRyYWRpb190eXBlID0gbXdpZmlleF9iYW5kX3RvX3JhZGlvX3R5cGUoKHU4KSBic3NfZGVzYy1cXHUwMDNlYnNzX2JhbmQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy00MC1cXHRzYmFuZCA9IHByaXYtXFx1MDAzZXdkZXYud2lwaHktXFx1MDAzZWJhbmRzW3JhZGlvX3R5cGVdO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy00MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6NDI6XFx0Y2FwID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3B3cl9jYXBhYmlsaXR5ICopKmJ1ZmZlcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtNDMtXFx0Y2FwLVxcdTAwM2VoZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFdMQU5fRUlEX1BXUl9DQVBBQklMSVRZKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy00OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6NDk6XFx0Y29uc3RyYWludCA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19sb2NhbF9wd3JfY29uc3RyYWludCAqKSpidWZmZXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTUwLVxcdGNvbnN0cmFpbnQtXFx1MDAzZWhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoV0xBTl9FSURfUFdSX0NPTlNUUkFJTlQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTU1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzo1NjpcXHRpZV9oZWFkZXIgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyICopKmJ1ZmZlcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtNTctXFx0aWVfaGVhZGVyLVxcdTAwM2V0eXBlID0gY3B1X3RvX2xlMTYoVExWX1RZUEVfUEFTU1RIUk9VR0gpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTY5LS8qIEVuYWJsZSBvciBkaXNhYmxlIHRoZSAxMWggZXh0ZW5zaW9ucyBpbiB0aGUgZmlybXdhcmUgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6NzA6aW50IG13aWZpZXhfMTFoX2FjdGl2YXRlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGJvb2wgZmxhZylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtNzEte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTc3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzo3ODpcXHRyZXR1cm4gbXdpZmlleF9zZW5kX2NtZChwcml2LCBIb3N0Q21kX0NNRF84MDJfMTFfU05NUF9NSUIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTc5LVxcdFxcdFxcdFxcdEhvc3RDbWRfQUNUX0dFTl9TRVQsIERPVDExSF9JLCBcXHUwMDI2ZW5hYmxlLCB0cnVlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy04Ny0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6ODg6dm9pZCBtd2lmaWV4XzExaF9wcm9jZXNzX2pvaW4oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKipidWZmZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjg5OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy05MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtOTQtXFx0XFx0ICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjk1OlxcdFxcdG13aWZpZXhfMTFoX2FjdGl2YXRlKHByaXYsIHRydWUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy05Ni1cXHRcXHRwcml2LVxcdTAwM2VzdGF0ZV8xMWguaXNfMTFoX2FjdGl2ZSA9IHRydWU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTk3LVxcdFxcdGJzc19kZXNjLVxcdTAwM2VjYXBfaW5mb19iaXRtYXAgfD0gV0xBTl9DQVBBQklMSVRZX1NQRUNUUlVNX01HTVQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjk4OlxcdFxcdG13aWZpZXhfMTFoX3Byb2Nlc3NfaW5mcmFfam9pbihwcml2LCBidWZmZXIsIGJzc19kZXNjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtOTktXFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTAwLVxcdFxcdC8qIERlYWN0aXZhdGUgMTFoIGZ1bmN0aW9ucyBpbiB0aGUgZmlybXdhcmUgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTAxOlxcdFxcdG13aWZpZXhfMTFoX2FjdGl2YXRlKHByaXYsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTAyLVxcdFxcdHByaXYtXFx1MDAzZXN0YXRlXzExaC5pc18xMWhfYWN0aXZlID0gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTEwLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxMTE6dm9pZCBtd2lmaWV4X2Rmc19jYWNfd29ya19xdWV1ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTExMi17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTE0LVxcdHN0cnVjdCBkZWxheWVkX3dvcmsgKmRlbGF5ZWRfd29yayA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTE1OlxcdHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxMTY6XFx0XFx0XFx0Y29udGFpbmVyX29mKGRlbGF5ZWRfd29yaywgc3RydWN0IG13aWZpZXhfcHJpdmF0ZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTE3LVxcdFxcdFxcdFxcdCAgICAgZGZzX2NhY193b3JrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xMjAtXFx0aWYgKHByaXYtXFx1MDAzZXdkZXYubGlua3NbMF0uY2FjX3N0YXJ0ZWQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTIxOlxcdFxcdG13aWZpZXhfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIE1TRyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTIyLVxcdFxcdFxcdCAgICBcXFwiQ0FDIHRpbWVyIGZpbmlzaGVkOyBObyByYWRhciBkZXRlY3RlZFxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTMxLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxMzI6aW50IG13aWZpZXhfY21kX2lzc3VlX2NoYW5fcmVwb3J0X3JlcXVlc3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTMzLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xMzYtXFx0c3RydWN0IGhvc3RfY21kX2RzX2NoYW5fcnB0X3JlcSAqY3JfcmVxID0gXFx1MDAyNmNtZC1cXHUwMDNlcGFyYW1zLmNoYW5fcnB0X3JlcTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTM3OlxcdHN0cnVjdCBtd2lmaWV4X3JhZGFyX3BhcmFtcyAqcmFkYXJfcGFyYW1zID0gKHZvaWQgKilkYXRhX2J1ZjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTM4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE0OS1cXHRpZiAocmFkYXJfcGFyYW1zLVxcdTAwM2VjYWNfdGltZV9tcylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTUwOlxcdFxcdG13aWZpZXhfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIE1TRyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTUxLVxcdFxcdFxcdCAgICBcXFwiMTFoOiBpc3N1aW5nIERGUyBSYWRhciBjaGVjayBmb3IgY2hhbm5lbD0lZFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xNTMtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxNTQ6XFx0XFx0bXdpZmlleF9kYmcocHJpdi1cXHUwMDNlYWRhcHRlciwgTVNHLCBcXFwiY2FuY2VsbGluZyBDQUNcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xNTUtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTU4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxNTk6aW50IG13aWZpZXhfc3RvcF9yYWRhcl9kZXRlY3Rpb24oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTYwLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE2MS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjE2MjpcXHRzdHJ1Y3QgbXdpZmlleF9yYWRhcl9wYXJhbXMgcmFkYXJfcGFyYW1zO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xNjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjE2NDpcXHRtZW1zZXQoXFx1MDAyNnJhZGFyX3BhcmFtcywgMCwgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3JhZGFyX3BhcmFtcykpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xNjUtXFx0cmFkYXJfcGFyYW1zLmNoYW5kZWYgPSBjaGFuZGVmO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE2Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTY4OlxcdHJldHVybiBtd2lmaWV4X3NlbmRfY21kKHByaXYsIEhvc3RDbWRfQ01EX0NIQU5fUkVQT1JUX1JFUVVFU1QsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE2OS1cXHRcXHRcXHRcXHRIb3N0Q21kX0FDVF9HRU5fU0VULCAwLCBcXHUwMDI2cmFkYXJfcGFyYW1zLCB0cnVlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xNzQtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjE3NTp2b2lkIG13aWZpZXhfYWJvcnRfY2FjKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE3Ni17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE3Ny1cXHRpZiAocHJpdi1cXHUwMDNld2Rldi5saW5rc1swXS5jYWNfc3RhcnRlZCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxNzg6XFx0XFx0aWYgKG13aWZpZXhfc3RvcF9yYWRhcl9kZXRlY3Rpb24ocHJpdiwgXFx1MDAyNnByaXYtXFx1MDAzZWRmc19jaGFuZGVmKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTc5OlxcdFxcdFxcdG13aWZpZXhfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIEVSUk9SLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xODAtXFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gc3RvcCBDQUMgaW4gRldcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoxODE6XFx0XFx0bXdpZmlleF9kYmcocHJpdi1cXHUwMDNlYWRhcHRlciwgTVNHLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xODItXFx0XFx0XFx0ICAgIFxcXCJBYm9ydGluZyBkZWxheWVkIHdvcmsgZm9yIENBQy5cXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE5My0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTk0OmludCBtd2lmaWV4XzExaF9oYW5kbGVfY2hhbnJwdF9yZWFkeShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0xOTUtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTE5Ny1cXHRzdHJ1Y3QgaG9zdF9jbWRfZHNfY2hhbl9ycHRfZXZlbnQgKnJwdF9ldmVudDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MTk4OlxcdHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2NoYW5fcnB0X2RhdGEgKnJwdDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMTk5LVxcdHUxNiBldmVudF9sZW4sIHRsdl9sZW47XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjA1LVxcdGlmIChsZTMyX3RvX2NwdShycHRfZXZlbnQtXFx1MDAzZXJlc3VsdCkgIT0gSG9zdENtZF9SRVNVTFRfT0spIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjA2OlxcdFxcdG13aWZpZXhfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIEVSUk9SLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yMDctXFx0XFx0XFx0ICAgIFxcXCJFcnJvciBpbiBjaGFubmVsIHJlcG9ydCBldmVudFxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjEwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyMTE6XFx0d2hpbGUgKGV2ZW50X2xlbiBcXHUwMDNlPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yMTItXFx0XFx0cnB0ID0gKHZvaWQgKilcXHUwMDI2cnB0X2V2ZW50LVxcdTAwM2V0bHZidWY7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjE3LVxcdFxcdFxcdGlmIChycHQtXFx1MDAzZW1hcC5yYWRhcikge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyMTg6XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcocHJpdi1cXHUwMDNlYWRhcHRlciwgTVNHLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yMTktXFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJSQURBUiBEZXRlY3RlZCBvbiBjaGFubmVsICVkIVxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yMzgtLyogSGFuZGxlciBmb3IgcmFkYXIgZGV0ZWN0ZWQgZXZlbnQgZnJvbSBGVy4qL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyMzk6aW50IG13aWZpZXhfMTFoX2hhbmRsZV9yYWRhcl9kZXRlY3RlZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNDAtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjQxLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjQyOlxcdHN0cnVjdCBtd2lmaWV4X3JhZGFyX2RldF9ldmVudCAqcmRyX2V2ZW50O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNDMtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjQ1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyNDY6XFx0bXdpZmlleF9kYmcocHJpdi1cXHUwMDNlYWRhcHRlciwgTVNHLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNDctXFx0XFx0ICAgIFxcXCJyYWRhciBkZXRlY3RlZDsgaW5kaWNhdGluZyBrZXJuZWxcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyNDg6XFx0aWYgKG13aWZpZXhfc3RvcF9yYWRhcl9kZXRlY3Rpb24ocHJpdiwgXFx1MDAyNnByaXYtXFx1MDAzZWRmc19jaGFuZGVmKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjQ5OlxcdFxcdG13aWZpZXhfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIEVSUk9SLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNTAtXFx0XFx0XFx0ICAgIFxcXCJGYWlsZWQgdG8gc3RvcCBDQUMgaW4gRldcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI1Mi1cXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyNTM6XFx0bXdpZmlleF9kYmcocHJpdi1cXHUwMDNlYWRhcHRlciwgTVNHLCBcXFwicmVnZG9tYWluOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjU0LVxcdFxcdCAgICByZHJfZXZlbnQtXFx1MDAzZXJlZ19kb21haW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYzoyNTU6XFx0bXdpZmlleF9kYmcocHJpdi1cXHUwMDNlYWRhcHRlciwgTVNHLCBcXFwicmFkYXIgZGV0ZWN0aW9uIHR5cGU6ICVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNTYtXFx0XFx0ICAgIHJkcl9ldmVudC1cXHUwMDNlZGV0X3R5cGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI2NS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjY2OnZvaWQgbXdpZmlleF9kZnNfY2hhbl9zd193b3JrX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjY3LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjY4OlxcdHN0cnVjdCBtd2lmaWV4X3VhcF9ic3NfcGFyYW0gKmJzc19jZmc7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI2OS1cXHRzdHJ1Y3QgZGVsYXllZF93b3JrICpkZWxheWVkX3dvcmsgPSB0b19kZWxheWVkX3dvcmsod29yayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjI3MDpcXHRzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjcxOlxcdFxcdFxcdGNvbnRhaW5lcl9vZihkZWxheWVkX3dvcmssIHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI3Mi1cXHRcXHRcXHRcXHQgICAgIGRmc19jaGFuX3N3X3dvcmspO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI3NS1cXHRpZiAoIWJzc19jZmctXFx1MDAzZWJlYWNvbl9wZXJpb2QpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6Mjc2OlxcdFxcdG13aWZpZXhfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIEVSUk9SLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yNzctXFx0XFx0XFx0ICAgIFxcXCJjaGFubmVsIHN3aXRjaDogQVAgYWxyZWFkeSBzdG9wcGVkXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yODAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jOjI4MTpcXHRtd2lmaWV4X3VhcF9zZXRfY2hhbm5lbChwcml2LCBic3NfY2ZnLCBwcml2LVxcdTAwM2VkZnNfY2hhbmRlZik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI4Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6MjgzOlxcdGlmIChtd2lmaWV4X2NvbmZpZ19zdGFydF91YXAocHJpdiwgYnNzX2NmZykpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6Mjg0OlxcdFxcdG13aWZpZXhfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIEVSUk9SLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMWguYy0yODUtXFx0XFx0XFx0ICAgIFxcXCJGYWlsZWQgdG8gc3RhcnQgQVAgYWZ0ZXIgY2hhbm5lbCBzd2l0Y2hcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExaC5jLTI4OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmM6Mjg5OlxcdG13aWZpZXhfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIE1TRyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFoLmMtMjkwLVxcdFxcdCAgICBcXFwiaW5kaWNhdGluZyBjaGFubmVsIHN3aXRjaCBjb21wbGV0aW9uIHRvIGtlcm5lbFxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMjQtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjI1OmludCBtd2lmaWV4X2ZpbGxfY2FwX2luZm8oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggcmFkaW9fdHlwZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMjYtXFx0XFx0XFx0ICBzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCAqaHRfY2FwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTMyLVxcdGlmIChXQVJOX09OX09OQ0UoIXNiYW5kKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMzpcXHRcXHRtd2lmaWV4X2RiZyhwcml2LVxcdTAwM2VhZGFwdGVyLCBFUlJPUiwgXFxcIkludmFsaWQgcmFkaW8gdHlwZSFcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zNC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy02OS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NzA6c3RhdGljIHN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo3MTptd2lmaWV4X2dldF9iYV9zdGF0dXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NzI6XFx0XFx0ICAgICAgZW51bSBtd2lmaWV4X2JhX3N0YXR1cyBiYV9zdGF0dXMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTczLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NzQ6XFx0c3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqdHhfYmFfdHNyX3RibDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNzUtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtOTUtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjk2OmludCBtd2lmaWV4X3JldF8xMW5fZGVsYmEoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtOTctXFx0XFx0XFx0ICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy05OS1cXHRpbnQgdGlkO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoxMDA6XFx0c3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqdHhfYmFfdGJsO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xMDEtXFx0c3RydWN0IGhvc3RfY21kX2RzXzExbl9kZWxiYSAqZGVsX2JhID0gXFx1MDAyNnJlc3AtXFx1MDAzZXBhcmFtcy5kZWxfYmE7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTA1LVxcdGlmIChkZWxfYmEtXFx1MDAzZWRlbF9yZXN1bHQgPT0gQkFfUkVTVUxUX1NVQ0NFU1MpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTA2OlxcdFxcdG13aWZpZXhfZGVsX2JhX3RibChwcml2LCB0aWQsIGRlbF9iYS1cXHUwMDNlcGVlcl9tYWNfYWRkcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTA3LVxcdFxcdFxcdFxcdCAgIFRZUEVfREVMQkFfU0VOVCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xMDktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjExMDpcXHRcXHR0eF9iYV90YmwgPSBtd2lmaWV4X2dldF9iYV9zdGF0dXMocHJpdiwgQkFfU0VUVVBfSU5QUk9HUkVTUyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTExMS1cXHRcXHRpZiAodHhfYmFfdGJsKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoxMTI6XFx0XFx0XFx0bXdpZmlleF9zZW5kX2FkZGJhKHByaXYsIHR4X2JhX3RibC1cXHUwMDNldGlkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xMTMtXFx0XFx0XFx0XFx0XFx0ICAgdHhfYmFfdGJsLVxcdTAwM2VyYSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTIwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoxMjE6XFx0XFx0bXdpZmlleF9jcmVhdGVfYmFfdGJsKHByaXYsIGRlbF9iYS1cXHUwMDNlcGVlcl9tYWNfYWRkciwgdGlkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xMjItXFx0XFx0XFx0XFx0ICAgICAgQkFfU0VUVVBfSU5QUk9HUkVTUyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTEyMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTI0OlxcdFxcdHR4X2JhX3RibCA9IG13aWZpZXhfZ2V0X2JhX3N0YXR1cyhwcml2LCBCQV9TRVRVUF9JTlBST0dSRVNTKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTI1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xMjYtXFx0XFx0aWYgKHR4X2JhX3RibClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTI3OlxcdFxcdFxcdG13aWZpZXhfZGVsX2JhX3RibChwcml2LCB0eF9iYV90YmwtXFx1MDAzZXRpZCwgdHhfYmFfdGJsLVxcdTAwM2VyYSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTI4LVxcdFxcdFxcdFxcdFxcdCAgIFRZUEVfREVMQkFfU0VOVCwgdHJ1ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTQxLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoxNDI6aW50IG13aWZpZXhfcmV0XzExbl9hZGRiYV9yZXEoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTQzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTE0Ni1cXHRzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2FkZGJhX3JzcCAqYWRkX2JhX3JzcCA9IFxcdTAwMjZyZXNwLVxcdTAwM2VwYXJhbXMuYWRkX2JhX3JzcDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTQ3OlxcdHN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKnR4X2JhX3RibDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTQ4OlxcdHN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICpyYV9saXN0O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xNDktXFx0dTE2IGJsb2NrX2Fja19wYXJhbV9zZXQgPSBsZTE2X3RvX2NwdShhZGRfYmFfcnNwLVxcdTAwM2VibG9ja19hY2tfcGFyYW1fc2V0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xNTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjE1NzpcXHR0aWRfZG93biA9IG13aWZpZXhfd21tX2Rvd25ncmFkZV90aWQocHJpdiwgdGlkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTU4OlxcdHJhX2xpc3QgPSBtd2lmaWV4X3dtbV9nZXRfcmFsaXN0X25vZGUocHJpdiwgdGlkX2Rvd24sIGFkZF9iYV9yc3AtXFx1MDAzZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xNTktXFx0XFx0cGVlcl9tYWNfYWRkcik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTY0LVxcdFxcdH1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTY1OlxcdFxcdG13aWZpZXhfZGVsX2JhX3RibChwcml2LCB0aWQsIGFkZF9iYV9yc3AtXFx1MDAzZXBlZXJfbWFjX2FkZHIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTE2Ni1cXHRcXHRcXHRcXHQgICBUWVBFX0RFTEJBX1NFTlQsIHRydWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTE3Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTczOlxcdHR4X2JhX3RibCA9IG13aWZpZXhfZ2V0X2JhX3RibChwcml2LCB0aWQsIGFkZF9iYV9yc3AtXFx1MDAzZXBlZXJfbWFjX2FkZHIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xNzQtXFx0aWYgKHR4X2JhX3RibCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoxNzU6XFx0XFx0bXdpZmlleF9kYmcocHJpdi1cXHUwMDNlYWRhcHRlciwgRVZFTlQsIFxcXCJpbmZvOiBCQSBzdHJlYW0gY29tcGxldGVcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xNzYtXFx0XFx0dHhfYmFfdGJsLVxcdTAwM2ViYV9zdGF0dXMgPSBCQV9TRVRVUF9DT01QTEVURTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0xODctXFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MTg4OlxcdFxcdG13aWZpZXhfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIEVSUk9SLCBcXFwiQkEgc3RyZWFtIG5vdCBjcmVhdGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMTg5LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0yMDEtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjIwMjppbnQgbXdpZmlleF9jbWRfcmVjZmdfdHhfYnVmKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTIwMy1cXHRcXHRcXHQgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsIGludCBjbWRfYWN0aW9uLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTIxNC1cXHRjYXNlIEhvc3RDbWRfQUNUX0dFTl9TRVQ6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjIxNTpcXHRcXHRtd2lmaWV4X2RiZyhwcml2LVxcdTAwM2VhZGFwdGVyLCBDTUQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTIxNi1cXHRcXHRcXHQgICAgXFxcImNtZDogc2V0IHR4X2J1Zj0lZFxcXFxuXFxcIiwgKmJ1Zl9zaXplKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0yMzQtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjIzNTppbnQgbXdpZmlleF9jbWRfYW1zZHVfYWdncl9jdHJsKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTIzNi1cXHRcXHRcXHRcXHRpbnQgY21kX2FjdGlvbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MjM3OlxcdFxcdFxcdFxcdHN0cnVjdCBtd2lmaWV4X2RzXzExbl9hbXNkdV9hZ2dyX2N0cmwgKmFhX2N0cmwpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTIzOC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMjY3LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoyNjg6aW50IG13aWZpZXhfY21kXzExbl9jZmcoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMjY5LVxcdFxcdFxcdHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsIHUxNiBjbWRfYWN0aW9uLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoyNzA6XFx0XFx0XFx0c3RydWN0IG13aWZpZXhfZHNfMTFuX3R4X2NmZyAqdHhjZmcpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTI3MS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM9Mjk4PWludFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzoyOTk6bXdpZmlleF9jbWRfYXBwZW5kXzExbl90bHYoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzAwOlxcdFxcdFxcdCAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMDEtXFx0XFx0XFx0ICAgdTggKipidWZmZXIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTMwMi17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjMwMzpcXHRzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGNhcCAqaHRfY2FwO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMDQ6XFx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRpbmZvICpodF9pbmZvO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMDU6XFx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfY2hhbl9saXN0X3BhcmFtX3NldCAqY2hhbl9saXN0O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMDY6XFx0c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfMjA0MGJzc2NvICpic3NfY29fMjA0MDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzA3OlxcdHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2V4dGNhcCAqZXh0X2NhcDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzA4LVxcdGludCByZXRfbGVuID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMTUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjMxNjpcXHRyYWRpb190eXBlID0gbXdpZmlleF9iYW5kX3RvX3JhZGlvX3R5cGUoKHU4KSBic3NfZGVzYy1cXHUwMDNlYnNzX2JhbmQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMTctXFx0c2JhbmQgPSBwcml2LVxcdTAwM2V3ZGV2LndpcGh5LVxcdTAwM2ViYW5kc1tyYWRpb190eXBlXTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMTktXFx0aWYgKGJzc19kZXNjLVxcdTAwM2ViY25faHRfY2FwKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjMyMDpcXHRcXHRodF9jYXAgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXAgKikgKmJ1ZmZlcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzIxOlxcdFxcdG1lbXNldChodF9jYXAsIDAsIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGNhcCkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zMjItXFx0XFx0aHRfY2FwLVxcdTAwM2VoZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFdMQU5fRUlEX0hUX0NBUEFCSUxJVFkpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTMyNC1cXHRcXHRcXHRcXHRjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzI1OlxcdFxcdG1lbWNweSgodTggKikgaHRfY2FwICsgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTMyNi1cXHRcXHQgICAgICAgKHU4ICopYnNzX2Rlc2MtXFx1MDAzZWJjbl9odF9jYXAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzI4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozMjk6XFx0XFx0bXdpZmlleF9maWxsX2NhcF9pbmZvKHByaXYsIHJhZGlvX3R5cGUsIFxcdTAwMjZodF9jYXAtXFx1MDAzZWh0X2NhcCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTMzMC1cXHRcXHQvKiBVcGRhdGUgSFQ0MCBjYXBhYmlsaXR5IGZyb20gY3VycmVudCBjaGFubmVsIGluZm9ybWF0aW9uICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzMzLVxcdFxcdFxcdHU4IHJhZGlvID1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzM0OlxcdFxcdFxcdG13aWZpZXhfYmFuZF90b19yYWRpb190eXBlKGJzc19kZXNjLVxcdTAwM2Vic3NfYmFuZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTMzNS1cXHRcXHRcXHRpbnQgZnJlcSA9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzYyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozNjM6XFx0XFx0KmJ1ZmZlciArPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozNjQ6XFx0XFx0cmV0X2xlbiArPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zNjUtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM2OC1cXHRcXHRpZiAocHJpdi1cXHUwMDNlYnNzX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzY5OlxcdFxcdFxcdGh0X2luZm8gPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRpbmZvICopICpidWZmZXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM3MC1cXHRcXHRcXHRtZW1zZXQoaHRfaW5mbywgMCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6MzcxOlxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRpbmZvKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM3Mi1cXHRcXHRcXHRodF9pbmZvLVxcdTAwM2VoZWFkZXIudHlwZSA9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzc4LVxcdFxcdFxcdG1lbWNweSgodTggKikgaHRfaW5mbyArXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjM3OTpcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM4MC1cXHRcXHRcXHQgICAgICAgKHU4ICopYnNzX2Rlc2MtXFx1MDAzZWJjbl9odF9vcGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM4OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6Mzg5OlxcdFxcdFxcdCpidWZmZXIgKz0gc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0aW5mbyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjM5MDpcXHRcXHRcXHRyZXRfbGVuICs9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGluZm8pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zOTEtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTM5My1cXHRcXHRjaGFuX2xpc3QgPVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzozOTQ6XFx0XFx0XFx0KHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2NoYW5fbGlzdF9wYXJhbV9zZXQgKikgKmJ1ZmZlcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzk1LVxcdFxcdG1lbXNldChjaGFuX2xpc3QsIDAsIHN0cnVjdF9zaXplKGNoYW5fbGlzdCwgY2hhbl9zY2FuX3BhcmFtLCAxKSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtMzk3LVxcdFxcdGNoYW5fbGlzdC1cXHUwMDNlaGVhZGVyLmxlbiA9XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjM5ODpcXHRcXHRcXHRjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IG13aWZpZXhfY2hhbl9zY2FuX3BhcmFtX3NldCkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy0zOTktXFx0XFx0Y2hhbl9saXN0LVxcdTAwM2VjaGFuX3NjYW5fcGFyYW1bMF0uY2hhbl9udW1iZXIgPVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQwMS1cXHRcXHRjaGFuX2xpc3QtXFx1MDAzZWNoYW5fc2Nhbl9wYXJhbVswXS5yYWRpb190eXBlID1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDAyOlxcdFxcdFxcdG13aWZpZXhfYmFuZF90b19yYWRpb190eXBlKCh1OCkgYnNzX2Rlc2MtXFx1MDAzZWJzc19iYW5kKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDAzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQxNi1cXHRpZiAoYnNzX2Rlc2MtXFx1MDAzZWJjbl9ic3NfY29fMjA0MCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0MTc6XFx0XFx0YnNzX2NvXzIwNDAgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfMjA0MGJzc2NvICopICpidWZmZXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQxOC1cXHRcXHRtZW1zZXQoYnNzX2NvXzIwNDAsIDAsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjQxOTpcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzXzIwNDBic3NjbykpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy00MjAtXFx0XFx0YnNzX2NvXzIwNDAtXFx1MDAzZWhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoV0xBTl9FSURfQlNTX0NPRVhfMjA0MCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDI0LVxcdFxcdG1lbWNweSgodTggKikgYnNzX2NvXzIwNDAgK1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0MjU6XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy00MjYtXFx0XFx0ICAgICAgIGJzc19kZXNjLVxcdTAwM2ViY25fYnNzX2NvXzIwNDAgK1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQyOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDMwOlxcdFxcdCpidWZmZXIgKz0gc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzXzIwNDBic3Njbyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjQzMTpcXHRcXHRyZXRfbGVuICs9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc18yMDQwYnNzY28pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy00MzItXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQzNS1cXHRcXHRoZHIgPSAodm9pZCAqKWJzc19kZXNjLVxcdTAwM2ViY25fZXh0X2NhcDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDM2OlxcdFxcdGV4dF9jYXAgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfZXh0Y2FwICopICpidWZmZXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjQzNzpcXHRcXHRtZW1zZXQoZXh0X2NhcCwgMCwgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2V4dGNhcCkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy00MzgtXFx0XFx0ZXh0X2NhcC1cXHUwMDNlaGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihXTEFOX0VJRF9FWFRfQ0FQQUJJTElUWSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDUwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0NTE6XFx0XFx0KmJ1ZmZlciArPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfZXh0Y2FwKSArIGhkci1cXHUwMDNlbGVuO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0NTI6XFx0XFx0cmV0X2xlbiArPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfZXh0Y2FwKSArIGhkci1cXHUwMDNlbGVuO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy00NTMtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ2MS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDYyOnN0YXRpYyBpbnQgbXdpZmlleF9pc190eF9iYV9zdHJlYW1fcHRyX3ZhbGlkKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjQ2MzpcXHRcXHRcXHRcXHRzdHJ1Y3QgbXdpZmlleF90eF9iYV9zdHJlYW1fdGJsICp0eF90YmxfcHRyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy00NjQte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo0NjU6XFx0c3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqdHhfYmFfdHNyX3RibDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNDY2LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ4MC0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDgxOnZvaWQgbXdpZmlleF8xMW5fZGVsZXRlX3R4X2JhX3N0cmVhbV90YmxfZW50cnkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDgyOlxcdFxcdFxcdFxcdHN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKnR4X2JhX3Rzcl90YmwpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ4My17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ4NC1cXHRpZiAoIXR4X2JhX3Rzcl90YmwgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDg1OlxcdCAgICBtd2lmaWV4X2lzX3R4X2JhX3N0cmVhbV9wdHJfdmFsaWQocHJpdiwgdHhfYmFfdHNyX3RibCkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ4Ni1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ4Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDg4OlxcdG13aWZpZXhfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIElORk8sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ4OS1cXHRcXHQgICAgXFxcImluZm86IHR4X2JhX3Rzcl90YmwgJXBcXFxcblxcXCIsIHR4X2JhX3Rzcl90YmwpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTQ5OC0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NDk5OnZvaWQgbXdpZmlleF8xMW5fZGVsZXRlX2FsbF90eF9iYV9zdHJlYW1fdGJsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTUwMC17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTUwMS1cXHRpbnQgaTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NTAyOlxcdHN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKmRlbF90YmxfcHRyLCAqdG1wX25vZGU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTUwMy1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy01MDYtXFx0XFx0XFx0XFx0IFxcdTAwMjZwcml2LVxcdTAwM2V0eF9iYV9zdHJlYW1fdGJsX3B0ciwgbGlzdClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NTA3OlxcdFxcdG13aWZpZXhfMTFuX2RlbGV0ZV90eF9iYV9zdHJlYW1fdGJsX2VudHJ5KHByaXYsIGRlbF90YmxfcHRyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNTA4LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwcml2LVxcdTAwM2V0eF9iYV9zdHJlYW1fdGJsX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTUyMC0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NTIxOnN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo1MjI6bXdpZmlleF9nZXRfYmFfdGJsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGludCB0aWQsIHU4ICpyYSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNTIzLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NTI0OlxcdHN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKnR4X2JhX3Rzcl90Ymw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTUyNS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYy01NDEtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjU0Mjp2b2lkIG13aWZpZXhfY3JlYXRlX2JhX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqcmEsIGludCB0aWQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jOjU0MzpcXHRcXHRcXHQgICBlbnVtIG13aWZpZXhfYmFfc3RhdHVzIGJhX3N0YXR1cylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmMtNTQ0LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NTQ1OlxcdHN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKm5ld19ub2RlO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8xMW4uYzo1NDY6XFx0c3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKnJhX2xpc3Q7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTU0Ny1cXHRpbnQgdGlkX2Rvd247XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LzExbi5jLTU0OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvMTFuLmM6NTQ5OlxcdGlmICghbXdpZmlleF9nZXRfYmFfdGJsKHByaXYsIHRpZCwgcmEpKSB7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjMzOjI1LjI0MTExMDY4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3OTE2ODMxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgYG13aWZpZXhgIERyaXZlcjogQSBUYXJnZXRlZCBBcHByb2FjaCoqXG5cbk9rYXksIHNvIHRoZSBgbXdpZmlleGAgZHJpdmVyIGlzIHRoZSB0YXJnZXQuIEl0J3MgbXVsdGktZmFjZXRlZCwgc3VwcG9ydGluZyBVU0IsIFBDSWUsIGFuZCBTRElPLCB3aGljaCBpcyBnb29kIG5ld3MgYmVjYXVzZSB0aGF0IG9wZW5zIHVwIHNldmVyYWwgZnV6emluZyBhdmVudWVzLiBTcGVjaWZpY2FsbHksIHNpbmNlIGl0IHN1cHBvcnRzIFVTQiwgdGhlIGR1bW15IEhDRCAoVVNCIGZ1enplcikgYmVjb21lcyBhIHZpYWJsZSB0b29sLCBhbmQgdGhhdCBpbW1lZGlhdGVseSBnZXRzIG15IGF0dGVudGlvbi5cblxuVGhlIGNvcmUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZnV6emluZyBlZmZvcnQgYWN0dWFsbHkgKndvcnRoKiB0aGUgdGltZT8gWWVzLCBkZWZpbml0ZWx5LiBJdCBoYW5kbGVzIFdpLUZpIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpLCB3aGljaCBhcmUgbm90b3Jpb3VzbHkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgcmlwZSBmb3IgdnVsbmVyYWJpbGl0eSBkaXNjb3ZlcnkuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aXRoaW4gYG13aWZpZXhfc2VhcmNoX291aV9pbl9pZWAuIE5pY2UhXG5cbk5vdywgdGhlIGNydWNpYWwgc3RlcDogRGV0ZXJtaW5pbmcgdGhlIGF0dGFjayBzdXJmYWNlIGZvciBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYC4gQ2FuIHRoaXMgZnVuY3Rpb24gYmUgdHJpZ2dlcmVkIGZyb20gdGhlIGhvc3QsIG9yIGlzIGl0IGV4Y2x1c2l2ZWx5IGEgZGV2aWNlLXNpZGUgcm91dGluZT8gSXQgYXBwZWFycyB0aGUgZnVuY3Rpb24gcGFyc2VzIElFcyBmcm9tIGBic3NfZGVzYy1cdTAwM2ViY25fcnNuX2llYCBhbmQgYGJzc19kZXNjLVx1MDAzZWJjbl93cGFfaWVgLiBBaGEsIHRoZXNlIGFyZSBiZWFjb24vcHJvYmUgcmVzcG9uc2UgSUVzLCBhbmQgdGhlc2UgY29tZSBmcm9tIHRoZSBBUCEgU28sIHRoZSBkZXZpY2UvZmlybXdhcmUgY29udHJvbHMgdGhlIGRhdGEgd2UncmUgbG9va2luZyBhdC5cblxuVGhpcyBpcyB3aGVyZSB0aGUgYXJjaGl0ZWN0dXJlIGtub3dsZWRnZSBjb21lcyBpbiBoYW5keS4gYG13aWZpZXhgJ3MgZmlybXdhcmUgaGFuZGxlcyB0aGUgV2ktRmkgTUFDLCBhbmQgdGhlIGhvc3QgZHJpdmVyIGNvbW11bmljYXRlcyB2aWEgY29tbWFuZHMgYW5kIGV2ZW50cy4gS25vd2luZyB0aGlzLCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZGV0ZXJtaW5lIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSB2dWxuZXJhYmxlIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgbXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnRgIGFuZCBgbXdpZmlleF9pc193cGFfb3VpX3ByZXNlbnRgIGFyZSBjYWxsZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluZGljYXRpb24gb24gd2hlcmUgdG8gZm9jdXMgdGhlIGZ1enppbmcgZWZmb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc3NCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozMzozMS4wMzI3OTU2MjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNTk3ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfaXNfcnNuX291aV9wcmVzZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0xNDc9c3RhdGljIHU4XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoxNDg6bXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnQoc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MsIHUzMiBjaXBoZXIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNDkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0zNDQ9bXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtNDA4LVxcdFxcdFxcdCAgICAgYnNzX2Rlc2MtXFx1MDAzZWJjbl9odF9jYXApIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzo0MDk6XFx0XFx0XFx0ICAgICFtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudChic3NfZGVzYyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTQxMC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRDSVBIRVJfU1VJVEVfQ0NNUCkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTQxMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjQxMjpcXHRcXHRcXHRcXHRpZiAobXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTQxMy1cXHRcXHRcXHRcXHRcXHRcXHQoYnNzX2Rlc2MsIENJUEhFUl9TVUlURV9US0lQKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozMzozMS4xNDYzOTc5MThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMzODc0NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBtd2lmaWV4IE5ldHdvcmsgQ29tcGF0aWJpbGl0eSBDaGVjayoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhlIGBtd2lmaWV4YCBkcml2ZXIgYWdhaW4uIEkgc2VlIHRoYXQgYG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlYCBpcyBhIGtleSBmdW5jdGlvbiwgYW5kIGl0J3MgYmVpbmcgaW52b2tlZCBkdXJpbmcgYm90aCB0aGUgc2NhbiByZXN1bHQgcHJvY2Vzc2luZyBhbmQgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwaGFzZXMuIFRoaXMgc3VnZ2VzdHMgaXQncyBhIGNyaXRpY2FsIGdhdGVrZWVwZXIgZm9yIGRldGVybWluaW5nIHdoaWNoIG5ldHdvcmtzIHRoZSBkZXZpY2Ugd2lsbCBldmVuICpjb25zaWRlciouIEludGVyZXN0aW5nLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhhdCBnYXRla2VlcGluZy4gTXkgbmV4dCBzdGVwLCBuYXR1cmFsbHksIGlzIHRvIHRyYWNlIGFsbCB0aGUgY2FsbCBzaXRlcyBvZiBgbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVgLiBJIG5lZWQgdG8gcHJlY2lzZWx5IHVuZGVyc3RhbmQgKndoZW4qIGFuZCAqd2h5KiB0aGlzIGNvbXBhdGliaWxpdHkgY2hlY2sgaXMgYmVpbmcgcnVuLiBJcyBpdCBqdXN0IGFib3V0IHNlY3VyaXR5IHNldHRpbmdzPyBJbmZyYXN0cnVjdHVyZSBtb2RlIHZlcnN1cyBhZC1ob2M/IFJlZ3VsYXRvcnkgZG9tYWluIGNvbnNpZGVyYXRpb25zPyBJJ2xsIHBpbnBvaW50IGV2ZXJ5IGNhbGwsIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgY29udGV4dCwgYW5kIHRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IG5ldHdvcmsgY29tcGF0aWJpbGl0eSBpcyBkZXRlcm1pbmVkIHdpdGhpbiB0aGlzIGRyaXZlci4gS25vd2luZyB0aGUgc3BlY2lmaWMgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgYSBuZXR3b3JrIHRvIGJlIGNvbnNpZGVyZWQgaW5jb21wYXRpYmxlIHdpbGwgYmUgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGFueSBjb25uZWN0aW9uIGlzc3Vlcy4gQW5kLCBwb3RlbnRpYWxseSwgaWRlbnRpZnlpbmcgYW55IHZ1bG5lcmFiaWxpdGllcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTgxMywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjMzOjM0Ljc4MDI3NTU2OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDQ2OTM2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MzQzPXN0YXRpYyBzMzJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjM0NDptd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMzQ1LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLCB1MzIgbW9kZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MTYxNj1pbnQgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTYyOC1cXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM6MTYyOTpcXHRcXHRcXHRyZXQgPSBtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZShwcml2LCBic3NfZGVzYyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE2MzAtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHByaXYtXFx1MDAzZWJzc19tb2RlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzM6MzQuODU0NzQ5Mzc0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3OTI0NTU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5YCdzIEludm9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgYG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5YC4gVGhlIGNvcmUgcXVlc3Rpb24gaXM6IHdoZW4gZG9lcyB0aGlzIGZ1bmN0aW9uIGdldCBjYWxsZWQgaW4gdGhlIGBtd2lmaWV4YCBkcml2ZXI/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBuZXR3b3JrIGNvbXBhdGliaWxpdHkgY2hlY2tzIGFuZCBob3cgdGhleSBhcmUgaW1wbGVtZW50ZWQuIFRoaXMgZnVuY3Rpb24ncyB0aW1pbmcgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBkcml2ZXIgYmVoYXZpb3IsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIGFueSBjb21wYXRpYmlsaXR5LXJlbGF0ZWQgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSB0cmlnZ2VycywgdGhlIHN1cnJvdW5kaW5nIGNvbnRyb2wgZmxvdywgYW5kIGFueSBkZXBlbmRlbmNpZXMgdGhpcyBmdW5jdGlvbiBoYXMuIFNvLCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZmlndXJlIHRoaXMgb3V0IGFuZCBzdGFydCB3aXRoIHRoZSBjYWxsZXIgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDI1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzM6MzcuOTMzOTk3ODMzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDk2Mzc0OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oPTE1NDE9aW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE1NDItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19lbnRyeSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaDoxNTQzOmludCBtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTU0NC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTE1OTE9aW50IG13aWZpZXhfY21kXzgwMl8xMV9zY2FuKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE2MTUtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoxNjE2OmludCBtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTYxNy1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MTcwMz1zdGF0aWMgaW50IG13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNzE3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM6MTcxODpcXHRyZXQgPSBtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eShwcml2LCBic3NfZGVzYyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNzE5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM9MzE4PWludCBtd2lmaWV4X2Jzc19zdGFydChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtMzYwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYzozNjE6XFx0XFx0cmV0ID0gbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHkocHJpdiwgYnNzX2Rlc2MpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy0zNjItXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy00MDgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jOjQwOTpcXHRcXHRyZXQgPSBtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eShwcml2LCBic3NfZGVzYyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jLTQxMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzM6MzguMTgzNjQ2Mzk2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTYyOTYxNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBtd2lmaWV4IENvbmZpZ3VyYXRpb24gYW5kIFBvdGVudGlhbCBTZWN1cml0eSBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHRoZSBwb2ludCB3aGVuIGEgc3RhdGlvbiBjb25uZWN0cyB0byBhIEJhc2ljIFNlcnZpY2UgU2V0IChCU1MpIG9yIGluaXRpYXRlcyBvbmUuIFRoZSBCU1MgZGVzY3JpcHRvciwgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbmV0d29yaywgZ2V0cyBwb3B1bGF0ZWQgZWl0aGVyIGZyb20gdGhlIHJlc3VsdHMgb2YgYSBzY2FuIG9yIGRpcmVjdGx5IGZyb20gZXZlbnRzIHJlcG9ydGVkIGJ5IHRoZSBmaXJtd2FyZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCBwYXJ0aWN1bGFybHkgc2luY2UgbXdpZmlleCBzdXBwb3J0cyBVU0IuIFRoaXMgbWVhbnMgdGhhdCBmaXJtd2FyZSByZXNwb25zZXMsIHdoaWNoIGluY2x1ZGUgdGhlIGVzc2VudGlhbCBiZWFjb24gYW5kIHByb2JlIHJlc3BvbnNlIGRhdGEsIGFyZSBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIGZ1enppbmcgdGhyb3VnaCB0aGUgVVNCIGludGVyZmFjZS4gSXQgc291bmRzIGxpa2UgYSBzb2xpZCBhdHRhY2sgdmVjdG9yLCBidXQgbGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBlbmFibGVkLCBhbmQgaWYgdGhpcyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBpcyBleHBvc2VkLCBvciBpZiBpdCBjYW4gYmUgYWRkcmVzc2VkIHdpdGggYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmb3IgbXdpZmlleCBhbmQgc2VlIHdoYXQgYnVpbGQgb3B0aW9ucyBhcmUgaW4gcGxheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNvbmZpZ3VyZWQgdG8gc2VlIGp1c3QgaG93IGV4cG9zZWQgdGhpcyBtaWdodCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzNjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozMzo0Mi40OTk5NDQ3MjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1Mzc2Nzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNV0lGSUVYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzoyOmNvbmZpZyBNV0lGSUVYXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBXaUZpLUV4IERyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTExLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjEyOmNvbmZpZyBNV0lGSUVYX1NESU9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xMy1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgU0Q4Nzg2L1NEODc4Ny9TRDg3OTcvU0Q4ODg3L1NEODg5Ny9TRDg5NzcvU0Q4OTc4L1NEODk4Ny9TRDg5OTdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0yNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzoyNTpjb25maWcgTVdJRklFWF9QQ0lFXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMjYtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFBDSUUgODc2Ni84ODk3Lzg5OTdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzozNzpjb25maWcgTVdJRklFWF9VU0JcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zOC1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgVVNCODc2Ni84Nzk3Lzg5OTdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjMzOjQyLjU2NTMzMDM1N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTMzNDc3MTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTVdJRklFWCBDb25maWd1cmF0aW9uIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE1XSUZJRVhgIGFuZCBgTVdJRklFWF9VU0JgIOKAkyB0aG9zZSBhcmUgdGhlIGtleSBjb25maWdzIGZvciB0aGUgTWFydmVsbCBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBmdXp6aW5nLiBSaWdodCwgYE1XSUZJRVhgIGlzIHRoZSBjb3JlIGRyaXZlciwgYW5kIGBNV0lGSUVYX1VTQmAgaXMgdGhlIFVTQi1zcGVjaWZpYyBkcml2ZXIuIFRoZSBpZGVhIGlzIHRvIGxldmVyYWdlIHRoZSBVU0IgZHJpdmVyIGZvciBmdXp6aW5nLiBJZiB3ZSBlbmFibGUgYE1XSUZJRVhfVVNCYCwgdGhhdCBnaXZlcyB1cyBhIGRpcmVjdCBlbnRyeSBwb2ludCB2aWEgdGhlIFVTQiBpbnRlcmZhY2UsIHdoaWNoIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IHF1ZXN0aW9uIG5vdyBpczogQ2FuIHdlIHJlYWNoIHNvbWV0aGluZyBsaWtlIGBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVgIChvciBzaW1pbGFyLCBsaWtlIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGluZm9ybWF0aW9uIGVsZW1lbnRzKSBmcm9tIGEgVVNCIGZ1enppbmcgcGVyc3BlY3RpdmU/IEl04oCZcyBjcnVjaWFsIHRvIG1hcCB0aGF0IG91dC4gVGhpbmtpbmcgYWJvdXQgaXQsIHRoZSBVU0IgZHJpdmVyIHNob3VsZCBiZSByZWNlaXZpbmcgZGF0YSBmcm9tIHRoZSBVU0IgZGV2aWNlIGl0c2VsZiBhbmQgdGhlbiBwYXNzaW5nIGl0IGFsb25nIHRvIHRoZSBjb3JlIGRyaXZlci4gU28sIG15IGZvY3VzIHNob3VsZCBiZSBvbiBmdW5jdGlvbnMgd2l0aGluIHRoZSBVU0IgZHJpdmVyIHRoYXQgaGFuZGxlIGluY29taW5nIGRhdGEuIEkgbmVlZCB0byBkaWcgaW50byBzb21ldGhpbmcgbGlrZSBgbXdpZmlleF91c2JfcnhfY29tcGxldGVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgc2VlIGhvdyB0aGUgZGF0YSBmbG93IGxvb2tzLCB0aGUgZGF0YSBoYW5kbGluZyBhbmQgaG93IGluZm9ybWF0aW9uIGZyb20gdGhlIFVTQiBpbnRlcmZhY2UgaW50ZWdyYXRlcyB3aXRoIHRoZSBjb3JlIGZ1bmN0aW9ucy4gSSB0aGluayB0aGF0J3MgdGhlIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTAzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjMzOjQ2LjY5ODgwOTk1NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzODk2NzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfdXNiX3J4X2NvbXBsZXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jPTQ2PXN0YXRpYyBpbnQgbXdpZmlleF91c2JfcmVjdihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jLTE1MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmM6MTUyOnN0YXRpYyB2b2lkIG13aWZpZXhfdXNiX3J4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMTUzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYz0yODU9c3RhdGljIGludCBtd2lmaWV4X3VzYl9zdWJtaXRfcnhfdXJiKHN0cnVjdCB1cmJfY29udGV4dCAqY3R4LCBpbnQgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYy0zMTUtXFx0XFx0XFx0XFx0IHVzYl9yY3ZpbnRwaXBlKGNhcmQtXFx1MDAzZXVkZXYsIGN0eC1cXHUwMDNlZXApLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYzozMTY6XFx0XFx0XFx0XFx0IGN0eC1cXHUwMDNlc2tiLVxcdTAwM2VkYXRhLCBzaXplLCBtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMzE3LVxcdFxcdFxcdFxcdCAodm9pZCAqKWN0eCwgY2FyZC1cXHUwMDNlcnhfY21kX2ludGVydmFsKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuYy0zMjAtXFx0XFx0XFx0XFx0ICB1c2JfcmN2YnVsa3BpcGUoY2FyZC1cXHUwMDNldWRldiwgY3R4LVxcdTAwM2VlcCksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VzYi5jOjMyMTpcXHRcXHRcXHRcXHQgIGN0eC1cXHUwMDNlc2tiLVxcdTAwM2VkYXRhLCBzaXplLCBtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmMtMzIyLVxcdFxcdFxcdFxcdCAgKHZvaWQgKiljdHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozMzo0Ni44MTI3MTE3NzZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzNTYxMzY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGJhc2VkIG9uIHRoYXQgcHJvY2VzcyBkZXNjcmlwdGlvbi5cblxuKipNeSBBbmFseXNpcyBvZiB0aGUgVVNCIFJlY2VpdmUgUGF0aCoqXG5cbkFscmlnaHQsIHNvIHRoZSBgbXdpZmlleF91c2JfcnhfY29tcGxldGVgIGZ1bmN0aW9uIGlzIHRoZSBpbml0aWFsIGVudHJ5IHBvaW50IGZvciBpbmNvbWluZyBkYXRhIG9uIHRoZSBVU0IgYnVzIOKAkyB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBkYXRhIEknbSBnZXR0aW5nIGZyb20gdGhlcmUgaXMgaGFuZGVkIG9mZiB0byBgbXdpZmlleF91c2JfcmVjdmAuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBhY3Rpb24gYmVnaW5zLCB3aGVyZSBJIGV4cGVjdCB0aGUgZGF0YSBpcyBmdXJ0aGVyIGV4YW1pbmVkIGFuZCBwcm9iYWJseSBwYXJzZWQuIEl0J3MgbGlrZWx5IGBtd2lmaWV4X3VzYl9yZWN2YCB0aGVuIGNhbGxzIGEgaGFuZGxlciBmdW5jdGlvbiBsaWtlIGBtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXRgLCBvciBzb21ldGhpbmcgdmVyeSBzaW1pbGFyLCB0byBhY3R1YWxseSAqZG8qIHNvbWV0aGluZyB3aXRoIHRoZSByZWNlaXZlZCBkYXRhLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2NhbiByZXN1bHRzIGZsb3cgdGhyb3VnaCBhbGwgb2YgdGhpcy4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWMgdGhyb3VnaCB0aGVzZSBmdW5jdGlvbnMgdG8gc2VlIGhvdyB0aGUgV2ktRmkgc2NhbiBkYXRhIG1ha2VzIGl0cyB3YXkgdG8gdGhlIGFwcHJvcHJpYXRlIHByb2Nlc3Npbmcgcm91dGluZXMuIEkgbmVlZCB0byB0cmFjZSB0aGlzIHBhdGggc3BlY2lmaWNhbGx5IGZyb20gdGhlIHBvaW50IHRoYXQgZGF0YSBpcyByZWNlaXZlZCBvbiB0aGUgVVNCIGFsbCB0aGUgd2F5IHRvIGl0cyBmaW5hbCBmb3JtLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NjMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozMzo1MC43NDgzMjcyMzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5ODAyOTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfaGFuZGxlX3J4X3BhY2tldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9MTc0PXN0YXRpYyBpbnQgbXdpZmlleF9wcm9jZXNzX3J4KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTIwNC1cXHRcXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6MjA1OlxcdFxcdFxcdG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldChhZGFwdGVyLCBza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMjA2LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg9MTEwMj12b2lkIG13aWZpZXhfcHJvY2Vzc19hc3NvY19yZXNwKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTEwMzppbnQgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xMTA0LVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvcGNpZS5jPTE1MjY9c3RhdGljIGludCBtd2lmaWV4X3BjaWVfcHJvY2Vzc19yZWN2X2RhdGEoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9wY2llLmMtMTU4OC1cXHRcXHRcXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9wY2llLmM6MTU4OTpcXHRcXHRcXHRcXHRtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXQoYWRhcHRlciwgc2tiX2RhdGEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9wY2llLmMtMTU5MC1cXHRcXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jPTE1OTM9c3RhdGljIHZvaWQgbXdpZmlleF9kZWFnZ3Jfc2Rpb19wa3Qoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmMtMTYzMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jOjE2MzQ6XFx0XFx0bXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KGFkYXB0ZXIsIHNrYl9kZWFnZ3IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmMtMTYzNS1cXHRcXHRkYXRhICs9IGJsa19zaXplO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYz0xNjQ3PXN0YXRpYyBpbnQgbXdpZmlleF9kZWNvZGVfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jLTE2ODQtXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Rpby5jOjE2ODU6XFx0XFx0XFx0bXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KGFkYXB0ZXIsIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYy0xNjg2LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC90eHJ4LmMtMjMtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYzoyNDppbnQgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYy0yNS1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jLTU5LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdHhyeC5jOjYwOkVYUE9SVF9TWU1CT0xfR1BMKG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3R4cnguYy02MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzM6NTAuODI4MTM1ODAyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzEzMDUwMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKlJYIFBhY2tldCBQcm9jZXNzaW5nIERpc2NyZXBhbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgTWFydmVsbCBXaS1GaSBkcml2ZXIgY29kZSBhZ2Fpbi4gSSB3YXMganVzdCBsb29raW5nIGF0IGBtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXRgLCBhbmQgaXQncyBzdHJpa2luZyBtZSBhcyBiZWluZyAqZXhjbHVzaXZlbHkqIGZvY3VzZWQgb24gZGF0YSBwYWNrZXRzLiBUaGF0J3Mgd2hhdCB0aGUgbmFtZSBhbmQgdGhlIGNvZGUgc2VlbSB0byBpbmRpY2F0ZS4gQnV0IHRoYXQgY2FuJ3QgYmUgdGhlICp3aG9sZSogc3RvcnksIGNhbiBpdD8gV2hlcmUgYXJlIHRoZSBjb21tYW5kIGFuZCBldmVudCBwYWNrZXRzIGhhbmRsZWQ/IFdlIGNhbid0IGp1c3QgYmUgZHJvcHBpbmcgdGhvc2Ugb24gdGhlIGZsb29yIVxuXG5BaCwgcmlnaHQsIG5vdyBpdCdzIGNvbWluZyBiYWNrIHRvIG1lLiBUaGUgVVNCIHJlY2VpdmUgY29tcGxldGlvbiBoYW5kbGVyLCBgbXdpZmlleF91c2JfcnhfY29tcGxldGVgLCAqdGhhdCdzKiB0aGUgb25lIHRoYXQgc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIGJvdGggZGF0YSBwYWNrZXRzIGFuZCB0aG9zZSBjb21tYW5kL2V2ZW50IHBhY2tldHMuIEl0J3MgaGFuZGxpbmcgdGhlIGNvbXBsZXRpb24gb2YgYSByZWNlaXZlIG9wZXJhdGlvbiBmcm9tIHRoZSBVU0IgaW50ZXJmYWNlLCBzbyBpdCBtYWtlcyBzZW5zZSB0aGF0IGl0IHdvdWxkIG5lZWQgdG8gbWFrZSB0aGUgZGlzdGluY3Rpb24uIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG15IGF0dGVudGlvbiB0aGVyZSB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTc5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzM6NTQuMzk5NDQ0MDU3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjI2MDQ4NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXdpZmlleF9wcm9jZXNzX3J4X2NvbW1hbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzM6NTQuNDU1NzI3OTIzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODE4OTM1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqUmV2aXNpdGluZyBtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZSoqXG5cbk9rYXksIGxldCdzIGNpcmNsZSBiYWNrIHRvIGBtd2lmaWV4X3VzYl9yeF9jb21wbGV0ZWAuIEkgbmVlZCB0byByZS1leGFtaW5lIHRoYXQgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIHJlY2VudCByZXBvcnRzLiBHaXZlbiB0aGUgaW50cmljYWNpZXMgb2YgdGhlIFVTQiByZWNlaXZlIHBhdGggaW4gdGhlIE1hcnZlbGwgV2lGaSBkcml2ZXIsIGl0J3MgY3JpdGljYWwgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyB3aXRoIHRoZSBETUEgZW5naW5lIGx1cmtpbmcgaW4gdGhhdCByb3V0aW5lLiBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoZSBoYW5kbGluZyBvZiBkZXNjcmlwdG9yIGNoYWlucywgYnVmZmVyIG93bmVyc2hpcCwgYW5kIGludGVycnVwdCBjb2FsZXNjaW5nLiBUaGUgcGVyZm9ybWFuY2UgaXNzdWVzIHdlIGFyZSBzZWVpbmcgZmVlbCBsaWtlIHRoZXkgY291bGQgc3RlbSBmcm9tIGltcHJvcGVyIGhhbmRsaW5nIG9mIHJlY2VpdmUgYnVmZmVycywgb3IgcG90ZW50aWFsbHkgYW4gaXNzdWUgaW4gdGhlIGludGVycnVwdCBzZXJ2aWNpbmcgZmxvdy4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IGFnYWluIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgYW5kIGhvdyB0aGV5IGFyZSBhZmZlY3RlZCBieSBkaWZmZXJlbnQgaG9zdCBjb25maWd1cmF0aW9ucyBhbmQgZHJpdmVyIHZlcnNpb25zLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgd2hldGhlciBlcnJvcnMgYXJlIGdyYWNlZnVsbHkgbWFuYWdlZCB0byBwcmV2ZW50IGNhc2NhZGluZyBmYWlsdXJlcy4gSXTigJlzIHRpbWUgZm9yIGEgZGVlcCBkaXZlLCBhZ2Fpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1MDMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozMzo1Ny40Mzc2MjQyNzlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91c2IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTIsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUyOlxcdHN0YXRpYyB2b2lkIG13aWZpZXhfdXNiX3J4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4gMTUzOlxcdHtcXG4gMTU0OlxcdFxcdHN0cnVjdCB1cmJfY29udGV4dCAqY29udGV4dCA9IChzdHJ1Y3QgdXJiX2NvbnRleHQgKil1cmItXFx1MDAzZWNvbnRleHQ7XFxuIDE1NTpcXHRcXHRzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gY29udGV4dC1cXHUwMDNlYWRhcHRlcjtcXG4gMTU2OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBjb250ZXh0LVxcdTAwM2Vza2I7XFxuIDE1NzpcXHRcXHRzdHJ1Y3QgdXNiX2NhcmRfcmVjICpjYXJkO1xcbiAxNTg6XFx0XFx0aW50IHJlY3ZfbGVuZ3RoID0gdXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoO1xcbiAxNTk6XFx0XFx0aW50IHNpemUsIHN0YXR1cztcXG4gMTYwOlxcdFxcbiAxNjE6XFx0XFx0aWYgKCFhZGFwdGVyIHx8ICFhZGFwdGVyLVxcdTAwM2VjYXJkKSB7XFxuIDE2MjpcXHRcXHRcXHRwcl9lcnIoXFxcIm13aWZpZXggYWRhcHRlciBvciBjYXJkIHN0cnVjdHVyZSBpcyBub3QgdmFsaWRcXFxcblxcXCIpO1xcbiAxNjM6XFx0XFx0XFx0cmV0dXJuO1xcbiAxNjQ6XFx0XFx0fVxcbiAxNjU6XFx0XFxuIDE2NjpcXHRcXHRjYXJkID0gKHN0cnVjdCB1c2JfY2FyZF9yZWMgKilhZGFwdGVyLVxcdTAwM2VjYXJkO1xcbiAxNjc6XFx0XFx0aWYgKGNhcmQtXFx1MDAzZXJ4X2NtZF9lcCA9PSBjb250ZXh0LVxcdTAwM2VlcClcXG4gMTY4OlxcdFxcdFxcdGF0b21pY19kZWMoXFx1MDAyNmNhcmQtXFx1MDAzZXJ4X2NtZF91cmJfcGVuZGluZyk7XFxuIDE2OTpcXHRcXHRlbHNlXFxuIDE3MDpcXHRcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZjYXJkLVxcdTAwM2VyeF9kYXRhX3VyYl9wZW5kaW5nKTtcXG4gMTcxOlxcdFxcbiAxNzI6XFx0XFx0aWYgKHJlY3ZfbGVuZ3RoKSB7XFxuIDE3MzpcXHRcXHRcXHRpZiAodXJiLVxcdTAwM2VzdGF0dXMgfHxcXG4gMTc0OlxcdFxcdFxcdCAgICB0ZXN0X2JpdChNV0lGSUVYX1NVUlBSSVNFX1JFTU9WRUQsIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V3b3JrX2ZsYWdzKSkge1xcbiAxNzU6XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXFxuIDE3NjpcXHRcXHRcXHRcXHRcXHQgICAgXFxcIlVSQiBzdGF0dXMgaXMgZmFpbGVkOiAlZFxcXFxuXFxcIiwgdXJiLVxcdTAwM2VzdGF0dXMpO1xcbiAxNzc6XFx0XFx0XFx0XFx0LyogRG8gbm90IGZyZWUgc2tiIGluIGNhc2Ugb2YgY29tbWFuZCBlcCAqL1xcbiAxNzg6XFx0XFx0XFx0XFx0aWYgKGNhcmQtXFx1MDAzZXJ4X2NtZF9lcCAhPSBjb250ZXh0LVxcdTAwM2VlcClcXG4gMTc5OlxcdFxcdFxcdFxcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIDE4MDpcXHRcXHRcXHRcXHRnb3RvIHNldHVwX2Zvcl9uZXh0O1xcbiAxODE6XFx0XFx0XFx0fVxcbiAxODI6XFx0XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2UgcmVjdl9sZW5ndGgpXFxuIDE4MzpcXHRcXHRcXHRcXHRza2JfdHJpbShza2IsIHJlY3ZfbGVuZ3RoKTtcXG4gMTg0OlxcdFxcdFxcdGVsc2VcXG4gMTg1OlxcdFxcdFxcdFxcdHNrYl9wdXQoc2tiLCByZWN2X2xlbmd0aCAtIHNrYi1cXHUwMDNlbGVuKTtcXG4gMTg2OlxcdFxcbiAxODc6XFx0XFx0XFx0c3RhdHVzID0gbXdpZmlleF91c2JfcmVjdihhZGFwdGVyLCBza2IsIGNvbnRleHQtXFx1MDAzZWVwKTtcXG4gMTg4OlxcdFxcbiAxODk6XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgSU5GTyxcXG4gMTkwOlxcdFxcdFxcdFxcdCAgICBcXFwiaW5mbzogcmVjdl9sZW5ndGg9JWQsIHN0YXR1cz0lZFxcXFxuXFxcIixcXG4gMTkxOlxcdFxcdFxcdFxcdCAgICByZWN2X2xlbmd0aCwgc3RhdHVzKTtcXG4gMTkyOlxcdFxcdFxcdGlmIChzdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7XFxuIDE5MzpcXHRcXHRcXHRcXHRtd2lmaWV4X3F1ZXVlX21haW5fd29yayhhZGFwdGVyKTtcXG4gMTk0OlxcdFxcbiAxOTU6XFx0XFx0XFx0XFx0LyogdXJiIGZvciBkYXRhX2VwIGlzIHJlLXN1Ym1pdHRlZCBub3c7XFxuIDE5NjpcXHRcXHRcXHRcXHQgKiB1cmIgZm9yIGNtZF9lcCB3aWxsIGJlIHJlLXN1Ym1pdHRlZCBpbiBjYWxsYmFja1xcbiAxOTc6XFx0XFx0XFx0XFx0ICogbXdpZmlleF91c2JfcmVjdl9jb21wbGV0ZVxcbiAxOTg6XFx0XFx0XFx0XFx0ICovXFxuIDE5OTpcXHRcXHRcXHRcXHRpZiAoY2FyZC1cXHUwMDNlcnhfY21kX2VwID09IGNvbnRleHQtXFx1MDAzZWVwKVxcbiAyMDA6XFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAyMDE6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMjAyOlxcdFxcdFxcdFxcdGlmIChzdGF0dXMgPT0gLTEpXFxuIDIwMzpcXHRcXHRcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG4gMjA0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwicmVjZWl2ZWQgZGF0YSBwcm9jZXNzaW5nIGZhaWxlZCFcXFxcblxcXCIpO1xcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHRcXHRcXHQvKiBEbyBub3QgZnJlZSBza2IgaW4gY2FzZSBvZiBjb21tYW5kIGVwICovXFxuIDIwNzpcXHRcXHRcXHRcXHRpZiAoY2FyZC1cXHUwMDNlcnhfY21kX2VwICE9IGNvbnRleHQtXFx1MDAzZWVwKVxcbiAyMDg6XFx0XFx0XFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gMjA5OlxcdFxcdFxcdH1cXG4gMjEwOlxcdFxcdH0gZWxzZSBpZiAodXJiLVxcdTAwM2VzdGF0dXMpIHtcXG4gMjExOlxcdFxcdFxcdGlmICghdGVzdF9iaXQoTVdJRklFWF9JU19TVVNQRU5ERUQsIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V3b3JrX2ZsYWdzKSkge1xcbiAyMTI6XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRkFUQUwsXFxuIDIxMzpcXHRcXHRcXHRcXHRcXHQgICAgXFxcIkNhcmQgaXMgcmVtb3ZlZDogJWRcXFxcblxcXCIsIHVyYi1cXHUwMDNlc3RhdHVzKTtcXG4gMjE0OlxcdFxcdFxcdFxcdHNldF9iaXQoTVdJRklFWF9TVVJQUklTRV9SRU1PVkVELCBcXHUwMDI2YWRhcHRlci1cXHUwMDNld29ya19mbGFncyk7XFxuIDIxNTpcXHRcXHRcXHR9XFxuIDIxNjpcXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbiAyMTc6XFx0XFx0XFx0cmV0dXJuO1xcbiAyMTg6XFx0XFx0fSBlbHNlIHtcXG4gMjE5OlxcdFxcdFxcdC8qIERvIG5vdCBmcmVlIHNrYiBpbiBjYXNlIG9mIGNvbW1hbmQgZXAgKi9cXG4gMjIwOlxcdFxcdFxcdGlmIChjYXJkLVxcdTAwM2VyeF9jbWRfZXAgIT0gY29udGV4dC1cXHUwMDNlZXApXFxuIDIyMTpcXHRcXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbiAyMjI6XFx0XFxuIDIyMzpcXHRcXHRcXHQvKiBmYWxsIHRocm91Z2ggc2V0dXBfZm9yX25leHQgKi9cXG4gMjI0OlxcdFxcdH1cXG4gMjI1OlxcdFxcbiAyMjY6XFx0c2V0dXBfZm9yX25leHQ6XFxuIDIyNzpcXHRcXHRpZiAoY2FyZC1cXHUwMDNlcnhfY21kX2VwID09IGNvbnRleHQtXFx1MDAzZWVwKVxcbiAyMjg6XFx0XFx0XFx0c2l6ZSA9IE1XSUZJRVhfUlhfQ01EX0JVRl9TSVpFO1xcbiAyMjk6XFx0XFx0ZWxzZVxcbiAyMzA6XFx0XFx0XFx0c2l6ZSA9IE1XSUZJRVhfUlhfREFUQV9CVUZfU0laRTtcXG4gMjMxOlxcdFxcbiAyMzI6XFx0XFx0aWYgKGNhcmQtXFx1MDAzZXJ4X2NtZF9lcCA9PSBjb250ZXh0LVxcdTAwM2VlcCkge1xcbiAyMzM6XFx0XFx0XFx0bXdpZmlleF91c2Jfc3VibWl0X3J4X3VyYihjb250ZXh0LCBzaXplKTtcXG4gMjM0OlxcdFxcdH0gZWxzZSB7XFxuIDIzNTpcXHRcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXJ4X3BlbmRpbmcpIFxcdTAwM2M9IEhJR0hfUlhfUEVORElORykge1xcbiAyMzY6XFx0XFx0XFx0XFx0bXdpZmlleF91c2Jfc3VibWl0X3J4X3VyYihjb250ZXh0LCBzaXplKTtcXG4gMjM3OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDIzODpcXHRcXHRcXHRcXHRjb250ZXh0LVxcdTAwM2Vza2IgPSBOVUxMO1xcbiAyMzk6XFx0XFx0XFx0fVxcbiAyNDA6XFx0XFx0fVxcbiAyNDE6XFx0XFxuIDI0MjpcXHRcXHRyZXR1cm47XFxuIDI0MzpcXHR9XFxuIDI0NDpcXHRcXG4gMjQ1OlxcdHN0YXRpYyB2b2lkIG13aWZpZXhfdXNiX3R4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4gMjQ2OlxcdHtcXG4gMjQ3OlxcdFxcdHN0cnVjdCB1cmJfY29udGV4dCAqY29udGV4dCA9IChzdHJ1Y3QgdXJiX2NvbnRleHQgKikodXJiLVxcdTAwM2Vjb250ZXh0KTtcXG4gMjQ4OlxcdFxcdHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250ZXh0LVxcdTAwM2VhZGFwdGVyO1xcbiAyNDk6XFx0XFx0c3RydWN0IHVzYl9jYXJkX3JlYyAqY2FyZCA9IGFkYXB0ZXItXFx1MDAzZWNhcmQ7XFxuIDI1MDpcXHRcXHRzdHJ1Y3QgdXNiX3R4X2RhdGFfcG9ydCAqcG9ydDtcXG4gMjUxOlxcdFxcdGludCBpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozMzo1Ny40Mzc3NDk0NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDgxMDk2OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIERhdGEgUmVjZXB0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZm9jdXNpbmcgb24gdGhlIGBtd2lmaWV4X3VzYl9yZWN2YCBmdW5jdGlvbi4gTXkgYW5hbHlzaXMgbmVlZHMgdG8gYmVnaW4gaGVyZSwgYXMgdGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgd2l0aCByZXNwZWN0IHRvIHRoZSByZWNlaXZlZCBkYXRhLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBtYW5hZ2luZyB0aGUgaW5jb21pbmcgdHJhZmZpYy4gV2hhdCBhcmUgdGhlIGtleSBwcm9jZXNzZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBib3R0bGVuZWNrcz8gSSdsbCBiZSBsb29raW5nIGZvciBudWFuY2VzIGhlcmUsIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgYW55IHJlY2VpdmVkIGRhdGEuIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgdGhhdCBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQuIElzIHRoaXMgd2hlcmUgdGhlIGNyaXRpY2FsIGRlY2lzaW9ucyBhcmUgbWFkZSBhYm91dCBwYWNrZXQgcGFyc2luZywgZXJyb3IgaGFuZGxpbmcsIGFuZCB1bHRpbWF0ZWx5LCB3aGVyZSB0aGUgZGF0YSBpcyBwYXNzZWQgdXAgdG8gdGhlIGhpZ2hlciBsYXllcnM/IExldCdzIGZpZ3VyZSB0aGlzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzNzAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjAxLjUxODg0ODY3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ2OlxcdHN0YXRpYyBpbnQgbXdpZmlleF91c2JfcmVjdihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbiAgNDc6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHU4IGVwKVxcbiAgNDg6XFx0e1xcbiAgNDk6XFx0XFx0dTMyIHJlY3ZfdHlwZTtcXG4gIDUwOlxcdFxcdF9fbGUzMiB0bXA7XFxuICA1MTpcXHRcXHRpbnQgcmV0O1xcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHRpZiAoYWRhcHRlci1cXHUwMDNlaHNfYWN0aXZhdGVkKVxcbiAgNTQ6XFx0XFx0XFx0bXdpZmlleF9wcm9jZXNzX2hzX2NvbmZpZyhhZGFwdGVyKTtcXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2MgSU5URl9IRUFERVJfTEVOKSB7XFxuICA1NzpcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG4gIDU4OlxcdFxcdFxcdFxcdCAgICBcXFwiJXM6IGludmFsaWQgc2tiLVxcdTAwM2VsZW5cXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gIDU5OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gIDYwOlxcdFxcdH1cXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0c3dpdGNoIChlcCkge1xcbiAgNjM6XFx0XFx0Y2FzZSBNV0lGSUVYX1VTQl9FUF9DTURfRVZFTlQ6XFxuICA2NDpcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFVkVOVCxcXG4gIDY1OlxcdFxcdFxcdFxcdCAgICBcXFwiJXM6IEVQX0NNRF9FVkVOVFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiAgNjY6XFx0XFx0XFx0c2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIFxcdTAwMjZ0bXAsIElOVEZfSEVBREVSX0xFTik7XFxuICA2NzpcXHRcXHRcXHRyZWN2X3R5cGUgPSBsZTMyX3RvX2NwdSh0bXApO1xcbiAgNjg6XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBJTlRGX0hFQURFUl9MRU4pO1xcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHRcXHRzd2l0Y2ggKHJlY3ZfdHlwZSkge1xcbiAgNzE6XFx0XFx0XFx0Y2FzZSBNV0lGSUVYX1VTQl9UWVBFX0NNRDpcXG4gIDcyOlxcdFxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNlIE1XSUZJRVhfU0laRV9PRl9DTURfQlVGRkVSKSB7XFxuICA3MzpcXHRcXHRcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG4gIDc0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwiQ01EOiBza2ItXFx1MDAzZWxlbiB0b28gbGFyZ2VcXFxcblxcXCIpO1xcbiAgNzU6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLTE7XFxuICA3NjpcXHRcXHRcXHRcXHRcXHRnb3RvIGV4aXRfcmVzdG9yZV9za2I7XFxuICA3NzpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKCFhZGFwdGVyLVxcdTAwM2VjdXJyX2NtZCkge1xcbiAgNzg6XFx0XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgV0FSTiwgXFxcIkNNRDogbm8gY3Vycl9jbWRcXFxcblxcXCIpO1xcbiAgNzk6XFx0XFx0XFx0XFx0XFx0aWYgKGFkYXB0ZXItXFx1MDAzZXBzX3N0YXRlID09IFBTX1NUQVRFX1NMRUVQX0NGTSkge1xcbiAgODA6XFx0XFx0XFx0XFx0XFx0XFx0bXdpZmlleF9wcm9jZXNzX3NsZWVwX2NvbmZpcm1fcmVzcChcXG4gIDgxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGFkYXB0ZXIsIHNrYi1cXHUwMDNlZGF0YSxcXG4gIDgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlbGVuKTtcXG4gIDgzOlxcdFxcdFxcdFxcdFxcdFxcdHJldCA9IDA7XFxuICA4NDpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIGV4aXRfcmVzdG9yZV9za2I7XFxuICA4NTpcXHRcXHRcXHRcXHRcXHR9XFxuICA4NjpcXHRcXHRcXHRcXHRcXHRyZXQgPSAtMTtcXG4gIDg3OlxcdFxcdFxcdFxcdFxcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcXG4gIDg4OlxcdFxcdFxcdFxcdH1cXG4gIDg5OlxcdFxcbiAgOTA6XFx0XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlY3Vycl9jbWQtXFx1MDAzZXJlc3Bfc2tiID0gc2tiO1xcbiAgOTE6XFx0XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlY21kX3Jlc3BfcmVjZWl2ZWQgPSB0cnVlO1xcbiAgOTI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuICA5MzpcXHRcXHRcXHRjYXNlIE1XSUZJRVhfVVNCX1RZUEVfRVZFTlQ6XFxuICA5NDpcXHRcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBzaXplb2YodTMyKSkge1xcbiAgOTU6XFx0XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXFxuICA5NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFxcIkVWRU5UOiBza2ItXFx1MDAzZWxlbiB0b28gc21hbGxcXFxcblxcXCIpO1xcbiAgOTc6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLTE7XFxuICA5ODpcXHRcXHRcXHRcXHRcXHRnb3RvIGV4aXRfcmVzdG9yZV9za2I7XFxuICA5OTpcXHRcXHRcXHRcXHR9XFxuIDEwMDpcXHRcXHRcXHRcXHRza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgXFx1MDAyNnRtcCwgc2l6ZW9mKHUzMikpO1xcbiAxMDE6XFx0XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlZXZlbnRfY2F1c2UgPSBsZTMyX3RvX2NwdSh0bXApO1xcbiAxMDI6XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVZFTlQsXFxuIDEwMzpcXHRcXHRcXHRcXHRcXHQgICAgXFxcImV2ZW50X2NhdXNlICUjeFxcXFxuXFxcIiwgYWRhcHRlci1cXHUwMDNlZXZlbnRfY2F1c2UpO1xcbiAxMDQ6XFx0XFxuIDEwNTpcXHRcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzZSBNQVhfRVZFTlRfU0laRSkge1xcbiAxMDY6XFx0XFx0XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVJST1IsXFxuIDEwNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFxcIkVWRU5UOiBldmVudCBib2R5IHRvbyBsYXJnZVxcXFxuXFxcIik7XFxuIDEwODpcXHRcXHRcXHRcXHRcXHRyZXQgPSAtMTtcXG4gMTA5OlxcdFxcdFxcdFxcdFxcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcXG4gMTEwOlxcdFxcdFxcdFxcdH1cXG4gMTExOlxcdFxcbiAxMTI6XFx0XFx0XFx0XFx0bWVtY3B5KGFkYXB0ZXItXFx1MDAzZWV2ZW50X2JvZHksIHNrYi1cXHUwMDNlZGF0YSArXFxuIDExMzpcXHRcXHRcXHRcXHQgICAgICAgTVdJRklFWF9FVkVOVF9IRUFERVJfTEVOLCBza2ItXFx1MDAzZWxlbik7XFxuIDExNDpcXHRcXG4gMTE1OlxcdFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZWV2ZW50X3JlY2VpdmVkID0gdHJ1ZTtcXG4gMTE2OlxcdFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZWV2ZW50X3NrYiA9IHNrYjtcXG4gMTE3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMTg6XFx0XFx0XFx0ZGVmYXVsdDpcXG4gMTE5OlxcdFxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxcbiAxMjA6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJ1bmtub3duIHJlY3ZfdHlwZSAlI3hcXFxcblxcXCIsIHJlY3ZfdHlwZSk7XFxuIDEyMTpcXHRcXHRcXHRcXHRyZXQgPSAtMTtcXG4gMTIyOlxcdFxcdFxcdFxcdGdvdG8gZXhpdF9yZXN0b3JlX3NrYjtcXG4gMTIzOlxcdFxcdFxcdH1cXG4gMTI0OlxcdFxcdFxcdGJyZWFrO1xcbiAxMjU6XFx0XFx0Y2FzZSBNV0lGSUVYX1VTQl9FUF9EQVRBOlxcbiAxMjY6XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgREFUQSwgXFxcIiVzOiBFUF9EQVRBXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIDEyNzpcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzZSBNV0lGSUVYX1JYX0RBVEFfQlVGX1NJWkUpIHtcXG4gMTI4OlxcdFxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxcbiAxMjk6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJEQVRBOiBza2ItXFx1MDAzZWxlbiB0b28gbGFyZ2VcXFxcblxcXCIpO1xcbiAxMzA6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAxMzE6XFx0XFx0XFx0fVxcbiAxMzI6XFx0XFxuIDEzMzpcXHRcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2YWRhcHRlci1cXHUwMDNlcnhfZGF0YV9xLCBza2IpO1xcbiAxMzQ6XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlZGF0YV9yZWNlaXZlZCA9IHRydWU7XFxuIDEzNTpcXHRcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VyeF9wZW5kaW5nKTtcXG4gMTM2OlxcdFxcdFxcdGJyZWFrO1xcbiAxMzc6XFx0XFx0ZGVmYXVsdDpcXG4gMTM4OlxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxcbiAxMzk6XFx0XFx0XFx0XFx0ICAgIFxcXCIlczogdW5rbm93biBlbmRwb3J0ICUjeFxcXFxuXFxcIiwgX19mdW5jX18sIGVwKTtcXG4gMTQwOlxcdFxcdFxcdHJldHVybiAtMTtcXG4gMTQxOlxcdFxcdH1cXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0cmV0dXJuIC1FSU5QUk9HUkVTUztcXG4gMTQ0OlxcdFxcbiAxNDU6XFx0ZXhpdF9yZXN0b3JlX3NrYjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzQ6MDEuNTE4OTY0NzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyNjYyMDU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHByb2Nlc3MsIGJyZWFraW5nIGl0IGRvd24gc3RlcC1ieS1zdGVwOlxuXG4qKk5ldHdvcmsgRHJpdmVyIERhdGEgRmxvdyBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGlzIE1hcnZlbGwgV2ktRmkgZHJpdmVyIGhhbmRsZXMgaW5jb21pbmcgZGF0YS4gSXQgc2VlbXMgbGlrZSB0aGUgYG13aWZpZXhfdXNiX3JlY3ZgIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIHJlY2VpdmluZyBkYXRhIG92ZXIgdGhlIFVTQiBpbnRlcmZhY2UuIE15IGltbWVkaWF0ZSBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoZSBmdW5jdGlvbiBzZXRzIGZsYWdzIGluZGljYXRpbmcgcmVjZWlwdCBvZiBlaXRoZXIgYSBjb21tYW5kIHJlc3BvbnNlIG9yIGFuIGV2ZW50IOKAkyBzcGVjaWZpY2FsbHksIGBhZGFwdGVyLVx1MDAzZWNtZF9yZXNwX3JlY2VpdmVkID0gdHJ1ZWAgb3IgYGFkYXB0ZXItXHUwMDNlZXZlbnRfcmVjZWl2ZWQgPSB0cnVlYC4gVGhlbiwgYXMgaXMgb2Z0ZW4gdGhlIGNhc2Ugd2hlbiBkZWFsaW5nIHdpdGggYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMsIGl0IHJldHVybnMgYC1FSU5QUk9HUkVTU2AuIFRoaXMgc2lnbmFscyB0aGF0IHRoZSByZWNlaXZpbmcgaXMgaW4gcHJvZ3Jlc3MsIGFuZCB0aGUgc3lzdGVtIG5lZWRzIHRvIGRvIG90aGVyIHRoaW5ncyBhbmQgcmV0dXJuIGJhY2sgd2hlbiB0aGUgYWN0aW9uIGhhcyBmaW5pc2hlZC5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgYWZ0ZXJtYXRoLiBVcG9uIGNvbXBsZXRpb24gb2YgdGhlIFVTQiByZWNlaXZlIG9wZXJhdGlvbiDigJMgYXMgaGFuZGxlZCBpbiBgbXdpZmlleF91c2JfcnhfY29tcGxldGVgIOKAkyBhIGNhbGwgaXMgbWFkZSB0byBgbXdpZmlleF9xdWV1ZV9tYWluX3dvcmsoYWRhcHRlcilgLiBUaGlzIGxvb2tzIGxpa2UgdGhlIGRyaXZlcidzIHdheSBvZiBkZWZlcnJpbmcgdGhlIGFjdHVhbCBwcm9jZXNzaW5nIG9mIHRoZSBkYXRhIGl0IGp1c3QgcmVjZWl2ZWQuIFdoaWNoIG1ha2VzIHNlbnNlLCBlc3BlY2lhbGx5IGluIGEgZHJpdmVyIGNvbnRleHQsIHdoZXJlIHlvdSB3YW50IHRvIG1pbmltaXplIHRoZSBhbW91bnQgb2YgdGltZSB5b3UncmUgYmxvY2tpbmcgdGhlIFVTQiByZWNlaXZlIHBhdGguXG5cbkZpbmFsbHksIHRoZSBtYWluIHdvcmsgcXVldWUsIHRoZSBpbXBsaWNhdGlvbiBiZWluZyB0aGF0IHRoZSB3b3JrIHF1ZXVlIGl0c2VsZiBpcyByZXNwb25zaWJsZSBmb3IgcHJvY2Vzc2luZyBib3RoIGNvbW1hbmRzIGFuZCBldmVudHMuIEkgbmVlZCB0byBsb29rIGludG8gYG13aWZpZXhfbWFpbl9wcm9jZXNzYCBtb3JlIGNsb3NlbHkgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiBjb21tYW5kIHJlc3BvbnNlcyBhbmQgZXZlbnRzLCBhbmQgaG93IGl0IGhhbmRsZXMgdGhlbSBhcHByb3ByaWF0ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODEyNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzQ6MDUuODQ1NTg3Mjg0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTg5NTc3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtd2lmaWV4X21haW5fcHJvY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9MjE2PXN0YXRpYyB2b2lkIG1heWJlX3F1aXJrX2Z3X2Rpc2FibGVfZHMoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMjQ3LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6MjQ4OmludCBtd2lmaWV4X21haW5fcHJvY2VzcyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtMjQ5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtNDgxLX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjQ4MjpFWFBPUlRfU1lNQk9MX0dQTChtd2lmaWV4X21haW5fcHJvY2Vzcyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy00ODMtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jPTE0MTk9c3RhdGljIHZvaWQgbXdpZmlleF9tYWluX3dvcmtfcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0xNDI1LVxcdFxcdHJldHVybjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjE0MjY6XFx0bXdpZmlleF9tYWluX3Byb2Nlc3MoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy0xNDI3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg9MTUyOT1pbnQgbXdpZmlleF9zZXRfdHhfcG93ZXIoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTUzMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oOjE1MzI6aW50IG13aWZpZXhfbWFpbl9wcm9jZXNzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNTMzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYz0xMzQwPW13aWZpZXhfc2Rpb19pbnRlcnJ1cHQoc3RydWN0IHNkaW9fZnVuYyAqZnVuYylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmMtMTM1Ni1cXHRtd2lmaWV4X2ludGVycnVwdF9zdGF0dXMoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NkaW8uYzoxMzU3OlxcdG13aWZpZXhfbWFpbl9wcm9jZXNzKGFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zZGlvLmMtMTM1OC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjA1LjkwMTQ4ODM3MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI0NDk5OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgQ29yZSBQcm9jZXNzaW5nIExvb3AgaW4gdGhlIERyaXZlcioqXG5cbk9rYXksIHNvIGBtd2lmaWV4X21haW5fcHJvY2Vzc2Agc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgZnVuY3Rpb24gZm9yIHRoaXMgV2ktRmkgZHJpdmVyLiBUaGF0IG1ha2VzIHNlbnNlLiBJdCdzIHRoZSBtYWluIGxvb3AsIHRoZSBoZWFydGJlYXQuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyAqaG93KiBpdCdzIGRvaW5nIGl0cyBqb2IuXG5cblRoZSB0ZXh0IHBvaW50cyBvdXQgdGhhdCBpdCdzIGNhbGxpbmcgdHdvIGtleSBmdW5jdGlvbnM6IGBtd2lmaWV4X3Byb2Nlc3NfY21kcmVzcGAgYW5kIGBtd2lmaWV4X3Byb2Nlc3NfZXZlbnRgLiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgcHJpbWFyeSBmdW5jdGlvbnMgdG8gcHJvY2VzcyBjb21tYW5kcyBhbmQgZXZlbnRzIHJlY2VpdmVkLiBPZiBjb3Vyc2UsIHRoYXQncyB3aGF0IEknZCBleHBlY3QuIGBjbWRyZXNwYCBpcyBmb3IgaGFuZGxpbmcgY29tbWFuZCByZXNwb25zZXMsIHRoYXQncyBwcmV0dHkgc2VsZi1leHBsYW5hdG9yeS4gQnV0IGV2ZW50cywgdGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBsaWVzLCByaWdodD8gU28gbGV0J3MgZGl2ZSBpbnRvIGBtd2lmaWV4X3Byb2Nlc3NfZXZlbnRgIGFuZCBzZWUgd2hhdCB0aGF0J3MgYWN0dWFsbHkgZG9pbmcuIFRoYXQncyB0aGUgcGFydCB0aGF0J2xsIGxpa2VseSByZXZlYWwgaG93IHRoZSBkcml2ZXIgaXMgcmVzcG9uZGluZyB0byB0aGUgZW52aXJvbm1lbnQsIHRoZSBuZXR3b3JrLCBhbmQgdGhlIGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTIwMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjA5LjMyNTk5MDI2NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUzNDU1MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXdpZmlleF9wcm9jZXNzX2V2ZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NtZGV2dC5jPTQyMT12b2lkIG13aWZpZXhfZnJlZV9jbWRfYnVmZmVyKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY21kZXZ0LmMtNDY5LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jbWRldnQuYzo0NzA6aW50IG13aWZpZXhfcHJvY2Vzc19ldmVudChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jbWRldnQuYy00NzEte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYz0yNDg9aW50IG13aWZpZXhfbWFpbl9wcm9jZXNzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTM1MC1cXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2VldmVudF9yZWNlaXZlZCA9IGZhbHNlO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM6MzUxOlxcdFxcdFxcdG13aWZpZXhfcHJvY2Vzc19ldmVudChhZGFwdGVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTM1Mi1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oPTEwNzE9aW50IG13aWZpZXhfcHJvY2Vzc19tZ210X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xMDczLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTA3NDppbnQgbXdpZmlleF9wcm9jZXNzX2V2ZW50KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTA3NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzQ6MDkuMzkxMzQwNTkyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTY0NjgzMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBtd2lmaWV4X3Byb2Nlc3NfZXZlbnRgKipcblxuT2theSwgc28gd2UncmUgc3RhcnRpbmcgd2l0aCBgbXdpZmlleF9wcm9jZXNzX2V2ZW50YCBpbiBgY21kZXZ0LmNgLiBUaGF0J3MgYSBzb2xpZCBlbnRyeSBwb2ludCBmb3IgaW52ZXN0aWdhdGluZyBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGV2ZW50cywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgTWFydmVsbCBXaS1GaSBkcml2ZXIgY29udGV4dC4gVGhpcyBsaWtlbHkgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIGV2ZW50IGhhbmRsaW5nIGxvb3Agb3IgZGlzcGF0Y2ggbWVjaGFuaXNtLiBNeSBpbml0aWFsIGV4cGVjdGF0aW9uIGlzIHRvIGZpbmQgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciByZWNlaXZpbmcgZXZlbnRzIGZyb20gdGhlIGZpcm13YXJlIG9yIGhhcmR3YXJlIGFuZCB0aGVuIHJvdXRpbmcgdGhlbSB0byB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlcnMgYmFzZWQgb24gdGhlaXIgdHlwZS4gV2UncmUgcHJvYmFibHkgdGFsa2luZyBhYm91dCB0aGUgaGVhcnQgb2YgdGhlIGludGVycnVwdCBwcm9jZXNzaW5nIG9yIHBvbGxpbmcgbWVjaGFuaXNtIGhlcmUuIEknbSBrZWVuIHRvIHNlZSBpZiBpdCdzIGEgc2ltcGxlIHN3aXRjaC1jYXNlLCBhIG1vcmUgc29waGlzdGljYXRlZCBsb29rdXAgdGFibGUsIG9yIHNvbWV0aGluZyBldmVudC1kcml2ZW4gbGlrZSBhIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBzeXN0ZW0uIFRoZSBnb2FsIG5vdyBpcyB0byBsb29rIGF0IHRoZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTkyNywiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjEyLjY0NzgxMTE2OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NtZGV2dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzA6XFx0aW50IG13aWZpZXhfcHJvY2Vzc19ldmVudChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKVxcbiA0NzE6XFx0e1xcbiA0NzI6XFx0XFx0aW50IHJldCwgaTtcXG4gNDczOlxcdFxcdHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXY7XFxuIDQ3NDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYWRhcHRlci1cXHUwMDNlZXZlbnRfc2tiO1xcbiA0NzU6XFx0XFx0dTMyIGV2ZW50Y2F1c2U7XFxuIDQ3NjpcXHRcXHRzdHJ1Y3QgbXdpZmlleF9yeGluZm8gKnJ4X2luZm87XFxuIDQ3NzpcXHRcXG4gNDc4OlxcdFxcdGlmICgoYWRhcHRlci1cXHUwMDNlZXZlbnRfY2F1c2UgXFx1MDAyNiBFVkVOVF9JRF9NQVNLKSA9PSBFVkVOVF9SQURBUl9ERVRFQ1RFRCkge1xcbiA0Nzk6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFkYXB0ZXItXFx1MDAzZXByaXZfbnVtOyBpKyspIHtcXG4gNDgwOlxcdFxcdFxcdFxcdHByaXYgPSBhZGFwdGVyLVxcdTAwM2Vwcml2W2ldO1xcbiA0ODE6XFx0XFx0XFx0XFx0aWYgKG13aWZpZXhfaXNfMTFoX2FjdGl2ZShwcml2KSkge1xcbiA0ODI6XFx0XFx0XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlZXZlbnRfY2F1c2UgfD1cXG4gNDgzOlxcdFxcdFxcdFxcdFxcdFxcdCgocHJpdi1cXHUwMDNlYnNzX251bSBcXHUwMDI2IDB4ZmYpIFxcdTAwM2NcXHUwMDNjIDE2KSB8XFxuIDQ4NDpcXHRcXHRcXHRcXHRcXHRcXHQoKHByaXYtXFx1MDAzZWJzc190eXBlIFxcdTAwMjYgMHhmZikgXFx1MDAzY1xcdTAwM2MgMjQpO1xcbiA0ODU6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQ4NjpcXHRcXHRcXHRcXHR9XFxuIDQ4NzpcXHRcXHRcXHR9XFxuIDQ4ODpcXHRcXHR9XFxuIDQ4OTpcXHRcXG4gNDkwOlxcdFxcdGV2ZW50Y2F1c2UgPSBhZGFwdGVyLVxcdTAwM2VldmVudF9jYXVzZTtcXG4gNDkxOlxcdFxcbiA0OTI6XFx0XFx0LyogU2F2ZSB0aGUgbGFzdCBldmVudCB0byBkZWJ1ZyBsb2cgKi9cXG4gNDkzOlxcdFxcdGFkYXB0ZXItXFx1MDAzZWRiZy5sYXN0X2V2ZW50X2luZGV4ID1cXG4gNDk0OlxcdFxcdFxcdFxcdChhZGFwdGVyLVxcdTAwM2VkYmcubGFzdF9ldmVudF9pbmRleCArIDEpICUgREJHX0NNRF9OVU07XFxuIDQ5NTpcXHRcXHRhZGFwdGVyLVxcdTAwM2VkYmcubGFzdF9ldmVudFthZGFwdGVyLVxcdTAwM2VkYmcubGFzdF9ldmVudF9pbmRleF0gPVxcbiA0OTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0KHUxNikgZXZlbnRjYXVzZTtcXG4gNDk3OlxcdFxcbiA0OTg6XFx0XFx0LyogR2V0IEJTUyBudW1iZXIgYW5kIGNvcnJlc3BvbmRpbmcgcHJpdiAqL1xcbiA0OTk6XFx0XFx0cHJpdiA9IG13aWZpZXhfZ2V0X3ByaXZfYnlfaWQoYWRhcHRlciwgRVZFTlRfR0VUX0JTU19OVU0oZXZlbnRjYXVzZSksXFxuIDUwMDpcXHRcXHRcXHRcXHRcXHQgICAgICBFVkVOVF9HRVRfQlNTX1RZUEUoZXZlbnRjYXVzZSkpO1xcbiA1MDE6XFx0XFx0aWYgKCFwcml2KVxcbiA1MDI6XFx0XFx0XFx0cHJpdiA9IG13aWZpZXhfZ2V0X3ByaXYoYWRhcHRlciwgTVdJRklFWF9CU1NfUk9MRV9BTlkpO1xcbiA1MDM6XFx0XFxuIDUwNDpcXHRcXHQvKiBDbGVhciBCU1NfTk9fQklUUyBmcm9tIGV2ZW50ICovXFxuIDUwNTpcXHRcXHRldmVudGNhdXNlIFxcdTAwMjY9IEVWRU5UX0lEX01BU0s7XFxuIDUwNjpcXHRcXHRhZGFwdGVyLVxcdTAwM2VldmVudF9jYXVzZSA9IGV2ZW50Y2F1c2U7XFxuIDUwNzpcXHRcXG4gNTA4OlxcdFxcdGlmIChza2IpIHtcXG4gNTA5OlxcdFxcdFxcdHJ4X2luZm8gPSBNV0lGSUVYX1NLQl9SWENCKHNrYik7XFxuIDUxMDpcXHRcXHRcXHRtZW1zZXQocnhfaW5mbywgMCwgc2l6ZW9mKCpyeF9pbmZvKSk7XFxuIDUxMTpcXHRcXHRcXHRyeF9pbmZvLVxcdTAwM2Vic3NfbnVtID0gcHJpdi1cXHUwMDNlYnNzX251bTtcXG4gNTEyOlxcdFxcdFxcdHJ4X2luZm8tXFx1MDAzZWJzc190eXBlID0gcHJpdi1cXHUwMDNlYnNzX3R5cGU7XFxuIDUxMzpcXHRcXHRcXHRtd2lmaWV4X2RiZ19kdW1wKGFkYXB0ZXIsIEVWVF9ELCBcXFwiRXZlbnQgQnVmOlxcXCIsXFxuIDUxNDpcXHRcXHRcXHRcXHRcXHQgc2tiLVxcdTAwM2VkYXRhLCBza2ItXFx1MDAzZWxlbik7XFxuIDUxNTpcXHRcXHR9XFxuIDUxNjpcXHRcXG4gNTE3OlxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVWRU5ULCBcXFwiRVZFTlQ6IGNhdXNlOiAlI3hcXFxcblxcXCIsIGV2ZW50Y2F1c2UpO1xcbiA1MTg6XFx0XFxuIDUxOTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlYnNzX3JvbGUgPT0gTVdJRklFWF9CU1NfUk9MRV9VQVApXFxuIDUyMDpcXHRcXHRcXHRyZXQgPSBtd2lmaWV4X3Byb2Nlc3NfdWFwX2V2ZW50KHByaXYpO1xcbiA1MjE6XFx0XFx0ZWxzZVxcbiA1MjI6XFx0XFx0XFx0cmV0ID0gbXdpZmlleF9wcm9jZXNzX3N0YV9ldmVudChwcml2KTtcXG4gNTIzOlxcdFxcbiA1MjQ6XFx0XFx0YWRhcHRlci1cXHUwMDNlZXZlbnRfY2F1c2UgPSAwO1xcbiA1MjU6XFx0XFx0YWRhcHRlci1cXHUwMDNlZXZlbnRfc2tiID0gTlVMTDtcXG4gNTI2OlxcdFxcdGFkYXB0ZXItXFx1MDAzZWlmX29wcy5ldmVudF9jb21wbGV0ZShhZGFwdGVyLCBza2IpO1xcbiA1Mjc6XFx0XFxuIDUyODpcXHRcXHRyZXR1cm4gcmV0O1xcbiA1Mjk6XFx0fVxcbiA1MzA6XFx0XFxuIDUzMTpcXHQvKlxcbiA1MzI6XFx0ICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBhIGNvbW1hbmQgYW5kIHNlbmQgaXQgdG8gdGhlIGZpcm13YXJlLlxcbiA1MzM6XFx0ICpcXG4gNTM0OlxcdCAqIFByZXBhcmF0aW9uIGluY2x1ZGVzIC1cXG4gNTM1OlxcdCAqICAgICAgLSBTYW5pdHkgdGVzdHMgdG8gbWFrZSBzdXJlIHRoZSBjYXJkIGlzIHN0aWxsIHByZXNlbnQgb3IgdGhlIEZXXFxuIDUzNjpcXHQgKiAgICAgICAgaXMgbm90IHJlc2V0XFxuIDUzNzpcXHQgKiAgICAgIC0gR2V0dGluZyBhIG5ldyBjb21tYW5kIG5vZGUgZnJvbSB0aGUgY29tbWFuZCBmcmVlIHF1ZXVlXFxuIDUzODpcXHQgKiAgICAgIC0gSW5pdGlhbGl6aW5nIHRoZSBjb21tYW5kIG5vZGUgZm9yIGRlZmF1bHQgcGFyYW1ldGVyc1xcbiA1Mzk6XFx0ICogICAgICAtIEZpbGwgdXAgdGhlIG5vbi1kZWZhdWx0IHBhcmFtZXRlcnMgYW5kIGJ1ZmZlciBwb2ludGVyc1xcbiA1NDA6XFx0ICogICAgICAtIEFkZCB0aGUgY29tbWFuZCB0byBwZW5kaW5nIHF1ZXVlXFxuIDU0MTpcXHQgKi9cXG4gNTQyOlxcdGludCBtd2lmaWV4X3NlbmRfY21kKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHUxNiBjbWRfbm8sXFxuIDU0MzpcXHRcXHRcXHQgICAgIHUxNiBjbWRfYWN0aW9uLCB1MzIgY21kX29pZCwgdm9pZCAqZGF0YV9idWYsIGJvb2wgc3luYylcXG4gNTQ0OlxcdHtcXG4gNTQ1OlxcdFxcdGludCByZXQ7XFxuIDU0NjpcXHRcXHRzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi1cXHUwMDNlYWRhcHRlcjtcXG4gNTQ3OlxcdFxcdHN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRfbm9kZTtcXG4gNTQ4OlxcdFxcdHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWRfcHRyO1xcbiA1NDk6XFx0XFxuIDU1MDpcXHRcXHRpZiAoIWFkYXB0ZXIpIHtcXG4gNTUxOlxcdFxcdFxcdHByX2VycihcXFwiUFJFUF9DTUQ6IGFkYXB0ZXIgaXMgTlVMTFxcXFxuXFxcIik7XFxuIDU1MjpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDU1MzpcXHRcXHR9XFxuIDU1NDpcXHRcXG4gNTU1OlxcdFxcdGlmICh0ZXN0X2JpdChNV0lGSUVYX0lTX1NVU1BFTkRFRCwgXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXdvcmtfZmxhZ3MpKSB7XFxuIDU1NjpcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG4gNTU3OlxcdFxcdFxcdFxcdCAgICBcXFwiUFJFUF9DTUQ6IGRldmljZSBpbiBzdXNwZW5kZWQgc3RhdGVcXFxcblxcXCIpO1xcbiA1NTg6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA1NTk6XFx0XFx0fVxcbiA1NjA6XFx0XFxuIDU2MTpcXHRcXHRpZiAodGVzdF9iaXQoTVdJRklFWF9JU19IU19FTkFCTElORywgXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXdvcmtfZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxuIDU2MjpcXHRcXHQgICAgY21kX25vICE9IEhvc3RDbWRfQ01EXzgwMl8xMV9IU19DRkdfRU5IKSB7XFxuIDU2MzpcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG4gNTY0OlxcdFxcdFxcdFxcdCAgICBcXFwiUFJFUF9DTUQ6IGhvc3QgZW50ZXJpbmcgc2xlZXAgc3RhdGVcXFxcblxcXCIpO1xcbiA1NjU6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA1NjY6XFx0XFx0fVxcbiA1Njc6XFx0XFxuIDU2ODpcXHRcXHRpZiAodGVzdF9iaXQoTVdJRklFWF9TVVJQUklTRV9SRU1PVkVELCBcXHUwMDI2YWRhcHRlci1cXHUwMDNld29ya19mbGFncykpIHtcXG4gNTY5OlxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVSUk9SLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozNDoxMi42NDc5NzAyNDlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1MDM2MTY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBTVEEgRXZlbnQgSGFuZGxpbmcgaW4gbXdpZmlleF9wcm9jZXNzX3N0YV9ldmVudCoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gYG13aWZpZXhfcHJvY2Vzc19zdGFfZXZlbnRgLiBTdGFuZGFyZCBTdGF0aW9uIChTVEEpIGV2ZW50cy4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBiZSB0aGUgZm9jYWwgcG9pbnQgZm9yIGhhbmRsaW5nIGEgdmFyaWV0eSBvZiBTVEEtcmVsYXRlZCBldmVudHMuIEJ1dCB3aGF0IEkgbmVlZCB0byBwaW5wb2ludCBpcyBob3cgdGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgYW55IHNjYW4gcmVzdWx0cyB0aGF0IG1heSBiZSBhc3NvY2lhdGVkIHdpdGggaXQuIElzIHRoaXMgd2hlcmUgdGhlIGluY29taW5nIHNjYW4gcmVzdWx0cyBnZXQgcGFyc2VkIG9yIHVzZWQ/IEl04oCZcyBsb2dpY2FsIHRoYXQgYW4gU1RBIGV2ZW50IGhhbmRsZXIgd291bGQgbmVlZCB0byBkZWFsIHdpdGggc2NhbiBkYXRhIGV2ZW50dWFsbHksIGJ1dCBJIG11c3Qga25vdyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0J3MgcmVzcG9uc2libGUgZm9yIHRoZSBpbW1lZGlhdGUgaGFuZGxpbmcsIG9yIGlmIGl0IGRpc3BhdGNoZXMgdGhlIHNjYW4gcmVzdWx0cyB0byBvdGhlciBtb2R1bGVzIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjb2RlIGZsb3cgaGVyZSBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4NDAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjE1Ljg5ODMzNTY3NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0OTc2MzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfcHJvY2Vzc19zdGFfZXZlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY21kZXZ0LmM9NDcwPWludCBtd2lmaWV4X3Byb2Nlc3NfZXZlbnQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jbWRldnQuYy01MjEtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jbWRldnQuYzo1MjI6XFx0XFx0cmV0ID0gbXdpZmlleF9wcm9jZXNzX3N0YV9ldmVudChwcml2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY21kZXZ0LmMtNTIzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xMTQzPWludCBtd2lmaWV4X2hhbmRsZV91YXBfcnhfZm9yd2FyZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTE0NC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTE0NTppbnQgbXdpZmlleF9wcm9jZXNzX3N0YV9ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICopO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTE0Ni1pbnQgbXdpZmlleF9wcm9jZXNzX3VhcF9ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICopO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9ldmVudC5jPTU4Nz1td2lmaWV4X2Z3X2R1bXBfaW5mb19ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9ldmVudC5jLTY5NS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2V2ZW50LmM6Njk2OmludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX2V2ZW50KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9ldmVudC5jLTY5Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjE2LjAzMzMxODE2N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI1MzYzMTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTVEEgRXZlbnQgUHJvY2Vzc2luZyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbXdpZmlleF9wcm9jZXNzX3N0YV9ldmVudGAgZnVuY3Rpb24gd2l0aGluIGBzdGFfZXZlbnQuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCB3aGVuIGl0IGNvbWVzIHRvIGhhbmRsaW5nIHN0YXRpb24tcmVsYXRlZCBldmVudHMg4oCTIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIGZvciBTVEEgYmVoYXZpb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBkcml2ZXIgaXMgcmVzcG9uZGluZyB0byB0aGVzZSBldmVudHMuIFdoYXQgYXJlIHRoZSBrZXkgZGVjaXNpb24gcG9pbnRzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBldmVudCB0eXBlcz8gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgd2hlcmUgZnVydGhlciBvcHRpbWl6YXRpb24gY291bGQgYmUgYWNoaWV2ZWQuIE15IGZvY3VzIGlzIG9uIHRoZSBlZmZpY2llbmN5IGFuZCByb2J1c3RuZXNzIG9mIHRoZSBoYW5kbGluZywgYW5kIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gcmFjZSBjb25kaXRpb25zIG9yIGFueSB1bnVzdWFsIGNvbnRyb2wgZmxvdy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHNlY3JldHMgdGhpcyBmdW5jdGlvbiBob2xkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1NjAsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozNDoxOS4xNTg2ODQxNzNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfZXZlbnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTYsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjk2OlxcdGludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX2V2ZW50KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpXFxuIDY5NzpcXHR7XFxuIDY5ODpcXHRcXHRzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi1cXHUwMDNlYWRhcHRlcjtcXG4gNjk5OlxcdFxcdGludCByZXQgPSAwLCBpO1xcbiA3MDA6XFx0XFx0dTMyIGV2ZW50Y2F1c2UgPSBhZGFwdGVyLVxcdTAwM2VldmVudF9jYXVzZTtcXG4gNzAxOlxcdFxcdHUxNiBjdHJsLCByZWFzb25fY29kZTtcXG4gNzAyOlxcdFxcdHU4IGlic3Nfc3RhX2FkZHJbRVRIX0FMRU5dO1xcbiA3MDM6XFx0XFx0c3RydWN0IG13aWZpZXhfc3RhX25vZGUgKnN0YV9wdHI7XFxuIDcwNDpcXHRcXG4gNzA1OlxcdFxcdHN3aXRjaCAoZXZlbnRjYXVzZSkge1xcbiA3MDY6XFx0XFx0Y2FzZSBFVkVOVF9EVU1NWV9IT1NUX1dBS0VVUF9TSUdOQUw6XFxuIDcwNzpcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFUlJPUixcXG4gNzA4OlxcdFxcdFxcdFxcdCAgICBcXFwiaW52YWxpZCBFVkVOVDogRFVNTVlfSE9TVF9XQUtFVVBfU0lHTkFMLCBpZ25vcmUgaXRcXFxcblxcXCIpO1xcbiA3MDk6XFx0XFx0XFx0YnJlYWs7XFxuIDcxMDpcXHRcXHRjYXNlIEVWRU5UX0xJTktfU0VOU0VEOlxcbiA3MTE6XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVZFTlQsIFxcXCJldmVudDogTElOS19TRU5TRURcXFxcblxcXCIpO1xcbiA3MTI6XFx0XFx0XFx0aWYgKCFuZXRpZl9jYXJyaWVyX29rKHByaXYtXFx1MDAzZW5ldGRldikpXFxuIDcxMzpcXHRcXHRcXHRcXHRuZXRpZl9jYXJyaWVyX29uKHByaXYtXFx1MDAzZW5ldGRldik7XFxuIDcxNDpcXHRcXHRcXHRtd2lmaWV4X3dha2VfdXBfbmV0X2Rldl9xdWV1ZShwcml2LVxcdTAwM2VuZXRkZXYsIGFkYXB0ZXIpO1xcbiA3MTU6XFx0XFx0XFx0YnJlYWs7XFxuIDcxNjpcXHRcXG4gNzE3OlxcdFxcdGNhc2UgRVZFTlRfREVBVVRIRU5USUNBVEVEOlxcbiA3MTg6XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVZFTlQsIFxcXCJldmVudDogRGVhdXRoZW50aWNhdGVkXFxcXG5cXFwiKTtcXG4gNzE5OlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2V3cHMuc2Vzc2lvbl9lbmFibGUpIHtcXG4gNzIwOlxcdFxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIElORk8sXFxuIDcyMTpcXHRcXHRcXHRcXHRcXHQgICAgXFxcImluZm86IHJlY2VpdmUgZGVhdXRoIGV2ZW50IGluIHdwcyBzZXNzaW9uXFxcXG5cXFwiKTtcXG4gNzIyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA3MjM6XFx0XFx0XFx0fVxcbiA3MjQ6XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlZGJnLm51bV9ldmVudF9kZWF1dGgrKztcXG4gNzI1OlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VtZWRpYV9jb25uZWN0ZWQpIHtcXG4gNzI2OlxcdFxcdFxcdFxcdHJlYXNvbl9jb2RlID1cXG4gNzI3OlxcdFxcdFxcdFxcdFxcdGdldF91bmFsaWduZWRfbGUxNihhZGFwdGVyLVxcdTAwM2VldmVudF9ib2R5KTtcXG4gNzI4OlxcdFxcdFxcdFxcdG13aWZpZXhfcmVzZXRfY29ubmVjdF9zdGF0ZShwcml2LCByZWFzb25fY29kZSwgdHJ1ZSk7XFxuIDcyOTpcXHRcXHRcXHR9XFxuIDczMDpcXHRcXHRcXHRicmVhaztcXG4gNzMxOlxcdFxcbiA3MzI6XFx0XFx0Y2FzZSBFVkVOVF9ESVNBU1NPQ0lBVEVEOlxcbiA3MzM6XFx0XFx0XFx0bXdpZmlleF9kYmcoYWRhcHRlciwgRVZFTlQsIFxcXCJldmVudDogRGlzYXNzb2NpYXRlZFxcXFxuXFxcIik7XFxuIDczNDpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNld3BzLnNlc3Npb25fZW5hYmxlKSB7XFxuIDczNTpcXHRcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBJTkZPLFxcbiA3MzY6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJpbmZvOiByZWNlaXZlIGRpc2Fzc29jIGV2ZW50IGluIHdwcyBzZXNzaW9uXFxcXG5cXFwiKTtcXG4gNzM3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA3Mzg6XFx0XFx0XFx0fVxcbiA3Mzk6XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlZGJnLm51bV9ldmVudF9kaXNhc3NvYysrO1xcbiA3NDA6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZW1lZGlhX2Nvbm5lY3RlZCkge1xcbiA3NDE6XFx0XFx0XFx0XFx0cmVhc29uX2NvZGUgPVxcbiA3NDI6XFx0XFx0XFx0XFx0XFx0Z2V0X3VuYWxpZ25lZF9sZTE2KGFkYXB0ZXItXFx1MDAzZWV2ZW50X2JvZHkpO1xcbiA3NDM6XFx0XFx0XFx0XFx0bXdpZmlleF9yZXNldF9jb25uZWN0X3N0YXRlKHByaXYsIHJlYXNvbl9jb2RlLCB0cnVlKTtcXG4gNzQ0OlxcdFxcdFxcdH1cXG4gNzQ1OlxcdFxcdFxcdGJyZWFrO1xcbiA3NDY6XFx0XFxuIDc0NzpcXHRcXHRjYXNlIEVWRU5UX0xJTktfTE9TVDpcXG4gNzQ4OlxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVWRU5ULCBcXFwiZXZlbnQ6IExpbmsgbG9zdFxcXFxuXFxcIik7XFxuIDc0OTpcXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2VkYmcubnVtX2V2ZW50X2xpbmtfbG9zdCsrO1xcbiA3NTA6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZW1lZGlhX2Nvbm5lY3RlZCkge1xcbiA3NTE6XFx0XFx0XFx0XFx0cmVhc29uX2NvZGUgPVxcbiA3NTI6XFx0XFx0XFx0XFx0XFx0Z2V0X3VuYWxpZ25lZF9sZTE2KGFkYXB0ZXItXFx1MDAzZWV2ZW50X2JvZHkpO1xcbiA3NTM6XFx0XFx0XFx0XFx0aWYgKGFkYXB0ZXItXFx1MDAzZWhvc3RfbWxtZV9lbmFibGVkKSB7XFxuIDc1NDpcXHRcXHRcXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2Vwcml2X2xpbmtfbG9zdCA9IHByaXY7XFxuIDc1NTpcXHRcXHRcXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2Vob3N0X21sbWVfbGlua19sb3N0ID0gdHJ1ZTtcXG4gNzU2OlxcdFxcdFxcdFxcdFxcdHF1ZXVlX3dvcmsoYWRhcHRlci1cXHUwMDNlaG9zdF9tbG1lX3dvcmtxdWV1ZSxcXG4gNzU3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2Vob3N0X21sbWVfd29yayk7XFxuIDc1ODpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiA3NTk6XFx0XFx0XFx0XFx0XFx0bXdpZmlleF9yZXNldF9jb25uZWN0X3N0YXRlKHByaXYsIHJlYXNvbl9jb2RlLFxcbiA3NjA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHRydWUpO1xcbiA3NjE6XFx0XFx0XFx0XFx0fVxcbiA3NjI6XFx0XFx0XFx0fVxcbiA3NjM6XFx0XFx0XFx0YnJlYWs7XFxuIDc2NDpcXHRcXG4gNzY1OlxcdFxcdGNhc2UgRVZFTlRfUFNfU0xFRVA6XFxuIDc2NjpcXHRcXHRcXHRtd2lmaWV4X2RiZyhhZGFwdGVyLCBFVkVOVCwgXFxcImluZm86IEVWRU5UOiBTTEVFUFxcXFxuXFxcIik7XFxuIDc2NzpcXHRcXG4gNzY4OlxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZXBzX3N0YXRlID0gUFNfU1RBVEVfUFJFX1NMRUVQO1xcbiA3Njk6XFx0XFxuIDc3MDpcXHRcXHRcXHRtd2lmaWV4X2NoZWNrX3BzX2NvbmQoYWRhcHRlcik7XFxuIDc3MTpcXHRcXHRcXHRicmVhaztcXG4gNzcyOlxcdFxcbiA3NzM6XFx0XFx0Y2FzZSBFVkVOVF9QU19BV0FLRTpcXG4gNzc0OlxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVWRU5ULCBcXFwiaW5mbzogRVZFTlQ6IEFXQUtFXFxcXG5cXFwiKTtcXG4gNzc1OlxcdFxcdFxcdGlmICghYWRhcHRlci1cXHUwMDNlcHBzX3VhcHNkX21vZGUgXFx1MDAyNlxcdTAwMjZcXG4gNzc2OlxcdFxcdFxcdCAgICAocHJpdi1cXHUwMDNlcG9ydF9vcGVuIHx8XFxuIDc3NzpcXHRcXHRcXHQgICAgIChwcml2LVxcdTAwM2Vic3NfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykpIFxcdTAwMjZcXHUwMDI2XFxuIDc3ODpcXHRcXHRcXHQgICAgcHJpdi1cXHUwMDNlbWVkaWFfY29ubmVjdGVkIFxcdTAwMjZcXHUwMDI2IGFkYXB0ZXItXFx1MDAzZXNsZWVwX3BlcmlvZC5wZXJpb2QpIHtcXG4gNzc5OlxcdFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZXBwc191YXBzZF9tb2RlID0gdHJ1ZTtcXG4gNzgwOlxcdFxcdFxcdFxcdG13aWZpZXhfZGJnKGFkYXB0ZXIsIEVWRU5ULFxcbiA3ODE6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJldmVudDogUFBTL1VBUFNEIG1vZGUgYWN0aXZhdGVkXFxcXG5cXFwiKTtcXG4gNzgyOlxcdFxcdFxcdH1cXG4gNzgzOlxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZXR4X2xvY2tfZmxhZyA9IGZhbHNlO1xcbiA3ODQ6XFx0XFx0XFx0aWYgKGFkYXB0ZXItXFx1MDAzZXBwc191YXBzZF9tb2RlIFxcdTAwMjZcXHUwMDI2IGFkYXB0ZXItXFx1MDAzZWdlbl9udWxsX3BrdCkge1xcbiA3ODU6XFx0XFx0XFx0XFx0aWYgKG13aWZpZXhfY2hlY2tfbGFzdF9wYWNrZXRfaW5kaWNhdGlvbihwcml2KSkge1xcbiA3ODY6XFx0XFx0XFx0XFx0XFx0aWYgKGFkYXB0ZXItXFx1MDAzZWRhdGFfc2VudCB8fFxcbiA3ODc6XFx0XFx0XFx0XFx0XFx0ICAgIChhZGFwdGVyLVxcdTAwM2VpZl9vcHMuaXNfcG9ydF9yZWFkeSBcXHUwMDI2XFx1MDAyNlxcbiA3ODg6XFx0XFx0XFx0XFx0XFx0ICAgICAhYWRhcHRlci1cXHUwMDNlaWZfb3BzLmlzX3BvcnRfcmVhZHkocHJpdikpKSB7XFxuIDc4OTpcXHRcXHRcXHRcXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2Vwc19zdGF0ZSA9IFBTX1NUQVRFX0FXQUtFO1xcbiA3OTA6XFx0XFx0XFx0XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlcG1fd2FrZXVwX2NhcmRfcmVxID0gZmFsc2U7XFxuIDc5MTpcXHRcXHRcXHRcXHRcXHRcXHRhZGFwdGVyLVxcdTAwM2VwbV93YWtldXBfZndfdHJ5ID0gZmFsc2U7XFxuIDc5MjpcXHRcXHRcXHRcXHRcXHRcXHR0aW1lcl9kZWxldGUoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXdha2V1cF90aW1lcik7XFxuIDc5MzpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNzk0OlxcdFxcdFxcdFxcdFxcdH1cXG4gNzk1OlxcdFxcdFxcdFxcdFxcdGlmICghbXdpZmlleF9zZW5kX251bGxfcGFja2V0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjE5LjE1ODgwNDcyM1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTUwNjIwNTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIEZ1bmN0aW9uIENhbGwgQ2hhaW4qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG13aWZpZXhgIGNvZGUgYWdhaW4sIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBuZXR3b3JrIGNvbXBhdGliaWxpdHkgaXMgYWN0dWFsbHkgZGV0ZXJtaW5lZC4gSXQgbG9va3MgbGlrZSBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYCBpcyBhIGtleSBmdW5jdGlvbiBoZXJlLiBJIHNlZSB0aGF0IGl0J3MgYmVpbmcgY2FsbGVkIGJ5IGBtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudGAgYW5kIGBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudGAsIHdoaWNoLCBpbiB0dXJuLCBhcmUgY2FsbGVkIGZyb20gYG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlYC4gVGhhdCBtYWtlcyBzZW5zZTsgY2hlY2tpbmcgZm9yIE9VSSBwcmVzZW5jZSBpcyBhIGdvb2QgaW5kaWNhdG9yIG9mIGNvbXBhdGliaWxpdHksIGVzcGVjaWFsbHkgd2l0aCBXUEEvUlNOIHNlY3VyaXR5LlxuXG5Ob3csIGBtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZWAgZmVlZHMgaW50byBgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlgLiBUaGlzIG9uZSdzIGludGVyZXN0aW5nLCBhbmQgaXMgd2hlcmUgdGhpbmdzIHN0YXJ0IHRvIGdldCBtb3JlIGNvbnRleHR1YWxseSByZWxldmFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93ICp0aGlzKiBmdW5jdGlvbiBpcyB1c2VkLlxuXG5BbHJpZ2h0LCBgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlgIGlzIGNhbGxlZCBieSBgbXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zYCBhbmQgYG13aWZpZXhfYnNzX3N0YXJ0YC4gYG13aWZpZXhfYnNzX3N0YXJ0YCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCdzIGxpa2VseSBhIGZ1bmN0aW9uIHRoYXQgaW5pdGlhdGVzIHRoZSBjb25uZWN0aW9uIHRvIGEgbmV0d29yay4gSG93ZXZlciwgYG13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtc2AgaXMgYWxzbyBjYWxsaW5nIHRoaXMuIEkgdGhvdWdodCB0aGF0IGZ1bmN0aW9uIHdhcyBjYWxsZWQgYnkgYG13aWZpZXhfY21kXzgwMl8xMV9zY2FuYCwgYnV0IEkgc2hvdWxkIHZlcmlmeSB0aGF0LiBMZXQgbWUgZG91YmxlLWNoZWNrIGhvdyBgbXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zYCBpcyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQ4MCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjIzLjcwOTQyODE5MloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYwNTEyNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0xNjU5PXN0YXRpYyBpbnQgbXdpZmlleF9zYXZlX2hpZGRlbl9zc2lkX2NoYW5uZWxzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE3MDItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoxNzAzOnN0YXRpYyBpbnQgbXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNzA0LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0xNzQzPW13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1ZihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqKmJzc19pbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xODkwLVxcdFxcdFxcdFxcdFxcdCAgICBFVEhfQUxFTikpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoxODkxOlxcdFxcdFxcdFxcdFxcdG13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtcyhwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTg5Mi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgYnNzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzQ6MjMuNzc1NDgzODA4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTEwMjMzOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgV2ktRmkgU2NhbiBSZXNwb25zZSoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBwcm9jZXNzaW5nIGhhcHBlbmluZyBpbiB0aGUgV2ktRmkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHNjYW4gcmVzdWx0cy4gSSBzZWUgdGhhdCBgbXdpZmlleF9wYXJzZV9zaW5nbGVfcmVzcG9uc2VfYnVmYCBnZXRzIGNhbGxlZCwgYW5kIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gaXRzIG9yaWdpbnM6IGVpdGhlciBgbXdpZmlleF9yZXRfODAyXzExX3NjYW5gIG9yIGEgdmVyeSBzaW1pbGFyIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgcmVzcG9uc2UgYWZ0ZXIgYSBXaS1GaSBzY2FuIHJlcXVlc3QuIFRoYXQgZnVuY3Rpb24gaXMgY2xlYXJseSBhIGtleSBjb21wb25lbnQgaW4gZGlzc2VjdGluZyB0aGUgZGF0YSByZXR1cm5lZCBieSB0aGUgd2lyZWxlc3MgYWRhcHRlciBhZnRlciBpdCdzIGdvbmUgb3V0IGFuZCBsb29rZWQgZm9yIGF2YWlsYWJsZSBuZXR3b3Jrcy4gSXQncyB0aGUgcG9pbnQgd2hlcmUgd2Ugc3RhcnQgcHVsbGluZyBhcGFydCB0aGF0IHJhdyBidWZmZXIsIGxpa2VseSBmaWxsZWQgd2l0aCA4MDIuMTEgaW5mb3JtYXRpb24gZWxlbWVudHMgKElFcyksIHRvIGV4dHJhY3QgdGhlIG1lYW5pbmdmdWwgZGF0YSBsaWtlIFNTSUQsIGNoYW5uZWwsIHNpZ25hbCBzdHJlbmd0aCwgc2VjdXJpdHkgY2FwYWJpbGl0aWVzLCBhbmQgYWxsIHRoZSBqdWljeSBkZXRhaWxzIHdlIG5lZWQgdG8gcG9wdWxhdGUgb3VyIHNjYW4gcmVzdWx0cy4gSSdtIGltYWdpbmluZyBpdCdzIGEgY3JpdGljYWwgZnVuY3Rpb24sIHBvdGVudGlhbGx5IGNvbXBsZXggd2l0aCBhbGwgdGhlIHBvc3NpYmxlIHZhcmlhdGlvbnMgaW4gODAyLjExIGZyYW1lIGZvcm1hdHMgYW5kIHZlbmRvci1zcGVjaWZpYyBleHRlbnNpb25zLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhpcyBwYXJ0IGlzIHdoZXJlIHRoaW5ncyBjYW4gZ2V0IHRyaWNreSwgZGVhbGluZyB3aXRoIGFsbCB0aGUgZGlmZmVyZW50IHdheXMgdmVuZG9ycyBpbXBsZW1lbnQgdGhpbmdzLiBJIG5lZWQgdG8gYmUgc3VyZSBpdCBoYW5kbGVzIGV2ZXJ5dGhpbmcgcHJvcGVybHksIGVuc3VyaW5nIG5vIGRhdGEgbG9zcyBvciBjb3JydXB0aW9uLCBhbmQgdGhhdCBpdCByZW1haW5zIGVmZmljaWVudCBmb3IgZ29vZCBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUzNTYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwMDozNDoyNy4zODY1MDk4MjFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTMxODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MTc0Mj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoxNzQzOm13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1ZihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqKmJzc19pbmZvLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTc0NC1cXHRcXHRcXHRcXHQgIHUzMiAqYnl0ZXNfbGVmdCwgdTY0IGZ3X3RzZiwgdTggKnJhZGlvX3R5cGUsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTIxMDI9aW50IG13aWZpZXhfcmV0XzgwMl8xMV9zY2FuKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTIyMjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoyMjI5OlxcdFxcdHJldCA9IG13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1Zihwcml2LCBcXHUwMDI2YnNzX2luZm8sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0yMjMwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZieXRlc19sZWZ0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0yNjAzPWludCBtd2lmaWV4X2hhbmRsZV9ldmVudF9leHRfc2Nhbl9yZXBvcnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMjcxOS1cXHRcXHR9XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoyNzIwOlxcdFxcdHJldCA9IG13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1Zihwcml2LCBcXHUwMDI2YnNzX2luZm8sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0yNzIxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZieXRlc19sZWZ0LCBmd190c2YsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjI3LjQ0OTY0NjU0NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjcxNDQ5MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQXR0YWNrIFN1cmZhY2U6IFNjYW4gQ29tbWFuZCBIYW5kbGVycyoqXG5cbk9rYXksIHNvIGBtd2lmaWV4X3JldF84MDJfMTFfc2NhbmAgaXMgKnRoZSogZnVuY3Rpb24gSSBuZWVkIHRvIGxvb2sgYXQ7IGl0J3MgdGhlIGNvbW1hbmQgcmVzcG9uc2UgaGFuZGxlciBmb3Igc2NhbiBjb21tYW5kcy4gSSBrbm93IHRoYXQgYG13aWZpZXhfaGFuZGxlX2V2ZW50X2V4dF9zY2FuX3JlcG9ydGAgaXMgYWxzbyBpbXBvcnRhbnQgYXMgaXQgaGFuZGxlcyBzY2FuIHJlcG9ydHMuIEJvdGggb2YgdGhlc2UgYXJlIGludGVyZXN0aW5nIGJlY2F1c2UgdGhleSBnZXQgdGhlaXIgZGF0YSBmcm9tIHRoZSBmaXJtd2FyZSwgd2hpY2ggbWVhbnMgdGhhdCBJIGNhbiBwb3RlbnRpYWxseSBmZWVkIHRoZW0gZnV6emluZyBkYXRhIHRocm91Z2ggVVNCLiBUaGlzIGNvbmZpcm1zIHRoZSBtb2RpZmllZCBjb2RlIGlzIGluZGVlZCByZWFjaGFibGUgYW5kLCBjcnVjaWFsbHksIHByb2Nlc3NlcyAqdW50cnVzdGVkKiBkYXRhIGRpcmVjdGx5IGZyb20gdGhlIGRldmljZS9maXJtd2FyZS5cblxuQ29uc2lkZXJpbmcgdGhpcyBpcyBhIGJ1ZyBmaXggZm9yIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIHBhcnNpbmcgV2ktRmkgSUVzLCBJJ20gdGhpbmtpbmcsIFwiQWJzb2x1dGVseSwgdGhpcyBpcyBmdXp6LXdvcnRoeS5cIiBUaGUgcG90ZW50aWFsIGZvciBhIHJlbGlhYmxlIGNyYXNoIGhlcmUgaXMgaGlnaCwgYW5kIHRoaXMgc291bmRzIGxpa2UgYSBncmVhdCB1c2UgY2FzZSBmb3IgZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgTVdJRklFWGAgYW5kIGBNV0lGSUVYX1VTQmAgYXJlIGVuYWJsZWQgZm9yIHRoZSB0ZXN0IGFuZCBlbnN1cmUgSSBkbyBub3QgbmVnbGVjdCBhbnkgcG90ZW50aWFsbHkgcmVsYXRlZCBjb25maWdzLlxuTGV0IG1lIGNoZWNrIHRob3NlIGNvbmZpZ3VyYXRpb25zLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MTY5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjMxLjcyMTA5ODc2NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5MzEyNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1XSUZJRVhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjI6Y29uZmlnIE1XSUZJRVhcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMTEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6MTI6Y29uZmlnIE1XSUZJRVhfU0RJT1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTEzLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBTRDg3ODYvU0Q4Nzg3L1NEODc5Ny9TRDg4ODcvU0Q4ODk3L1NEODk3Ny9TRDg5NzgvU0Q4OTg3L1NEODk5N1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTI0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjI1OmNvbmZpZyBNV0lGSUVYX1BDSUVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0yNi1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgUENJRSA4NzY2Lzg4OTcvODk5N1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTM2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjM3OmNvbmZpZyBNV0lGSUVYX1VTQlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTM4LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBVU0I4NzY2Lzg3OTcvODk5N1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzQ6MzEuNzc3MDM0NjlaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQzMDc0NjMzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIFRhcmdldCBmb3IgRnV6emluZzogQSBEZWVwIERpdmUgaW50byBNV0lGSUVYIENvbXBhdGliaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHplcm9lZCBpbiBvbiB0aGUgYE1XSUZJRVhgIGFuZCBgTVdJRklFWF9VU0JgIG1vZHVsZXMgYXMgdGhlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBjb250ZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBpZGVudGlmeSBrZXkgZnVuY3Rpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBoYXMgbGVkIG1lIHRvIGEgZmV3IHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgZnVuY3Rpb25zLCBzbyBsZXQncyB3YWxrIHRocm91Z2ggbXkgcmVhc29uaW5nLlxuXG5Jbml0aWFsbHksIEkgaWRlbnRpZmllZCBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYCBhbmQgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQ6IGBtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudGAsIGBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudGAuIFRoZXNlIGFyZSB1bHRpbWF0ZWx5IGNhbGxlZCBieSBgbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVgLiBUaGUgZm9jdXMgaXMgdG8gZGV0ZXJtaW5lIG5ldHdvcmsgY29tcGF0aWJpbGl0eS4gSSB0aGVuIGFkZGVkIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWxhdGVkIHRvIHRoZXNlOiBgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlgLCBgbXdpZmlleF91cGRhdGVfY3Vycl9ic3NfcGFyYW1zYCwgYW5kIGBtd2lmaWV4X3BhcnNlX3NpbmdsZV9yZXNwb25zZV9idWZgLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZWlyIHN0YXRpYyBzdGF0dXMuIEkgY29uZmlybWVkIHRoYXQgYG13aWZpZXhfc2VhcmNoX291aV9pbl9pZWAsIGBtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudGAsIGBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudGAsIGBtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZWAsIGFuZCBgbXdpZmlleF9wYXJzZV9zaW5nbGVfcmVzcG9uc2VfYnVmYCBhcmUgc3RhdGljLCB3aGlsZSBgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlgLCBgbXdpZmlleF9yZXRfODAyXzExX3NjYW5gLCBhbmQgYG13aWZpZXhfaGFuZGxlX2V2ZW50X2V4dF9zY2FuX3JlcG9ydGAgYXJlIG5vdC5cblxuTmV4dCwgSSBjb21waWxlZCBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgbmVlZCBhdHRlbnRpb246XG4qICAgYG13aWZpZXhfc2VhcmNoX291aV9pbl9pZWBcbiogICBgbXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnRgXG4qICAgYG13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50YFxuKiAgIGBtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZWBcbiogICBgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlgXG4qICAgYG13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtc2BcbiogICBgbXdpZmlleF9wYXJzZV9zaW5nbGVfcmVzcG9uc2VfYnVmYFxuKiAgIGBtd2lmaWV4X3JldF84MDJfMTFfc2NhbmBcbiogICBgbXdpZmlleF9oYW5kbGVfZXZlbnRfZXh0X3NjYW5fcmVwb3J0YFxuXG5UaGVuLCBJIGxvb2tlZCBhdCB0aGUgY2FsbGVycyBvZiBgbXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlgLiBJIGZvdW5kIGBtd2lmaWV4X2Jzc19zdGFydGAgaW4gYHN0YV9pb2N0bC5jYCwgc28gSSBzaG91bGQgYWRkIHRoYXQgb25lLlxuXG5Ob3csIGEgY3J1Y2lhbCBwb2ludDogSXMgdGhpcyBldmVuIHJlYWNoYWJsZSB0aHJvdWdoIFVTQiBmdXp6aW5nPyBUaGUgYW5zd2VyIGlzIHllcy4gVGhlIFVTQiBkcml2ZXIgcmVjZWl2ZXMgZGF0YSBmcm9tIHRoZSBkZXZpY2UgaW4gdGhlIGZvcm0gb2YgY29tbWFuZCByZXNwb25zZXMgb3IgZXZlbnRzLiBTcGVjaWZpY2FsbHksIGBtd2lmaWV4X3JldF84MDJfMTFfc2NhbmAgaGFuZGxlcyBjb21tYW5kIHJlc3BvbnNlcyBhbmQgYG13aWZpZXhfaGFuZGxlX2V2ZW50X2V4dF9zY2FuX3JlcG9ydGAgaGFuZGxlcyBldmVudHMuIFRoaXMgbWVhbnMgYm90aCBhcmUgcmVhY2hhYmxlIHRocm91Z2ggZW11bGF0aW9uIG9mIHRoZSBVU0IgZGV2aWNlIHNlbmRpbmcgcmVzcG9uc2VzIG9yIGV2ZW50cyBmcm9tIGEgc2NhbiBjb21tYW5kLiBUaGVzZSBhcmUgZGVmaW5pdGVseSBnb29kIGZ1enppbmcgdGFyZ2V0cy5cblxuRmluYWxseSwgbGV0IG1lIHJlLWV2YWx1YXRlIG15IGxpc3QgZm9yIHRoZSBtb3N0IGVmZmVjdGl2ZSBmdXp6aW5nIHNjb3BlLiBgbXdpZmlleF9ic3Nfc3RhcnRgIG1pZ2h0IGJlIHRoZSBlbnRyeSBwb2ludCB0byBmdXp6aW5nIGEgbG90IG9mIHRoZSBjb21wYXRpYmlsaXR5IGNoZWNrcy4gV2hpbGUgaXQncyBjYWxsZWQgdGhyb3VnaCBhbiBpb2N0bC9jZmc4MDIxMSBjYWxsYmFjayAobGlrZSBmcm9tIGBtd2lmaWV4X3NldF9ic3NfcGFyYW1zYCksIGl0IGNhbGxzIGBtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eWAgb24gYSBCU1MgZGVzY3JpcHRvci4gVGhpcyBCU1MgZGVzY3JpcHRvciBpcywgaW1wb3J0YW50bHksIHBvcHVsYXRlZCBmcm9tIHNjYW4gcmVzdWx0cy4gU2NhbiByZXN1bHRzLCBpbiB0dXJuLCAqY29tZSBmcm9tIHRoZSBkZXZpY2UqLiBTbywgdGhlIGRhdGEgd2l0aGluIHRoZSBCU1MgZGVzY3JpcHRvciBpcyBpbmRlZWQgZGV2aWNlLWNvbnRyb2xsZWQgYW5kIGZ1enphYmxlLlxuXG5TbyB0aGUgcmVmaW5lZCBmb2N1cyBzeW1ib2xzIGFyZTpcblxuKiAgIGBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVgXG4qICAgYG13aWZpZXhfaXNfcnNuX291aV9wcmVzZW50YFxuKiAgIGBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudGBcbiogICBgbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVgXG4qICAgYG13aWZpZXhfY2hlY2tfbmV0d29ya19jb21wYXRpYmlsaXR5YFxuKiAgIGBtd2lmaWV4X3VwZGF0ZV9jdXJyX2Jzc19wYXJhbXNgXG4qICAgYG13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1ZmBcbiogICBgbXdpZmlleF9yZXRfODAyXzExX3NjYW5gXG4qICAgYG13aWZpZXhfaGFuZGxlX2V2ZW50X2V4dF9zY2FuX3JlcG9ydGBcbiogICBgbXdpZmlleF9ic3Nfc3RhcnRgXG5cbk5vdywgbGV0J3MgZXhwbG9yZSBgbXdpZmlleF9ic3Nfc3RhcnRgIGluIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcwMTksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjQ2LjA4NDUwMDUzMVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgxNTYwMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXdpZmlleF9ic3Nfc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYz0yMjY2PW13aWZpZXhfY2ZnODAyMTFfYXNzb2Moc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgc2l6ZV90IHNzaWRfbGVuLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2NmZzgwMjExLmMtMjQwNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYzoyNDA2OlxcdHJldCA9IG13aWZpZXhfYnNzX3N0YXJ0KHByaXYsIGJzcywgXFx1MDAyNnJlcV9zc2lkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYy0yNDA3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYz00NDI4PW13aWZpZXhfY2ZnODAyMTFfYXNzb2NpYXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYy00NTIwLVxcdGNmZzgwMjExX3JlZl9ic3MoYWRhcHRlci1cXHUwMDNld2lwaHksIHJlcS1cXHUwMDNlYnNzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvY2ZnODAyMTEuYzo0NTIxOlxcdHJldCA9IG13aWZpZXhfYnNzX3N0YXJ0KHByaXYsIHJlcS1cXHUwMDNlYnNzLCBcXHUwMDI2cmVxX3NzaWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9jZmc4MDIxMS5jLTQ1MjItXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xNDc4PWludCBtd2lmaWV4X3dhaXRfcXVldWVfY29tcGxldGUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE0NzktXFx0XFx0XFx0XFx0c3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZF9xdWV1ZWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTQ4MDppbnQgbXdpZmlleF9ic3Nfc3RhcnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTQ4MS1cXHRcXHQgICAgICBzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqcmVxX3NzaWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jPTI0OT1zdGF0aWMgaW50IG13aWZpZXhfcHJvY2Vzc19jb3VudHJ5X2llKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtMzE3LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYzozMTg6aW50IG13aWZpZXhfYnNzX3N0YXJ0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtMzE5LVxcdFxcdCAgICAgIHN0cnVjdCBjZmc4MDIxMV9zc2lkICpyZXFfc3NpZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzQ6NDYuMTQyNjYzODY3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDA3Nzk2MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWFydmVsbCBXaS1GaSBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBtd2lmaWV4X2Jzc19zdGFydGAgdXNlcyBhIGBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3NgLiBUaGlzIGlzIHBvcHVsYXRlZCBieSBgbWFjODAyMTEvY2ZnODAyMTFgLCByaWdodD8gQW5kIHRoYXQgaW5mb3JtYXRpb24gKmNvbWVzIGZyb20qIHRoZSBzY2FuIHJlc3VsdHMgcHJvdmlkZWQgYnkgdGhlIGRyaXZlciBpdHNlbGYsIGhhbmRlZCBvZmYgdG8gYGNmZzgwMjExYCwgdGhlbiBwYXNzZWQgYmFjayBkdXJpbmcgYXNzb2NpYXRpb24uIEdvdCBpdCDigJMgdGhlIGRldmljZSBpcyB0aGUgc291cmNlIG9mIHRoZSBCU1MgZGF0YS4gVGhhdCBjb25maXJtcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBkYXRhIGZsb3csIHdoaWNoIGlzIGhlbHBmdWwuIEFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlLCBhcyBleHBlY3RlZCwgYSBzb2xpZCBzdGFydGluZyBwb2ludC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBgRW5hYmxlQ29uZmlnc2AuIFdlIGhhdmU6XG5cbiogICBgTVdJRklFWGBcbiogICBgTVdJRklFWF9VU0JgXG4qICAgYE1XSUZJRVhfU0RJT2BcbiogICBgTVdJRklFWF9QQ0lFYFxuXG5Gb3IgdGVzdGluZyB0aGUgY29yZSBsb2dpYyB0aHJvdWdoIFVTQiBmdXp6aW5nLCBpdCBzZWVtcyBsaWtlIGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCBzaG91bGQgYmUgZW5vdWdoLiBUaGF0J2xsIGtlZXAgdGhlIHNjb3BlIG1hbmFnZWFibGUgZm9yIG5vdy5cblxuQnV0IHdhaXQgYSBzZWNvbmQuLi4gYmVmb3JlIEkgY29tbWl0IHRvIHRoYXQsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcuIERvZXMgYE1XSUZJRVhfVVNCYCBkZXBlbmQgb24gYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zPyBCZXN0IHRvIGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWdgIGZpbGUgcXVpY2tseSwganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gVGhhdCBjb3VsZCBpbXBhY3Qgb3VyIHRlc3Rpbmcgc3RyYXRlZ3kuIEknbGwgdGFrZSBhIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzcxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjUwLjk4MzQ0NTg3NloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE1XSUZJRVhcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gTWFydmVsbFxcbiAgIDc6XFx0XFx0ICA4MDIuMTFuL2FjIGNoaXBzZXRzLlxcbiAgIDg6XFx0XFxuICAgOTpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXFxuICAxMDpcXHRcXHQgIG13aWZpZXguXFxuICAxMTpcXHRcXG4gIDEyOlxcdGNvbmZpZyBNV0lGSUVYX1NESU9cXG4gIDEzOlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBTRDg3ODYvU0Q4Nzg3L1NEODc5Ny9TRDg4ODcvU0Q4ODk3L1NEODk3Ny9TRDg5NzgvU0Q4OTg3L1NEODk5N1xcXCJcXG4gIDE0OlxcdFxcdGRlcGVuZHMgb24gTVdJRklFWCBcXHUwMDI2XFx1MDAyNiBNTUNcXG4gIDE1OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDE2OlxcdFxcdHNlbGVjdCBXQU5UX0RFVl9DT1JFRFVNUFxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gTWFydmVsbFxcbiAgMTk6XFx0XFx0ICA4Nzg2Lzg3ODcvODc5Ny84ODg3Lzg4OTcvODk3Ny84OTc4Lzg5ODcvODk5NyBjaGlwc2V0cyB3aXRoXFxuICAyMDpcXHRcXHQgIFNESU8gaW50ZXJmYWNlLiBTRDg5NzggaXMgYWxzbyBrbm93biBhcyBOWFAgSVc0MTYuXFxuICAyMTpcXHRcXG4gIDIyOlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWRcXG4gIDIzOlxcdFxcdCAgbXdpZmlleF9zZGlvLlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRjb25maWcgTVdJRklFWF9QQ0lFXFxuICAyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgUENJRSA4NzY2Lzg4OTcvODk5N1xcXCJcXG4gIDI3OlxcdFxcdGRlcGVuZHMgb24gTVdJRklFWCBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gIDI4OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDI5OlxcdFxcdHNlbGVjdCBXQU5UX0RFVl9DT1JFRFVNUFxcbiAgMzA6XFx0XFx0aGVscFxcbiAgMzE6XFx0XFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gTWFydmVsbFxcbiAgMzI6XFx0XFx0ICA4NzY2Lzg4OTcvODk5NyBjaGlwc2V0cyB3aXRoIFBDSWUgaW50ZXJmYWNlLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXFxuICAzNTpcXHRcXHQgIG13aWZpZXhfcGNpZS5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0Y29uZmlnIE1XSUZJRVhfVVNCXFxuICAzODpcXHRcXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgVVNCODc2Ni84Nzk3Lzg5OTdcXFwiXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIE1XSUZJRVggXFx1MDAyNlxcdTAwMjYgVVNCXFxuICA0MDpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICA0MTpcXHRcXHRoZWxwXFxuICA0MjpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBNYXJ2ZWxsXFxuICA0MzpcXHRcXHQgIDg3OTcvODk5NyBjaGlwc2V0IHdpdGggVVNCIGludGVyZmFjZS5cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGl0IGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZFxcbiAgNDY6XFx0XFx0ICBtd2lmaWV4X3VzYi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzQ6NTAuOTgzNTEzODc2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NDExODY4MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE1XSUZJRVggRHJpdmVyKipcblxuT2theSwgc28gSSd2ZSB6ZXJvZWQgaW4gb24gdGhlIGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCBtb2R1bGVzLiBUaGV5J3JlIGNsZWFybHkgdGhlIGtleSBwbGF5ZXJzIGhlcmUsIHJlbHlpbmcgb24gYENGRzgwMjExYCBhbmQgdGhlIGBVU0JgIHN1YnN5c3RlbSwgd2hpY2ggYXJlIHVzdWFsbHkgYmFrZWQgaW50byBTeXprYWxsZXIgY29uZmlndXJhdGlvbnMsIG1ha2luZyB0aGVtIHByZXR0eSBhY2Nlc3NpYmxlIHRhcmdldHMuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIHN0cmF0ZWd5LiBUaGlzIGlzIHdoYXQncyBsb29raW5nIHByb21pc2luZzpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFllcywgYWJzb2x1dGVseS4gVGhpcyBpcyBwcm9taXNpbmcuXG4qICAgKipGb2N1cyBTeW1ib2xzOioqIFdlIGhhdmUgYSBzb2xpZCBsaXN0IG9mIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGVzZSBpbiBtb3JlIGRldGFpbCwgYnV0IHRoZSBpbml0aWFsIGltcHJlc3Npb25zIGFyZSBnb29kLiBUaGV5J3JlIHJlbGF0ZWQgdG8gcGFyc2luZyBXaS1GaSBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUVzKSwgaGFuZGxpbmcgc2NhbiByZXN1bHRzLCBhbmQgbWFuYWdpbmcgbmV0d29yayBjb21wYXRpYmlsaXR5LCBhbGwgb2Ygd2hpY2ggYXJlIGNvbW1vbiBmdXp6aW5nIHRhcmdldHM6XG4gICAgKiAgIGBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVgXG4gICAgKiAgIGBtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudGBcbiAgICAqICAgYG13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50YFxuICAgICogICBgbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVgXG4gICAgKiAgIGBtd2lmaWV4X2NoZWNrX25ldHdvcmtfY29tcGF0aWJpbGl0eWBcbiAgICAqICAgYG13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtc2BcbiAgICAqICAgYG13aWZpZXhfcGFyc2Vfc2luZ2xlX3Jlc3BvbnNlX2J1ZmBcbiAgICAqICAgYG13aWZpZXhfcmV0XzgwMl8xMV9zY2FuYFxuICAgICogICBgbXdpZmlleF9oYW5kbGVfZXZlbnRfZXh0X3NjYW5fcmVwb3J0YFxuICAgICogICBgbXdpZmlleF9ic3Nfc3RhcnRgXG4qICAgKipFbmFibGVDb25maWdzOioqIFRoZSBgTVdJRklFWGAgYW5kIGBNV0lGSUVYX1VTQmAgY29uZmlndXJhdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkLlxuKiAgICoqUmVhc29uaW5nOioqIFRoZSBpbml0aWFsIG1vdGl2YXRpb24gc3RlbXMgZnJvbSBhIHBhdGNoIHRoYXQgZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgaW4gYG13aWZpZXhfc2VhcmNoX291aV9pbl9pZWAgd2hlbiBkZWFsaW5nIHdpdGggV2ktRmkgSUVzLiBCZWNhdXNlIHRoZSBkcml2ZXIgb3BlcmF0ZXMgb3ZlciBVU0IsIHRoaXMgc3VnZ2VzdHMgdGhlIGZpcm13YXJlIHJlc3BvbnNlcyBjYW4gYmUgZnV6emVkIHZpYSB0aGUgVVNCIHN1YnN5c3RlbS4gVGhhdCdzIGEgZ29vZCBhdHRhY2sgc3VyZmFjZS5cblxuTm93LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGNhbGwgZ3JhcGhzIHRvIGVuc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSd2ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGF0IGBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWVgIGlzIG9ubHkgY2FsbGVkIGJ5IGBtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudGAgYW5kIGBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudGAuIGBtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudGAgZ2V0cyBjYWxsZWQgYnkgYG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlYCwgc28gd2UgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhpcyBhcmVhLiBXZSBuZWVkIHRvIGNoZWNrIGlmIGBtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudGAgaXMgY2FsbGVkIGVsc2V3aGVyZS4gVGhhdCBoZWxwcyB1cyBzb2xpZGlmeSB0aGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXR0YWNrIHN1cmZhY2UsIGJ5IG1hcHBpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IHVsdGltYXRlbHkgY2FsbCB0aGUgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTEwMiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDAwOjM0OjU4LjYyNDcwMjgyNFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMjM1MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0xNzY9c3RhdGljIHU4XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoxNzc6bXdpZmlleF9pc193cGFfb3VpX3ByZXNlbnQoc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MsIHUzMiBjaXBoZXIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNzgte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYz0zNDQ9bXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMzg5LVxcdFxcdFxcdCAgICAgYnNzX2Rlc2MtXFx1MDAzZWJjbl9odF9jYXApIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzozOTA6XFx0XFx0XFx0ICAgICFtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudChic3NfZGVzYyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTM5MS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgQ0lQSEVSX1NVSVRFX0NDTVApKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0zOTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzozOTM6XFx0XFx0XFx0XFx0aWYgKG13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0zOTQtXFx0XFx0XFx0XFx0XFx0XFx0KGJzc19kZXNjLCBDSVBIRVJfU1VJVEVfVEtJUCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzQ6NTguNzM3OTQ3ODY2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NDA5NzE1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgZXhwcmVzc2VkIGFzIHRob3VnaCBJJ20gdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipBbmFseXNpcyBDb21wbGV0ZTogRm9jdXMgb24gQ29tcGF0aWJpbGl0eSBDaGVjayoqXG5cbkFscmlnaHQsIHRoYXQgd2FzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhbmFseXNpcy4gSSd2ZSBkcmlsbGVkIGRvd24sIGFuZCBpdCdzIGNsZWFyIHRoZSByZWxldmFudCBpc3N1ZSByZXNpZGVzICpleGNsdXNpdmVseSogd2l0aGluIGBtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZWAuIE5vdGhpbmcgZWxzZSBzZWVtcyB0byBmYWN0b3IgaW50byB0aGlzLiBNeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24gaXMgc29saWQsIGFuZCBJJ20gY29uZmlkZW50IGluIG15IGNvbmNsdXNpb25zLiBJJ3ZlIGdvdCBhIGNvbXByZWhlbnNpdmUgcGljdHVyZSBvZiB3aGF0J3MgZ29pbmcgb24uIFRpbWUgdG8gbW92ZSBmb3J3YXJkIOKAkyBJJ2xsIGluaXRpYXRlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuIExldCdzIGdldCB0aGVzZSBmaW5kaW5ncyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI2MDksIk91dHB1dFRva2VucyI6MjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDA6MzU6MDMuMjc4OTIxNTM1WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NTc0OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNV0lGSUVYXCIsXG4gICAgXCJNV0lGSUVYX1VTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm13aWZpZXhfc2VhcmNoX291aV9pbl9pZVwiLFxuICAgIFwibXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnRcIixcbiAgICBcIm13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50XCIsXG4gICAgXCJtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZVwiLFxuICAgIFwibXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlcIixcbiAgICBcIm13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtc1wiLFxuICAgIFwibXdpZmlleF9wYXJzZV9zaW5nbGVfcmVzcG9uc2VfYnVmXCIsXG4gICAgXCJtd2lmaWV4X3JldF84MDJfMTFfc2NhblwiLFxuICAgIFwibXdpZmlleF9oYW5kbGVfZXZlbnRfZXh0X3NjYW5fcmVwb3J0XCIsXG4gICAgXCJtd2lmaWV4X2Jzc19zdGFydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYCB3aGVuIHBhcnNpbmcgV2ktRmkgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gdGhlIGRyaXZlciBwcm9jZXNzZXMgc2NhbiByZXN1bHRzIG9yIGV2ZW50cyBmcm9tIHRoZSBmaXJtd2FyZS4gU2luY2UgdGhlIG13aWZpZXggZHJpdmVyIHN1cHBvcnRzIFVTQiwgdGhlIGZpcm13YXJlIHJlc3BvbnNlcyBjYW4gYmUgZnV6emVkIHZpYSB0aGUgVVNCIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNV0lGSUVYXCIsXG4gICAgXCJNV0lGSUVYX1VTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm13aWZpZXhfc2VhcmNoX291aV9pbl9pZVwiLFxuICAgIFwibXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnRcIixcbiAgICBcIm13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50XCIsXG4gICAgXCJtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZVwiLFxuICAgIFwibXdpZmlleF9jaGVja19uZXR3b3JrX2NvbXBhdGliaWxpdHlcIixcbiAgICBcIm13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtc1wiLFxuICAgIFwibXdpZmlleF9wYXJzZV9zaW5nbGVfcmVzcG9uc2VfYnVmXCIsXG4gICAgXCJtd2lmaWV4X3JldF84MDJfMTFfc2NhblwiLFxuICAgIFwibXdpZmlleF9oYW5kbGVfZXZlbnRfZXh0X3NjYW5fcmVwb3J0XCIsXG4gICAgXCJtd2lmaWV4X2Jzc19zdGFydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBgbXdpZmlleF9zZWFyY2hfb3VpX2luX2llYCB3aGVuIHBhcnNpbmcgV2ktRmkgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gdGhlIGRyaXZlciBwcm9jZXNzZXMgc2NhbiByZXN1bHRzIG9yIGV2ZW50cyBmcm9tIHRoZSBmaXJtd2FyZS4gU2luY2UgdGhlIG13aWZpZXggZHJpdmVyIHN1cHBvcnRzIFVTQiwgdGhlIGZpcm13YXJlIHJlc3BvbnNlcyBjYW4gYmUgZnV6emVkIHZpYSB0aGUgVVNCIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowhvdfm[1] Phase: Succeeded StartedAt: 2026-07-12 00:37:03 +0000 UTC FinishedAt: 2026-07-12 00:37:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-12 00:37:03 +0000 UTC FinishedAt: 2026-07-12 00:37:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[2] Phase: Succeeded StartedAt: 2026-07-12 00:37:03 +0000 UTC FinishedAt: 2026-07-12 02:28:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-12 00:37:03 +0000 UTC FinishedAt: 2026-07-12 02:28:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-12 00:37:03 +0000 UTC FinishedAt: 2026-07-12 00:37:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-12 00:37:03 +0000 UTC FinishedAt: 2026-07-12 00:37:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowhvdfm/series-workflowhvdfm-convert-artifact-3406339186/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-12 00:37:13 +0000 UTC FinishedAt: 2026-07-12 01:22:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-12 00:37:13 +0000 UTC FinishedAt: 2026-07-12 01:22:42 +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:*fb8784e7-3f67-4c61-af99-e04f3cb22487,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-workflowhvdfm/series-workflowhvdfm-convert-artifact-3406339186/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": "ca243052-6ab1-49df-8b6f-7cfe3fb82a0c", "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-workflowhvdfm/series-workflowhvdfm-build-action-1509565424/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-12 00:37:13 +0000 UTC FinishedAt: 2026-07-12 01:22:32 +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:*fb8784e7-3f67-4c61-af99-e04f3cb22487,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-workflowhvdfm/series-workflowhvdfm-convert-artifact-3406339186/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": "ca243052-6ab1-49df-8b6f-7cfe3fb82a0c", "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-workflowhvdfm/series-workflowhvdfm-build-action-1509565424/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-12 01:22:42 +0000 UTC FinishedAt: 2026-07-12 01:22:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-12 01:22:42 +0000 UTC FinishedAt: 2026-07-12 01:22:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-12 01:22:42 +0000 UTC FinishedAt: 2026-07-12 01:22:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-12 01:22:42 +0000 UTC FinishedAt: 2026-07-12 01:22:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowhvdfm/series-workflowhvdfm-convert-artifact-877090701/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-12 01:22:52 +0000 UTC FinishedAt: 2026-07-12 01:25:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-12 01:22:52 +0000 UTC FinishedAt: 2026-07-12 01:24:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ca243052-6ab1-49df-8b6f-7cfe3fb82a0c,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-workflowhvdfm/series-workflowhvdfm-build-action-1509565424/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-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-12 01:25:01 +0000 UTC FinishedAt: 2026-07-12 01:25:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-12 01:25:01 +0000 UTC FinishedAt: 2026-07-12 01:25:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-12 01:25:01 +0000 UTC FinishedAt: 2026-07-12 02:23:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-12 01:25:01 +0000 UTC FinishedAt: 2026-07-12 02:23:53 +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:*fb8784e7-3f67-4c61-af99-e04f3cb22487,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-workflowhvdfm/series-workflowhvdfm-convert-artifact-877090701/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": "53beee08-1df2-440f-95b2-d07ccc7abb34", "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-workflowhvdfm/series-workflowhvdfm-build-action-3329746281/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-12 01:25:01 +0000 UTC FinishedAt: 2026-07-12 02:23:43 +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:*fb8784e7-3f67-4c61-af99-e04f3cb22487,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-workflowhvdfm/series-workflowhvdfm-convert-artifact-877090701/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": "53beee08-1df2-440f-95b2-d07ccc7abb34", "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-workflowhvdfm/series-workflowhvdfm-build-action-3329746281/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-12 02:23:53 +0000 UTC FinishedAt: 2026-07-12 02:23:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-12 02:23:53 +0000 UTC FinishedAt: 2026-07-12 02:23:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-12 02:23:53 +0000 UTC FinishedAt: 2026-07-12 02:26:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-12 02:23:53 +0000 UTC FinishedAt: 2026-07-12 02:25:54 +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:*53beee08-1df2-440f-95b2-d07ccc7abb34,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-workflowhvdfm/series-workflowhvdfm-build-action-3329746281/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-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-12 02:26:04 +0000 UTC FinishedAt: 2026-07-12 02:28:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-12 02:26:04 +0000 UTC FinishedAt: 2026-07-12 02:28:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"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:*ca243052-6ab1-49df-8b6f-7cfe3fb82a0c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*53beee08-1df2-440f-95b2-d07ccc7abb34,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-workflowhvdfm/series-workflowhvdfm-build-action-1509565424/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-workflowhvdfm/series-workflowhvdfm-build-action-3329746281/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-12 02:26:04 +0000 UTC FinishedAt: 2026-07-12 02:26:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-12 02:26:04 +0000 UTC FinishedAt: 2026-07-12 02:26:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"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-workflowhvdfm/series-workflowhvdfm-convert-artifact-3752517234/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-12 02:26:04 +0000 UTC FinishedAt: 2026-07-12 02:26:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-12 02:26:04 +0000 UTC FinishedAt: 2026-07-12 02:26:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-12 02:26:04 +0000 UTC FinishedAt: 2026-07-12 02:26:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-12 02:26:14 +0000 UTC FinishedAt: 2026-07-12 02:28:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvdfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_search_oui_in_ie","mwifiex_is_rsn_oui_present","mwifiex_is_wpa_oui_present","mwifiex_is_network_compatible","mwifiex_check_network_compatibility","mwifiex_update_curr_bss_params","mwifiex_parse_single_response_buf","mwifiex_ret_802_11_scan","mwifiex_handle_event_ext_scan_report","mwifiex_bss_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB"],"series_id":"b1fdcdc4-2083-4115-8fde-d385e180e1ea","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-12 02:26:14 +0000 UTC FinishedAt: 2026-07-12 02:28:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ca243052-6ab1-49df-8b6f-7cfe3fb82a0c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*53beee08-1df2-440f-95b2-d07ccc7abb34,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-workflowhvdfm/series-workflowhvdfm-build-action-1509565424/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-workflowhvdfm/series-workflowhvdfm-build-action-3329746281/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-workflowhvdfm/series-workflowhvdfm-convert-artifact-3752517234/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,}