Name: series-workflow98tqd Phase: Succeeded StartedAt: 2026-07-11 11:22:03 +0000 UTC FinishedAt: 2026-07-11 16:15:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[0] Phase: Succeeded StartedAt: 2026-07-11 11:22:03 +0000 UTC FinishedAt: 2026-07-11 11:43:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[0].run-triage Phase: Succeeded StartedAt: 2026-07-11 11:22:03 +0000 UTC FinishedAt: 2026-07-11 11:43:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "520d7d7942025a58a0c79a61b905a556cf3cb524", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "BPF_EVENTS", "FTRACE", "FUNCTION_TRACER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "520d7d7942025a58a0c79a61b905a556cf3cb524", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "BPF_EVENTS", "FTRACE", "FUNCTION_TRACER" ], "series_id": "318bc104-7bfc-4851-a4da-198dbede0b9d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "register_fentry_multi", "bpf_trampoline_multi_attach", "bpf_tracing_multi_attach" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtGVFJBQ0UmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVnaXN0ZXJfZmVudHJ5X211bHRpJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaCYjMzQ7LAogICAgJiMzNDticGZfdHJhY2luZ19tdWx0aV9hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB0cmFtcG9saW5lIGxvZ2ljIHRvIGNvcnJlY3RseSBzZXQgYGZ0cmFjZV9tYW5hZ2VkYCBmb3IgbXVsdGktYXR0YWNoIGZlbnRyeSBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBmdHJhY2UgYW5kIEJQRiB0cmFtcG9saW5lcyBpbnRlcmFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGZkMWQ5YWMxZTg5MjE1MGIxNjBiYmFjNTcwZmJhODhkMTczNDVlYjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxMTo0MTowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5pbmRleCAxYTcyMWZjNGJlZjU2Mi4uNmVhZGY2NGY3ZWM5MGYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbkBAIC0xNTM2LDYgJiM0MzsxNTM2LDcgQEAgc3RhdGljIGludCByZWdpc3Rlcl9mZW50cnlfbXVsdGkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFcbiBcdGlmIChicGZfdHJhbXBvbGluZV91c2Vfam1wKHRyLVx1MDAzZWZsYWdzKSlcbiBcdFx0YWRkciA9IGZ0cmFjZV9qbXBfc2V0KGFkZHIpO1xuIFxuJiM0MztcdHRyLVx1MDAzZWZ1bmMuZnRyYWNlX21hbmFnZWQgPSB0cnVlO1xuIFx0ZnRyYWNlX2hhc2hfYWRkKGRhdGEtXHUwMDNlcmVnLCBkYXRhLVx1MDAzZWVudHJ5LCBpcCwgYWRkcik7XG4gXHR0ci1cdTAwM2VjdXJfaW1hZ2UgPSBpbTtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuY1xuaW5kZXggZjAyZmZjN2Y0MWQ3ODQuLjBhYTk1MzJhMDVjZmVjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX211bHRpLmNcbkBAIC00NjAsNiAmIzQzOzQ2MCw3MyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ludGVyc2VjdCh2b2lkKVxuIFx0dHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ZlbnRyeV9hZnRlcl9tdWx0aSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmdW5jc1tdID0ge1xuJiM0MztcdFx0XCYjMzQ7YnBmX2ZlbnRyeV90ZXN0MVwmIzM0OyxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqZmVudHJ5X2xpbmsgPSBOVUxMLCAqbXVsdGlfbGluayA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IHRyYWNpbmdfbXVsdGlfaW50ZXJzZWN0ICpza2VsID0gTlVMTDtcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdHJhY2luZ19tdWx0aV9vcHRzLCBvcHRzKTtcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpO1xuJiM0MztcdF9fdTMyICppZHMgPSBOVUxMO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSB0cmFjaW5nX211bHRpX2ludGVyc2VjdF9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDt0cmFjaW5nX211bHRpX2ludGVyc2VjdF9fb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXBpZCA9IGdldHBpZCgpO1xuJiM0MztcbiYjNDM7XHRpZHMgPSBnZXRfaWRzKGZ1bmNzLCBBUlJBWV9TSVpFKGZ1bmNzKSwgTlVMTCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGlkcywgXCYjMzQ7Z2V0X2lkc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdG9wdHMuaWRzID0gaWRzO1xuJiM0MztcdG9wdHMuY250ID0gQVJSQVlfU0laRShmdW5jcyk7XG4mIzQzO1x0bXVsdGlfbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aShza2VsLVx1MDAzZXByb2dzLmZlbnRyeV8xLCBOVUxMLCBcdTAwMjZvcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIobXVsdGlfbGluaywgXCYjMzQ7YXR0YWNoX211bHRpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0ZmVudHJ5X2xpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKHNrZWwtXHUwMDNlcHJvZ3MuZmVudHJ5KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoZmVudHJ5X2xpbmssIFwmIzM0O2F0dGFjaF9mZW50cnlcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZlbnRyeV8xKSwgXHUwMDI2dG9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7dGVzdF9ydW5cJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0ZXN0X3Jlc3VsdF9mZW50cnlfMSwgMSwgXCYjMzQ7bXVsdGlfZmVudHJ5XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNldGVzdF9yZXN1bHRfZmVudHJ5LCAxLCBcJiMzNDtmZW50cnlcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfbGlua19fZGVzdHJveShmZW50cnlfbGluayk7XG4mIzQzO1x0ZmVudHJ5X2xpbmsgPSBOVUxMO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7ZGVzdHJveV9mZW50cnlcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZlbnRyeV8xKSwgXHUwMDI2dG9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7dGVzdF9ydW5fbXVsdGlcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0ZXN0X3Jlc3VsdF9mZW50cnlfMSwgMiwgXCYjMzQ7bXVsdGlfZmVudHJ5X29ubHlcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0ZXN0X3Jlc3VsdF9mZW50cnksIDEsIFwmIzM0O2ZlbnRyeV9kZXRhY2hlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9saW5rX19kZXN0cm95KG11bHRpX2xpbmspO1xuJiM0MztcdG11bHRpX2xpbmsgPSBOVUxMO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7ZGVzdHJveV9tdWx0aVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmVudHJ5XzEpLCBcdTAwMjZ0b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X3J1bl9kZXRhY2hlZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRlc3RfcmVzdWx0X2ZlbnRyeV8xLCAyLCBcJiMzNDttdWx0aV9mZW50cnlfZGV0YWNoZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0ZXN0X3Jlc3VsdF9mZW50cnksIDEsIFwmIzM0O2ZlbnRyeV9zdGlsbF9kZXRhY2hlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdGJwZl9saW5rX19kZXN0cm95KGZlbnRyeV9saW5rKTtcbiYjNDM7XHRicGZfbGlua19fZGVzdHJveShtdWx0aV9saW5rKTtcbiYjNDM7XHRmcmVlKGlkcyk7XG4mIzQzO1x0dHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdGVzdF9zZXNzaW9uKHZvaWQpXG4ge1xuIFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcbkBAIC05NTcsNCAmIzQzOzEwMjQsNiBAQCB2b2lkIHRlc3RfdHJhY2luZ19tdWx0aV90ZXN0KHZvaWQpXG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDthdHRhY2hfYXBpX2ZhaWxzXCYjMzQ7KSlcbiBcdFx0dGVzdF9hdHRhY2hfYXBpX2ZhaWxzKCk7XG4gXHRSVU5fVEVTVFModHJhY2luZ19tdWx0aV92ZXJpZmllcik7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7ZmVudHJ5X2FmdGVyX211bHRpXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfZmVudHJ5X2FmdGVyX211bHRpKCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX211bHRpX2ludGVyc2VjdF9hdHRhY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX211bHRpX2ludGVyc2VjdF9hdHRhY2guY1xuaW5kZXggY2Q1YmUwYmI2ZmZkZDcuLjVlYmJlM2I2MDJhNGYxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfbXVsdGlfaW50ZXJzZWN0X2F0dGFjaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfYXR0YWNoLmNcbkBAIC0xMSw2ICYjNDM7MTEsMTQgQEAgX191NjQgdGVzdF9yZXN1bHRfZmVudHJ5XzEgPSAwO1xuIF9fdTY0IHRlc3RfcmVzdWx0X2ZlbnRyeV8yID0gMDtcbiBfX3U2NCB0ZXN0X3Jlc3VsdF9mZXhpdF8xID0gMDtcbiBfX3U2NCB0ZXN0X3Jlc3VsdF9mZXhpdF8yID0gMDtcbiYjNDM7X191NjQgdGVzdF9yZXN1bHRfZmVudHJ5ID0gMDtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MVwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKGZlbnRyeSwgaW50IGEpXG4mIzQzO3tcbiYjNDM7XHR0ZXN0X3Jlc3VsdF9mZW50cnkgJiM0Mzs9IGEgPT0gMTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuIFxuIFNFQyhcJiMzNDtmZW50cnkubXVsdGlcJiMzNDspXG4gaW50IEJQRl9QUk9HKGZlbnRyeV8xKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtGVFJBQ0UmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVnaXN0ZXJfZmVudHJ5X211bHRpJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaCYjMzQ7LAogICAgJiMzNDticGZfdHJhY2luZ19tdWx0aV9hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB0cmFtcG9saW5lIGxvZ2ljIHRvIGNvcnJlY3RseSBzZXQgYGZ0cmFjZV9tYW5hZ2VkYCBmb3IgbXVsdGktYXR0YWNoIGZlbnRyeSBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBmdHJhY2UgYW5kIEJQRiB0cmFtcG9saW5lcyBpbnRlcmFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmQxZDlhYzFlODkyMTUwYjE2MGJiYWM1NzBmYmE4OGQxNzM0NWViOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDExIDExOjQxOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwppbmRleCAxYTcyMWZjNGJlZjU2Mi4uNmVhZGY2NGY3ZWM5MGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jCkBAIC0xNTM2LDYgJiM0MzsxNTM2LDcgQEAgc3RhdGljIGludCByZWdpc3Rlcl9mZW50cnlfbXVsdGkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWEKIAlpZiAoYnBmX3RyYW1wb2xpbmVfdXNlX2ptcCh0ci0mZ3Q7ZmxhZ3MpKQogCQlhZGRyID0gZnRyYWNlX2ptcF9zZXQoYWRkcik7CiAKJiM0MzsJdHItJmd0O2Z1bmMuZnRyYWNlX21hbmFnZWQgPSB0cnVlOwogCWZ0cmFjZV9oYXNoX2FkZChkYXRhLSZndDtyZWcsIGRhdGEtJmd0O2VudHJ5LCBpcCwgYWRkcik7CiAJdHItJmd0O2N1cl9pbWFnZSA9IGltOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jCmluZGV4IGYwMmZmYzdmNDFkNzg0Li4wYWE5NTMyYTA1Y2ZlYyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuYwpAQCAtNDYwLDYgJiM0Mzs0NjAsNzMgQEAgc3RhdGljIHZvaWQgdGVzdF9pbnRlcnNlY3Qodm9pZCkKIAl0cmFjaW5nX211bHRpX2ludGVyc2VjdF9fZGVzdHJveShza2VsKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZmVudHJ5X2FmdGVyX211bHRpKHZvaWQpCiYjNDM7ewomIzQzOwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZ1bmNzW10gPSB7CiYjNDM7CQkmIzM0O2JwZl9mZW50cnlfdGVzdDEmIzM0OywKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGJwZl9saW5rICpmZW50cnlfbGluayA9IE5VTEwsICptdWx0aV9saW5rID0gTlVMTDsKJiM0MzsJc3RydWN0IHRyYWNpbmdfbXVsdGlfaW50ZXJzZWN0ICpza2VsID0gTlVMTDsKJiM0MzsJTElCQlBGX09QVFMoYnBmX3RyYWNpbmdfbXVsdGlfb3B0cywgb3B0cyk7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyk7CiYjNDM7CV9fdTMyICppZHMgPSBOVUxMOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlza2VsID0gdHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7dHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfX29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cGlkID0gZ2V0cGlkKCk7CiYjNDM7CiYjNDM7CWlkcyA9IGdldF9pZHMoZnVuY3MsIEFSUkFZX1NJWkUoZnVuY3MpLCBOVUxMKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGlkcywgJiMzNDtnZXRfaWRzJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlvcHRzLmlkcyA9IGlkczsKJiM0MzsJb3B0cy5jbnQgPSBBUlJBWV9TSVpFKGZ1bmNzKTsKJiM0MzsJbXVsdGlfbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aShza2VsLSZndDtwcm9ncy5mZW50cnlfMSwgTlVMTCwgJmFtcDtvcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKG11bHRpX2xpbmssICYjMzQ7YXR0YWNoX211bHRpJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlmZW50cnlfbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2goc2tlbC0mZ3Q7cHJvZ3MuZmVudHJ5KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGZlbnRyeV9saW5rLCAmIzM0O2F0dGFjaF9mZW50cnkmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmZlbnRyeV8xKSwgJmFtcDt0b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt0ZXN0X3J1biYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7dGVzdF9yZXN1bHRfZmVudHJ5XzEsIDEsICYjMzQ7bXVsdGlfZmVudHJ5JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDt0ZXN0X3Jlc3VsdF9mZW50cnksIDEsICYjMzQ7ZmVudHJ5JiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBicGZfbGlua19fZGVzdHJveShmZW50cnlfbGluayk7CiYjNDM7CWZlbnRyeV9saW5rID0gTlVMTDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2Rlc3Ryb3lfZmVudHJ5JiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5mZW50cnlfMSksICZhbXA7dG9wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7dGVzdF9ydW5fbXVsdGkmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3Rlc3RfcmVzdWx0X2ZlbnRyeV8xLCAyLCAmIzM0O211bHRpX2ZlbnRyeV9vbmx5JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDt0ZXN0X3Jlc3VsdF9mZW50cnksIDEsICYjMzQ7ZmVudHJ5X2RldGFjaGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBicGZfbGlua19fZGVzdHJveShtdWx0aV9saW5rKTsKJiM0MzsJbXVsdGlfbGluayA9IE5VTEw7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtkZXN0cm95X211bHRpJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5mZW50cnlfMSksICZhbXA7dG9wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7dGVzdF9ydW5fZGV0YWNoZWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3Rlc3RfcmVzdWx0X2ZlbnRyeV8xLCAyLCAmIzM0O211bHRpX2ZlbnRyeV9kZXRhY2hlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7dGVzdF9yZXN1bHRfZmVudHJ5LCAxLCAmIzM0O2ZlbnRyeV9zdGlsbF9kZXRhY2hlZCYjMzQ7KTsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwlicGZfbGlua19fZGVzdHJveShmZW50cnlfbGluayk7CiYjNDM7CWJwZl9saW5rX19kZXN0cm95KG11bHRpX2xpbmspOwomIzQzOwlmcmVlKGlkcyk7CiYjNDM7CXRyYWNpbmdfbXVsdGlfaW50ZXJzZWN0X19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRlc3Rfc2Vzc2lvbih2b2lkKQogewogCUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyk7CkBAIC05NTcsNCAmIzQzOzEwMjQsNiBAQCB2b2lkIHRlc3RfdHJhY2luZ19tdWx0aV90ZXN0KHZvaWQpCiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDthdHRhY2hfYXBpX2ZhaWxzJiMzNDspKQogCQl0ZXN0X2F0dGFjaF9hcGlfZmFpbHMoKTsKIAlSVU5fVEVTVFModHJhY2luZ19tdWx0aV92ZXJpZmllcik7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7ZmVudHJ5X2FmdGVyX211bHRpJiMzNDspKQomIzQzOwkJdGVzdF9mZW50cnlfYWZ0ZXJfbXVsdGkoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX211bHRpX2ludGVyc2VjdF9hdHRhY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX211bHRpX2ludGVyc2VjdF9hdHRhY2guYwppbmRleCBjZDViZTBiYjZmZmRkNy4uNWViYmUzYjYwMmE0ZjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX211bHRpX2ludGVyc2VjdF9hdHRhY2guYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfYXR0YWNoLmMKQEAgLTExLDYgJiM0MzsxMSwxNCBAQCBfX3U2NCB0ZXN0X3Jlc3VsdF9mZW50cnlfMSA9IDA7CiBfX3U2NCB0ZXN0X3Jlc3VsdF9mZW50cnlfMiA9IDA7CiBfX3U2NCB0ZXN0X3Jlc3VsdF9mZXhpdF8xID0gMDsKIF9fdTY0IHRlc3RfcmVzdWx0X2ZleGl0XzIgPSAwOwomIzQzO19fdTY0IHRlc3RfcmVzdWx0X2ZlbnRyeSA9IDA7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7ZmVudHJ5L2JwZl9mZW50cnlfdGVzdDEmIzM0OykKJiM0MztpbnQgQlBGX1BST0coZmVudHJ5LCBpbnQgYSkKJiM0Mzt7CiYjNDM7CXRlc3RfcmVzdWx0X2ZlbnRyeSAmIzQzOz0gYSA9PSAxOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiAKIFNFQygmIzM0O2ZlbnRyeS5tdWx0aSYjMzQ7KQogaW50IEJQRl9QUk9HKGZlbnRyeV8xKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzg5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJQRiBUcmFtcG9saW5lIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCB0b3VjaGVzIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgYWxvbmcgd2l0aCBzb21lIHNlbGZ0ZXN0cy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbiBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIGFkZGluZyBgdHItJmd0O2Z1bmMuZnRyYWNlX21hbmFnZWQgPSB0cnVlO2Agd2l0aGluIHRoZSBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCBmdW5jdGlvbi4gSSByZWNvZ25pemUgdGhpcyBhcyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBCUEYgdHJhbXBvbGluZXMgaW4gY29uanVuY3Rpb24gd2l0aCBmdHJhY2UuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gVG8gZG8gdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAgaXMgYWN0dWFsbHkgdXNlZC4gSXMgaXQgYSBjb3JlIGZ1bmN0aW9uLCBvciBpcyBpdCBtb3JlIG9mIGEgaGVscGVyPyBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb250ZXh0cyBhbmQgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQ/CgpUaGVyZWZvcmUsIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSYjMzk7bSBnb2luZyB0byB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIGV2ZXJ5IGluc3RhbmNlIG9mIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBob3cgdGhlIGZ1bmN0aW9uIGlzIHVzZWQsIHdoaWNoIHdpbGwsIGluIHR1cm4sIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbmV3IGBmdHJhY2VfbWFuYWdlZGAgZmxhZy4gT25jZSBJJiMzOTt2ZSBnb3QgdGhhdCBmaWd1cmVkIG91dCwgSSBjYW4gZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoZSBmbGFnIGFmZmVjdHMgdGhlIEJQRiBzdWJzeXN0ZW0gaW4gZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ2lzdGVyX2ZlbnRyeV9tdWx0aSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTIyPXN0YXRpYyB2b2lkIGZ0cmFjZV9oYXNoX2FkZChzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2gsIHN0cnVjdCBmdHJhY2VfZnVuY19lbnRyeSAqZW50cnksXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUyOS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1MzA6c3RhdGljIGludCByZWdpc3Rlcl9mZW50cnlfbXVsdGkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnB0cilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MzEte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NDQtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTQ1OnN0YXRpYyBpbnQgdW5yZWdpc3Rlcl9mZW50cnlfbXVsdGkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsIHZvaWQgKnB0cilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NDYte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1NzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9tdWx0aV9vcHMgPSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTc1Olx0LnJlZ2lzdGVyX2ZlbnRyeSAgID0gcmVnaXN0ZXJfZmVudHJ5X211bHRpLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU3NjpcdC51bnJlZ2lzdGVyX2ZlbnRyeSA9IHVucmVnaXN0ZXJfZmVudHJ5X211bHRpLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU3Ny1cdC5tb2RpZnlfZmVudHJ5ICAgICA9IG1vZGlmeV9mZW50cnlfbXVsdGksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI4NgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgY29kZSBleHBlcnQ6CgoqKlRyYWNpbmcgdGhlIFVzZSBvZiBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCoqCgpSaWdodCwgc28gYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAgcG9wcyB1cCBpbiBgdHJhbXBvbGluZV9tdWx0aV9vcHNgLiBUaGF0JiMzOTtzIGEgZGVjZW50IHN0YXJ0aW5nIHBvaW50LiBUbyB0cnVseSB1bmRlcnN0YW5kIGl0cyBzaWduaWZpY2FuY2UgYW5kIHBvdGVudGlhbCBpbXBhY3QsIEkgbmVlZCB0byBzZWUgdGhlIGJyb2FkZXIgY29udGV4dC4gVGhlcmVmb3JlLCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGVyZSBgdHJhbXBvbGluZV9tdWx0aV9vcHNgIGl0c2VsZiBpcyBiZWluZyAqdXNlZCouIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgb2YgKnRoYXQqIGZ1bmN0aW9uIHdpbGwgZ2l2ZSBtZSB0aGUgY3J1Y2lhbCBoaWdoLWxldmVsIHZpZXcgSSBuZWVkIHRvIGFzc2VzcyB0aGlzIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgIGNvbm5lY3Rpb24uIFRoaXMgaXMgYSBjbGFzc2ljIGRlcGVuZGVuY3kgdHJhY2luZyBzY2VuYXJpbyDigJMgZ290dGEgZm9sbG93IHRoZSBjaGFpbiB0byB1bmRlcnN0YW5kIHRoZSB3aG9sZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYW1wb2xpbmVfbXVsdGlfb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1NTk9c3RhdGljIGludCBtb2RpZnlfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTczLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU3NDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX211bHRpX29wcyA9IHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NzUtXHQucmVnaXN0ZXJfZmVudHJ5ICAgPSByZWdpc3Rlcl9mZW50cnlfbXVsdGksXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTYxMj1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY2Mi1cdFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXHUwMDI2bW5vZGUtXHUwMDNlbm9kZSwgbW5vZGUtXHUwMDNldHJhbXBvbGluZSwgTlVMTCxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2NjM6XHRcdFx0XHRcdFx0IFx1MDAyNnRyYW1wb2xpbmVfbXVsdGlfb3BzLCBkYXRhKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NjQtXHRcdGlmIChlcnIpIHtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzEyPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzIzLVx0XHRXQVJOX09OX09OQ0UoX19icGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhcdTAwMjZtbm9kZS1cdTAwM2Vub2RlLCBtbm9kZS1cdTAwM2V0cmFtcG9saW5lLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTcyNDpcdFx0XHRcdFx0TlVMTCwgXHUwMDI2dHJhbXBvbGluZV9tdWx0aV9vcHMsIGRhdGEpKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MjUtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkzMAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgTXVsdGktQXR0YWNoIGluIFRyYW1wb2xpbmVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgQlBGIHRyYW1wb2xpbmUgbXVsdGktYXR0YWNoIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQuIE15IGZvY3VzIGlzIG5hcnJvd2VkIGRvd24gdG8gdGhlIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCBmdW5jdGlvbnMsIGFzIHRoZXNlIGFyZSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgbXVsdGktYXR0YWNoIGFuZCBkZXRhY2ggb3BlcmF0aW9ucywgcmVzcGVjdGl2ZWx5LiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMuIEdpdmVuIHRoYXQsIEkga25vdyB0aGlzIGlzIGEgY29yZSBwYXJ0IG9mIGhvdyBCUEYgdHJhbXBvbGluZXMgbWFuYWdlIG11bHRpcGxlIHByb2dyYW1zIG9uIGEgc2luZ2xlIGhvb2sgcG9pbnQuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gYW5kIHJlbGF0ZWQgZGV0YWlscywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB2aWV3IG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGlzIG11bHRpLWF0dGFjaCBmZWF0dXJlIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBCUEYgdHJhbXBvbGluZSBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJhbXBvbGluZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGlzYXNtLm8gbXByb2cub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgdGhpbmtpbmcgcmlnaHQgbm93IGlzIGNlbnRlcmVkIGFyb3VuZCBCUEYgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19CUEZfSklUYCBpcyBlbmFibGVkIOKAkyB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsIGZvciBCUEYgdG8gYWN0dWFsbHkgKmRvKiBhbnl0aGluZyB1c2VmdWwuIEFuZCBnZW5lcmFsbHksIEkgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIGFzIGl0IHByb3ZpZGVzIHRoZSBjb3JlIHN5c3RlbSBjYWxsIGludGVyZmFjZSBmb3IgQlBGIHByb2dyYW1zLgoKQmV5b25kIHRob3NlIGJhc2ljcywgSSYjMzk7bSB0cnlpbmcgdG8gcmVjYWxsIGlmIHRoZXJlIGFyZSBhbnkgKnNwZWNpZmljKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgbW9yZSBhZHZhbmNlZCBmdW5jdGlvbmFsaXRpZXMuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IGRlZGljYXRlZCBjb25maWdzIGFzc29jaWF0ZWQgd2l0aCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBvciBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYC4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBjb25maWdzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHRoYXQgc3BlY2lmaWNhbGx5IGVuYWJsZSBvciBkaXNhYmxlIHRoZXNlIGZlYXR1cmVzLiBNeSBndXQgc2F5cyBpdCYjMzk7cyBwcm9iYWJseSBoYW5kbGVkIGJ5IG90aGVyIGNvbmZpZ3MsIGJ1dCBpdCYjMzk7cyB3b3J0aCBhIHF1aWNrIGxvb2sgdG8gYmUgYWJzb2x1dGVseSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBvciB0byBzZWUgaWYgdGhleSBuZWVkIHNvbWUgc3BlY2lhbCBlbmFibGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9MTUyMD1pbnQgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyKHZvaWQgKmltYWdlLCB2b2lkICpidWYsIHM2NCAqZnVuY3MsIGludCBudW1fZnVuY3MpO1xuaW5jbHVkZS9saW51eC9icGYuaC0xNTIxLVxuaW5jbHVkZS9saW51eC9icGYuaDoxNTIyOmludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcbmluY2x1ZGUvbGludXgvYnBmLmgtMTUyMy1cdFx0XHRcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTE2MzU9c3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2hhc190cmFtcG9saW5lKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE2MzgtfVxuaW5jbHVkZS9saW51eC9icGYuaDoxNjM5OnN0YXRpYyBpbmxpbmUgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuaW5jbHVkZS9saW51eC9icGYuaC0xNjQwLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTc0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHRyYW1wb2xpbmVfbXVsdGlfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NzktXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTgwOnN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTgxLXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTg1LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU4NjpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU4Ny17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5NC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1OTU6c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTk2LXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjExLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTYxMjppbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjEzLVx0XHRcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY1OC1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjU5Olx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NjAtXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4Ni1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY4NzpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXHUwMDNldHJhbXBvbGluZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjg4LVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTYtXHRcdGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUsIFx1MDAyNm1ub2RlLVx1MDAzZW5vZGUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY5NzpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY5OC1cdH1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzEyPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzIxLVx0XHRkYXRhLVx1MDAzZWVudHJ5ID0gXHUwMDI2bW5vZGUtXHUwMDNlZW50cnk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzIyOlx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MjMtXHRcdFdBUk5fT05fT05DRShfX2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nKFx1MDAyNm1ub2RlLVx1MDAzZW5vZGUsIG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTczMi1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTczMzpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXHUwMDNldHJhbXBvbGluZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzM0LVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zODQwPWludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkxMS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozOTEyOlx0ZXJyID0gYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHByb2csIGlkcywgbGluayk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkxMy1cdGt2ZnJlZShpZHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODQ5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEJQRiBUcmFjZSBDb2RlYmFzZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgcGluIGRvd24gaXRzIGxvY2F0aW9uLiBJdCBsb29rcyBsaWtlIGl0IGxpdmVzIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBFeGNlbGxlbnQuIE5vdyB0aGF0IEkga25vdyB0aGUgc291cmNlIGZpbGUsIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoaWNoIGNvbmZpZyBvcHRpb25zIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBmdW5jdGlvbmFsaXR5IHdpdGhpbiBgYnBmX3RyYWNlLmNgLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBmb3IgdmVyaWZ5aW5nIHRoYXQgdGhlIGludGVuZGVkIEJQRiB0cmFjaW5nIGZlYXR1cmVzIGFyZSBldmVuIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBJJiMzOTttIHdvcmtpbmcgd2l0aC4gVGltZSB0byBjaGVjayB0aGUgYC5jb25maWdgIGZpbGVzLi4uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhY2VcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9NYWtlZmlsZT01ND1LQ09WX0lOU1RSVU1FTlRfdHJhY2VfaXJxc29mZi5vIDo9IG5cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01NS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo1NjpDRkxBR1NfYnBmX3RyYWNlLm8gOj0gLUkkKHNyYylcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01Ny1cbi0tXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9MTA5PW9iai0kKENPTkZJR19VU0VSX0VWRU5UUykgJiM0Mzs9IHRyYWNlX2V2ZW50c191c2VyLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxMTA6b2JqLSQoQ09ORklHX0JQRl9FVkVOVFMpICYjNDM7PSBicGZfdHJhY2Uub1xua2VybmVsL3RyYWNlL01ha2VmaWxlLTExMS1vYmotJChDT05GSUdfS1BST0JFX0VWRU5UUykgJiM0Mzs9IHRyYWNlX2twcm9iZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNjEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19CUEZfRVZFTlRTYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLiBOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhlIGZ1bmN0aW9uIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaW52b2x2ZWQgaW4gdGhlIGB0cmFtcG9saW5lX211bHRpX29wc2Agc3RydWN0dXJlLiBUaGlzIGB0cmFtcG9saW5lX211bHRpX29wc2Agc3RydWN0dXJlIGlzIHRoZW4gdXNlZCBieSBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCwgd2hpY2ggaW4gdHVybiwgaXMgY2FsbGVkIGJ5IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLiBIbW0sIHJpZ2h0LiBGcm9tIHdoYXQgSSByZWNhbGwsIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGlzIGNhbGxlZCBmcm9tIGBicGZfdHJhY2luZ19wcm9nX2F0dGFjaGAgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uIGluIHRoYXQgc3BhY2UuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhhdCBjb25uZWN0aW9uIG5leHQgdG8gYmUgc3VyZSBldmVyeXRoaW5nIGlzIGNvcnJlY3RseSBsaW5rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFjaW5nX211bHRpX2F0dGFjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oPTc4OT1pbnQgYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6NzkwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cik7XG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTc5MS0jZWxzZVxuLS1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9ODQ4PXN0YXRpYyBpbmxpbmUgaW50XG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjg0OTpicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtODUwLXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NzY1PXN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4MTUtXHRcdGVsc2UgaWYgKGlzX3RyYWNpbmdfbXVsdGkocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1ODE2Olx0XHRcdHJldCA9IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChwcm9nLCBhdHRyKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4MTctXHRcdGVsc2Vcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgxOT1zdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzgzOS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozODQwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODQxLXtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkyOS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozOTMwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTMxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIGZlbnRyeS9mZW50cnkubXVsdGkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gSSBjYW4gY29uZmlybSB0aGF0IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgICppcyogY2FsbGVkIGZyb20gYGxpbmtfY3JlYXRlYCB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgc3BlY2lmaWNhbGx5IHdoZW4gYGlzX3RyYWNpbmdfbXVsdGkocHJvZy0mZ3Q7ZXhwZWN0ZWRfYXR0YWNoX3R5cGUpYCBpcyB0cnVlLiBUaGF0IGNvbmZpcm1zIGl0JiMzOTtzIGEgcmVhY2hhYmxlIGNvZGUgcGF0aCBhbmQgZnVuY3Rpb25hbC4gTm8gc3VycHJpc2VzIHRoZXJlLgoKVGhlIG1lYXQgb2YgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9kaWZpY2F0aW9uIHRvIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AuIExvb2tpbmcgYXQgdGhlIGRpZmYuLi5BaCwgSSBzZWUuIFRoZXkmIzM5O3JlIHNldHRpbmcgYHRyLSZndDtmdW5jLmZ0cmFjZV9tYW5hZ2VkID0gdHJ1ZTtgLiBUaGF0IG1ha2VzIHNlbnNlLiBJdCBsb29rcyBsaWtlIHRoaXMgd2FzIGEgbWlzc2VkIGJpdCBvZiBpbml0aWFsaXphdGlvbi4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgdGhpcyB3YXMgY2F1c2luZyBpc3N1ZXMgd2l0aCBmdHJhY2UgYW5kIHRyYW1wb2xpbmUgaW50ZXJhY3Rpb25zIHdoZW4gZGVhbGluZyB3aXRoIGEgY29tYmluYXRpb24gb2YgYGZlbnRyeWAgYW5kIGBmZW50cnkubXVsdGlgIGF0dGFjaG1lbnRzIHRvIHRoZSBzYW1lIGZ1bmN0aW9uLiBXaXRob3V0IHRoaXMgZmxhZyBzZXQsIHRoZSBmdHJhY2UvdHJhbXBvbGluZSBpbnRlcmFjdGlvbiB3YXMgcHJvYmFibHkgb2ZmLgoKVGhlIGNvbmZpcm1hdGlvbiBvZiB0aGUgYnVnIGZpeCBhcHBlYXJzIHRvIGNvbWUgZnJvbSB0aGUgYHRlc3RfZmVudHJ5X2FmdGVyX211bHRpYCBzZWxmdGVzdCwgd2hpY2ggaXMgZGVmaW5pdGVseSBhIHNvbGlkIGFwcHJvYWNoLiBJdCB0ZXN0cyBhdHRhY2hpbmcgYGZlbnRyeS5tdWx0aWAgKmJlZm9yZSogYGZlbnRyeWAgdG8gdGhlIHNhbWUgZnVuY3Rpb24sIGBicGZfZmVudHJ5X3Rlc3QxYCwgd2hpY2ggc2hvdWxkIGV4cG9zZSBhbnkgaXNzdWVzIHdpdGggdGhlIGZ0cmFjZS90cmFtcG9saW5lIGludGVyYWN0aW9uLgoKTm93LCBmb3IgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcy4uLiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBrZXJuZWwgY29uZmlncyBhcmUgZW5hYmxlZDogYEJQRl9KSVRgLCBgQlBGX1NZU0NBTExgLCBgQlBGX0VWRU5UU2AsIGFuZCBgRlRSQUNFYC4gRGVmaW5pdGVseSB0aG9zZS4gSSYjMzk7bSBhbHNvIHdvbmRlcmluZyBhYm91dCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgY29kZSB0byBzZWUgaWYgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAgdXNlcyBhbnkgb2YgdGhvc2UuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYmVjYXVzZSBpdCBjb3VsZCBiZSBjcml0aWNhbC4gR29vZCwgc29saWQgd29yayBvdmVyYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdpc3Rlcl9mZW50cnlfbXVsdGkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTIyPXN0YXRpYyB2b2lkIGZ0cmFjZV9oYXNoX2FkZChzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2gsIHN0cnVjdCBmdHJhY2VfZnVuY19lbnRyeSAqZW50cnksXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUyOS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1MzA6c3RhdGljIGludCByZWdpc3Rlcl9mZW50cnlfbXVsdGkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnB0cilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MzEte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NDQtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTQ1OnN0YXRpYyBpbnQgdW5yZWdpc3Rlcl9mZW50cnlfbXVsdGkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsIHZvaWQgKnB0cilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NDYte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1NzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9tdWx0aV9vcHMgPSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTc1Olx0LnJlZ2lzdGVyX2ZlbnRyeSAgID0gcmVnaXN0ZXJfZmVudHJ5X211bHRpLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU3NjpcdC51bnJlZ2lzdGVyX2ZlbnRyeSA9IHVucmVnaXN0ZXJfZmVudHJ5X211bHRpLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU3Ny1cdC5tb2RpZnlfZmVudHJ5ICAgICA9IG1vZGlmeV9mZW50cnlfbXVsdGksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNTAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczogKipIdW50aW5nIGZvciBDb25kaXRpb25hbCBDb21waWxhdGlvbioqLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgIGZ1bmN0aW9uIGlzIHR1Y2tlZCBhd2F5IGluc2lkZSBhbnkgYCNpZmRlZmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgY29kZSB0byBzZWUgaWYgaXRzIGRlY2xhcmF0aW9uIG9yIGRlZmluaXRpb24sIG9yIGV2ZW4gYW55IGNhbGxzIHRvIGl0LCBhcmUgZ3VhcmRlZCBieSBhIG1hY3JvIHRoYXQgY29udHJvbHMgd2hldGhlciBpdCYjMzk7cyBjb21waWxlZCBvciBub3QuIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24mIzM5O3Mgc2NvcGUgYW5kIGF2YWlsYWJpbGl0eSwgYW5kIHdoZXRoZXIgSSBuZWVkIHRvIGNvbnNpZGVyIGRpZmZlcmVudCBidWlsZCBjb25maWd1cmF0aW9ucyBvciBwbGF0Zm9ybS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgd2hlbiBJJiMzOTttIHdvcmtpbmcgd2l0aCBpdC4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIGNvZGViYXNlIGZvciBpdCBhbmQgdGhlbiBtZXRpY3Vsb3VzbHkgcmV2aWV3aW5nIHRoZSBzdXJyb3VuZGluZyBsaW5lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XiNpZmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTYyPXN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMge1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTY4LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6Njk6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzAtc3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz03Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX29wcztcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTczLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzQ6I2lmZGVmIENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzUtc3RhdGljIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqZGlyZWN0X29wc19pcF9sb29rdXAoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpcClcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0yMTA9dm9pZCBicGZfaW1hZ2Vfa3N5bV9kZWwoc3RydWN0IGJwZl9rc3ltICprc3ltKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIxNi1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjIxNzojaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMTg6I2lmZGVmIENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjE5LS8qXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NjczPXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzA2LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzA3OiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcwOC1hZ2Fpbjpcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NTktXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3NjA6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzYxLVx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5ODUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkludmVzdGlnYXRpbmcgdGhlIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgIEZ1bmN0aW9uKioKClJpZ2h0LCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgdGhlIGRlZmluaXRpb24gb2YgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgc2NvcGUsIHBhcmFtZXRlcnMsIGFuZCByZXR1cm4gdmFsdWUgaXMgZXNzZW50aWFsIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGFzc2VzcyBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQmIzM5O3MgZGVjbGFyZWQgYW5kIGRlZmluZWQgc28gSSBjYW4gZmlndXJlIG91dCB3aGF0IGl0JiMzOTtzIGRvaW5nLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIGZpbmQgdGhhdCBkZWZpbml0aW9uIGFuZCBzdGFydCBidWlsZGluZyBhIG1lbnRhbCBtb2RlbCBvZiBpdHMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi90cmFtcG9saW5lLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTAwOlx0c3RhdGljIHZvaWQgY2xlYXJfdHJhY2luZ19tdWx0aV9kYXRhKHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9kYXRhICpkYXRhKVxuMTUwMTpcdHtcbjE1MDI6XHRcdHJlbW92ZV90cmFjaW5nX211bHRpX2RhdGEoZGF0YSk7XG4xNTAzOlx0XG4xNTA0Olx0XHRmcmVlX2Z0cmFjZV9oYXNoKGRhdGEtXHUwMDNlcmVnKTtcbjE1MDU6XHRcdGZyZWVfZnRyYWNlX2hhc2goZGF0YS1cdTAwM2V1bnJlZyk7XG4xNTA2Olx0XHRmcmVlX2Z0cmFjZV9oYXNoKGRhdGEtXHUwMDNlbW9kaWZ5KTtcbjE1MDc6XHR9XG4xNTA4Olx0XG4xNTA5Olx0c3RhdGljIGludCBpbml0X3RyYWNpbmdfbXVsdGlfZGF0YShzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfZGF0YSAqZGF0YSlcbjE1MTA6XHR7XG4xNTExOlx0XHRkYXRhLVx1MDAzZXJlZyAgICA9IGFsbG9jX2Z0cmFjZV9oYXNoKEZUUkFDRV9IQVNIX0RFRkFVTFRfQklUUyk7XG4xNTEyOlx0XHRkYXRhLVx1MDAzZXVucmVnICA9IGFsbG9jX2Z0cmFjZV9oYXNoKEZUUkFDRV9IQVNIX0RFRkFVTFRfQklUUyk7XG4xNTEzOlx0XHRkYXRhLVx1MDAzZW1vZGlmeSA9IGFsbG9jX2Z0cmFjZV9oYXNoKEZUUkFDRV9IQVNIX0RFRkFVTFRfQklUUyk7XG4xNTE0Olx0XG4xNTE1Olx0XHRpZiAoIWRhdGEtXHUwMDNlcmVnIHx8ICFkYXRhLVx1MDAzZXVucmVnIHx8ICFkYXRhLVx1MDAzZW1vZGlmeSkge1xuMTUxNjpcdFx0XHRjbGVhcl90cmFjaW5nX211bHRpX2RhdGEoZGF0YSk7XG4xNTE3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTUxODpcdFx0fVxuMTUxOTpcdFx0cmV0dXJuIDA7XG4xNTIwOlx0fVxuMTUyMTpcdFxuMTUyMjpcdHN0YXRpYyB2b2lkIGZ0cmFjZV9oYXNoX2FkZChzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2gsIHN0cnVjdCBmdHJhY2VfZnVuY19lbnRyeSAqZW50cnksXG4xNTIzOlx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgZGlyZWN0KVxuMTUyNDpcdHtcbjE1MjU6XHRcdGVudHJ5LVx1MDAzZWlwID0gaXA7XG4xNTI2Olx0XHRlbnRyeS1cdTAwM2VkaXJlY3QgPSBkaXJlY3Q7XG4xNTI3Olx0XHRhZGRfZnRyYWNlX2hhc2hfZW50cnkoaGFzaCwgZW50cnkpO1xuMTUyODpcdH1cbjE1Mjk6XHRcbjE1MzA6XHRzdGF0aWMgaW50IHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcHRyKVxuMTUzMTpcdHtcbjE1MzI6XHRcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSBpbS1cdTAwM2VpbWFnZTtcbjE1MzM6XHRcdHVuc2lnbmVkIGxvbmcgaXAgPSBmdHJhY2VfbG9jYXRpb24odHItXHUwMDNlaXApO1xuMTUzNDpcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2RhdGEgKmRhdGEgPSBwdHI7XG4xNTM1Olx0XG4xNTM2Olx0XHRpZiAoYnBmX3RyYW1wb2xpbmVfdXNlX2ptcCh0ci1cdTAwM2VmbGFncykpXG4xNTM3Olx0XHRcdGFkZHIgPSBmdHJhY2Vfam1wX3NldChhZGRyKTtcbjE1Mzg6XHRcbjE1Mzk6XHRcdHRyLVx1MDAzZWZ1bmMuZnRyYWNlX21hbmFnZWQgPSB0cnVlO1xuMTU0MDpcdFx0ZnRyYWNlX2hhc2hfYWRkKGRhdGEtXHUwMDNlcmVnLCBkYXRhLVx1MDAzZWVudHJ5LCBpcCwgYWRkcik7XG4xNTQxOlx0XHR0ci1cdTAwM2VjdXJfaW1hZ2UgPSBpbTtcbjE1NDI6XHRcdHJldHVybiAwO1xuMTU0MzpcdH1cbjE1NDQ6XHRcbjE1NDU6XHRzdGF0aWMgaW50IHVucmVnaXN0ZXJfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCB2b2lkICpwdHIpXG4xNTQ2Olx0e1xuMTU0NzpcdFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHRyLVx1MDAzZWN1cl9pbWFnZS1cdTAwM2VpbWFnZTtcbjE1NDg6XHRcdHVuc2lnbmVkIGxvbmcgaXAgPSBmdHJhY2VfbG9jYXRpb24odHItXHUwMDNlaXApO1xuMTU0OTpcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2RhdGEgKmRhdGEgPSBwdHI7XG4xNTUwOlx0XG4xNTUxOlx0XHRpZiAoYnBmX3RyYW1wb2xpbmVfdXNlX2ptcCh0ci1cdTAwM2VmbGFncykpXG4xNTUyOlx0XHRcdGFkZHIgPSBmdHJhY2Vfam1wX3NldChhZGRyKTtcbjE1NTM6XHRcbjE1NTQ6XHRcdGZ0cmFjZV9oYXNoX2FkZChkYXRhLVx1MDAzZXVucmVnLCBkYXRhLVx1MDAzZWVudHJ5LCBpcCwgYWRkcik7XG4xNTU1Olx0XHR0ci1cdTAwM2VjdXJfaW1hZ2UgPSBOVUxMO1xuMTU1NjpcdFx0cmV0dXJuIDA7XG4xNTU3Olx0fVxuMTU1ODpcdFxuMTU1OTpcdHN0YXRpYyBpbnQgbW9kaWZ5X2ZlbnRyeV9tdWx0aShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgb3JpZ19mbGFncywgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4xNTYwOlx0XHRcdFx0ICAgICAgIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsIHZvaWQgKnB0cilcbjE1NjE6XHR7XG4xNTYyOlx0XHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgaW0tXHUwMDNlaW1hZ2U7XG4xNTYzOlx0XHR1bnNpZ25lZCBsb25nIGlwID0gZnRyYWNlX2xvY2F0aW9uKHRyLVx1MDAzZWlwKTtcbjE1NjQ6XHRcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9kYXRhICpkYXRhID0gcHRyO1xuMTU2NTpcdFxuMTU2NjpcdFx0aWYgKGJwZl90cmFtcG9saW5lX3VzZV9qbXAodHItXHUwMDNlZmxhZ3MpKVxuMTU2NzpcdFx0XHRhZGRyID0gZnRyYWNlX2ptcF9zZXQoYWRkcik7XG4xNTY4Olx0XG4xNTY5Olx0XHRmdHJhY2VfaGFzaF9hZGQoZGF0YS1cdTAwM2Vtb2RpZnksIGRhdGEtXHUwMDNlZW50cnksIGlwLCBhZGRyKTtcbjE1NzA6XHRcdHRyLVx1MDAzZWN1cl9pbWFnZSA9IGltO1xuMTU3MTpcdFx0cmV0dXJuIDA7XG4xNTcyOlx0fVxuMTU3MzpcdFxuMTU3NDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHRyYW1wb2xpbmVfbXVsdGlfb3BzID0ge1xuMTU3NTpcdFx0LnJlZ2lzdGVyX2ZlbnRyeSAgID0gcmVnaXN0ZXJfZmVudHJ5X211bHRpLFxuMTU3NjpcdFx0LnVucmVnaXN0ZXJfZmVudHJ5ID0gdW5yZWdpc3Rlcl9mZW50cnlfbXVsdGksXG4xNTc3Olx0XHQubW9kaWZ5X2ZlbnRyeSAgICAgPSBtb2RpZnlfZmVudHJ5X211bHRpLFxuMTU3ODpcdH07XG4xNTc5Olx0XG4xNTgwOlx0c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcbjE1ODE6XHR7XG4xNTgyOlx0XHR0ci1cdTAwM2VtdWx0aV9hdHRhY2gub2xkX2ltYWdlID0gdHItXHUwMDNlY3VyX2ltYWdlO1xuMTU4MzpcdFx0dHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9mbGFncyA9IHRyLVx1MDAzZWZsYWdzO1xuMTU4NDpcdH1cbjE1ODU6XHRcbjE1ODY6XHRzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxuMTU4NzpcdHtcbjE1ODg6XHRcdGlmICh0ci1cdTAwM2VtdWx0aV9hdHRhY2gub2xkX2ltYWdlKVxuMTU4OTpcdFx0XHRicGZfdHJhbXBfaW1hZ2VfcHV0KHRyLVx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UpO1xuMTU5MDpcdFxuMTU5MTpcdFx0dHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSA9IE5VTEw7XG4xNTkyOlx0XHR0ci1cdTAwM2VtdWx0aV9hdHRhY2gub2xkX2ZsYWdzID0gMDtcbjE1OTM6XHR9XG4xNTk0Olx0XG4xNTk1Olx0c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG4xNTk2Olx0e1xuMTU5NzpcdFx0aWYgKHRyLVx1MDAzZWN1cl9pbWFnZSlcbjE1OTg6XHRcdFx0YnBmX3RyYW1wX2ltYWdlX3B1dCh0ci1cdTAwM2VjdXJfaW1hZ2UpO1xuMTU5OTpcdFx0dHItXHUwMDNlY3VyX2ltYWdlID0gdHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MTUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25kaXRpb25hbCBDb21waWxhdGlvbiBvZiBgdHJhbXBvbGluZS5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGF0IHRoZSByZWxldmFudCBzZWN0aW9uIGlzbiYjMzk7dCBndWFyZGVkIGJ5IGFueSBgI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgYmxvY2suIEdvb2QgdG8ga25vdy4gQnV0IGlzIGB0cmFtcG9saW5lLmNgIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkgYXQgYWxsPyBMZXQmIzM5O3MgYmFjayB1cCBhbmQgY2hlY2sgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYC4gQWgsIHRoZXJlIGl0IGlzOiBgb2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSB0cmFtcG9saW5lLm9gLiBTbywgaXQgbG9va3MgbGlrZSBgQ09ORklHX0JQRl9KSVRgIGlzIGRlZmluaXRlbHkgYSByZXF1aXJlbWVudCBmb3IgdGhpcy4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBuYW1lLgoKTm93LCB3aGF0IGVsc2U/IFRoaW5raW5nIGFib3V0IHdoYXQgZnVuY3Rpb25hbGl0aWVzIHJlbHkgb24gdGhpcyBmaWxlLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBwcm9iYWJseSBuZWVkZWQgZm9yIHRoZSBCUEYgc3lzdGVtIGNhbGxzLiBSaWdodCwgdGhvc2UgYXJlIGZ1bmRhbWVudGFsLiBBbmQgYmFzZWQgb24gd2hhdCBJIHNlZSBsYXRlciwgSSYjMzk7ZCBiZXQgdGhlIGZhcm0gdGhhdCBgQ09ORklHX0JQRl9FVkVOVFNgIGlzIGFsc28gbmVlZGVkLCBnaXZlbiB0aGF0IGBicGZfdHJhY2UuY2AgY2FsbHMgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgd2hpY2ggaXMgdXNlZCBieSB0aGlzIGNvZGUuCgpBbmQgZ2l2ZW4gdGhpcyBpcyB0cmFtcG9saW5lIGNvZGUsIGBDT05GSUdfRlRSQUNFYCBhbmQgYENPTkZJR19EWU5BTUlDX0ZUUkFDRWAgYXJlIGxpa2VseSBjcnVjaWFsLCB0b28sIEkgdGhpbmsuIEZ0cmFjZSBpbiBnZW5lcmFsIGlzIHByb2JhYmx5IGJlaW5nIGxldmVyYWdlZCBmb3IgdGhpcy4gT2theSwgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB3aGF0IGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgaXRzZWxmIGluY2x1ZGVzIGFuZCBkZXBlbmRzIG9uLCBqdXN0IHRvIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gR29pbmcgdG8gcnVuIHRocm91Z2ggdGhlIGNvZGUgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz02Mj1zdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02OC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjY5OiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcwLXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MjEwPXZvaWQgYnBmX2ltYWdlX2tzeW1fZGVsKHN0cnVjdCBicGZfa3N5bSAqa3N5bSlcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMTYtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMTc6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjE4LSNpZmRlZiBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0zNjc9c3RhdGljIGludCBkaXJlY3Rfb3BzX21vZChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICpwdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzcwLX1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM3MTojZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTICovXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNzItXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NjczPXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzA2LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzA3OiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcwOC1hZ2Fpbjpcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NTktXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3NjA6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzYxLVx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTQ2Nz1pbnQgX193ZWFrIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNDcyLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTQ3MzojaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMpIFx1MDAyNlx1MDAyNiBcXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTQ3NC0gICAgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpIFx1MDAyNlx1MDAyNiBcXFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3MTI9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NDYtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzQ3OiNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzQ4LVx0ICBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTUxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBCUEYgVHJhbXBvbGluZSBBdHRhY2gvRGV0YWNoIEF2YWlsYWJpbGl0eSoqCgpPa2F5LCBob2xkIG9uIGEgbWludXRlLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhpcyBjb2RlIGhhcyB0aHJvd24gYSBiaXQgb2YgYSBmbGFnLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvZiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCBhbmQgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAuIEl0IHNlZW1zIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBuZXN0ZWQgd2l0aGluIGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgYW5kIEkgbmVlZCB0byBjb25maXJtIHRoZSBjb25kaXRpb25zLiBTcGVjaWZpY2FsbHksIEkgc2VlIGAjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlICphY3R1YWxseSogcmVxdWlyZWQgZm9yIHRoZXNlIGZ1bmN0aW9ucyB0byBiZSBkZWZpbmVkLiBTbywgbGV0JiMzOTtzIHNraXAgYWhlYWQgdG8gbGluZSAxNDczLCBhbmQgY29uZmlybSB0aGlzIHRvIGJlIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi90cmFtcG9saW5lLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDYwOlx0XG4xNDYxOlx0aW50IF9fd2VhayBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKVxuMTQ2MjpcdHtcbjE0NjM6XHRcdFdBUk5fT05fT05DRShzaXplIFx1MDAzZSBQQUdFX1NJWkUpO1xuMTQ2NDpcdFx0cmV0dXJuIHNldF9tZW1vcnlfcm94KChsb25nKWltYWdlLCAxKTtcbjE0NjU6XHR9XG4xNDY2Olx0XG4xNDY3Olx0aW50IF9fd2VhayBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4xNDY4Olx0XHRcdFx0XHQgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXG4xNDY5Olx0e1xuMTQ3MDpcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbjE0NzE6XHR9XG4xNDcyOlx0XG4xNDczOlx0I2lmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTKSBcdTAwMjZcdTAwMjYgXFxcbjE0NzQ6XHQgICAgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpIFx1MDAyNlx1MDAyNiBcXFxuMTQ3NTpcdCAgICBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcbjE0NzY6XHRcbjE0Nzc6XHRzdGF0aWMgdm9pZCB0cmFtcG9saW5lX2xvY2tfYWxsKHZvaWQpXG4xNDc4Olx0e1xuMTQ3OTpcdFx0aW50IGk7XG4xNDgwOlx0XG4xNDgxOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBUUkFNUE9MSU5FX0xPQ0tTX1RBQkxFX1NJWkU7IGkmIzQzOyYjNDM7KVxuMTQ4MjpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNnRyYW1wb2xpbmVfbG9ja3NbaV0ubXV0ZXgpO1xuMTQ4MzpcdH1cbjE0ODQ6XHRcbjE0ODU6XHRzdGF0aWMgdm9pZCB0cmFtcG9saW5lX3VubG9ja19hbGwodm9pZClcbjE0ODY6XHR7XG4xNDg3Olx0XHRpbnQgaTtcbjE0ODg6XHRcbjE0ODk6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRSQU1QT0xJTkVfTE9DS1NfVEFCTEVfU0laRTsgaSYjNDM7JiM0MzspXG4xNDkwOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZ0cmFtcG9saW5lX2xvY2tzW2ldLm11dGV4KTtcbjE0OTE6XHR9XG4xNDkyOlx0XG4xNDkzOlx0c3RhdGljIHZvaWQgcmVtb3ZlX3RyYWNpbmdfbXVsdGlfZGF0YShzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfZGF0YSAqZGF0YSlcbjE0OTQ6XHR7XG4xNDk1Olx0XHRmdHJhY2VfaGFzaF9yZW1vdmUoZGF0YS1cdTAwM2VyZWcpO1xuMTQ5NjpcdFx0ZnRyYWNlX2hhc2hfcmVtb3ZlKGRhdGEtXHUwMDNldW5yZWcpO1xuMTQ5NzpcdFx0ZnRyYWNlX2hhc2hfcmVtb3ZlKGRhdGEtXHUwMDNlbW9kaWZ5KTtcbjE0OTg6XHR9XG4xNDk5Olx0XG4xNTAwOlx0c3RhdGljIHZvaWQgY2xlYXJfdHJhY2luZ19tdWx0aV9kYXRhKHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9kYXRhICpkYXRhKVxuMTUwMTpcdHtcbjE1MDI6XHRcdHJlbW92ZV90cmFjaW5nX211bHRpX2RhdGEoZGF0YSk7XG4xNTAzOlx0XG4xNTA0Olx0XHRmcmVlX2Z0cmFjZV9oYXNoKGRhdGEtXHUwMDNlcmVnKTtcbjE1MDU6XHRcdGZyZWVfZnRyYWNlX2hhc2goZGF0YS1cdTAwM2V1bnJlZyk7XG4xNTA2Olx0XHRmcmVlX2Z0cmFjZV9oYXNoKGRhdGEtXHUwMDNlbW9kaWZ5KTtcbjE1MDc6XHR9XG4xNTA4Olx0XG4xNTA5Olx0c3RhdGljIGludCBpbml0X3RyYWNpbmdfbXVsdGlfZGF0YShzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfZGF0YSAqZGF0YSlcbjE1MTA6XHR7XG4xNTExOlx0XHRkYXRhLVx1MDAzZXJlZyAgICA9IGFsbG9jX2Z0cmFjZV9oYXNoKEZUUkFDRV9IQVNIX0RFRkFVTFRfQklUUyk7XG4xNTEyOlx0XHRkYXRhLVx1MDAzZXVucmVnICA9IGFsbG9jX2Z0cmFjZV9oYXNoKEZUUkFDRV9IQVNIX0RFRkFVTFRfQklUUyk7XG4xNTEzOlx0XHRkYXRhLVx1MDAzZW1vZGlmeSA9IGFsbG9jX2Z0cmFjZV9oYXNoKEZUUkFDRV9IQVNIX0RFRkFVTFRfQklUUyk7XG4xNTE0Olx0XG4xNTE1Olx0XHRpZiAoIWRhdGEtXHUwMDNlcmVnIHx8ICFkYXRhLVx1MDAzZXVucmVnIHx8ICFkYXRhLVx1MDAzZW1vZGlmeSkge1xuMTUxNjpcdFx0XHRjbGVhcl90cmFjaW5nX211bHRpX2RhdGEoZGF0YSk7XG4xNTE3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTUxODpcdFx0fVxuMTUxOTpcdFx0cmV0dXJuIDA7XG4xNTIwOlx0fVxuMTUyMTpcdFxuMTUyMjpcdHN0YXRpYyB2b2lkIGZ0cmFjZV9oYXNoX2FkZChzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2gsIHN0cnVjdCBmdHJhY2VfZnVuY19lbnRyeSAqZW50cnksXG4xNTIzOlx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgZGlyZWN0KVxuMTUyNDpcdHtcbjE1MjU6XHRcdGVudHJ5LVx1MDAzZWlwID0gaXA7XG4xNTI2Olx0XHRlbnRyeS1cdTAwM2VkaXJlY3QgPSBkaXJlY3Q7XG4xNTI3Olx0XHRhZGRfZnRyYWNlX2hhc2hfZW50cnkoaGFzaCwgZW50cnkpO1xuMTUyODpcdH1cbjE1Mjk6XHRcbjE1MzA6XHRzdGF0aWMgaW50IHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcHRyKVxuMTUzMTpcdHtcbjE1MzI6XHRcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSBpbS1cdTAwM2VpbWFnZTtcbjE1MzM6XHRcdHVuc2lnbmVkIGxvbmcgaXAgPSBmdHJhY2VfbG9jYXRpb24odHItXHUwMDNlaXApO1xuMTUzNDpcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2RhdGEgKmRhdGEgPSBwdHI7XG4xNTM1Olx0XG4xNTM2Olx0XHRpZiAoYnBmX3RyYW1wb2xpbmVfdXNlX2ptcCh0ci1cdTAwM2VmbGFncykpXG4xNTM3Olx0XHRcdGFkZHIgPSBmdHJhY2Vfam1wX3NldChhZGRyKTtcbjE1Mzg6XHRcbjE1Mzk6XHRcdHRyLVx1MDAzZWZ1bmMuZnRyYWNlX21hbmFnZWQgPSB0cnVlO1xuMTU0MDpcdFx0ZnRyYWNlX2hhc2hfYWRkKGRhdGEtXHUwMDNlcmVnLCBkYXRhLVx1MDAzZWVudHJ5LCBpcCwgYWRkcik7XG4xNTQxOlx0XHR0ci1cdTAwM2VjdXJfaW1hZ2UgPSBpbTtcbjE1NDI6XHRcdHJldHVybiAwO1xuMTU0MzpcdH1cbjE1NDQ6XHRcbjE1NDU6XHRzdGF0aWMgaW50IHVucmVnaXN0ZXJfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCB2b2lkICpwdHIpXG4xNTQ2Olx0e1xuMTU0NzpcdFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHRyLVx1MDAzZWN1cl9pbWFnZS1cdTAwM2VpbWFnZTtcbjE1NDg6XHRcdHVuc2lnbmVkIGxvbmcgaXAgPSBmdHJhY2VfbG9jYXRpb24odHItXHUwMDNlaXApO1xuMTU0OTpcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2RhdGEgKmRhdGEgPSBwdHI7XG4xNTUwOlx0XG4xNTUxOlx0XHRpZiAoYnBmX3RyYW1wb2xpbmVfdXNlX2ptcCh0ci1cdTAwM2VmbGFncykpXG4xNTUyOlx0XHRcdGFkZHIgPSBmdHJhY2Vfam1wX3NldChhZGRyKTtcbjE1NTM6XHRcbjE1NTQ6XHRcdGZ0cmFjZV9oYXNoX2FkZChkYXRhLVx1MDAzZXVucmVnLCBkYXRhLVx1MDAzZWVudHJ5LCBpcCwgYWRkcik7XG4xNTU1Olx0XHR0ci1cdTAwM2VjdXJfaW1hZ2UgPSBOVUxMO1xuMTU1NjpcdFx0cmV0dXJuIDA7XG4xNTU3Olx0fVxuMTU1ODpcdFxuMTU1OTpcdHN0YXRpYyBpbnQgbW9kaWZ5X2ZlbnRyeV9tdWx0aShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgb3JpZ19mbGFncywgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDc0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCBhbmQgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgYXJlIG9ubHkgZGVmaW5lZCBpZiB0aGVzZSB0aHJlZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYCNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUykgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUykgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClgLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgpUaGVyZWZvcmUsIGZvciB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSwgSSBuZWVkIHRvIGVuc3VyZSB0aGUgcHJlc2VuY2Ugb2YgYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIGBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgLCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaW4gdGhlIGtlcm5lbCBidWlsZC4gRnVydGhlcm1vcmUsIHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQlBGLXJlbGF0ZWQgY29kZSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGF0IGBDT05GSUdfQlBGX0pJVGAgYW5kIGBDT05GSUdfQlBGX0VWRU5UU2AgYXJlIGVuYWJsZWQgYXMgd2VsbC4gQWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrIHRob3NlLgoKTmV4dCBzdGVwOiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IHRoZSBLY29uZmlnIGVudHJ5IGZvciBgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYCBqdXN0IHRvIGJlIGNlcnRhaW4gSSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgbGluZWQgdXAgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTUwPWNvbmZpZyBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctNTItXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo1Mzpjb25maWcgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTU0LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY0OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgIGNvbmZpZy4gSXQmIzM5O3MgYSBib29sZWFuLCBubyBwcm9tcHQsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBieSB0aGUgYXJjaGl0ZWN0dXJlIGl0c2VsZi4gVGhhdCBtZWFucyBJIGRvbiYjMzk7dCBuZWVkIHRvIHdvcnJ5IGFib3V0IG1hbnVhbGx5IHNldHRpbmcgaXQuIEluIGZhY3QsIGlmIHRoZSBhcmNoaXRlY3R1cmUgKmRvZXNuJiMzOTt0KiBzdXBwb3J0IGl0LCBJIGNhbiYjMzk7dCBldmVuICplbmFibGUqIGl0ISBTbywgZG9lcyBpdCBldmVuIG5lZWQgdG8gYmUgbGlzdGVkPyBQZXJoYXBzIG5vdCwgaWYgaXQmIzM5O3Mgbm90IHVzZXItc2VsZWN0YWJsZS4gTm93IGhvbGQgb24sIGxldCBtZSByZXJlYWQgdGhlIHByb21wdDogJiMzNDtMaXN0IG9mIGtlcm5lbCBjb25maWcgZmxhZ3MgdGhhdCBtdXN0IGJlIGV4cGxpY2l0bHkgZW5hYmxlZCB0byBjb21waWxlIGFuZCB0ZXN0IHRoZSBtb2RpZmllZCBjb2RlLiYjMzQ7IElmIGl0JiMzOTtzIG5vdCB1c2VyLXNlbGVjdGFibGUsIEkgKmNhbiYjMzk7dCogZXhwbGljaXRseSBlbmFibGUgaXQuIFRoZXJlZm9yZSwgdGhpcyBvbmUgaXMgcHJvYmFibHkgbm90IHJlbGV2YW50LiBCdXQgd2FpdCwgd2hhdCBhYm91dCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgPyBUaGF0JiMzOTtzIHRoZSBvbmUgSSBuZWVkIHRvIGxvb2sgYXQgbmV4dC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz00Nz1jb25maWcgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1Ncbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy00OS1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjUwOmNvbmZpZyBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy01MS1cdGJvb2xcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0zMjQ9Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTMyOC1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjMyOTpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMC1cdGRlZl9ib29sIHlcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMS1cdGRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTIHx8IERZTkFNSUNfRlRSQUNFX1dJVEhfQVJHU1xua2VybmVsL3RyYWNlL0tjb25maWc6MzMyOlx0ZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzMtXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9MzQzPWNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0pNUFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTM0NS1cdGRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0Vcbmtlcm5lbC90cmFjZS9LY29uZmlnOjM0NjpcdGRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTM0Ny1cdGRlcGVuZHMgb24gSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0pNUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM4MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBGdHJhY2UgYW5kIEJQRiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gVGhpcyBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIG9wdGlvbiBpcyBhIGJpdCB0cmlja3kuIEl0IGhpbmdlcyBvbiBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTYCBhbmQgYEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBCYXNpY2FsbHksIHdlIG5lZWQgdG8gZW5zdXJlIGVpdGhlciBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTYCBvciBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTYCBhcmUgZW5hYmxlZCwgYWxvbmcgd2l0aCB0aGUgQlBGIHJlbGF0ZWQgY29uZmlnczogYEJQRl9KSVRgLCBgQlBGX1NZU0NBTExgLCBhbmQgYEJQRl9FVkVOVFNgLgoKTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZS4gVGhlIGBGb2N1c1N5bWJvbHNgIGxvb2sgbGlrZSB0aGV5IHNob3VsZCBsZWFkIHVzIHRvIHRoZSByaWdodCBwYXJ0cy4gSSBzZWUgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAgYXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLiBIbW0sIGl0JiMzOTtzIHN0YXRpYywgc28gdGhhdCYjMzk7cyBhIHNsaWdodCB3cmlua2xlLCBidXQgaXQmIzM5O3MgY2FsbGVkIHRocm91Z2ggYHRyYW1wb2xpbmVfbXVsdGlfb3BzLnJlZ2lzdGVyX2ZlbnRyeWAuIFRoZSBjYWxsZXJzIG9mIHRoaXMgYXJlIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgLCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCwgYW5kIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLiBTbywgZm9jdXNpbmcgb24gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLCBhbmQgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAgc2VlbXMgbGlrZSBhIHNvbGlkIHN0cmF0ZWd5LgoKQWx0aG91Z2ggYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAgaXMgc3RhdGljLCBzeXprYWxsZXIgaGFzIGJlZW4ga25vd24gdG8gdGFyZ2V0IHN0YXRpYyBmdW5jdGlvbnMgaWYgZGVidWcgaW5mbyBpcyBwcmVzZW50LCBidXQgSSYjMzk7bSB0aGlua2luZyB0aGF0IGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGFuZCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBhcmUgbXVjaCBiZXR0ZXIgdGFyZ2V0cyBiZWNhdXNlIHRoZXkmIzM5O3JlIGV4cG9ydGVkIG9yIGF0IGxlYXN0IGdsb2JhbC4gUGx1cywgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgaXMgdGhlIGVudHJ5IHBvaW50IGZyb20gdGhlIGBicGZgIHN5c2NhbGwsIHdoaWNoIG1ha2VzIGl0IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gdGhhdCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyBpbmRlZWQgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgdG8gdmVyaWZ5IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFjaW5nX211bHRpX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgxOT1zdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzgzOS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozODQwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODQxLXtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkyOS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozOTMwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTMxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0MDAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVW5kZXJzdGFuZGluZyBNdWx0aS1BdHRhY2ggQlBGIFRyYWNlcG9pbnRzKioKClJpZ2h0LCBzbyB0aGUgY29yZSBvZiBoYW5kbGluZyBgQlBGX0xJTktfQ1JFQVRFYCBmb3IgdGhlc2UgbXVsdGktYXR0YWNoIHRyYWNlcG9pbnQgdHlwZXMsIGBCUEZfVFJBQ0VfRkVOVFJZX01VTFRJYCBhbmQgYEJQRl9UUkFDRV9GRVhJVF9NVUxUSWAsIHRoYXTigJlzIGRlZmluaXRlbHkgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLiBUaGF04oCZcyBteSBmaXJzdCBwb2ludCBvZiByZWZlcmVuY2UuCgpOb3csIHdoZXJlIGRvZXMgdGhhdCBhY3R1YWxseSAqZG8qIGl0cyB3b3JrPyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIExldCYjMzk7cyBsb29rIGF0IGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGRlZXBlciBsb2dpYyBwcm9iYWJseSByZXNpZGVzLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWNoYW5pY3Mgb2YgaG93IHRoZSBtdWx0aXBsZSBhdHRhY2htZW50cyBhcmUgb3JjaGVzdHJhdGVkIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTc0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHRyYW1wb2xpbmVfbXVsdGlfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NzktXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTgwOnN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTgxLXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTg1LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU4NjpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU4Ny17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5NC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1OTU6c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTk2LXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjExLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTYxMjppbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjEzLVx0XHRcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY1OC1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjU5Olx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NjAtXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4Ni1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY4NzpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXHUwMDNldHJhbXBvbGluZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjg4LVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTYtXHRcdGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUsIFx1MDAyNm1ub2RlLVx1MDAzZW5vZGUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY5NzpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY5OC1cdH1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzEyPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzIxLVx0XHRkYXRhLVx1MDAzZWVudHJ5ID0gXHUwMDI2bW5vZGUtXHUwMDNlZW50cnk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzIyOlx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MjMtXHRcdFdBUk5fT05fT05DRShfX2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nKFx1MDAyNm1ub2RlLVx1MDAzZW5vZGUsIG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTczMi1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTczMzpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXHUwMDNldHJhbXBvbGluZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODUzNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBCUEYgVHJhbXBvbGluZSBmb3IgS2VybmVsIEluc3RydW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgQlBGIHRyYW1wb2xpbmUgbWVjaGFuaXNtIGZvciBtb3JlIGdyYW51bGFyIGNvbnRyb2wgd2l0aGluIHRoZSBrZXJuZWwuIEkgdGhpbmsgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgYW5kIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgIGFyZSBnb2luZyB0byBiZSBrZXkgc3ltYm9scyB0byBleHBsb3JlLiBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCBmaXRzIGludG8gdGhlIHBpY3R1cmUuIEl0IHNlZW1zIGxpa2UgdGhlIG11bHRpLWF0dGFjaCBhbmQgZGV0YWNoIGZ1bmN0aW9ucyBhcmUgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGZvciBlbmFibGluZyB0aGlzIGNhcGFiaWxpdHkuCgpJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCB0byBzdXBwb3J0IHRoaXMgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYW5kIGBCUEZfRVZFTlRTYCwgb2YgY291cnNlLiBJJiMzOTtsbCBhbHNvIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGBGVFJBQ0VgIGlzIGVuYWJsZWQgdG8gaG9vayBpbnRvIGZ1bmN0aW9uIHRyYWNpbmcsIGFuZCwgc2luY2UgSSYjMzk7bSB0YXJnZXRpbmcgZGlyZWN0IGNhbGxzLCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGlzIGxpa2VseSBjcml0aWNhbC4KCkZpbmFsbHksIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IHNwZWNpZmljIGNvbmZpZyB0aGF0JiMzOTtzIGRlZGljYXRlZCB0byBCUEYgdHJhbXBvbGluZSBpdHNlbGYuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBkb3VibGUgY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1RSQU1QJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTU5Nz1pbnQgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcyxcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjAzLXtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2MDQ6XHR1MzIgaW1hZ2Vfb2ZmID0gKl9pbWFnZV9vZmYsIGZsYWdzID0gQlBGX1RSQU1QX0ZfSU5ESVJFQ1Q7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjA1LVx0dm9pZCAqaW1hZ2UgPSAqX2ltYWdlO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02MDctXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjA4Olx0dG5vZGVzW0JQRl9UUkFNUF9GRU5UUlldLm5vZGVzWzBdID0gbm9kZTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2MDk6XHR0bm9kZXNbQlBGX1RSQU1QX0ZFTlRSWV0ubnJfbm9kZXMgPSAxO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYxMC1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02MTEtXHRpZiAobW9kZWwtXHUwMDNlcmV0X3NpemUgXHUwMDNlIDApXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjEyOlx0XHRmbGFncyB8PSBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02MTMtXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTY4Nj1zdGF0aWMgbG9uZyBicGZfc3RydWN0X29wc19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MjItXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NzIzOlx0dG5vZGVzID0ga3phbGxvY19vYmpzKCp0bm9kZXMsIEJQRl9UUkFNUF9NQVgpO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTcyNC1cdGlmICghdG5vZGVzKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk4PXN0YXRpYyBpbnQgYnBmX3RyYW1wX2Z0cmFjZV9vcHNfZnVuYyhzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCB1bnNpZ25lZCBsb25nIGlwLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExOC1cdFx0ICovXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMTk6XHRcdGlmICgodHItXHUwMDNlZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMjA6XHRcdCAgICAhKHRyLVx1MDAzZWZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9PUklHX1NUQUNLKSkge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTIxOlx0XHRcdGlmIChXQVJOX09OX09OQ0UodHItXHUwMDNlZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX1NIQVJFX0lQTU9ESUZZKSlcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEyMi1cdFx0XHRcdHJldHVybiAtRUJVU1k7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMjMtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMjQ6XHRcdFx0dHItXHUwMDNlZmxhZ3MgfD0gQlBGX1RSQU1QX0ZfU0hBUkVfSVBNT0RJRlk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMjUtXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUyLVx0Y2FzZSBGVFJBQ0VfT1BTX0NNRF9FTkFCTEVfU0hBUkVfSVBNT0RJRllfUEVFUjpcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1MzpcdFx0dHItXHUwMDNlZmxhZ3MgfD0gQlBGX1RSQU1QX0ZfU0hBUkVfSVBNT0RJRlk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTQtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTU6XHRcdGlmICgodHItXHUwMDNlZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTY6XHRcdCAgICAhKHRyLVx1MDAzZWZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9PUklHX1NUQUNLKSlcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1Ny1cdFx0XHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGUodHIsIGZhbHNlIC8qIGxvY2tfZGlyZWN0X211dGV4ICovLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MC1cdGNhc2UgRlRSQUNFX09QU19DTURfRElTQUJMRV9TSEFSRV9JUE1PRElGWV9QRUVSOlxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTYxOlx0XHR0ci1cdTAwM2VmbGFncyBcdTAwMjY9IH5CUEZfVFJBTVBfRl9TSEFSRV9JUE1PRElGWTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2Mi1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MzpcdFx0aWYgKHRyLVx1MDAzZWZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9PUklHX1NUQUNLKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY0LVx0XHRcdHJldCA9IGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgZmFsc2UgLyogbG9ja19kaXJlY3RfbXV0ZXggKi8sXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MzczPXN0YXRpYyBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKmJwZl90cmFtcG9saW5lX2xvb2t1cCh1NjQga2V5LCB1bnNpZ25lZCBsb25nIGlwKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQwMy1cdHJlZmNvdW50X3NldChcdTAwMjZ0ci1cdTAwM2VyZWZjbnQsIDEpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDA0Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQlBGX1RSQU1QX01BWDsgaSYjNDM7JiM0MzspXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00MDUtXHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZ0ci1cdTAwM2Vwcm9nc19obGlzdFtpXSk7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NTA4PWJwZl90cmFtcG9saW5lX2dldF9wcm9ncyhjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBpbnQgKnRvdGFsLCBib29sICppcF9hcmcpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNTE0LVx0KnRvdGFsID0gMDtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjUxNTpcdHRub2RlcyA9IGt6YWxsb2Nfb2JqcygqdG5vZGVzLCBCUEZfVFJBTVBfTUFYKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTUxNi1cdGlmICghdG5vZGVzKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTUxOC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjUxOTpcdGZvciAoa2luZCA9IDA7IGtpbmQgXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGtpbmQmIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy01MjAtXHRcdHRub2Rlc1traW5kXS5ucl9ub2RlcyA9IHRyLVx1MDAzZXByb2dzX2NudFtraW5kXTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz02NzM9c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02OTEtXHQvKiBjbGVhciBhbGwgYml0cyBleGNlcHQgU0hBUkVfSVBNT0RJRlkgYW5kIFRBSUxfQ0FMTF9DVFggKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjY5MjpcdHRyLVx1MDAzZWZsYWdzIFx1MDAyNj0gKEJQRl9UUkFNUF9GX1NIQVJFX0lQTU9ESUZZIHwgQlBGX1RSQU1QX0ZfVEFJTF9DQUxMX0NUWCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02OTMtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo2OTQ6XHRpZiAodG5vZGVzW0JQRl9UUkFNUF9GRVhJVF0ubnJfbm9kZXMgfHxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjY5NTpcdCAgICB0bm9kZXNbQlBGX1RSQU1QX01PRElGWV9SRVRVUk5dLm5yX25vZGVzKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo2OTY6XHRcdC8qIE5PVEU6IEJQRl9UUkFNUF9GX1JFU1RPUkVfUkVHUyBhbmQgQlBGX1RSQU1QX0ZfU0tJUF9GUkFNRVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNjk3LVx0XHQgKiBzaG91bGQgbm90IGJlIHNldCB0b2dldGhlci5cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTY5OC1cdFx0ICovXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo2OTk6XHRcdHRyLVx1MDAzZWZsYWdzIHw9IEJQRl9UUkFNUF9GX0NBTExfT1JJRyB8IEJQRl9UUkFNUF9GX1NLSVBfRlJBTUU7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MDAtXHR9IGVsc2Uge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzAxOlx0XHR0ci1cdTAwM2VmbGFncyB8PSBCUEZfVFJBTVBfRl9SRVNUT1JFX1JFR1M7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MDItXHR9XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzA0LVx0aWYgKGlwX2FyZylcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcwNTpcdFx0dHItXHUwMDNlZmxhZ3MgfD0gQlBGX1RSQU1QX0ZfSVBfQVJHO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzA2LVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcwOC1hZ2Fpbjpcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcwOTpcdGlmICh0ci1cdTAwM2VmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MTA6XHRcdGlmICh0ci1cdTAwM2VmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfU0hBUkVfSVBNT0RJRlkpIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcxMTpcdFx0XHQvKiBUaGUgQlBGX1RSQU1QX0ZfU0tJUF9GUkFNRSBjYW4gYmUgY2xlYXJlZCBpbiB0aGVcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcxMi1cdFx0XHQgKiBmaXJzdCB0cnksIHJlc2V0IGl0IGluIHRoZSBzZWNvbmQgdHJ5Llxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzEzLVx0XHRcdCAqL1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzE0Olx0XHRcdHRyLVx1MDAzZWZsYWdzIHw9IEJQRl9UUkFNUF9GX09SSUdfU1RBQ0sgfCBCUEZfVFJBTVBfRl9TS0lQX0ZSQU1FO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzE1LVx0XHR9IGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfSk1QKSkge1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcxOS1cdFx0XHQgKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcyMDpcdFx0XHR0ci1cdTAwM2VmbGFncyBcdTAwMjY9IH5CUEZfVFJBTVBfRl9TS0lQX0ZSQU1FO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzIxLVx0XHR9XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzYyLVx0XHQvKiAtRUFHQUlOIGZyb20gYnBmX3RyYW1wX2Z0cmFjZV9vcHNfZnVuYy4gTm93XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3NjM6XHRcdCAqIEJQRl9UUkFNUF9GX1NIQVJFX0lQTU9ESUZZIGlzIHNldCwgd2UgY2FuIGdlbmVyYXRlIHRoZVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzY0LVx0XHQgKiB0cmFtcG9saW5lIGFnYWluLCBhbmQgcmV0cnkgcmVnaXN0ZXIuXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzgyPXN0YXRpYyBlbnVtIGJwZl90cmFtcF9wcm9nX3R5cGUgYnBmX2F0dGFjaF90eXBlX3RvX3RyYW1wKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03ODYtXHRjYXNlIEJQRl9UUkFDRV9GRU5UUllfTVVMVEk6XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3ODc6XHRcdHJldHVybiBCUEZfVFJBTVBfRkVOVFJZO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzg4LVx0Y2FzZSBCUEZfTU9ESUZZX1JFVFVSTjpcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjc4OTpcdFx0cmV0dXJuIEJQRl9UUkFNUF9NT0RJRllfUkVUVVJOO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzkwLVx0Y2FzZSBCUEZfVFJBQ0VfRkVYSVQ6XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03OTEtXHRjYXNlIEJQRl9UUkFDRV9GRVhJVF9NVUxUSTpcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjc5MjpcdFx0cmV0dXJuIEJQRl9UUkFNUF9GRVhJVDtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc5My1cdGNhc2UgQlBGX1RSQUNFX0ZTRVNTSU9OOlxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzk0LVx0Y2FzZSBCUEZfVFJBQ0VfRlNFU1NJT05fTVVMVEk6XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3OTU6XHRcdHJldHVybiBCUEZfVFJBTVBfRlNFU1NJT047XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03OTYtXHRjYXNlIEJQRl9MU01fTUFDOlxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTgwMC1cdFx0XHQgKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjgwMTpcdFx0XHRyZXR1cm4gQlBGX1RSQU1QX0ZFWElUO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODAyLVx0XHRlbHNlXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo4MDM6XHRcdFx0cmV0dXJuIEJQRl9UUkFNUF9NT0RJRllfUkVUVVJOO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODA0LVx0ZGVmYXVsdDpcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjgwNTpcdFx0cmV0dXJuIEJQRl9UUkFNUF9SRVBMQUNFO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODA2LVx0fVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTg0NT1zdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX2FkZF9wcm9nKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODUzLVx0a2luZCA9IGJwZl9hdHRhY2hfdHlwZV90b190cmFtcChub2RlLVx1MDAzZWxpbmstXHUwMDNlcHJvZyk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo4NTQ6XHRpZiAoa2luZCA9PSBCUEZfVFJBTVBfRlNFU1NJT04pIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjg1NTpcdFx0cHJvZ19saXN0ID0gXHUwMDI2dHItXHUwMDNlcHJvZ3NfaGxpc3RbQlBGX1RSQU1QX0ZFTlRSWV07XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy04NTYtXHRcdGNudCYjNDM7JiM0Mzs7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODcyLVx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2bm9kZS1cdTAwM2V0cmFtcF9obGlzdCwgcHJvZ19saXN0KTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjg3MzpcdGlmIChraW5kID09IEJQRl9UUkFNUF9GU0VTU0lPTikge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODc0Olx0XHR0ci1cdTAwM2Vwcm9nc19jbnRbQlBGX1RSQU1QX0ZFTlRSWV0mIzQzOyYjNDM7O1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODc1LVx0XHRmZXhpdCA9IGZzZXNzaW9uX2V4aXQobm9kZSk7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODc3LVx0XHRcdHJldHVybiAtRUlOVkFMO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODc4Olx0XHRobGlzdF9hZGRfaGVhZChcdTAwMjZmZXhpdC1cdTAwM2V0cmFtcF9obGlzdCwgXHUwMDI2dHItXHUwMDNlcHJvZ3NfaGxpc3RbQlBGX1RSQU1QX0ZFWElUXSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo4Nzk6XHRcdHRyLVx1MDAzZXByb2dzX2NudFtCUEZfVFJBTVBfRkVYSVRdJiM0MzsmIzQzOztcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTg4MC1cdH0gZWxzZSB7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9ODg2PXN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODkyLVx0a2luZCA9IGJwZl9hdHRhY2hfdHlwZV90b190cmFtcChub2RlLVx1MDAzZWxpbmstXHUwMDNlcHJvZyk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo4OTM6XHRpZiAoa2luZCA9PSBCUEZfVFJBTVBfRlNFU1NJT04pIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTg5NC1cdFx0ZmV4aXQgPSBmc2Vzc2lvbl9leGl0KG5vZGUpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTg5Ny1cdFx0aGxpc3RfZGVsX2luaXQoXHUwMDI2ZmV4aXQtXHUwMDNldHJhbXBfaGxpc3QpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODk4Olx0XHR0ci1cdTAwM2Vwcm9nc19jbnRbQlBGX1RSQU1QX0ZFWElUXS0tO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODk5Olx0XHRraW5kID0gQlBGX1RSQU1QX0ZFTlRSWTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkwMC1cdH1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05MDU9c3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTIxLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTIyOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQlBGX1RSQU1QX01BWDsgaSYjNDM7JiM0MzspXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MjMtXHRcdGNudCAmIzQzOz0gdHItXHUwMDNlcHJvZ3NfY250W2ldO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTI0LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTI1Olx0aWYgKGtpbmQgPT0gQlBGX1RSQU1QX1JFUExBQ0UpIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkyNi1cdFx0LyogQ2Fubm90IGF0dGFjaCBleHRlbnNpb24gaWYgZmVudHJ5L2ZleGl0IGFyZSBpbiB1c2UuICovXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTU4PXN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTY3LVx0a2luZCA9IGJwZl9hdHRhY2hfdHlwZV90b190cmFtcChub2RlLVx1MDAzZWxpbmstXHUwMDNlcHJvZyk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5Njg6XHRpZiAoa2luZCA9PSBCUEZfVFJBTVBfUkVQTEFDRSkge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTY5LVx0XHRXQVJOX09OX09OQ0UoIXRyLVx1MDAzZWV4dGVuc2lvbl9wcm9nKTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xMDU4PXN0YXRpYyBzdHJ1Y3QgYnBmX3NoaW1fdHJhbXBfbGluayAqY2dyb3VwX3NoaW1fZmluZChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwNjMtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDY0Olx0Zm9yIChraW5kID0gMDsga2luZCBcdTAwM2MgQlBGX1RSQU1QX01BWDsga2luZCYjNDM7JiM0MzspIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwNjUtXHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIFx1MDAyNnRyLVx1MDAzZXByb2dzX2hsaXN0W2tpbmRdLCB0cmFtcF9obGlzdCkge1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTExODc9dm9pZCBicGZfdHJhbXBvbGluZV9wdXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTk2LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTE5NzpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGkmIzQzOyYjNDM7KVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTE5OC1cdFx0aWYgKFdBUk5fT05fT05DRSghaGxpc3RfZW1wdHkoXHUwMDI2dHItXHUwMDNlcHJvZ3NfaGxpc3RbaV0pKSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk0MTk9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NTEyLVx0aWYgKHRndF9wcm9nIFx1MDAyNlx1MDAyNiB0Z3RfcHJvZy1cdTAwM2VhdXgtXHUwMDNldGFpbF9jYWxsX3JlYWNoYWJsZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTUxMzpcdFx0dHItXHUwMDNlZmxhZ3MgPSBCUEZfVFJBTVBfRl9UQUlMX0NBTExfQ1RYO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NTE0LVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTc2Mj1pbnQgYnBmX2ZpeHVwX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg2NS1cdFx0ICogICB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4NjY6XHRcdCAqICAgICAgIHJldHVybiAoKCh1NjQgKiljdHgpWy0xXSBcdTAwM2VcdTAwM2UgQlBGX1RSQU1QX0lTX1JFVFVSTl9TSElGVCkgXHUwMDI2IDE7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NjctXHRcdCAqICAgfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg2OS1cdFx0aW5zbl9idWZbMF0gPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAtOCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4NzA6XHRcdGluc25fYnVmWzFdID0gQlBGX0FMVTY0X0lNTShCUEZfUlNILCBCUEZfUkVHXzAsIEJQRl9UUkFNUF9JU19SRVRVUk5fU0hJRlQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODcxLVx0XHRpbnNuX2J1ZlsyXSA9IEJQRl9BTFU2NF9JTU0oQlBGX0FORCwgQlBGX1JFR18wLCAxKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NzktXHRcdCAqICAge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5ODgwOlx0XHQgKiAgICAgICB1NjQgb2ZmID0gKCgodTY0ICopY3R4KVstMV0gXHUwMDNlXHUwMDNlIEJQRl9UUkFNUF9DT09LSUVfSU5ERVhfU0hJRlQpIFx1MDAyNiAweEZGO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODgxLVx0XHQgKiAgICAgICByZXR1cm4gXHUwMDI2KCh1NjQgKiljdHgpWy1vZmZdO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg4NC1cdFx0aW5zbl9idWZbMF0gPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAtOCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4ODU6XHRcdGluc25fYnVmWzFdID0gQlBGX0FMVTY0X0lNTShCUEZfUlNILCBCUEZfUkVHXzAsIEJQRl9UUkFNUF9DT09LSUVfSU5ERVhfU0hJRlQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODg2LVx0XHRpbnNuX2J1ZlsyXSA9IEJQRl9BTFU2NF9JTU0oQlBGX0FORCwgQlBGX1JFR18wLCAweEZGKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3ODUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEJQRiBhbmQgRHluYW1pYyBUcmFjaW5nKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBmb3IgQlBGIGFuZCBkeW5hbWljIHRyYWNpbmcsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRyYW1wb2xpbmUgZnVuY3Rpb25hbGl0eS4gSXQgc2VlbXMgbGlrZSB0aGVyZSBpc24mIzM5O3QgYSBzaW5nbGUsIGRlZGljYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgJiMzNDtCUEYgdHJhbXBvbGluZSYjMzQ7IGl0c2VsZiwgYnV0IHJhdGhlciBpdCYjMzk7cyBhY2hpZXZlZCB0aHJvdWdoIGEgY29tYmluYXRpb24gb2Ygb3RoZXIgb3B0aW9ucy4KCkluaXRpYWxseSwgSSBpZGVudGlmaWVkIHRoZXNlIGtleSBjb25maWdzOiBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGBCUEZfRVZFTlRTYCwgYEZUUkFDRWAsIGFuZCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBIb3dldmVyLCBJIG5lZWQgdG8gZGlnIGRlZXBlci4KCkkgc2VlIHRoYXQgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBpcyBhY3R1YWxseSBhIGRlZmF1bHQgYm9vbGVhbiAoYGRlZl9ib29sIHlgKSBhbmQgZGVwZW5kcyBvbiBlaXRoZXIgYERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU2Agb3IgYERZTkFNSUNfRlRSQUNFX1dJVEhfQVJHU2AsICphbmQqIGBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYC4gU2luY2UgaXQmIzM5O3MgZGVwZW5kZW50LCBpdCYjMzk7cyBub3QgZGlyZWN0bHkgdXNlci1zZWxlY3RhYmxlLCB3aGljaCBtYWtlcyBtZSByZS1ldmFsdWF0ZSB3aGV0aGVyIGl0JiMzOTtzIHVzZWZ1bCB0byBsaXN0LiBXZSBjYW4mIzM5O3QgYWN0dWFsbHkgKmVuYWJsZSogaXQuCgpBbHNvLCBJIGNoZWNrZWQgYEhBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYC4gSXQmIzM5O3MgYSBib29sZWFuIHdpdGhvdXQgYSBwcm9tcHQsIHNvIGl0JiMzOTtzIG5vdCBzb21ldGhpbmcgd2UgY2FuIGV4cGxpY2l0bHkgY29uZmlndXJlLgoKVGhlIHBvaW50IGJlaW5nLCBpZiB0aGUgYWltIGlzIHRvIHVzZSAmIzM0O2RpcmVjdCBjYWxscyYjMzQ7IHRocm91Z2ggZHluYW1pYyBmdHJhY2UsIHRoYXQgaXMgbm90IHVzZXIgc2VsZWN0YWJsZS4KCk5vdywgbGV0JiMzOTtzIHJlZmluZSB0aGlzLiBMZXQgbWUgcmV2aXNpdC4KCk9rYXksIGxldCYjMzk7cyByZXZpZXcgdGhlIGNvbmZpZ3MsIHRha2luZyBpbnRvIGFjY291bnQgd2hhdCBpcyBhY3R1YWxseSB1c2VyLXNlbGVjdGFibGU6CgpgQlBGX1NZU0NBTExgCmBCUEZfSklUYApgQlBGX0VWRU5UU2AKYEZUUkFDRWAKYERZTkFNSUNfRlRSQUNFYAoKVWx0aW1hdGVseSwgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCwgYERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU2AgYXJlIG5vdCB1c2VyIHNlbGVjdGFibGUuIFNvLCB0aGVyZSBpcyBubyB2YWx1ZSBpbiBsaXN0aW5nIHRoZW0gYXMgJiMzNDttdXN0IGJlIGV4cGxpY2l0bHkgZW5hYmxlZCYjMzQ7IGJlY2F1c2UgdGhleSBhcmUgZW5hYmxlZCBhcyBhIGNvbnNlcXVlbmNlIG9mIG90aGVyIGNvbmZpZ3VyYXRpb24gY2hvaWNlcy4gSSBhbSBub3cgbW9yZSBjb252aW5jZWQgdGhhdCB0aGUgdXNlZnVsIGNvbmZpZ3VyYXRpb24gdG8gaW5jbHVkZSBpcyBgRFlOQU1JQ19GVFJBQ0VgLCBhcyB0aGlzIGlzIHVzZXIgc2VsZWN0YWJsZS4KCk5vdywgbGV0IG1lIGNoZWNrIGBEWU5BTUlDX0ZUUkFDRWAgaW4gYGtlcm5lbC90cmFjZS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERZTkFNSUNfRlRSQUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9MjkwPWNvbmZpZyBGVU5DVElPTl9UUkFDRV9BUkdTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMzAwLVxua2VybmVsL3RyYWNlL0tjb25maWc6MzAxOmNvbmZpZyBEWU5BTUlDX0ZUUkFDRVxua2VybmVsL3RyYWNlL0tjb25maWctMzAyLVx0Ym9vbFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTMyMy1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjMyNDpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMjUtXHRkZWZfYm9vbCB5XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMzI4LVxua2VybmVsL3RyYWNlL0tjb25maWc6MzI5OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL3RyYWNlL0tjb25maWctMzMwLVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMy1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjMzNDpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QU1xua2VybmVsL3RyYWNlL0tjb25maWctMzM1LVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzNy1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjMzODpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzktXHRkZWZfYm9vbCB5XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMzQyLVxua2VybmVsL3RyYWNlL0tjb25maWc6MzQzOmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0pNUFxua2VybmVsL3RyYWNlL0tjb25maWctMzQ0LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTA5NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgRFlOQU1JQ19GVFJBQ0VgLiBTZWVtcyBsaWtlIGl0JiMzOTtzIGEgYm9vbGVhbiBvcHRpb24sIG5vIHByb21wdCBuZWNlc3NhcnksIGFuZCwgbmF0dXJhbGx5LCBpdCYjMzk7cyBzZWxlY3RlZCBieSBgRlRSQUNFYC4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYEZUUkFDRWAgY29uZmlndXJhdGlvbi4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2Ugb3B0aW9ucyB0byBlbnN1cmUgdGhlIGtlcm5lbCYjMzk7cyB0cmFjaW5nIGNhcGFiaWxpdGllcyBhcmUgc2V0IHVwIGFzIGludGVuZGVkLCBlc3BlY2lhbGx5IHdpdGhpbiBteSBhcmVhIG9mIGV4cGVydGlzZS4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2Ugc2VsZWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZUUkFDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTE5OD1jb25maWcgVFJBQ0lOR19TVVBQT1JUXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMjAzLVxua2VybmVsL3RyYWNlL0tjb25maWc6MjA0Om1lbnVjb25maWcgRlRSQUNFXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yMDUtXHRib29sIFwmIzM0O1RyYWNlcnNcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz01ODg9Y29uZmlnIEVOQUJMRV9ERUZBVUxUX1RSQUNFUlNcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy01OTYtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo1OTc6Y29uZmlnIEZUUkFDRV9TWVNDQUxMU1xua2VybmVsL3RyYWNlL0tjb25maWctNTk4LVx0Ym9vbCBcJiMzNDtUcmFjZSBzeXNjYWxsc1wmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTg2OD1jb25maWcgQlBGX0tQUk9CRV9PVkVSUklERVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg3Ni1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg3Nzpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfUEFUQ0hBQkxFX0ZVTkNUSU9OX0VOVFJZXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NzgtXHRib29sXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctODgwLVxua2VybmVsL3RyYWNlL0tjb25maWc6ODgxOmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9DQ1xua2VybmVsL3RyYWNlL0tjb25maWctODgyLVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg4Ni1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg4Nzpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfT0JKVE9PTFxua2VybmVsL3RyYWNlL0tjb25maWctODg4LVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg5NC1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg5NTpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfUkVDT1JETUNPVU5UXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04OTYtXHRkZWZfYm9vbCB5XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9MTAyMT1jb25maWcgVFJBQ0VfRVZBTF9NQVBfRklMRVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNDgtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDQ5OmNvbmZpZyBGVFJBQ0VfUkVDT1JEX1JFQ1VSU0lPTlxua2VybmVsL3RyYWNlL0tjb25maWctMTA1MC1cdGJvb2wgXCYjMzQ7UmVjb3JkIGZ1bmN0aW9ucyB0aGF0IHJlY3Vyc2UgaW4gZnVuY3Rpb24gdHJhY2luZ1wmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNjItXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDYzOmNvbmZpZyBGVFJBQ0VfUkVDT1JEX1JFQ1VSU0lPTl9TSVpFXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDY0LVx0aW50IFwmIzM0O01heCBudW1iZXIgb2YgcmVjdXJzZWQgZnVuY3Rpb25zIHRvIHJlY29yZFwmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNzMtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDc0OmNvbmZpZyBGVFJBQ0VfVkFMSURBVEVfUkNVX0lTX1dBVENISU5HXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDc1LVx0Ym9vbCBcJiMzNDtWYWxpZGF0ZSBSQ1UgaXMgb24gZHVyaW5nIGZ0cmFjZSBleGVjdXRpb25cJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTAxPWNvbmZpZyBHQ09WX1BST0ZJTEVfRlRSQUNFXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTExMi1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjExMTM6Y29uZmlnIEZUUkFDRV9TRUxGVEVTVFxua2VybmVsL3RyYWNlL0tjb25maWctMTExNC1cdGJvb2xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMTUtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMTE2OmNvbmZpZyBGVFJBQ0VfU1RBUlRVUF9URVNUXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTE3LVx0Ym9vbCBcJiMzNDtQZXJmb3JtIGEgc3RhcnR1cCB0ZXN0IG9uIGZ0cmFjZVwmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTExMzY9Y29uZmlnIEVWRU5UX1RSQUNFX1RFU1RfU1lTQ0FMTFNcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTQ3LVxua2VybmVsL3RyYWNlL0tjb25maWc6MTE0ODpjb25maWcgRlRSQUNFX1NPUlRfU1RBUlRVUF9URVNUXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTQ5LSAgICAgICBib29sIFwmIzM0O1ZlcmlmeSBjb21waWxlIHRpbWUgc29ydGluZyBvZiBmdHJhY2UgZnVuY3Rpb25zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTA5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIFRyYWNpbmc6IEEgUXVpY2sgSnVtcHN0YXJ0KioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGtlcm5lbCB0cmFjaW5nLCBzcGVjaWZpY2FsbHksIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgaW1tZWRpYXRlbHkganVtcCB0byBgRlRSQUNFYC4gSXQmIzM5O3MgYmFzaWNhbGx5IHRoZSBzdGFuZGFyZCwgdGhlIGZvdW5kYXRpb24sIHdoYXQgSSAqdXN1YWxseSogcmVhY2ggZm9yIHdoZW4gSSBuZWVkIHRvIGluc3RydW1lbnQgdGhpbmdzLiBJIG1lYW4sIGl0JiMzOTtzIGp1c3Qgc28gZWFzeSB0byBlbmFibGUgdGhyb3VnaCBgbWVudWNvbmZpZ2AsIHJpZ2h0PyBCdXQgdGhlbiB0aGUgcXVlc3Rpb24gaGl0cyBtZSwgbWF5YmUgc3VidGx5Li4uIHdoYXQgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBGVU5DVElPTl9UUkFDRVJgPwoKSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSB0aGluZ3MgcmVsYXRlIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gZnVsbHkgd2llbGQgdGhlbS4gSSBjYW4mIzM5O3QganVzdCBlbmFibGUgYEZUUkFDRWAgYW5kIGFzc3VtZSBldmVyeXRoaW5nIGlzIGdvaW5nIHRvIGJlIGZpbmUuIEkgbmVlZCB0byBiZSBtb3JlIGRlbGliZXJhdGUgYWJvdXQgd2hhdCBmZWF0dXJlcyBJJiMzOTttIHB1bGxpbmcgaW4uIFRoZXJlIGNvdWxkIGJlIG90aGVyIHJlbGF0ZWQgdHJhY2VycyB0byBjb25zaWRlci4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRvIGEgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGVU5DVElPTl9UUkFDRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz0yMjY9Y29uZmlnIEJPT1RUSU1FX1RSQUNJTkdcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yMzQtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoyMzU6Y29uZmlnIEZVTkNUSU9OX1RSQUNFUlxua2VybmVsL3RyYWNlL0tjb25maWctMjM2LVx0Ym9vbCBcJiMzNDtLZXJuZWwgRnVuY3Rpb24gVHJhY2VyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NDM5CgkJCQkJCQlvdXRwdXQ6IDE0NgoJCQkJCQkJdGhvdWdodHM6IDUwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIEJQRiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHVzZXIgY2FuIHNlbGVjdCBgRlVOQ1RJT05fVFJBQ0VSYCwgc28gaXQmIzM5O3MgZXNzZW50aWFsIHdlIGluY2x1ZGUgYm90aCBgRlRSQUNFYCBhbmQgYEZVTkNUSU9OX1RSQUNFUmAgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFdlIHNob3VsZCBhbHNvIGluY2x1ZGUgdGhlIHVzdWFsIEJQRiBzdXNwZWN0czogYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYEJQRl9FVkVOVFNgLgoKVGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyDigJMgYFdvcnRoRnV6emluZzogdHJ1ZWAuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IGl0JiMzOTtzIG1lc3Npbmcgd2l0aCB0aGUgQlBGIHRyYW1wb2xpbmUgbG9naWMgc3BlY2lmaWNhbGx5IHRvIGZpeCB0aGUgYGZ0cmFjZV9tYW5hZ2VkYCBzZXR0aW5nIGZvciBtdWx0aS1hdHRhY2ggYGZlbnRyeWAgcHJvZ3JhbXMuIFRoaXMgaXMgYSBjb3JlIEJQRiBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIGZ0cmFjZSB0cmFtcG9saW5lcyBtYWtlcyBpdCBhIGhpZ2gtcHJpb3JpdHkgdGFyZ2V0LgoKSW5pdGlhbGx5LCBJIGhhZCBhIGJyb2FkZXIgc2V0IG9mIGBGb2N1c1N5bWJvbHNgOiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAsIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLCBhbmQgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAuIEhvd2V2ZXIsIHVwb24gY2xvc2VyIGluc3BlY3Rpb24sIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgLCB3aGlsZSBzdGF0aWMsIGlzICp0aGUqIG1vZGlmaWVkIGZ1bmN0aW9uLiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBhbmQgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgYXJlIHRoZSBhY3R1YWwgZW50cnkgcG9pbnRzLCBzbyB0aG9zZSBhcmUga2V5LiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCBpcyBub3QgbW9kaWZpZWQuIEkmIzM5O3ZlIHJlZmluZWQgdGhlIGxpc3QgdG8gaW5jbHVkZSBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGFuZCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYC4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVpbmcgZGlyZWN0bHkgbW9kaWZpZWQgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYC4gWWVzLCBpdCBhcHBlYXJzIHNvLCBhbmQgc29tZSBzZWxmdGVzdHMsIHNvIHRoaXMgcmVmaW5lZCBzeW1ib2wgbGlzdCBpcyBhY2N1cmF0ZS4KClRoZSBmaW5hbCBjb25maWd1cmF0aW9uLCBhcyBpdCBzdGFuZHMsIGxvb2tzIHNwb3Qtb24gdG8gbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7RlRSQUNFJiMzNDssCiAgICAmIzM0O0ZVTkNUSU9OX1RSQUNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlZ2lzdGVyX2ZlbnRyeV9tdWx0aSYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2gmIzM0OywKICAgICYjMzQ7YnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdHJhbXBvbGluZSBsb2dpYyB0byBjb3JyZWN0bHkgc2V0IGBmdHJhY2VfbWFuYWdlZGAgZm9yIG11bHRpLWF0dGFjaCBmZW50cnkgcHJvZ3JhbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgZnRyYWNlIGFuZCBCUEYgdHJhbXBvbGluZXMgaW50ZXJhY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtGVFJBQ0UmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVnaXN0ZXJfZmVudHJ5X211bHRpJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaCYjMzQ7LAogICAgJiMzNDticGZfdHJhY2luZ19tdWx0aV9hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB0cmFtcG9saW5lIGxvZ2ljIHRvIGNvcnJlY3RseSBzZXQgYGZ0cmFjZV9tYW5hZ2VkYCBmb3IgbXVsdGktYXR0YWNoIGZlbnRyeSBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBmdHJhY2UgYW5kIEJQRiB0cmFtcG9saW5lcyBpbnRlcmFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQxOjEwLjYwODIzMTgzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NTI5MTY5MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJGVFJBQ0VcIixcbiAgICBcIkZVTkNUSU9OX1RSQUNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlZ2lzdGVyX2ZlbnRyeV9tdWx0aVwiLFxuICAgIFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoXCIsXG4gICAgXCJicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHRyYW1wb2xpbmUgbG9naWMgdG8gY29ycmVjdGx5IHNldCBgZnRyYWNlX21hbmFnZWRgIGZvciBtdWx0aS1hdHRhY2ggZmVudHJ5IHByb2dyYW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IGZ0cmFjZSBhbmQgQlBGIHRyYW1wb2xpbmVzIGludGVyYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MToxMC42MDgyMzcyMzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDAzNjk2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZkMWQ5YWMxZTg5MjE1MGIxNjBiYmFjNTcwZmJhODhkMTczNDVlYjhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMTEgMTE6NDE6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xcbmluZGV4IDFhNzIxZmM0YmVmNTYyLi42ZWFkZjY0ZjdlYzkwZiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xcbisrKyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXFxuQEAgLTE1MzYsNiArMTUzNiw3IEBAIHN0YXRpYyBpbnQgcmVnaXN0ZXJfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHN0cnVjdCBicGZfdHJhbXBfaW1hXFxuIFxcdGlmIChicGZfdHJhbXBvbGluZV91c2Vfam1wKHRyLVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdGFkZHIgPSBmdHJhY2Vfam1wX3NldChhZGRyKTtcXG4gXFxuK1xcdHRyLVxcdTAwM2VmdW5jLmZ0cmFjZV9tYW5hZ2VkID0gdHJ1ZTtcXG4gXFx0ZnRyYWNlX2hhc2hfYWRkKGRhdGEtXFx1MDAzZXJlZywgZGF0YS1cXHUwMDNlZW50cnksIGlwLCBhZGRyKTtcXG4gXFx0dHItXFx1MDAzZWN1cl9pbWFnZSA9IGltO1xcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jXFxuaW5kZXggZjAyZmZjN2Y0MWQ3ODQuLjBhYTk1MzJhMDVjZmVjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuY1xcbkBAIC00NjAsNiArNDYwLDczIEBAIHN0YXRpYyB2b2lkIHRlc3RfaW50ZXJzZWN0KHZvaWQpXFxuIFxcdHRyYWNpbmdfbXVsdGlfaW50ZXJzZWN0X19kZXN0cm95KHNrZWwpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0ZXN0X2ZlbnRyeV9hZnRlcl9tdWx0aSh2b2lkKVxcbit7XFxuK1xcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZnVuY3NbXSA9IHtcXG4rXFx0XFx0XFxcImJwZl9mZW50cnlfdGVzdDFcXFwiLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgYnBmX2xpbmsgKmZlbnRyeV9saW5rID0gTlVMTCwgKm11bHRpX2xpbmsgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgdHJhY2luZ19tdWx0aV9pbnRlcnNlY3QgKnNrZWwgPSBOVUxMO1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdHJhY2luZ19tdWx0aV9vcHRzLCBvcHRzKTtcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcXG4rXFx0X191MzIgKmlkcyA9IE5VTEw7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRza2VsID0gdHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJ0cmFjaW5nX211bHRpX2ludGVyc2VjdF9fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXBpZCA9IGdldHBpZCgpO1xcbitcXG4rXFx0aWRzID0gZ2V0X2lkcyhmdW5jcywgQVJSQVlfU0laRShmdW5jcyksIE5VTEwpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoaWRzLCBcXFwiZ2V0X2lkc1xcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRvcHRzLmlkcyA9IGlkcztcXG4rXFx0b3B0cy5jbnQgPSBBUlJBWV9TSVpFKGZ1bmNzKTtcXG4rXFx0bXVsdGlfbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aShza2VsLVxcdTAwM2Vwcm9ncy5mZW50cnlfMSwgTlVMTCwgXFx1MDAyNm9wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIobXVsdGlfbGluaywgXFxcImF0dGFjaF9tdWx0aVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRmZW50cnlfbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2goc2tlbC1cXHUwMDNlcHJvZ3MuZmVudHJ5KTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGZlbnRyeV9saW5rLCBcXFwiYXR0YWNoX2ZlbnRyeVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5mZW50cnlfMSksIFxcdTAwMjZ0b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInRlc3RfcnVuXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldGVzdF9yZXN1bHRfZmVudHJ5XzEsIDEsIFxcXCJtdWx0aV9mZW50cnlcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldGVzdF9yZXN1bHRfZmVudHJ5LCAxLCBcXFwiZmVudHJ5XFxcIik7XFxuK1xcbitcXHRlcnIgPSBicGZfbGlua19fZGVzdHJveShmZW50cnlfbGluayk7XFxuK1xcdGZlbnRyeV9saW5rID0gTlVMTDtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiZGVzdHJveV9mZW50cnlcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MuZmVudHJ5XzEpLCBcXHUwMDI2dG9wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X3J1bl9tdWx0aVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXRlc3RfcmVzdWx0X2ZlbnRyeV8xLCAyLCBcXFwibXVsdGlfZmVudHJ5X29ubHlcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldGVzdF9yZXN1bHRfZmVudHJ5LCAxLCBcXFwiZmVudHJ5X2RldGFjaGVkXFxcIik7XFxuK1xcbitcXHRlcnIgPSBicGZfbGlua19fZGVzdHJveShtdWx0aV9saW5rKTtcXG4rXFx0bXVsdGlfbGluayA9IE5VTEw7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImRlc3Ryb3lfbXVsdGlcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MuZmVudHJ5XzEpLCBcXHUwMDI2dG9wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X3J1bl9kZXRhY2hlZFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXRlc3RfcmVzdWx0X2ZlbnRyeV8xLCAyLCBcXFwibXVsdGlfZmVudHJ5X2RldGFjaGVkXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXRlc3RfcmVzdWx0X2ZlbnRyeSwgMSwgXFxcImZlbnRyeV9zdGlsbF9kZXRhY2hlZFxcXCIpO1xcbitcXG4rY2xlYW51cDpcXG4rXFx0YnBmX2xpbmtfX2Rlc3Ryb3koZmVudHJ5X2xpbmspO1xcbitcXHRicGZfbGlua19fZGVzdHJveShtdWx0aV9saW5rKTtcXG4rXFx0ZnJlZShpZHMpO1xcbitcXHR0cmFjaW5nX211bHRpX2ludGVyc2VjdF9fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdGVzdF9zZXNzaW9uKHZvaWQpXFxuIHtcXG4gXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcXG5AQCAtOTU3LDQgKzEwMjQsNiBAQCB2b2lkIHRlc3RfdHJhY2luZ19tdWx0aV90ZXN0KHZvaWQpXFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJhdHRhY2hfYXBpX2ZhaWxzXFxcIikpXFxuIFxcdFxcdHRlc3RfYXR0YWNoX2FwaV9mYWlscygpO1xcbiBcXHRSVU5fVEVTVFModHJhY2luZ19tdWx0aV92ZXJpZmllcik7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJmZW50cnlfYWZ0ZXJfbXVsdGlcXFwiKSlcXG4rXFx0XFx0dGVzdF9mZW50cnlfYWZ0ZXJfbXVsdGkoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfYXR0YWNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfYXR0YWNoLmNcXG5pbmRleCBjZDViZTBiYjZmZmRkNy4uNWViYmUzYjYwMmE0ZjEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfbXVsdGlfaW50ZXJzZWN0X2F0dGFjaC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfbXVsdGlfaW50ZXJzZWN0X2F0dGFjaC5jXFxuQEAgLTExLDYgKzExLDE0IEBAIF9fdTY0IHRlc3RfcmVzdWx0X2ZlbnRyeV8xID0gMDtcXG4gX191NjQgdGVzdF9yZXN1bHRfZmVudHJ5XzIgPSAwO1xcbiBfX3U2NCB0ZXN0X3Jlc3VsdF9mZXhpdF8xID0gMDtcXG4gX191NjQgdGVzdF9yZXN1bHRfZmV4aXRfMiA9IDA7XFxuK19fdTY0IHRlc3RfcmVzdWx0X2ZlbnRyeSA9IDA7XFxuK1xcbitTRUMoXFxcImZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxXFxcIilcXG4raW50IEJQRl9QUk9HKGZlbnRyeSwgaW50IGEpXFxuK3tcXG4rXFx0dGVzdF9yZXN1bHRfZmVudHJ5ICs9IGEgPT0gMTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4gXFxuIFNFQyhcXFwiZmVudHJ5Lm11bHRpXFxcIilcXG4gaW50IEJQRl9QUk9HKGZlbnRyeV8xKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MToxMS4wNTMxNDc4MTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0MDg0MjM3MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJGVFJBQ0VcIixcbiAgICBcIkZVTkNUSU9OX1RSQUNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlZ2lzdGVyX2ZlbnRyeV9tdWx0aVwiLFxuICAgIFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoXCIsXG4gICAgXCJicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHRyYW1wb2xpbmUgbG9naWMgdG8gY29ycmVjdGx5IHNldCBgZnRyYWNlX21hbmFnZWRgIGZvciBtdWx0aS1hdHRhY2ggZmVudHJ5IHByb2dyYW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IGZ0cmFjZSBhbmQgQlBGIHRyYW1wb2xpbmVzIGludGVyYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZkMWQ5YWMxZTg5MjE1MGIxNjBiYmFjNTcwZmJhODhkMTczNDVlYjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxMTo0MTowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbmluZGV4IDFhNzIxZmM0YmVmNTYyLi42ZWFkZjY0ZjdlYzkwZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG4rKysgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuQEAgLTE1MzYsNiArMTUzNiw3IEBAIHN0YXRpYyBpbnQgcmVnaXN0ZXJfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHN0cnVjdCBicGZfdHJhbXBfaW1hXG4gXHRpZiAoYnBmX3RyYW1wb2xpbmVfdXNlX2ptcCh0ci1cdTAwM2VmbGFncykpXG4gXHRcdGFkZHIgPSBmdHJhY2Vfam1wX3NldChhZGRyKTtcbiBcbitcdHRyLVx1MDAzZWZ1bmMuZnRyYWNlX21hbmFnZWQgPSB0cnVlO1xuIFx0ZnRyYWNlX2hhc2hfYWRkKGRhdGEtXHUwMDNlcmVnLCBkYXRhLVx1MDAzZWVudHJ5LCBpcCwgYWRkcik7XG4gXHR0ci1cdTAwM2VjdXJfaW1hZ2UgPSBpbTtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuY1xuaW5kZXggZjAyZmZjN2Y0MWQ3ODQuLjBhYTk1MzJhMDVjZmVjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX211bHRpLmNcbkBAIC00NjAsNiArNDYwLDczIEBAIHN0YXRpYyB2b2lkIHRlc3RfaW50ZXJzZWN0KHZvaWQpXG4gXHR0cmFjaW5nX211bHRpX2ludGVyc2VjdF9fZGVzdHJveShza2VsKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGVzdF9mZW50cnlfYWZ0ZXJfbXVsdGkodm9pZClcbit7XG4rXHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZ1bmNzW10gPSB7XG4rXHRcdFwiYnBmX2ZlbnRyeV90ZXN0MVwiLFxuK1x0fTtcbitcdHN0cnVjdCBicGZfbGluayAqZmVudHJ5X2xpbmsgPSBOVUxMLCAqbXVsdGlfbGluayA9IE5VTEw7XG4rXHRzdHJ1Y3QgdHJhY2luZ19tdWx0aV9pbnRlcnNlY3QgKnNrZWwgPSBOVUxMO1xuK1x0TElCQlBGX09QVFMoYnBmX3RyYWNpbmdfbXVsdGlfb3B0cywgb3B0cyk7XG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpO1xuK1x0X191MzIgKmlkcyA9IE5VTEw7XG4rXHRpbnQgZXJyO1xuK1xuK1x0c2tlbCA9IHRyYWNpbmdfbXVsdGlfaW50ZXJzZWN0X19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJ0cmFjaW5nX211bHRpX2ludGVyc2VjdF9fb3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcGlkID0gZ2V0cGlkKCk7XG4rXG4rXHRpZHMgPSBnZXRfaWRzKGZ1bmNzLCBBUlJBWV9TSVpFKGZ1bmNzKSwgTlVMTCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoaWRzLCBcImdldF9pZHNcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdG9wdHMuaWRzID0gaWRzO1xuK1x0b3B0cy5jbnQgPSBBUlJBWV9TSVpFKGZ1bmNzKTtcbitcdG11bHRpX2xpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGkoc2tlbC1cdTAwM2Vwcm9ncy5mZW50cnlfMSwgTlVMTCwgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobXVsdGlfbGluaywgXCJhdHRhY2hfbXVsdGlcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGZlbnRyeV9saW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChza2VsLVx1MDAzZXByb2dzLmZlbnRyeSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoZmVudHJ5X2xpbmssIFwiYXR0YWNoX2ZlbnRyeVwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5mZW50cnlfMSksIFx1MDAyNnRvcHRzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X3J1blwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRlc3RfcmVzdWx0X2ZlbnRyeV8xLCAxLCBcIm11bHRpX2ZlbnRyeVwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0ZXN0X3Jlc3VsdF9mZW50cnksIDEsIFwiZmVudHJ5XCIpO1xuK1xuK1x0ZXJyID0gYnBmX2xpbmtfX2Rlc3Ryb3koZmVudHJ5X2xpbmspO1xuK1x0ZmVudHJ5X2xpbmsgPSBOVUxMO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImRlc3Ryb3lfZmVudHJ5XCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZlbnRyeV8xKSwgXHUwMDI2dG9wdHMpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInRlc3RfcnVuX211bHRpXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNldGVzdF9yZXN1bHRfZmVudHJ5XzEsIDIsIFwibXVsdGlfZmVudHJ5X29ubHlcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNldGVzdF9yZXN1bHRfZmVudHJ5LCAxLCBcImZlbnRyeV9kZXRhY2hlZFwiKTtcbitcbitcdGVyciA9IGJwZl9saW5rX19kZXN0cm95KG11bHRpX2xpbmspO1xuK1x0bXVsdGlfbGluayA9IE5VTEw7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiZGVzdHJveV9tdWx0aVwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5mZW50cnlfMSksIFx1MDAyNnRvcHRzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X3J1bl9kZXRhY2hlZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRlc3RfcmVzdWx0X2ZlbnRyeV8xLCAyLCBcIm11bHRpX2ZlbnRyeV9kZXRhY2hlZFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0ZXN0X3Jlc3VsdF9mZW50cnksIDEsIFwiZmVudHJ5X3N0aWxsX2RldGFjaGVkXCIpO1xuK1xuK2NsZWFudXA6XG4rXHRicGZfbGlua19fZGVzdHJveShmZW50cnlfbGluayk7XG4rXHRicGZfbGlua19fZGVzdHJveShtdWx0aV9saW5rKTtcbitcdGZyZWUoaWRzKTtcbitcdHRyYWNpbmdfbXVsdGlfaW50ZXJzZWN0X19kZXN0cm95KHNrZWwpO1xuK31cbitcbiBzdGF0aWMgdm9pZCB0ZXN0X3Nlc3Npb24odm9pZClcbiB7XG4gXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpO1xuQEAgLTk1Nyw0ICsxMDI0LDYgQEAgdm9pZCB0ZXN0X3RyYWNpbmdfbXVsdGlfdGVzdCh2b2lkKVxuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJhdHRhY2hfYXBpX2ZhaWxzXCIpKVxuIFx0XHR0ZXN0X2F0dGFjaF9hcGlfZmFpbHMoKTtcbiBcdFJVTl9URVNUUyh0cmFjaW5nX211bHRpX3ZlcmlmaWVyKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiZmVudHJ5X2FmdGVyX211bHRpXCIpKVxuK1x0XHR0ZXN0X2ZlbnRyeV9hZnRlcl9tdWx0aSgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfYXR0YWNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfYXR0YWNoLmNcbmluZGV4IGNkNWJlMGJiNmZmZGQ3Li41ZWJiZTNiNjAyYTRmMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX211bHRpX2ludGVyc2VjdF9hdHRhY2guY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfbXVsdGlfaW50ZXJzZWN0X2F0dGFjaC5jXG5AQCAtMTEsNiArMTEsMTQgQEAgX191NjQgdGVzdF9yZXN1bHRfZmVudHJ5XzEgPSAwO1xuIF9fdTY0IHRlc3RfcmVzdWx0X2ZlbnRyeV8yID0gMDtcbiBfX3U2NCB0ZXN0X3Jlc3VsdF9mZXhpdF8xID0gMDtcbiBfX3U2NCB0ZXN0X3Jlc3VsdF9mZXhpdF8yID0gMDtcbitfX3U2NCB0ZXN0X3Jlc3VsdF9mZW50cnkgPSAwO1xuK1xuK1NFQyhcImZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxXCIpXG4raW50IEJQRl9QUk9HKGZlbnRyeSwgaW50IGEpXG4re1xuK1x0dGVzdF9yZXN1bHRfZmVudHJ5ICs9IGEgPT0gMTtcbitcdHJldHVybiAwO1xuK31cbiBcbiBTRUMoXCJmZW50cnkubXVsdGlcIilcbiBpbnQgQlBGX1BST0coZmVudHJ5XzEpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MToxMS4wNTMxNTA5NjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODcwNDI1Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBUcmFtcG9saW5lIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQgdG91Y2hlcyBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgIGFsb25nIHdpdGggc29tZSBzZWxmdGVzdHMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCdzIGFkZGluZyBgdHItXHUwMDNlZnVuYy5mdHJhY2VfbWFuYWdlZCA9IHRydWU7YCB3aXRoaW4gdGhlIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgIGZ1bmN0aW9uLiBJIHJlY29nbml6ZSB0aGlzIGFzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggQlBGIHRyYW1wb2xpbmVzIGluIGNvbmp1bmN0aW9uIHdpdGggZnRyYWNlLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gVG8gZG8gdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAgaXMgYWN0dWFsbHkgdXNlZC4gSXMgaXQgYSBjb3JlIGZ1bmN0aW9uLCBvciBpcyBpdCBtb3JlIG9mIGEgaGVscGVyPyBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb250ZXh0cyBhbmQgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQ/XG5cblRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJJ20gZ29pbmcgdG8gdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciBldmVyeSBpbnN0YW5jZSBvZiBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRoZSBmdW5jdGlvbiBpcyB1c2VkLCB3aGljaCB3aWxsLCBpbiB0dXJuLCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBgZnRyYWNlX21hbmFnZWRgIGZsYWcuIE9uY2UgSSd2ZSBnb3QgdGhhdCBmaWd1cmVkIG91dCwgSSBjYW4gZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoZSBmbGFnIGFmZmVjdHMgdGhlIEJQRiBzdWJzeXN0ZW0gaW4gZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzg5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDE6MTUuOTIzNTc4NDk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTIwNDI5MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVnaXN0ZXJfZmVudHJ5X211bHRpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1MjI9c3RhdGljIHZvaWQgZnRyYWNlX2hhc2hfYWRkKHN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaCwgc3RydWN0IGZ0cmFjZV9mdW5jX2VudHJ5ICplbnRyeSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MjktXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTUzMDpzdGF0aWMgaW50IHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcHRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MzEte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU0NC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTQ1OnN0YXRpYyBpbnQgdW5yZWdpc3Rlcl9mZW50cnlfbXVsdGkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsIHZvaWQgKnB0cilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTQ2LXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1NzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9tdWx0aV9vcHMgPSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU3NTpcXHQucmVnaXN0ZXJfZmVudHJ5ICAgPSByZWdpc3Rlcl9mZW50cnlfbXVsdGksXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU3NjpcXHQudW5yZWdpc3Rlcl9mZW50cnkgPSB1bnJlZ2lzdGVyX2ZlbnRyeV9tdWx0aSxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTc3LVxcdC5tb2RpZnlfZmVudHJ5ICAgICA9IG1vZGlmeV9mZW50cnlfbXVsdGksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQxOjE4LjExNTYzMzA3MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTAwNDQ2MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIGNvZGUgZXhwZXJ0OlxuXG4qKlRyYWNpbmcgdGhlIFVzZSBvZiBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCoqXG5cblJpZ2h0LCBzbyBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCBwb3BzIHVwIGluIGB0cmFtcG9saW5lX211bHRpX29wc2AuIFRoYXQncyBhIGRlY2VudCBzdGFydGluZyBwb2ludC4gVG8gdHJ1bHkgdW5kZXJzdGFuZCBpdHMgc2lnbmlmaWNhbmNlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LCBJIG5lZWQgdG8gc2VlIHRoZSBicm9hZGVyIGNvbnRleHQuIFRoZXJlZm9yZSwgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hlcmUgYHRyYW1wb2xpbmVfbXVsdGlfb3BzYCBpdHNlbGYgaXMgYmVpbmcgKnVzZWQqLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIG9mICp0aGF0KiBmdW5jdGlvbiB3aWxsIGdpdmUgbWUgdGhlIGNydWNpYWwgaGlnaC1sZXZlbCB2aWV3IEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCBjb25uZWN0aW9uLiBUaGlzIGlzIGEgY2xhc3NpYyBkZXBlbmRlbmN5IHRyYWNpbmcgc2NlbmFyaW8g4oCTIGdvdHRhIGZvbGxvdyB0aGUgY2hhaW4gdG8gdW5kZXJzdGFuZCB0aGUgd2hvbGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI4NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQxOjIxLjA2NTY3OTczMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU1ODk1ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyYW1wb2xpbmVfbXVsdGlfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1NTk9c3RhdGljIGludCBtb2RpZnlfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NzMtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU3NDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX211bHRpX29wcyA9IHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTc1LVxcdC5yZWdpc3Rlcl9mZW50cnkgICA9IHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2MTI9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY2Mi1cXHRcXHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhcXHUwMDI2bW5vZGUtXFx1MDAzZW5vZGUsIG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lLCBOVUxMLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2NjM6XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZ0cmFtcG9saW5lX211bHRpX29wcywgZGF0YSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY2NC1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzEyPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MjMtXFx0XFx0V0FSTl9PTl9PTkNFKF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coXFx1MDAyNm1ub2RlLVxcdTAwM2Vub2RlLCBtbm9kZS1cXHUwMDNldHJhbXBvbGluZSxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzI0OlxcdFxcdFxcdFxcdFxcdE5VTEwsIFxcdTAwMjZ0cmFtcG9saW5lX211bHRpX29wcywgZGF0YSkpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MjUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MToyMy4wMjE2MDQxNTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE2MTk4Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgTXVsdGktQXR0YWNoIGluIFRyYW1wb2xpbmVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIEJQRiB0cmFtcG9saW5lIG11bHRpLWF0dGFjaCBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkLiBNeSBmb2N1cyBpcyBuYXJyb3dlZCBkb3duIHRvIHRoZSBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBhbmQgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAgZnVuY3Rpb25zLCBhcyB0aGVzZSBhcmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIG11bHRpLWF0dGFjaCBhbmQgZGV0YWNoIG9wZXJhdGlvbnMsIHJlc3BlY3RpdmVseS4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzLiBHaXZlbiB0aGF0LCBJIGtub3cgdGhpcyBpcyBhIGNvcmUgcGFydCBvZiBob3cgQlBGIHRyYW1wb2xpbmVzIG1hbmFnZSBtdWx0aXBsZSBwcm9ncmFtcyBvbiBhIHNpbmdsZSBob29rIHBvaW50LiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIGFjdHVhbCBjb25maWd1cmF0aW9uIGFuZCByZWxhdGVkIGRldGFpbHMsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBzb3VyY2UgY29kZSBpbiBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdmlldyBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgdGhpcyBtdWx0aS1hdHRhY2ggZmVhdHVyZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgQlBGIHRyYW1wb2xpbmUgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTMwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDE6MjYuMTM3ODA0NjIyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NzE5NzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyYW1wb2xpbmVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGlzYXNtLm8gbXByb2cub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MToyNi4xOTc1MjkwMzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkxMzMyNDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IHRoaW5raW5nIHJpZ2h0IG5vdyBpcyBjZW50ZXJlZCBhcm91bmQgQlBGIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfQlBGX0pJVGAgaXMgZW5hYmxlZCDigJMgdGhhdCdzIGZ1bmRhbWVudGFsIGZvciBCUEYgdG8gYWN0dWFsbHkgKmRvKiBhbnl0aGluZyB1c2VmdWwuIEFuZCBnZW5lcmFsbHksIEkgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIGFzIGl0IHByb3ZpZGVzIHRoZSBjb3JlIHN5c3RlbSBjYWxsIGludGVyZmFjZSBmb3IgQlBGIHByb2dyYW1zLlxuXG5CZXlvbmQgdGhvc2UgYmFzaWNzLCBJJ20gdHJ5aW5nIHRvIHJlY2FsbCBpZiB0aGVyZSBhcmUgYW55ICpzcGVjaWZpYyogY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIG1vcmUgYWR2YW5jZWQgZnVuY3Rpb25hbGl0aWVzLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBkZWRpY2F0ZWQgY29uZmlncyBhc3NvY2lhdGVkIHdpdGggYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgb3IgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAuIEknbSBnb2luZyB0byBzY2FuIHRoZSBjb25maWdzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHRoYXQgc3BlY2lmaWNhbGx5IGVuYWJsZSBvciBkaXNhYmxlIHRoZXNlIGZlYXR1cmVzLiBNeSBndXQgc2F5cyBpdCdzIHByb2JhYmx5IGhhbmRsZWQgYnkgb3RoZXIgY29uZmlncywgYnV0IGl0J3Mgd29ydGggYSBxdWljayBsb29rIHRvIGJlIGFic29sdXRlbHkgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLCBvciB0byBzZWUgaWYgdGhleSBuZWVkIHNvbWUgc3BlY2lhbCBlbmFibGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMyMCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQxOjI5LjM4ODg2MzU2NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNzM2NzYwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0xNTIwPWludCBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jcyk7XFxuaW5jbHVkZS9saW51eC9icGYuaC0xNTIxLVxcbmluY2x1ZGUvbGludXgvYnBmLmg6MTUyMjppbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuaW5jbHVkZS9saW51eC9icGYuaC0xNTIzLVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MTYzNT1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfaGFzX3RyYW1wb2xpbmUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0xNjM4LX1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjE2Mzk6c3RhdGljIGlubGluZSBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuaW5jbHVkZS9saW51eC9icGYuaC0xNjQwLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTU3ND1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX211bHRpX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NzktXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU4MDpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1ODEte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU4NS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTg2OnN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU4Ny17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTk0LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1OTU6c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5Ni17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjExLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MTI6aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MTMtXFx0XFx0XFx0XFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjU4LVxcdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY1OTpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cXHUwMDNldHJhbXBvbGluZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY2MC1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODYtXFx0Zm9yX2VhY2hfbW5vZGUobW5vZGUsIGxpbmspXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY4NzpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShtbm9kZS1cXHUwMDNldHJhbXBvbGluZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4OC1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTYtXFx0XFx0YnBmX3RyYW1wb2xpbmVfcmVtb3ZlX3Byb2cobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUsIFxcdTAwMjZtbm9kZS1cXHUwMDNlbm9kZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY5NzpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfcm9sbGJhY2sobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTgtXFx0fVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTcxMj1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzIxLVxcdFxcdGRhdGEtXFx1MDAzZWVudHJ5ID0gXFx1MDAyNm1ub2RlLVxcdTAwM2VlbnRyeTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzIyOlxcdFxcdGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzIzLVxcdFxcdFdBUk5fT05fT05DRShfX2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nKFxcdTAwMjZtbm9kZS1cXHUwMDNlbm9kZSwgbW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzMyLVxcdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3MzM6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MzQtXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9Mzg0MD1pbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkxMS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkxMjpcXHRlcnIgPSBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2gocHJvZywgaWRzLCBsaW5rKTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkxMy1cXHRrdmZyZWUoaWRzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDE6MzEuMTI2MjM3MjE4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzMxODc3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBCUEYgVHJhY2UgQ29kZWJhc2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBwaW4gZG93biBpdHMgbG9jYXRpb24uIEl0IGxvb2tzIGxpa2UgaXQgbGl2ZXMgaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIEV4Y2VsbGVudC4gTm93IHRoYXQgSSBrbm93IHRoZSBzb3VyY2UgZmlsZSwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aGljaCBjb25maWcgb3B0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSB0aGUgZnVuY3Rpb25hbGl0eSB3aXRoaW4gYGJwZl90cmFjZS5jYC4gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgZm9yIHZlcmlmeWluZyB0aGF0IHRoZSBpbnRlbmRlZCBCUEYgdHJhY2luZyBmZWF0dXJlcyBhcmUgZXZlbiBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgSSdtIHdvcmtpbmcgd2l0aC4gVGltZSB0byBjaGVjayB0aGUgYC5jb25maWdgIGZpbGVzLi4uIExldCdzIHNlZSB3aGF0IHdlIGhhdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NDksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MTozNC4yNTk0MjY3ODhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTQxNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl90cmFjZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL01ha2VmaWxlPTU0PUtDT1ZfSU5TVFJVTUVOVF90cmFjZV9pcnFzb2ZmLm8gOj0gblxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01NS1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6NTY6Q0ZMQUdTX2JwZl90cmFjZS5vIDo9IC1JJChzcmMpXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU3LVxcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEwOT1vYmotJChDT05GSUdfVVNFUl9FVkVOVFMpICs9IHRyYWNlX2V2ZW50c191c2VyLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTEwOm9iai0kKENPTkZJR19CUEZfRVZFTlRTKSArPSBicGZfdHJhY2Uub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xMTEtb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVFMpICs9IHRyYWNlX2twcm9iZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQxOjM0LjMyMDU3MjkyNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI2MDY0ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19CUEZfRVZFTlRTYCBpcyBlbmFibGVkLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIGludmVzdGlnYXRpb24uIE5vdywgbGV0J3Mgc2VlIGlmIHRoZSBmdW5jdGlvbiBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBJdCBsb29rcyBsaWtlIGl0J3MgaW52b2x2ZWQgaW4gdGhlIGB0cmFtcG9saW5lX211bHRpX29wc2Agc3RydWN0dXJlLiBUaGlzIGB0cmFtcG9saW5lX211bHRpX29wc2Agc3RydWN0dXJlIGlzIHRoZW4gdXNlZCBieSBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCwgd2hpY2ggaW4gdHVybiwgaXMgY2FsbGVkIGJ5IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLiBIbW0sIHJpZ2h0LiBGcm9tIHdoYXQgSSByZWNhbGwsIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGlzIGNhbGxlZCBmcm9tIGBicGZfdHJhY2luZ19wcm9nX2F0dGFjaGAgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uIGluIHRoYXQgc3BhY2UuIEknbGwgbmVlZCB0byBjaGVjayB0aGF0IGNvbm5lY3Rpb24gbmV4dCB0byBiZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgY29ycmVjdGx5IGxpbmtlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MTozNy42NDY2NDA5MzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDM4ODcxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9Nzg5PWludCBicGZfdXByb2JlX211bHRpX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6NzkwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cik7XFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC03OTEtI2Vsc2VcXG4tLVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9ODQ4PXN0YXRpYyBpbmxpbmUgaW50XFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDo4NDk6YnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC04NTAte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTc2NT1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4MTUtXFx0XFx0ZWxzZSBpZiAoaXNfdHJhY2luZ19tdWx0aShwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkpXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTgxNjpcXHRcXHRcXHRyZXQgPSBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2gocHJvZywgYXR0cik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTgxNy1cXHRcXHRlbHNlXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgxOT1zdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODM5LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozODQwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzg0MS17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkyOS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkzMDppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MzEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MTozOS40NTA1MzY4MDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk3NDE1MTIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIGZlbnRyeS9mZW50cnkubXVsdGkgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEkgY2FuIGNvbmZpcm0gdGhhdCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCAqaXMqIGNhbGxlZCBmcm9tIGBsaW5rX2NyZWF0ZWAgd2l0aGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIHNwZWNpZmljYWxseSB3aGVuIGBpc190cmFjaW5nX211bHRpKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpYCBpcyB0cnVlLiBUaGF0IGNvbmZpcm1zIGl0J3MgYSByZWFjaGFibGUgY29kZSBwYXRoIGFuZCBmdW5jdGlvbmFsLiBObyBzdXJwcmlzZXMgdGhlcmUuXG5cblRoZSBtZWF0IG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIG1vZGlmaWNhdGlvbiB0byBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCBpbiBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgLiBMb29raW5nIGF0IHRoZSBkaWZmLi4uQWgsIEkgc2VlLiBUaGV5J3JlIHNldHRpbmcgYHRyLVx1MDAzZWZ1bmMuZnRyYWNlX21hbmFnZWQgPSB0cnVlO2AuIFRoYXQgbWFrZXMgc2Vuc2UuIEl0IGxvb2tzIGxpa2UgdGhpcyB3YXMgYSBtaXNzZWQgYml0IG9mIGluaXRpYWxpemF0aW9uLiBJdCdzIGxpa2VseSB0aGF0IHRoaXMgd2FzIGNhdXNpbmcgaXNzdWVzIHdpdGggZnRyYWNlIGFuZCB0cmFtcG9saW5lIGludGVyYWN0aW9ucyB3aGVuIGRlYWxpbmcgd2l0aCBhIGNvbWJpbmF0aW9uIG9mIGBmZW50cnlgIGFuZCBgZmVudHJ5Lm11bHRpYCBhdHRhY2htZW50cyB0byB0aGUgc2FtZSBmdW5jdGlvbi4gV2l0aG91dCB0aGlzIGZsYWcgc2V0LCB0aGUgZnRyYWNlL3RyYW1wb2xpbmUgaW50ZXJhY3Rpb24gd2FzIHByb2JhYmx5IG9mZi5cblxuVGhlIGNvbmZpcm1hdGlvbiBvZiB0aGUgYnVnIGZpeCBhcHBlYXJzIHRvIGNvbWUgZnJvbSB0aGUgYHRlc3RfZmVudHJ5X2FmdGVyX211bHRpYCBzZWxmdGVzdCwgd2hpY2ggaXMgZGVmaW5pdGVseSBhIHNvbGlkIGFwcHJvYWNoLiBJdCB0ZXN0cyBhdHRhY2hpbmcgYGZlbnRyeS5tdWx0aWAgKmJlZm9yZSogYGZlbnRyeWAgdG8gdGhlIHNhbWUgZnVuY3Rpb24sIGBicGZfZmVudHJ5X3Rlc3QxYCwgd2hpY2ggc2hvdWxkIGV4cG9zZSBhbnkgaXNzdWVzIHdpdGggdGhlIGZ0cmFjZS90cmFtcG9saW5lIGludGVyYWN0aW9uLlxuXG5Ob3csIGZvciB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzLi4uIEknbSBnb2luZyB0byBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6IGBCUEZfSklUYCwgYEJQRl9TWVNDQUxMYCwgYEJQRl9FVkVOVFNgLCBhbmQgYEZUUkFDRWAuIERlZmluaXRlbHkgdGhvc2UuIEknbSBhbHNvIHdvbmRlcmluZyBhYm91dCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgY29kZSB0byBzZWUgaWYgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAgdXNlcyBhbnkgb2YgdGhvc2UuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBiZWNhdXNlIGl0IGNvdWxkIGJlIGNyaXRpY2FsLiBHb29kLCBzb2xpZCB3b3JrIG92ZXJhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDE6NDUuNDI0Njg5OTM4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTY4NTkwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdpc3Rlcl9mZW50cnlfbXVsdGlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTUyMj1zdGF0aWMgdm9pZCBmdHJhY2VfaGFzaF9hZGQoc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoLCBzdHJ1Y3QgZnRyYWNlX2Z1bmNfZW50cnkgKmVudHJ5LFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUyOS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTMwOnN0YXRpYyBpbnQgcmVnaXN0ZXJfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpwdHIpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUzMS17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTQ0LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1NDU6c3RhdGljIGludCB1bnJlZ2lzdGVyX2ZlbnRyeV9tdWx0aShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgb3JpZ19mbGFncywgdm9pZCAqcHRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NDYte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTU3ND1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX211bHRpX29wcyA9IHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTc1OlxcdC5yZWdpc3Rlcl9mZW50cnkgICA9IHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aSxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTc2OlxcdC51bnJlZ2lzdGVyX2ZlbnRyeSA9IHVucmVnaXN0ZXJfZmVudHJ5X211bHRpLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NzctXFx0Lm1vZGlmeV9mZW50cnkgICAgID0gbW9kaWZ5X2ZlbnRyeV9tdWx0aSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDE6NDUuNDg0MzgwNDE0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3Mjg5MzQ0MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczogKipIdW50aW5nIGZvciBDb25kaXRpb25hbCBDb21waWxhdGlvbioqLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgIGZ1bmN0aW9uIGlzIHR1Y2tlZCBhd2F5IGluc2lkZSBhbnkgYCNpZmRlZmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIEknbSBnb2luZyB0byBoYXZlIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSBjb2RlIHRvIHNlZSBpZiBpdHMgZGVjbGFyYXRpb24gb3IgZGVmaW5pdGlvbiwgb3IgZXZlbiBhbnkgY2FsbHMgdG8gaXQsIGFyZSBndWFyZGVkIGJ5IGEgbWFjcm8gdGhhdCBjb250cm9scyB3aGV0aGVyIGl0J3MgY29tcGlsZWQgb3Igbm90LiBUaGlzIGlzIGEgY3J1Y2lhbCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJ3Mgc2NvcGUgYW5kIGF2YWlsYWJpbGl0eSwgYW5kIHdoZXRoZXIgSSBuZWVkIHRvIGNvbnNpZGVyIGRpZmZlcmVudCBidWlsZCBjb25maWd1cmF0aW9ucyBvciBwbGF0Zm9ybS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgd2hlbiBJJ20gd29ya2luZyB3aXRoIGl0LiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBncmVwcGluZyB0aGUgY29kZWJhc2UgZm9yIGl0IGFuZCB0aGVuIG1ldGljdWxvdXNseSByZXZpZXdpbmcgdGhlIHN1cnJvdW5kaW5nIGxpbmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjUwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDE6NDguMjEzMzE3MDM4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTQ0NTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeI2lmZGVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTYyPXN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMge1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNjgtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6Njk6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcwLXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz03Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX29wcztcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03My1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3NDojaWZkZWYgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzUtc3RhdGljIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqZGlyZWN0X29wc19pcF9sb29rdXAoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpcClcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTIxMD12b2lkIGJwZl9pbWFnZV9rc3ltX2RlbChzdHJ1Y3QgYnBmX2tzeW0gKmtzeW0pXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMTYtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjE3OiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMTg6I2lmZGVmIENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIxOS0vKlxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NjczPXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MDYtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzA3OiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MDgtYWdhaW46XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NTktXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzYwOiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NjEtXFx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQxOjQ4LjI3NDc3NjA5NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzgxMDMwODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgIEZ1bmN0aW9uKipcblxuUmlnaHQsIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCB0aGUgZGVmaW5pdGlvbiBvZiBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYC4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb24sIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZSwgcGFyYW1ldGVycywgYW5kIHJldHVybiB2YWx1ZSBpcyBlc3NlbnRpYWwgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gYXNzZXNzIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCdzIGRlY2xhcmVkIGFuZCBkZWZpbmVkIHNvIEkgY2FuIGZpZ3VyZSBvdXQgd2hhdCBpdCdzIGRvaW5nLiBMZXQncyBzZWUgaWYgSSBjYW4gZmluZCB0aGF0IGRlZmluaXRpb24gYW5kIHN0YXJ0IGJ1aWxkaW5nIGEgbWVudGFsIG1vZGVsIG9mIGl0cyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk4NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQxOjUxLjA1NTgwOTMxNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MDA6XFx0c3RhdGljIHZvaWQgY2xlYXJfdHJhY2luZ19tdWx0aV9kYXRhKHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9kYXRhICpkYXRhKVxcbjE1MDE6XFx0e1xcbjE1MDI6XFx0XFx0cmVtb3ZlX3RyYWNpbmdfbXVsdGlfZGF0YShkYXRhKTtcXG4xNTAzOlxcdFxcbjE1MDQ6XFx0XFx0ZnJlZV9mdHJhY2VfaGFzaChkYXRhLVxcdTAwM2VyZWcpO1xcbjE1MDU6XFx0XFx0ZnJlZV9mdHJhY2VfaGFzaChkYXRhLVxcdTAwM2V1bnJlZyk7XFxuMTUwNjpcXHRcXHRmcmVlX2Z0cmFjZV9oYXNoKGRhdGEtXFx1MDAzZW1vZGlmeSk7XFxuMTUwNzpcXHR9XFxuMTUwODpcXHRcXG4xNTA5OlxcdHN0YXRpYyBpbnQgaW5pdF90cmFjaW5nX211bHRpX2RhdGEoc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2RhdGEgKmRhdGEpXFxuMTUxMDpcXHR7XFxuMTUxMTpcXHRcXHRkYXRhLVxcdTAwM2VyZWcgICAgPSBhbGxvY19mdHJhY2VfaGFzaChGVFJBQ0VfSEFTSF9ERUZBVUxUX0JJVFMpO1xcbjE1MTI6XFx0XFx0ZGF0YS1cXHUwMDNldW5yZWcgID0gYWxsb2NfZnRyYWNlX2hhc2goRlRSQUNFX0hBU0hfREVGQVVMVF9CSVRTKTtcXG4xNTEzOlxcdFxcdGRhdGEtXFx1MDAzZW1vZGlmeSA9IGFsbG9jX2Z0cmFjZV9oYXNoKEZUUkFDRV9IQVNIX0RFRkFVTFRfQklUUyk7XFxuMTUxNDpcXHRcXG4xNTE1OlxcdFxcdGlmICghZGF0YS1cXHUwMDNlcmVnIHx8ICFkYXRhLVxcdTAwM2V1bnJlZyB8fCAhZGF0YS1cXHUwMDNlbW9kaWZ5KSB7XFxuMTUxNjpcXHRcXHRcXHRjbGVhcl90cmFjaW5nX211bHRpX2RhdGEoZGF0YSk7XFxuMTUxNzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xNTE4OlxcdFxcdH1cXG4xNTE5OlxcdFxcdHJldHVybiAwO1xcbjE1MjA6XFx0fVxcbjE1MjE6XFx0XFxuMTUyMjpcXHRzdGF0aWMgdm9pZCBmdHJhY2VfaGFzaF9hZGQoc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoLCBzdHJ1Y3QgZnRyYWNlX2Z1bmNfZW50cnkgKmVudHJ5LFxcbjE1MjM6XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgZGlyZWN0KVxcbjE1MjQ6XFx0e1xcbjE1MjU6XFx0XFx0ZW50cnktXFx1MDAzZWlwID0gaXA7XFxuMTUyNjpcXHRcXHRlbnRyeS1cXHUwMDNlZGlyZWN0ID0gZGlyZWN0O1xcbjE1Mjc6XFx0XFx0YWRkX2Z0cmFjZV9oYXNoX2VudHJ5KGhhc2gsIGVudHJ5KTtcXG4xNTI4OlxcdH1cXG4xNTI5OlxcdFxcbjE1MzA6XFx0c3RhdGljIGludCByZWdpc3Rlcl9mZW50cnlfbXVsdGkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnB0cilcXG4xNTMxOlxcdHtcXG4xNTMyOlxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSBpbS1cXHUwMDNlaW1hZ2U7XFxuMTUzMzpcXHRcXHR1bnNpZ25lZCBsb25nIGlwID0gZnRyYWNlX2xvY2F0aW9uKHRyLVxcdTAwM2VpcCk7XFxuMTUzNDpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfZGF0YSAqZGF0YSA9IHB0cjtcXG4xNTM1OlxcdFxcbjE1MzY6XFx0XFx0aWYgKGJwZl90cmFtcG9saW5lX3VzZV9qbXAodHItXFx1MDAzZWZsYWdzKSlcXG4xNTM3OlxcdFxcdFxcdGFkZHIgPSBmdHJhY2Vfam1wX3NldChhZGRyKTtcXG4xNTM4OlxcdFxcbjE1Mzk6XFx0XFx0dHItXFx1MDAzZWZ1bmMuZnRyYWNlX21hbmFnZWQgPSB0cnVlO1xcbjE1NDA6XFx0XFx0ZnRyYWNlX2hhc2hfYWRkKGRhdGEtXFx1MDAzZXJlZywgZGF0YS1cXHUwMDNlZW50cnksIGlwLCBhZGRyKTtcXG4xNTQxOlxcdFxcdHRyLVxcdTAwM2VjdXJfaW1hZ2UgPSBpbTtcXG4xNTQyOlxcdFxcdHJldHVybiAwO1xcbjE1NDM6XFx0fVxcbjE1NDQ6XFx0XFxuMTU0NTpcXHRzdGF0aWMgaW50IHVucmVnaXN0ZXJfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCB2b2lkICpwdHIpXFxuMTU0NjpcXHR7XFxuMTU0NzpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgdHItXFx1MDAzZWN1cl9pbWFnZS1cXHUwMDNlaW1hZ2U7XFxuMTU0ODpcXHRcXHR1bnNpZ25lZCBsb25nIGlwID0gZnRyYWNlX2xvY2F0aW9uKHRyLVxcdTAwM2VpcCk7XFxuMTU0OTpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfZGF0YSAqZGF0YSA9IHB0cjtcXG4xNTUwOlxcdFxcbjE1NTE6XFx0XFx0aWYgKGJwZl90cmFtcG9saW5lX3VzZV9qbXAodHItXFx1MDAzZWZsYWdzKSlcXG4xNTUyOlxcdFxcdFxcdGFkZHIgPSBmdHJhY2Vfam1wX3NldChhZGRyKTtcXG4xNTUzOlxcdFxcbjE1NTQ6XFx0XFx0ZnRyYWNlX2hhc2hfYWRkKGRhdGEtXFx1MDAzZXVucmVnLCBkYXRhLVxcdTAwM2VlbnRyeSwgaXAsIGFkZHIpO1xcbjE1NTU6XFx0XFx0dHItXFx1MDAzZWN1cl9pbWFnZSA9IE5VTEw7XFxuMTU1NjpcXHRcXHRyZXR1cm4gMDtcXG4xNTU3OlxcdH1cXG4xNTU4OlxcdFxcbjE1NTk6XFx0c3RhdGljIGludCBtb2RpZnlfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4xNTYwOlxcdFxcdFxcdFxcdCAgICAgICBib29sIGxvY2tfZGlyZWN0X211dGV4LCB2b2lkICpwdHIpXFxuMTU2MTpcXHR7XFxuMTU2MjpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgaW0tXFx1MDAzZWltYWdlO1xcbjE1NjM6XFx0XFx0dW5zaWduZWQgbG9uZyBpcCA9IGZ0cmFjZV9sb2NhdGlvbih0ci1cXHUwMDNlaXApO1xcbjE1NjQ6XFx0XFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2RhdGEgKmRhdGEgPSBwdHI7XFxuMTU2NTpcXHRcXG4xNTY2OlxcdFxcdGlmIChicGZfdHJhbXBvbGluZV91c2Vfam1wKHRyLVxcdTAwM2VmbGFncykpXFxuMTU2NzpcXHRcXHRcXHRhZGRyID0gZnRyYWNlX2ptcF9zZXQoYWRkcik7XFxuMTU2ODpcXHRcXG4xNTY5OlxcdFxcdGZ0cmFjZV9oYXNoX2FkZChkYXRhLVxcdTAwM2Vtb2RpZnksIGRhdGEtXFx1MDAzZWVudHJ5LCBpcCwgYWRkcik7XFxuMTU3MDpcXHRcXHR0ci1cXHUwMDNlY3VyX2ltYWdlID0gaW07XFxuMTU3MTpcXHRcXHRyZXR1cm4gMDtcXG4xNTcyOlxcdH1cXG4xNTczOlxcdFxcbjE1NzQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9tdWx0aV9vcHMgPSB7XFxuMTU3NTpcXHRcXHQucmVnaXN0ZXJfZmVudHJ5ICAgPSByZWdpc3Rlcl9mZW50cnlfbXVsdGksXFxuMTU3NjpcXHRcXHQudW5yZWdpc3Rlcl9mZW50cnkgPSB1bnJlZ2lzdGVyX2ZlbnRyeV9tdWx0aSxcXG4xNTc3OlxcdFxcdC5tb2RpZnlfZmVudHJ5ICAgICA9IG1vZGlmeV9mZW50cnlfbXVsdGksXFxuMTU3ODpcXHR9O1xcbjE1Nzk6XFx0XFxuMTU4MDpcXHRzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbjE1ODE6XFx0e1xcbjE1ODI6XFx0XFx0dHItXFx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UgPSB0ci1cXHUwMDNlY3VyX2ltYWdlO1xcbjE1ODM6XFx0XFx0dHItXFx1MDAzZW11bHRpX2F0dGFjaC5vbGRfZmxhZ3MgPSB0ci1cXHUwMDNlZmxhZ3M7XFxuMTU4NDpcXHR9XFxuMTU4NTpcXHRcXG4xNTg2OlxcdHN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXFxuMTU4NzpcXHR7XFxuMTU4ODpcXHRcXHRpZiAodHItXFx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UpXFxuMTU4OTpcXHRcXHRcXHRicGZfdHJhbXBfaW1hZ2VfcHV0KHRyLVxcdTAwM2VtdWx0aV9hdHRhY2gub2xkX2ltYWdlKTtcXG4xNTkwOlxcdFxcbjE1OTE6XFx0XFx0dHItXFx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UgPSBOVUxMO1xcbjE1OTI6XFx0XFx0dHItXFx1MDAzZW11bHRpX2F0dGFjaC5vbGRfZmxhZ3MgPSAwO1xcbjE1OTM6XFx0fVxcbjE1OTQ6XFx0XFxuMTU5NTpcXHRzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfcm9sbGJhY2soc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG4xNTk2OlxcdHtcXG4xNTk3OlxcdFxcdGlmICh0ci1cXHUwMDNlY3VyX2ltYWdlKVxcbjE1OTg6XFx0XFx0XFx0YnBmX3RyYW1wX2ltYWdlX3B1dCh0ci1cXHUwMDNlY3VyX2ltYWdlKTtcXG4xNTk5OlxcdFxcdHRyLVxcdTAwM2VjdXJfaW1hZ2UgPSB0ci1cXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDE6NTEuMDU1OTY0ODA1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Nzk0Njc0ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25kaXRpb25hbCBDb21waWxhdGlvbiBvZiBgdHJhbXBvbGluZS5jYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBpc24ndCBndWFyZGVkIGJ5IGFueSBgI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgYmxvY2suIEdvb2QgdG8ga25vdy4gQnV0IGlzIGB0cmFtcG9saW5lLmNgIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkgYXQgYWxsPyBMZXQncyBiYWNrIHVwIGFuZCBjaGVjayB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgLiBBaCwgdGhlcmUgaXQgaXM6IGBvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vYC4gU28sIGl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfSklUYCBpcyBkZWZpbml0ZWx5IGEgcmVxdWlyZW1lbnQgZm9yIHRoaXMuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgbmFtZS5cblxuTm93LCB3aGF0IGVsc2U/IFRoaW5raW5nIGFib3V0IHdoYXQgZnVuY3Rpb25hbGl0aWVzIHJlbHkgb24gdGhpcyBmaWxlLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBwcm9iYWJseSBuZWVkZWQgZm9yIHRoZSBCUEYgc3lzdGVtIGNhbGxzLiBSaWdodCwgdGhvc2UgYXJlIGZ1bmRhbWVudGFsLiBBbmQgYmFzZWQgb24gd2hhdCBJIHNlZSBsYXRlciwgSSdkIGJldCB0aGUgZmFybSB0aGF0IGBDT05GSUdfQlBGX0VWRU5UU2AgaXMgYWxzbyBuZWVkZWQsIGdpdmVuIHRoYXQgYGJwZl90cmFjZS5jYCBjYWxscyBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCB3aGljaCBpcyB1c2VkIGJ5IHRoaXMgY29kZS5cblxuQW5kIGdpdmVuIHRoaXMgaXMgdHJhbXBvbGluZSBjb2RlLCBgQ09ORklHX0ZUUkFDRWAgYW5kIGBDT05GSUdfRFlOQU1JQ19GVFJBQ0VgIGFyZSBsaWtlbHkgY3J1Y2lhbCwgdG9vLCBJIHRoaW5rLiBGdHJhY2UgaW4gZ2VuZXJhbCBpcyBwcm9iYWJseSBiZWluZyBsZXZlcmFnZWQgZm9yIHRoaXMuIE9rYXksIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB3aGF0IGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgaXRzZWxmIGluY2x1ZGVzIGFuZCBkZXBlbmRzIG9uLCBqdXN0IHRvIGJlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBHb2luZyB0byBydW4gdGhyb3VnaCB0aGUgY29kZSBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODE1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDE6NTUuODM1NDM1MjI0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDkzMzc0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9NjI9c3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02OC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo2OTojaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzAtc3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTIxMD12b2lkIGJwZl9pbWFnZV9rc3ltX2RlbChzdHJ1Y3QgYnBmX2tzeW0gKmtzeW0pXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMTYtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjE3OiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMTgtI2lmZGVmIENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MzY3PXN0YXRpYyBpbnQgZGlyZWN0X29wc19tb2Qoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqcHRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4KVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzcwLX1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozNzE6I2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM3Mi1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTY3Mz1zdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4LFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzA2LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcwNzojaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzA4LWFnYWluOlxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzU5LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjc2MDojaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzYxLVxcdGlmIChlcnIgPT0gLUVBR0FJTikge1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTQ2Nz1pbnQgX193ZWFrIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE0NzItXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTQ3MzojaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNDc0LSAgICBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUykgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTcxMj1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzQ2LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3NDc6I2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NDgtXFx0ICBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDE6NTUuODk2Mzc0ODVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4MDg3NDA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgVHJhbXBvbGluZSBBdHRhY2gvRGV0YWNoIEF2YWlsYWJpbGl0eSoqXG5cbk9rYXksIGhvbGQgb24gYSBtaW51dGUuIE15IGluaXRpYWwgc2NhbiBvZiB0aGlzIGNvZGUgaGFzIHRocm93biBhIGJpdCBvZiBhIGZsYWcuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9mIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYC4gSXQgc2VlbXMgbGlrZSB0aGVzZSBmdW5jdGlvbnMgYXJlIG5lc3RlZCB3aXRoaW4gYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBhbmQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmRpdGlvbnMuIFNwZWNpZmljYWxseSwgSSBzZWUgYCNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlICphY3R1YWxseSogcmVxdWlyZWQgZm9yIHRoZXNlIGZ1bmN0aW9ucyB0byBiZSBkZWZpbmVkLiBTbywgbGV0J3Mgc2tpcCBhaGVhZCB0byBsaW5lIDE0NzMsIGFuZCBjb25maXJtIHRoaXMgdG8gYmUgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNTEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MTo1OS4xNzcyNTA3ODFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzODExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDYwOlxcdFxcbjE0NjE6XFx0aW50IF9fd2VhayBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKVxcbjE0NjI6XFx0e1xcbjE0NjM6XFx0XFx0V0FSTl9PTl9PTkNFKHNpemUgXFx1MDAzZSBQQUdFX1NJWkUpO1xcbjE0NjQ6XFx0XFx0cmV0dXJuIHNldF9tZW1vcnlfcm94KChsb25nKWltYWdlLCAxKTtcXG4xNDY1OlxcdH1cXG4xNDY2OlxcdFxcbjE0Njc6XFx0aW50IF9fd2VhayBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuMTQ2ODpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXFxuMTQ2OTpcXHR7XFxuMTQ3MDpcXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbjE0NzE6XFx0fVxcbjE0NzI6XFx0XFxuMTQ3MzpcXHQjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4xNDc0OlxcdCAgICBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUykgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbjE0NzU6XFx0ICAgIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxcbjE0NzY6XFx0XFxuMTQ3NzpcXHRzdGF0aWMgdm9pZCB0cmFtcG9saW5lX2xvY2tfYWxsKHZvaWQpXFxuMTQ3ODpcXHR7XFxuMTQ3OTpcXHRcXHRpbnQgaTtcXG4xNDgwOlxcdFxcbjE0ODE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFRSQU1QT0xJTkVfTE9DS1NfVEFCTEVfU0laRTsgaSsrKVxcbjE0ODI6XFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dHJhbXBvbGluZV9sb2Nrc1tpXS5tdXRleCk7XFxuMTQ4MzpcXHR9XFxuMTQ4NDpcXHRcXG4xNDg1OlxcdHN0YXRpYyB2b2lkIHRyYW1wb2xpbmVfdW5sb2NrX2FsbCh2b2lkKVxcbjE0ODY6XFx0e1xcbjE0ODc6XFx0XFx0aW50IGk7XFxuMTQ4ODpcXHRcXG4xNDg5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBUUkFNUE9MSU5FX0xPQ0tTX1RBQkxFX1NJWkU7IGkrKylcXG4xNDkwOlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dHJhbXBvbGluZV9sb2Nrc1tpXS5tdXRleCk7XFxuMTQ5MTpcXHR9XFxuMTQ5MjpcXHRcXG4xNDkzOlxcdHN0YXRpYyB2b2lkIHJlbW92ZV90cmFjaW5nX211bHRpX2RhdGEoc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2RhdGEgKmRhdGEpXFxuMTQ5NDpcXHR7XFxuMTQ5NTpcXHRcXHRmdHJhY2VfaGFzaF9yZW1vdmUoZGF0YS1cXHUwMDNlcmVnKTtcXG4xNDk2OlxcdFxcdGZ0cmFjZV9oYXNoX3JlbW92ZShkYXRhLVxcdTAwM2V1bnJlZyk7XFxuMTQ5NzpcXHRcXHRmdHJhY2VfaGFzaF9yZW1vdmUoZGF0YS1cXHUwMDNlbW9kaWZ5KTtcXG4xNDk4OlxcdH1cXG4xNDk5OlxcdFxcbjE1MDA6XFx0c3RhdGljIHZvaWQgY2xlYXJfdHJhY2luZ19tdWx0aV9kYXRhKHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9kYXRhICpkYXRhKVxcbjE1MDE6XFx0e1xcbjE1MDI6XFx0XFx0cmVtb3ZlX3RyYWNpbmdfbXVsdGlfZGF0YShkYXRhKTtcXG4xNTAzOlxcdFxcbjE1MDQ6XFx0XFx0ZnJlZV9mdHJhY2VfaGFzaChkYXRhLVxcdTAwM2VyZWcpO1xcbjE1MDU6XFx0XFx0ZnJlZV9mdHJhY2VfaGFzaChkYXRhLVxcdTAwM2V1bnJlZyk7XFxuMTUwNjpcXHRcXHRmcmVlX2Z0cmFjZV9oYXNoKGRhdGEtXFx1MDAzZW1vZGlmeSk7XFxuMTUwNzpcXHR9XFxuMTUwODpcXHRcXG4xNTA5OlxcdHN0YXRpYyBpbnQgaW5pdF90cmFjaW5nX211bHRpX2RhdGEoc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2RhdGEgKmRhdGEpXFxuMTUxMDpcXHR7XFxuMTUxMTpcXHRcXHRkYXRhLVxcdTAwM2VyZWcgICAgPSBhbGxvY19mdHJhY2VfaGFzaChGVFJBQ0VfSEFTSF9ERUZBVUxUX0JJVFMpO1xcbjE1MTI6XFx0XFx0ZGF0YS1cXHUwMDNldW5yZWcgID0gYWxsb2NfZnRyYWNlX2hhc2goRlRSQUNFX0hBU0hfREVGQVVMVF9CSVRTKTtcXG4xNTEzOlxcdFxcdGRhdGEtXFx1MDAzZW1vZGlmeSA9IGFsbG9jX2Z0cmFjZV9oYXNoKEZUUkFDRV9IQVNIX0RFRkFVTFRfQklUUyk7XFxuMTUxNDpcXHRcXG4xNTE1OlxcdFxcdGlmICghZGF0YS1cXHUwMDNlcmVnIHx8ICFkYXRhLVxcdTAwM2V1bnJlZyB8fCAhZGF0YS1cXHUwMDNlbW9kaWZ5KSB7XFxuMTUxNjpcXHRcXHRcXHRjbGVhcl90cmFjaW5nX211bHRpX2RhdGEoZGF0YSk7XFxuMTUxNzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xNTE4OlxcdFxcdH1cXG4xNTE5OlxcdFxcdHJldHVybiAwO1xcbjE1MjA6XFx0fVxcbjE1MjE6XFx0XFxuMTUyMjpcXHRzdGF0aWMgdm9pZCBmdHJhY2VfaGFzaF9hZGQoc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoLCBzdHJ1Y3QgZnRyYWNlX2Z1bmNfZW50cnkgKmVudHJ5LFxcbjE1MjM6XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgZGlyZWN0KVxcbjE1MjQ6XFx0e1xcbjE1MjU6XFx0XFx0ZW50cnktXFx1MDAzZWlwID0gaXA7XFxuMTUyNjpcXHRcXHRlbnRyeS1cXHUwMDNlZGlyZWN0ID0gZGlyZWN0O1xcbjE1Mjc6XFx0XFx0YWRkX2Z0cmFjZV9oYXNoX2VudHJ5KGhhc2gsIGVudHJ5KTtcXG4xNTI4OlxcdH1cXG4xNTI5OlxcdFxcbjE1MzA6XFx0c3RhdGljIGludCByZWdpc3Rlcl9mZW50cnlfbXVsdGkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnB0cilcXG4xNTMxOlxcdHtcXG4xNTMyOlxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSBpbS1cXHUwMDNlaW1hZ2U7XFxuMTUzMzpcXHRcXHR1bnNpZ25lZCBsb25nIGlwID0gZnRyYWNlX2xvY2F0aW9uKHRyLVxcdTAwM2VpcCk7XFxuMTUzNDpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfZGF0YSAqZGF0YSA9IHB0cjtcXG4xNTM1OlxcdFxcbjE1MzY6XFx0XFx0aWYgKGJwZl90cmFtcG9saW5lX3VzZV9qbXAodHItXFx1MDAzZWZsYWdzKSlcXG4xNTM3OlxcdFxcdFxcdGFkZHIgPSBmdHJhY2Vfam1wX3NldChhZGRyKTtcXG4xNTM4OlxcdFxcbjE1Mzk6XFx0XFx0dHItXFx1MDAzZWZ1bmMuZnRyYWNlX21hbmFnZWQgPSB0cnVlO1xcbjE1NDA6XFx0XFx0ZnRyYWNlX2hhc2hfYWRkKGRhdGEtXFx1MDAzZXJlZywgZGF0YS1cXHUwMDNlZW50cnksIGlwLCBhZGRyKTtcXG4xNTQxOlxcdFxcdHRyLVxcdTAwM2VjdXJfaW1hZ2UgPSBpbTtcXG4xNTQyOlxcdFxcdHJldHVybiAwO1xcbjE1NDM6XFx0fVxcbjE1NDQ6XFx0XFxuMTU0NTpcXHRzdGF0aWMgaW50IHVucmVnaXN0ZXJfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCB2b2lkICpwdHIpXFxuMTU0NjpcXHR7XFxuMTU0NzpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgdHItXFx1MDAzZWN1cl9pbWFnZS1cXHUwMDNlaW1hZ2U7XFxuMTU0ODpcXHRcXHR1bnNpZ25lZCBsb25nIGlwID0gZnRyYWNlX2xvY2F0aW9uKHRyLVxcdTAwM2VpcCk7XFxuMTU0OTpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfZGF0YSAqZGF0YSA9IHB0cjtcXG4xNTUwOlxcdFxcbjE1NTE6XFx0XFx0aWYgKGJwZl90cmFtcG9saW5lX3VzZV9qbXAodHItXFx1MDAzZWZsYWdzKSlcXG4xNTUyOlxcdFxcdFxcdGFkZHIgPSBmdHJhY2Vfam1wX3NldChhZGRyKTtcXG4xNTUzOlxcdFxcbjE1NTQ6XFx0XFx0ZnRyYWNlX2hhc2hfYWRkKGRhdGEtXFx1MDAzZXVucmVnLCBkYXRhLVxcdTAwM2VlbnRyeSwgaXAsIGFkZHIpO1xcbjE1NTU6XFx0XFx0dHItXFx1MDAzZWN1cl9pbWFnZSA9IE5VTEw7XFxuMTU1NjpcXHRcXHRyZXR1cm4gMDtcXG4xNTU3OlxcdH1cXG4xNTU4OlxcdFxcbjE1NTk6XFx0c3RhdGljIGludCBtb2RpZnlfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDE6NTkuMTc3NDA1ODNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ5ODcxMTA5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAgYW5kIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGFyZSBvbmx5IGRlZmluZWQgaWYgdGhlc2UgdGhyZWUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6IGAjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKWAuIFRoYXQncyB0aGUga2V5LlxuXG5UaGVyZWZvcmUsIGZvciB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSwgSSBuZWVkIHRvIGVuc3VyZSB0aGUgcHJlc2VuY2Ugb2YgYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIGBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgLCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaW4gdGhlIGtlcm5lbCBidWlsZC4gRnVydGhlcm1vcmUsIHNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBCUEYtcmVsYXRlZCBjb2RlLCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGNoZWNrIHRoYXQgYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19CUEZfRVZFTlRTYCBhcmUgZW5hYmxlZCBhcyB3ZWxsLiBBbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2sgdGhvc2UuXG5cbk5leHQgc3RlcDogSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IHRoZSBLY29uZmlnIGVudHJ5IGZvciBgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYCBqdXN0IHRvIGJlIGNlcnRhaW4gSSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcncyBsaW5lZCB1cCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDc0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDI6MDMuNjc2MTE5MjE3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ2ODI0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9NTA9Y29uZmlnIEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTUyLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjUzOmNvbmZpZyBIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTU0LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDI6MDMuODUwODA5MTY2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDY2MzcyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AgY29uZmlnLiBJdCdzIGEgYm9vbGVhbiwgbm8gcHJvbXB0LCB3aGljaCBtZWFucyBpdCdzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBieSB0aGUgYXJjaGl0ZWN0dXJlIGl0c2VsZi4gVGhhdCBtZWFucyBJIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgbWFudWFsbHkgc2V0dGluZyBpdC4gSW4gZmFjdCwgaWYgdGhlIGFyY2hpdGVjdHVyZSAqZG9lc24ndCogc3VwcG9ydCBpdCwgSSBjYW4ndCBldmVuICplbmFibGUqIGl0ISBTbywgZG9lcyBpdCBldmVuIG5lZWQgdG8gYmUgbGlzdGVkPyBQZXJoYXBzIG5vdCwgaWYgaXQncyBub3QgdXNlci1zZWxlY3RhYmxlLiBOb3cgaG9sZCBvbiwgbGV0IG1lIHJlcmVhZCB0aGUgcHJvbXB0OiBcIkxpc3Qgb2Yga2VybmVsIGNvbmZpZyBmbGFncyB0aGF0IG11c3QgYmUgZXhwbGljaXRseSBlbmFibGVkIHRvIGNvbXBpbGUgYW5kIHRlc3QgdGhlIG1vZGlmaWVkIGNvZGUuXCIgSWYgaXQncyBub3QgdXNlci1zZWxlY3RhYmxlLCBJICpjYW4ndCogZXhwbGljaXRseSBlbmFibGUgaXQuIFRoZXJlZm9yZSwgdGhpcyBvbmUgaXMgcHJvYmFibHkgbm90IHJlbGV2YW50LiBCdXQgd2FpdCwgd2hhdCBhYm91dCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgPyBUaGF0J3MgdGhlIG9uZSBJIG5lZWQgdG8gbG9vayBhdCBuZXh0LiBMZXQncyBkaWcgaW50byB0aGF0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjQ5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQyOjA4LjI1NzQ0OTk2OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NjY5NzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTQ3PWNvbmZpZyBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctNDktXFxua2VybmVsL3RyYWNlL0tjb25maWc6NTA6Y29uZmlnIEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy01MS1cXHRib29sXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0zMjQ9Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMzI4LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjMyOTpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzAtXFx0ZGVmX2Jvb2wgeVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMS1cXHRkZXBlbmRzIG9uIERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHUyB8fCBEWU5BTUlDX0ZUUkFDRV9XSVRIX0FSR1NcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzozMzI6XFx0ZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxua2VybmVsL3RyYWNlL0tjb25maWctMzMzLVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9MzQzPWNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0pNUFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMzQ1LVxcdGRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0VcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzozNDY6XFx0ZGVwZW5kcyBvbiBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTM0Ny1cXHRkZXBlbmRzIG9uIEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9KTVBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDI6MDguNDcyMTI2NTE1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzODUxNDQyOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRnRyYWNlIGFuZCBCUEYgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcuIFRoaXMgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBvcHRpb24gaXMgYSBiaXQgdHJpY2t5LiBJdCBoaW5nZXMgb24gYERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU2AgYW5kIGBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYC4gQmFzaWNhbGx5LCB3ZSBuZWVkIHRvIGVuc3VyZSBlaXRoZXIgYERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU2Agb3IgYERZTkFNSUNfRlRSQUNFX1dJVEhfQVJHU2AgYXJlIGVuYWJsZWQsIGFsb25nIHdpdGggdGhlIEJQRiByZWxhdGVkIGNvbmZpZ3M6IGBCUEZfSklUYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBCUEZfRVZFTlRTYC5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLiBUaGUgYEZvY3VzU3ltYm9sc2AgbG9vayBsaWtlIHRoZXkgc2hvdWxkIGxlYWQgdXMgdG8gdGhlIHJpZ2h0IHBhcnRzLiBJIHNlZSBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCBhcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24uIEhtbSwgaXQncyBzdGF0aWMsIHNvIHRoYXQncyBhIHNsaWdodCB3cmlua2xlLCBidXQgaXQncyBjYWxsZWQgdGhyb3VnaCBgdHJhbXBvbGluZV9tdWx0aV9vcHMucmVnaXN0ZXJfZmVudHJ5YC4gVGhlIGNhbGxlcnMgb2YgdGhpcyBhcmUgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgLCBhbmQgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAuIFNvLCBmb2N1c2luZyBvbiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCwgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAsIGFuZCBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCBzZWVtcyBsaWtlIGEgc29saWQgc3RyYXRlZ3kuXG5cbkFsdGhvdWdoIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgIGlzIHN0YXRpYywgc3l6a2FsbGVyIGhhcyBiZWVuIGtub3duIHRvIHRhcmdldCBzdGF0aWMgZnVuY3Rpb25zIGlmIGRlYnVnIGluZm8gaXMgcHJlc2VudCwgYnV0IEknbSB0aGlua2luZyB0aGF0IGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGFuZCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBhcmUgbXVjaCBiZXR0ZXIgdGFyZ2V0cyBiZWNhdXNlIHRoZXkncmUgZXhwb3J0ZWQgb3IgYXQgbGVhc3QgZ2xvYmFsLiBQbHVzLCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyB0aGUgZW50cnkgcG9pbnQgZnJvbSB0aGUgYGJwZmAgc3lzY2FsbCwgd2hpY2ggbWFrZXMgaXQgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gdGhhdCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyBpbmRlZWQgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgdG8gdmVyaWZ5IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzgzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQyOjE0Ljg1NzI3MzIxNloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU2OTQ4MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgxOT1zdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODM5LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozODQwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzg0MS17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkyOS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkzMDppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MzEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MjoxNC45MjI5NzUwNzJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NDU2Nzk1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVuZGVyc3RhbmRpbmcgTXVsdGktQXR0YWNoIEJQRiBUcmFjZXBvaW50cyoqXG5cblJpZ2h0LCBzbyB0aGUgY29yZSBvZiBoYW5kbGluZyBgQlBGX0xJTktfQ1JFQVRFYCBmb3IgdGhlc2UgbXVsdGktYXR0YWNoIHRyYWNlcG9pbnQgdHlwZXMsIGBCUEZfVFJBQ0VfRkVOVFJZX01VTFRJYCBhbmQgYEJQRl9UUkFDRV9GRVhJVF9NVUxUSWAsIHRoYXTigJlzIGRlZmluaXRlbHkgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLiBUaGF04oCZcyBteSBmaXJzdCBwb2ludCBvZiByZWZlcmVuY2UuXG5cbk5vdywgd2hlcmUgZG9lcyB0aGF0IGFjdHVhbGx5ICpkbyogaXRzIHdvcms/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0J3MgbG9vayBhdCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBpbiBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGRlZXBlciBsb2dpYyBwcm9iYWJseSByZXNpZGVzLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWNoYW5pY3Mgb2YgaG93IHRoZSBtdWx0aXBsZSBhdHRhY2htZW50cyBhcmUgb3JjaGVzdHJhdGVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQwMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQyOjE4LjA5NzU0NjQwOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzNDcwNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1NzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9tdWx0aV9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTc5LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1ODA6c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTgxLXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1ODUtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU4NjpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1ODcte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5NC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTk1OnN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9yb2xsYmFjayhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OTYte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYxMS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjEyOmludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjEzLVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY1OC1cXHRmb3JfZWFjaF9tbm9kZShtbm9kZSwgbGluaykge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2NTk6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NjAtXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjg2LVxcdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2ODc6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODgtXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjk2LVxcdFxcdGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lLCBcXHUwMDI2bW5vZGUtXFx1MDAzZW5vZGUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2OTc6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjk4LVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3MTI9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTcyMS1cXHRcXHRkYXRhLVxcdTAwM2VlbnRyeSA9IFxcdTAwMjZtbm9kZS1cXHUwMDNlZW50cnk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTcyMjpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cXHUwMDNldHJhbXBvbGluZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTcyMy1cXHRcXHRXQVJOX09OX09OQ0UoX19icGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhcXHUwMDI2bW5vZGUtXFx1MDAzZW5vZGUsIG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTczMi1cXHRmb3JfZWFjaF9tbm9kZShtbm9kZSwgbGluaylcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzMzOlxcdFxcdGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlKG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MjoxOC4xNTg5MDE4MzVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwODA2MjYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBCUEYgVHJhbXBvbGluZSBmb3IgS2VybmVsIEluc3RydW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gdGhlIEJQRiB0cmFtcG9saW5lIG1lY2hhbmlzbSBmb3IgbW9yZSBncmFudWxhciBjb250cm9sIHdpdGhpbiB0aGUga2VybmVsLiBJIHRoaW5rIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCBhcmUgZ29pbmcgdG8gYmUga2V5IHN5bWJvbHMgdG8gZXhwbG9yZS4gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBob3cgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAgZml0cyBpbnRvIHRoZSBwaWN0dXJlLiBJdCBzZWVtcyBsaWtlIHRoZSBtdWx0aS1hdHRhY2ggYW5kIGRldGFjaCBmdW5jdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGltcG9ydGFudCBmb3IgZW5hYmxpbmcgdGhpcyBjYXBhYmlsaXR5LlxuXG5JIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCB0byBzdXBwb3J0IHRoaXMgZnVuY3Rpb25hbGl0eS4gSSdtIHRoaW5raW5nIEknbGwgbmVlZCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgQlBGX0VWRU5UU2AsIG9mIGNvdXJzZS4gSSdsbCBhbHNvIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGBGVFJBQ0VgIGlzIGVuYWJsZWQgdG8gaG9vayBpbnRvIGZ1bmN0aW9uIHRyYWNpbmcsIGFuZCwgc2luY2UgSSdtIHRhcmdldGluZyBkaXJlY3QgY2FsbHMsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgbGlrZWx5IGNyaXRpY2FsLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IHNwZWNpZmljIGNvbmZpZyB0aGF0J3MgZGVkaWNhdGVkIHRvIEJQRiB0cmFtcG9saW5lIGl0c2VsZi4gSSdsbCBtYWtlIHN1cmUgdG8gZG91YmxlIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTM2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQyOjIxLjk2Njk2NzgyM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkxMjI1MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX1RSQU1QXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz01OTc9aW50IGJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjAzLXtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjA0OlxcdHUzMiBpbWFnZV9vZmYgPSAqX2ltYWdlX29mZiwgZmxhZ3MgPSBCUEZfVFJBTVBfRl9JTkRJUkVDVDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjA1LVxcdHZvaWQgKmltYWdlID0gKl9pbWFnZTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02MDctXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjYwODpcXHR0bm9kZXNbQlBGX1RSQU1QX0ZFTlRSWV0ubm9kZXNbMF0gPSBub2RlO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2MDk6XFx0dG5vZGVzW0JQRl9UUkFNUF9GRU5UUlldLm5yX25vZGVzID0gMTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjEwLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02MTEtXFx0aWYgKG1vZGVsLVxcdTAwM2VyZXRfc2l6ZSBcXHUwMDNlIDApXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjYxMjpcXHRcXHRmbGFncyB8PSBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjEzLVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTY4Nj1zdGF0aWMgbG9uZyBicGZfc3RydWN0X29wc19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTcyMi1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NzIzOlxcdHRub2RlcyA9IGt6YWxsb2Nfb2JqcygqdG5vZGVzLCBCUEZfVFJBTVBfTUFYKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzI0LVxcdGlmICghdG5vZGVzKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTg9c3RhdGljIGludCBicGZfdHJhbXBfZnRyYWNlX29wc19mdW5jKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGxvbmcgaXAsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTgtXFx0XFx0ICovXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTE5OlxcdFxcdGlmICgodHItXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEyMDpcXHRcXHQgICAgISh0ci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9PUklHX1NUQUNLKSkge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEyMTpcXHRcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKHRyLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX1NIQVJFX0lQTU9ESUZZKSlcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMjItXFx0XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMjMtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTI0OlxcdFxcdFxcdHRyLVxcdTAwM2VmbGFncyB8PSBCUEZfVFJBTVBfRl9TSEFSRV9JUE1PRElGWTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMjUtXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTItXFx0Y2FzZSBGVFJBQ0VfT1BTX0NNRF9FTkFCTEVfU0hBUkVfSVBNT0RJRllfUEVFUjpcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTM6XFx0XFx0dHItXFx1MDAzZWZsYWdzIHw9IEJQRl9UUkFNUF9GX1NIQVJFX0lQTU9ESUZZO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTU6XFx0XFx0aWYgKCh0ci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU2OlxcdFxcdCAgICAhKHRyLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX09SSUdfU1RBQ0spKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1Ny1cXHRcXHRcXHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGUodHIsIGZhbHNlIC8qIGxvY2tfZGlyZWN0X211dGV4ICovLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYwLVxcdGNhc2UgRlRSQUNFX09QU19DTURfRElTQUJMRV9TSEFSRV9JUE1PRElGWV9QRUVSOlxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MTpcXHRcXHR0ci1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkJQRl9UUkFNUF9GX1NIQVJFX0lQTU9ESUZZO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2Mi1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjM6XFx0XFx0aWYgKHRyLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX09SSUdfU1RBQ0spXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY0LVxcdFxcdFxcdHJldCA9IGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgZmFsc2UgLyogbG9ja19kaXJlY3RfbXV0ZXggKi8sXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0zNzM9c3RhdGljIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqYnBmX3RyYW1wb2xpbmVfbG9va3VwKHU2NCBrZXksIHVuc2lnbmVkIGxvbmcgaXApXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00MDMtXFx0cmVmY291bnRfc2V0KFxcdTAwMjZ0ci1cXHUwMDNlcmVmY250LCAxKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0MDQ6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGkrKylcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00MDUtXFx0XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZ0ci1cXHUwMDNlcHJvZ3NfaGxpc3RbaV0pO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NTA4PWJwZl90cmFtcG9saW5lX2dldF9wcm9ncyhjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBpbnQgKnRvdGFsLCBib29sICppcF9hcmcpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy01MTQtXFx0KnRvdGFsID0gMDtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo1MTU6XFx0dG5vZGVzID0ga3phbGxvY19vYmpzKCp0bm9kZXMsIEJQRl9UUkFNUF9NQVgpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTUxNi1cXHRpZiAoIXRub2RlcylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTUxOC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo1MTk6XFx0Zm9yIChraW5kID0gMDsga2luZCBcXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGtpbmQrKykge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTUyMC1cXHRcXHR0bm9kZXNba2luZF0ubnJfbm9kZXMgPSB0ci1cXHUwMDNlcHJvZ3NfY250W2tpbmRdO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NjczPXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02OTEtXFx0LyogY2xlYXIgYWxsIGJpdHMgZXhjZXB0IFNIQVJFX0lQTU9ESUZZIGFuZCBUQUlMX0NBTExfQ1RYICovXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NjkyOlxcdHRyLVxcdTAwM2VmbGFncyBcXHUwMDI2PSAoQlBGX1RSQU1QX0ZfU0hBUkVfSVBNT0RJRlkgfCBCUEZfVFJBTVBfRl9UQUlMX0NBTExfQ1RYKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02OTMtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6Njk0OlxcdGlmICh0bm9kZXNbQlBGX1RSQU1QX0ZFWElUXS5ucl9ub2RlcyB8fFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjY5NTpcXHQgICAgdG5vZGVzW0JQRl9UUkFNUF9NT0RJRllfUkVUVVJOXS5ucl9ub2Rlcykge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjY5NjpcXHRcXHQvKiBOT1RFOiBCUEZfVFJBTVBfRl9SRVNUT1JFX1JFR1MgYW5kIEJQRl9UUkFNUF9GX1NLSVBfRlJBTUVcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02OTctXFx0XFx0ICogc2hvdWxkIG5vdCBiZSBzZXQgdG9nZXRoZXIuXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNjk4LVxcdFxcdCAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjY5OTpcXHRcXHR0ci1cXHUwMDNlZmxhZ3MgfD0gQlBGX1RSQU1QX0ZfQ0FMTF9PUklHIHwgQlBGX1RSQU1QX0ZfU0tJUF9GUkFNRTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MDAtXFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MDE6XFx0XFx0dHItXFx1MDAzZWZsYWdzIHw9IEJQRl9UUkFNUF9GX1JFU1RPUkVfUkVHUztcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MDItXFx0fVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzA0LVxcdGlmIChpcF9hcmcpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzA1OlxcdFxcdHRyLVxcdTAwM2VmbGFncyB8PSBCUEZfVFJBTVBfRl9JUF9BUkc7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzA2LVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzA4LWFnYWluOlxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcwOTpcXHRpZiAodHItXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzEwOlxcdFxcdGlmICh0ci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9TSEFSRV9JUE1PRElGWSkge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcxMTpcXHRcXHRcXHQvKiBUaGUgQlBGX1RSQU1QX0ZfU0tJUF9GUkFNRSBjYW4gYmUgY2xlYXJlZCBpbiB0aGVcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MTItXFx0XFx0XFx0ICogZmlyc3QgdHJ5LCByZXNldCBpdCBpbiB0aGUgc2Vjb25kIHRyeS5cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MTMtXFx0XFx0XFx0ICovXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzE0OlxcdFxcdFxcdHRyLVxcdTAwM2VmbGFncyB8PSBCUEZfVFJBTVBfRl9PUklHX1NUQUNLIHwgQlBGX1RSQU1QX0ZfU0tJUF9GUkFNRTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MTUtXFx0XFx0fSBlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0pNUCkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcxOS1cXHRcXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MjA6XFx0XFx0XFx0dHItXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5CUEZfVFJBTVBfRl9TS0lQX0ZSQU1FO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcyMS1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NjItXFx0XFx0LyogLUVBR0FJTiBmcm9tIGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMuIE5vd1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjc2MzpcXHRcXHQgKiBCUEZfVFJBTVBfRl9TSEFSRV9JUE1PRElGWSBpcyBzZXQsIHdlIGNhbiBnZW5lcmF0ZSB0aGVcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NjQtXFx0XFx0ICogdHJhbXBvbGluZSBhZ2FpbiwgYW5kIHJldHJ5IHJlZ2lzdGVyLlxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzgyPXN0YXRpYyBlbnVtIGJwZl90cmFtcF9wcm9nX3R5cGUgYnBmX2F0dGFjaF90eXBlX3RvX3RyYW1wKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc4Ni1cXHRjYXNlIEJQRl9UUkFDRV9GRU5UUllfTVVMVEk6XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6Nzg3OlxcdFxcdHJldHVybiBCUEZfVFJBTVBfRkVOVFJZO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc4OC1cXHRjYXNlIEJQRl9NT0RJRllfUkVUVVJOOlxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjc4OTpcXHRcXHRyZXR1cm4gQlBGX1RSQU1QX01PRElGWV9SRVRVUk47XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzkwLVxcdGNhc2UgQlBGX1RSQUNFX0ZFWElUOlxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc5MS1cXHRjYXNlIEJQRl9UUkFDRV9GRVhJVF9NVUxUSTpcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3OTI6XFx0XFx0cmV0dXJuIEJQRl9UUkFNUF9GRVhJVDtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03OTMtXFx0Y2FzZSBCUEZfVFJBQ0VfRlNFU1NJT046XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzk0LVxcdGNhc2UgQlBGX1RSQUNFX0ZTRVNTSU9OX01VTFRJOlxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjc5NTpcXHRcXHRyZXR1cm4gQlBGX1RSQU1QX0ZTRVNTSU9OO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc5Ni1cXHRjYXNlIEJQRl9MU01fTUFDOlxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODAwLVxcdFxcdFxcdCAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjgwMTpcXHRcXHRcXHRyZXR1cm4gQlBGX1RSQU1QX0ZFWElUO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTgwMi1cXHRcXHRlbHNlXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODAzOlxcdFxcdFxcdHJldHVybiBCUEZfVFJBTVBfTU9ESUZZX1JFVFVSTjtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy04MDQtXFx0ZGVmYXVsdDpcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo4MDU6XFx0XFx0cmV0dXJuIEJQRl9UUkFNUF9SRVBMQUNFO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTgwNi1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz04NDU9c3RhdGljIGludCBicGZfdHJhbXBvbGluZV9hZGRfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODUzLVxcdGtpbmQgPSBicGZfYXR0YWNoX3R5cGVfdG9fdHJhbXAobm9kZS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZyk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODU0OlxcdGlmIChraW5kID09IEJQRl9UUkFNUF9GU0VTU0lPTikge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjg1NTpcXHRcXHRwcm9nX2xpc3QgPSBcXHUwMDI2dHItXFx1MDAzZXByb2dzX2hsaXN0W0JQRl9UUkFNUF9GRU5UUlldO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTg1Ni1cXHRcXHRjbnQrKztcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTg3Mi1cXHRobGlzdF9hZGRfaGVhZChcXHUwMDI2bm9kZS1cXHUwMDNldHJhbXBfaGxpc3QsIHByb2dfbGlzdCk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODczOlxcdGlmIChraW5kID09IEJQRl9UUkFNUF9GU0VTU0lPTikge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjg3NDpcXHRcXHR0ci1cXHUwMDNlcHJvZ3NfY250W0JQRl9UUkFNUF9GRU5UUlldKys7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODc1LVxcdFxcdGZleGl0ID0gZnNlc3Npb25fZXhpdChub2RlKTtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTg3Ny1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo4Nzg6XFx0XFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNmZleGl0LVxcdTAwM2V0cmFtcF9obGlzdCwgXFx1MDAyNnRyLVxcdTAwM2Vwcm9nc19obGlzdFtCUEZfVFJBTVBfRkVYSVRdKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo4Nzk6XFx0XFx0dHItXFx1MDAzZXByb2dzX2NudFtCUEZfVFJBTVBfRkVYSVRdKys7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODgwLVxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz04ODY9c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfcmVtb3ZlX3Byb2coc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTg5Mi1cXHRraW5kID0gYnBmX2F0dGFjaF90eXBlX3RvX3RyYW1wKG5vZGUtXFx1MDAzZWxpbmstXFx1MDAzZXByb2cpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjg5MzpcXHRpZiAoa2luZCA9PSBCUEZfVFJBTVBfRlNFU1NJT04pIHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy04OTQtXFx0XFx0ZmV4aXQgPSBmc2Vzc2lvbl9leGl0KG5vZGUpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODk3LVxcdFxcdGhsaXN0X2RlbF9pbml0KFxcdTAwMjZmZXhpdC1cXHUwMDNldHJhbXBfaGxpc3QpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjg5ODpcXHRcXHR0ci1cXHUwMDNlcHJvZ3NfY250W0JQRl9UUkFNUF9GRVhJVF0tLTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo4OTk6XFx0XFx0a2luZCA9IEJQRl9UUkFNUF9GRU5UUlk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTAwLVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTkwNT1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkyMS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5MjI6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGkrKylcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MjMtXFx0XFx0Y250ICs9IHRyLVxcdTAwM2Vwcm9nc19jbnRbaV07XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTI0LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjkyNTpcXHRpZiAoa2luZCA9PSBCUEZfVFJBTVBfUkVQTEFDRSkge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkyNi1cXHRcXHQvKiBDYW5ub3QgYXR0YWNoIGV4dGVuc2lvbiBpZiBmZW50cnkvZmV4aXQgYXJlIGluIHVzZS4gKi9cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk1OD1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTY3LVxcdGtpbmQgPSBicGZfYXR0YWNoX3R5cGVfdG9fdHJhbXAobm9kZS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZyk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTY4OlxcdGlmIChraW5kID09IEJQRl9UUkFNUF9SRVBMQUNFKSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTY5LVxcdFxcdFdBUk5fT05fT05DRSghdHItXFx1MDAzZWV4dGVuc2lvbl9wcm9nKTtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwNTg9c3RhdGljIHN0cnVjdCBicGZfc2hpbV90cmFtcF9saW5rICpjZ3JvdXBfc2hpbV9maW5kKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDYzLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwNjQ6XFx0Zm9yIChraW5kID0gMDsga2luZCBcXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGtpbmQrKykge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwNjUtXFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXFx1MDAyNnRyLVxcdTAwM2Vwcm9nc19obGlzdFtraW5kXSwgdHJhbXBfaGxpc3QpIHtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTExODc9dm9pZCBicGZfdHJhbXBvbGluZV9wdXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExOTYtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTE5NzpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQlBGX1RSQU1QX01BWDsgaSsrKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExOTgtXFx0XFx0aWYgKFdBUk5fT05fT05DRSghaGxpc3RfZW1wdHkoXFx1MDAyNnRyLVxcdTAwM2Vwcm9nc19obGlzdFtpXSkpKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NDE5PXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NTEyLVxcdGlmICh0Z3RfcHJvZyBcXHUwMDI2XFx1MDAyNiB0Z3RfcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2V0YWlsX2NhbGxfcmVhY2hhYmxlKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTUxMzpcXHRcXHR0ci1cXHUwMDNlZmxhZ3MgPSBCUEZfVFJBTVBfRl9UQUlMX0NBTExfQ1RYO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTUxNC1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTc2Mj1pbnQgYnBmX2ZpeHVwX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODY1LVxcdFxcdCAqICAge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg2NjpcXHRcXHQgKiAgICAgICByZXR1cm4gKCgodTY0ICopY3R4KVstMV0gXFx1MDAzZVxcdTAwM2UgQlBGX1RSQU1QX0lTX1JFVFVSTl9TSElGVCkgXFx1MDAyNiAxO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg2Ny1cXHRcXHQgKiAgIH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg2OS1cXHRcXHRpbnNuX2J1ZlswXSA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzEsIC04KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4NzA6XFx0XFx0aW5zbl9idWZbMV0gPSBCUEZfQUxVNjRfSU1NKEJQRl9SU0gsIEJQRl9SRUdfMCwgQlBGX1RSQU1QX0lTX1JFVFVSTl9TSElGVCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODcxLVxcdFxcdGluc25fYnVmWzJdID0gQlBGX0FMVTY0X0lNTShCUEZfQU5ELCBCUEZfUkVHXzAsIDEpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODc5LVxcdFxcdCAqICAge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg4MDpcXHRcXHQgKiAgICAgICB1NjQgb2ZmID0gKCgodTY0ICopY3R4KVstMV0gXFx1MDAzZVxcdTAwM2UgQlBGX1RSQU1QX0NPT0tJRV9JTkRFWF9TSElGVCkgXFx1MDAyNiAweEZGO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg4MS1cXHRcXHQgKiAgICAgICByZXR1cm4gXFx1MDAyNigodTY0ICopY3R4KVstb2ZmXTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg4NC1cXHRcXHRpbnNuX2J1ZlswXSA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzEsIC04KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4ODU6XFx0XFx0aW5zbl9idWZbMV0gPSBCUEZfQUxVNjRfSU1NKEJQRl9SU0gsIEJQRl9SRUdfMCwgQlBGX1RSQU1QX0NPT0tJRV9JTkRFWF9TSElGVCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODg2LVxcdFxcdGluc25fYnVmWzJdID0gQlBGX0FMVTY0X0lNTShCUEZfQU5ELCBCUEZfUkVHXzAsIDB4RkYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MjoyMi4wMzYwOTc1MTlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE0MDc5MDIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgQlBGIGFuZCBEeW5hbWljIFRyYWNpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBmb3IgQlBGIGFuZCBkeW5hbWljIHRyYWNpbmcsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRyYW1wb2xpbmUgZnVuY3Rpb25hbGl0eS4gSXQgc2VlbXMgbGlrZSB0aGVyZSBpc24ndCBhIHNpbmdsZSwgZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBcIkJQRiB0cmFtcG9saW5lXCIgaXRzZWxmLCBidXQgcmF0aGVyIGl0J3MgYWNoaWV2ZWQgdGhyb3VnaCBhIGNvbWJpbmF0aW9uIG9mIG90aGVyIG9wdGlvbnMuXG5cbkluaXRpYWxseSwgSSBpZGVudGlmaWVkIHRoZXNlIGtleSBjb25maWdzOiBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGBCUEZfRVZFTlRTYCwgYEZUUkFDRWAsIGFuZCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBIb3dldmVyLCBJIG5lZWQgdG8gZGlnIGRlZXBlci5cblxuSSBzZWUgdGhhdCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGlzIGFjdHVhbGx5IGEgZGVmYXVsdCBib29sZWFuIChgZGVmX2Jvb2wgeWApIGFuZCBkZXBlbmRzIG9uIGVpdGhlciBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTYCBvciBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTYCwgKmFuZCogYEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBTaW5jZSBpdCdzIGRlcGVuZGVudCwgaXQncyBub3QgZGlyZWN0bHkgdXNlci1zZWxlY3RhYmxlLCB3aGljaCBtYWtlcyBtZSByZS1ldmFsdWF0ZSB3aGV0aGVyIGl0J3MgdXNlZnVsIHRvIGxpc3QuIFdlIGNhbid0IGFjdHVhbGx5ICplbmFibGUqIGl0LlxuXG5BbHNvLCBJIGNoZWNrZWQgYEhBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYC4gSXQncyBhIGJvb2xlYW4gd2l0aG91dCBhIHByb21wdCwgc28gaXQncyBub3Qgc29tZXRoaW5nIHdlIGNhbiBleHBsaWNpdGx5IGNvbmZpZ3VyZS5cblxuVGhlIHBvaW50IGJlaW5nLCBpZiB0aGUgYWltIGlzIHRvIHVzZSBcImRpcmVjdCBjYWxsc1wiIHRocm91Z2ggZHluYW1pYyBmdHJhY2UsIHRoYXQgaXMgbm90IHVzZXIgc2VsZWN0YWJsZS5cblxuTm93LCBsZXQncyByZWZpbmUgdGhpcy4gTGV0IG1lIHJldmlzaXQuXG5cbk9rYXksIGxldCdzIHJldmlldyB0aGUgY29uZmlncywgdGFraW5nIGludG8gYWNjb3VudCB3aGF0IGlzIGFjdHVhbGx5IHVzZXItc2VsZWN0YWJsZTpcblxuYEJQRl9TWVNDQUxMYFxuYEJQRl9KSVRgXG5gQlBGX0VWRU5UU2BcbmBGVFJBQ0VgXG5gRFlOQU1JQ19GVFJBQ0VgXG5cblVsdGltYXRlbHksIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NgIGFyZSBub3QgdXNlciBzZWxlY3RhYmxlLiBTbywgdGhlcmUgaXMgbm8gdmFsdWUgaW4gbGlzdGluZyB0aGVtIGFzIFwibXVzdCBiZSBleHBsaWNpdGx5IGVuYWJsZWRcIiBiZWNhdXNlIHRoZXkgYXJlIGVuYWJsZWQgYXMgYSBjb25zZXF1ZW5jZSBvZiBvdGhlciBjb25maWd1cmF0aW9uIGNob2ljZXMuIEkgYW0gbm93IG1vcmUgY29udmluY2VkIHRoYXQgdGhlIHVzZWZ1bCBjb25maWd1cmF0aW9uIHRvIGluY2x1ZGUgaXMgYERZTkFNSUNfRlRSQUNFYCwgYXMgdGhpcyBpcyB1c2VyIHNlbGVjdGFibGUuXG5cbk5vdywgbGV0IG1lIGNoZWNrIGBEWU5BTUlDX0ZUUkFDRWAgaW4gYGtlcm5lbC90cmFjZS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3ODUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDI6MjkuMTc2ODg5OTg0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQzNjk4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRFlOQU1JQ19GVFJBQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9MjkwPWNvbmZpZyBGVU5DVElPTl9UUkFDRV9BUkdTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMDAtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MzAxOmNvbmZpZyBEWU5BTUlDX0ZUUkFDRVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMwMi1cXHRib29sXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMjMtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MzI0OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMjUtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMzI4LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjMyOTpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzAtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMzMzLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjMzNDpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzNS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzctXFxua2VybmVsL3RyYWNlL0tjb25maWc6MzM4OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0FSR1NcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzktXFx0ZGVmX2Jvb2wgeVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMzQyLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjM0Mzpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9KTVBcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zNDQtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MjoyOS4yMzkzMzQ2NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA0NjE3NjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBEWU5BTUlDX0ZUUkFDRWAuIFNlZW1zIGxpa2UgaXQncyBhIGJvb2xlYW4gb3B0aW9uLCBubyBwcm9tcHQgbmVjZXNzYXJ5LCBhbmQsIG5hdHVyYWxseSwgaXQncyBzZWxlY3RlZCBieSBgRlRSQUNFYC4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYEZUUkFDRWAgY29uZmlndXJhdGlvbi4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2Ugb3B0aW9ucyB0byBlbnN1cmUgdGhlIGtlcm5lbCdzIHRyYWNpbmcgY2FwYWJpbGl0aWVzIGFyZSBzZXQgdXAgYXMgaW50ZW5kZWQsIGVzcGVjaWFsbHkgd2l0aGluIG15IGFyZWEgb2YgZXhwZXJ0aXNlLiBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBzZWxlY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA5NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQyOjMyLjM0Mzk1NDYwMVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkyNjE0MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZUUkFDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz0xOTg9Y29uZmlnIFRSQUNJTkdfU1VQUE9SVFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMjAzLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjIwNDptZW51Y29uZmlnIEZUUkFDRVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTIwNS1cXHRib29sIFxcXCJUcmFjZXJzXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9NTg4PWNvbmZpZyBFTkFCTEVfREVGQVVMVF9UUkFDRVJTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy01OTYtXFxua2VybmVsL3RyYWNlL0tjb25maWc6NTk3OmNvbmZpZyBGVFJBQ0VfU1lTQ0FMTFNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy01OTgtXFx0Ym9vbCBcXFwiVHJhY2Ugc3lzY2FsbHNcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz04Njg9Y29uZmlnIEJQRl9LUFJPQkVfT1ZFUlJJREVcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg3Ni1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4Nzc6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX1BBVENIQUJMRV9GVU5DVElPTl9FTlRSWVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg3OC1cXHRib29sXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04ODAtXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODgxOmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9DQ1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg4Mi1cXHRkZWZfYm9vbCB5XFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04ODYtXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODg3OmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9PQkpUT09MXFxua2VybmVsL3RyYWNlL0tjb25maWctODg4LVxcdGRlZl9ib29sIHlcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg5NC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4OTU6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX1JFQ09SRE1DT1VOVFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg5Ni1cXHRkZWZfYm9vbCB5XFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMDIxPWNvbmZpZyBUUkFDRV9FVkFMX01BUF9GSUxFXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDQ4LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwNDk6Y29uZmlnIEZUUkFDRV9SRUNPUkRfUkVDVVJTSU9OXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA1MC1cXHRib29sIFxcXCJSZWNvcmQgZnVuY3Rpb25zIHRoYXQgcmVjdXJzZSBpbiBmdW5jdGlvbiB0cmFjaW5nXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA2Mi1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDYzOmNvbmZpZyBGVFJBQ0VfUkVDT1JEX1JFQ1VSU0lPTl9TSVpFXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA2NC1cXHRpbnQgXFxcIk1heCBudW1iZXIgb2YgcmVjdXJzZWQgZnVuY3Rpb25zIHRvIHJlY29yZFxcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNzMtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTA3NDpjb25maWcgRlRSQUNFX1ZBTElEQVRFX1JDVV9JU19XQVRDSElOR1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNzUtXFx0Ym9vbCBcXFwiVmFsaWRhdGUgUkNVIGlzIG9uIGR1cmluZyBmdHJhY2UgZXhlY3V0aW9uXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9MTEwMT1jb25maWcgR0NPVl9QUk9GSUxFX0ZUUkFDRVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTExMi1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMTEzOmNvbmZpZyBGVFJBQ0VfU0VMRlRFU1RcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTE0LVxcdGJvb2xcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTE1LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjExMTY6Y29uZmlnIEZUUkFDRV9TVEFSVFVQX1RFU1RcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTE3LVxcdGJvb2wgXFxcIlBlcmZvcm0gYSBzdGFydHVwIHRlc3Qgb24gZnRyYWNlXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9MTEzNj1jb25maWcgRVZFTlRfVFJBQ0VfVEVTVF9TWVNDQUxMU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTE0Ny1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMTQ4OmNvbmZpZyBGVFJBQ0VfU09SVF9TVEFSVFVQX1RFU1RcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTQ5LSAgICAgICBib29sIFxcXCJWZXJpZnkgY29tcGlsZSB0aW1lIHNvcnRpbmcgb2YgZnRyYWNlIGZ1bmN0aW9uc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDI6MzIuNDAzMjIxNDU4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDIwNTY3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBUcmFjaW5nOiBBIFF1aWNrIEp1bXBzdGFydCoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQga2VybmVsIHRyYWNpbmcsIHNwZWNpZmljYWxseSwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBpbW1lZGlhdGVseSBqdW1wIHRvIGBGVFJBQ0VgLiBJdCdzIGJhc2ljYWxseSB0aGUgc3RhbmRhcmQsIHRoZSBmb3VuZGF0aW9uLCB3aGF0IEkgKnVzdWFsbHkqIHJlYWNoIGZvciB3aGVuIEkgbmVlZCB0byBpbnN0cnVtZW50IHRoaW5ncy4gSSBtZWFuLCBpdCdzIGp1c3Qgc28gZWFzeSB0byBlbmFibGUgdGhyb3VnaCBgbWVudWNvbmZpZ2AsIHJpZ2h0PyBCdXQgdGhlbiB0aGUgcXVlc3Rpb24gaGl0cyBtZSwgbWF5YmUgc3VidGx5Li4uIHdoYXQgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBGVU5DVElPTl9UUkFDRVJgP1xuXG5JdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgdGhpbmdzIHJlbGF0ZSBpbiBvcmRlciB0byBiZSBhYmxlIHRvIGZ1bGx5IHdpZWxkIHRoZW0uIEkgY2FuJ3QganVzdCBlbmFibGUgYEZUUkFDRWAgYW5kIGFzc3VtZSBldmVyeXRoaW5nIGlzIGdvaW5nIHRvIGJlIGZpbmUuIEkgbmVlZCB0byBiZSBtb3JlIGRlbGliZXJhdGUgYWJvdXQgd2hhdCBmZWF0dXJlcyBJJ20gcHVsbGluZyBpbi4gVGhlcmUgY291bGQgYmUgb3RoZXIgcmVsYXRlZCB0cmFjZXJzIHRvIGNvbnNpZGVyLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBkbyBhIGRlZXBlciBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjEwOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQyOjM1LjQwNTI4MDI0NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4MzM1NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZVTkNUSU9OX1RSQUNFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz0yMjY9Y29uZmlnIEJPT1RUSU1FX1RSQUNJTkdcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTIzNC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoyMzU6Y29uZmlnIEZVTkNUSU9OX1RSQUNFUlxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTIzNi1cXHRib29sIFxcXCJLZXJuZWwgRnVuY3Rpb24gVHJhY2VyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MjozNS40NjYxMTg2NjFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU5MzYwODczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIEJQRiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSB1c2VyIGNhbiBzZWxlY3QgYEZVTkNUSU9OX1RSQUNFUmAsIHNvIGl0J3MgZXNzZW50aWFsIHdlIGluY2x1ZGUgYm90aCBgRlRSQUNFYCBhbmQgYEZVTkNUSU9OX1RSQUNFUmAgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFdlIHNob3VsZCBhbHNvIGluY2x1ZGUgdGhlIHVzdWFsIEJQRiBzdXNwZWN0czogYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYEJQRl9FVkVOVFNgLlxuXG5UaGUgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIOKAkyBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogaXQncyBtZXNzaW5nIHdpdGggdGhlIEJQRiB0cmFtcG9saW5lIGxvZ2ljIHNwZWNpZmljYWxseSB0byBmaXggdGhlIGBmdHJhY2VfbWFuYWdlZGAgc2V0dGluZyBmb3IgbXVsdGktYXR0YWNoIGBmZW50cnlgIHByb2dyYW1zLiBUaGlzIGlzIGEgY29yZSBCUEYgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBmdHJhY2UgdHJhbXBvbGluZXMgbWFrZXMgaXQgYSBoaWdoLXByaW9yaXR5IHRhcmdldC5cblxuSW5pdGlhbGx5LCBJIGhhZCBhIGJyb2FkZXIgc2V0IG9mIGBGb2N1c1N5bWJvbHNgOiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAsIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLCBhbmQgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAuIEhvd2V2ZXIsIHVwb24gY2xvc2VyIGluc3BlY3Rpb24sIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgLCB3aGlsZSBzdGF0aWMsIGlzICp0aGUqIG1vZGlmaWVkIGZ1bmN0aW9uLiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBhbmQgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgYXJlIHRoZSBhY3R1YWwgZW50cnkgcG9pbnRzLCBzbyB0aG9zZSBhcmUga2V5LiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCBpcyBub3QgbW9kaWZpZWQuIEkndmUgcmVmaW5lZCB0aGUgbGlzdCB0byBpbmNsdWRlIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgLCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCwgYW5kIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0J3MgYmVpbmcgZGlyZWN0bHkgbW9kaWZpZWQgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYC4gWWVzLCBpdCBhcHBlYXJzIHNvLCBhbmQgc29tZSBzZWxmdGVzdHMsIHNvIHRoaXMgcmVmaW5lZCBzeW1ib2wgbGlzdCBpcyBhY2N1cmF0ZS5cblxuVGhlIGZpbmFsIGNvbmZpZ3VyYXRpb24sIGFzIGl0IHN0YW5kcywgbG9va3Mgc3BvdC1vbiB0byBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0MzksIk91dHB1dFRva2VucyI6MTQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQyOjQ1LjA1OTczMDM1N1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NjQ4NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiLFxuICAgIFwiRlRSQUNFXCIsXG4gICAgXCJGVU5DVElPTl9UUkFDRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWdpc3Rlcl9mZW50cnlfbXVsdGlcIixcbiAgICBcImJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaFwiLFxuICAgIFwiYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB0cmFtcG9saW5lIGxvZ2ljIHRvIGNvcnJlY3RseSBzZXQgYGZ0cmFjZV9tYW5hZ2VkYCBmb3IgbXVsdGktYXR0YWNoIGZlbnRyeSBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBmdHJhY2UgYW5kIEJQRiB0cmFtcG9saW5lcyBpbnRlcmFjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiLFxuICAgIFwiRlRSQUNFXCIsXG4gICAgXCJGVU5DVElPTl9UUkFDRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWdpc3Rlcl9mZW50cnlfbXVsdGlcIixcbiAgICBcImJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaFwiLFxuICAgIFwiYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB0cmFtcG9saW5lIGxvZ2ljIHRvIGNvcnJlY3RseSBzZXQgYGZ0cmFjZV9tYW5hZ2VkYCBmb3IgbXVsdGktYXR0YWNoIGZlbnRyeSBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBmdHJhY2UgYW5kIEJQRiB0cmFtcG9saW5lcyBpbnRlcmFjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow98tqd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-11 11:22:03 +0000 UTC FinishedAt: 2026-07-11 11:42:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "520d7d7942025a58a0c79a61b905a556cf3cb524", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "BPF_EVENTS", "FTRACE", "FUNCTION_TRACER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "520d7d7942025a58a0c79a61b905a556cf3cb524", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "BPF_EVENTS", "FTRACE", "FUNCTION_TRACER" ], "series_id": "318bc104-7bfc-4851-a4da-198dbede0b9d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "register_fentry_multi", "bpf_trampoline_multi_attach", "bpf_tracing_multi_attach" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtGVFJBQ0UmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVnaXN0ZXJfZmVudHJ5X211bHRpJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaCYjMzQ7LAogICAgJiMzNDticGZfdHJhY2luZ19tdWx0aV9hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB0cmFtcG9saW5lIGxvZ2ljIHRvIGNvcnJlY3RseSBzZXQgYGZ0cmFjZV9tYW5hZ2VkYCBmb3IgbXVsdGktYXR0YWNoIGZlbnRyeSBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBmdHJhY2UgYW5kIEJQRiB0cmFtcG9saW5lcyBpbnRlcmFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGZkMWQ5YWMxZTg5MjE1MGIxNjBiYmFjNTcwZmJhODhkMTczNDVlYjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxMTo0MTowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5pbmRleCAxYTcyMWZjNGJlZjU2Mi4uNmVhZGY2NGY3ZWM5MGYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbkBAIC0xNTM2LDYgJiM0MzsxNTM2LDcgQEAgc3RhdGljIGludCByZWdpc3Rlcl9mZW50cnlfbXVsdGkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFcbiBcdGlmIChicGZfdHJhbXBvbGluZV91c2Vfam1wKHRyLVx1MDAzZWZsYWdzKSlcbiBcdFx0YWRkciA9IGZ0cmFjZV9qbXBfc2V0KGFkZHIpO1xuIFxuJiM0MztcdHRyLVx1MDAzZWZ1bmMuZnRyYWNlX21hbmFnZWQgPSB0cnVlO1xuIFx0ZnRyYWNlX2hhc2hfYWRkKGRhdGEtXHUwMDNlcmVnLCBkYXRhLVx1MDAzZWVudHJ5LCBpcCwgYWRkcik7XG4gXHR0ci1cdTAwM2VjdXJfaW1hZ2UgPSBpbTtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuY1xuaW5kZXggZjAyZmZjN2Y0MWQ3ODQuLjBhYTk1MzJhMDVjZmVjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX211bHRpLmNcbkBAIC00NjAsNiAmIzQzOzQ2MCw3MyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ludGVyc2VjdCh2b2lkKVxuIFx0dHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ZlbnRyeV9hZnRlcl9tdWx0aSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmdW5jc1tdID0ge1xuJiM0MztcdFx0XCYjMzQ7YnBmX2ZlbnRyeV90ZXN0MVwmIzM0OyxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqZmVudHJ5X2xpbmsgPSBOVUxMLCAqbXVsdGlfbGluayA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IHRyYWNpbmdfbXVsdGlfaW50ZXJzZWN0ICpza2VsID0gTlVMTDtcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdHJhY2luZ19tdWx0aV9vcHRzLCBvcHRzKTtcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpO1xuJiM0MztcdF9fdTMyICppZHMgPSBOVUxMO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSB0cmFjaW5nX211bHRpX2ludGVyc2VjdF9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDt0cmFjaW5nX211bHRpX2ludGVyc2VjdF9fb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXBpZCA9IGdldHBpZCgpO1xuJiM0MztcbiYjNDM7XHRpZHMgPSBnZXRfaWRzKGZ1bmNzLCBBUlJBWV9TSVpFKGZ1bmNzKSwgTlVMTCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGlkcywgXCYjMzQ7Z2V0X2lkc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdG9wdHMuaWRzID0gaWRzO1xuJiM0MztcdG9wdHMuY250ID0gQVJSQVlfU0laRShmdW5jcyk7XG4mIzQzO1x0bXVsdGlfbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aShza2VsLVx1MDAzZXByb2dzLmZlbnRyeV8xLCBOVUxMLCBcdTAwMjZvcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIobXVsdGlfbGluaywgXCYjMzQ7YXR0YWNoX211bHRpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0ZmVudHJ5X2xpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKHNrZWwtXHUwMDNlcHJvZ3MuZmVudHJ5KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoZmVudHJ5X2xpbmssIFwmIzM0O2F0dGFjaF9mZW50cnlcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZlbnRyeV8xKSwgXHUwMDI2dG9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7dGVzdF9ydW5cJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0ZXN0X3Jlc3VsdF9mZW50cnlfMSwgMSwgXCYjMzQ7bXVsdGlfZmVudHJ5XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNldGVzdF9yZXN1bHRfZmVudHJ5LCAxLCBcJiMzNDtmZW50cnlcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfbGlua19fZGVzdHJveShmZW50cnlfbGluayk7XG4mIzQzO1x0ZmVudHJ5X2xpbmsgPSBOVUxMO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7ZGVzdHJveV9mZW50cnlcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZlbnRyeV8xKSwgXHUwMDI2dG9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7dGVzdF9ydW5fbXVsdGlcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0ZXN0X3Jlc3VsdF9mZW50cnlfMSwgMiwgXCYjMzQ7bXVsdGlfZmVudHJ5X29ubHlcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0ZXN0X3Jlc3VsdF9mZW50cnksIDEsIFwmIzM0O2ZlbnRyeV9kZXRhY2hlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9saW5rX19kZXN0cm95KG11bHRpX2xpbmspO1xuJiM0MztcdG11bHRpX2xpbmsgPSBOVUxMO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7ZGVzdHJveV9tdWx0aVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmVudHJ5XzEpLCBcdTAwMjZ0b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X3J1bl9kZXRhY2hlZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRlc3RfcmVzdWx0X2ZlbnRyeV8xLCAyLCBcJiMzNDttdWx0aV9mZW50cnlfZGV0YWNoZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0ZXN0X3Jlc3VsdF9mZW50cnksIDEsIFwmIzM0O2ZlbnRyeV9zdGlsbF9kZXRhY2hlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdGJwZl9saW5rX19kZXN0cm95KGZlbnRyeV9saW5rKTtcbiYjNDM7XHRicGZfbGlua19fZGVzdHJveShtdWx0aV9saW5rKTtcbiYjNDM7XHRmcmVlKGlkcyk7XG4mIzQzO1x0dHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdGVzdF9zZXNzaW9uKHZvaWQpXG4ge1xuIFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcbkBAIC05NTcsNCAmIzQzOzEwMjQsNiBAQCB2b2lkIHRlc3RfdHJhY2luZ19tdWx0aV90ZXN0KHZvaWQpXG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDthdHRhY2hfYXBpX2ZhaWxzXCYjMzQ7KSlcbiBcdFx0dGVzdF9hdHRhY2hfYXBpX2ZhaWxzKCk7XG4gXHRSVU5fVEVTVFModHJhY2luZ19tdWx0aV92ZXJpZmllcik7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7ZmVudHJ5X2FmdGVyX211bHRpXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfZmVudHJ5X2FmdGVyX211bHRpKCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX211bHRpX2ludGVyc2VjdF9hdHRhY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX211bHRpX2ludGVyc2VjdF9hdHRhY2guY1xuaW5kZXggY2Q1YmUwYmI2ZmZkZDcuLjVlYmJlM2I2MDJhNGYxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfbXVsdGlfaW50ZXJzZWN0X2F0dGFjaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfYXR0YWNoLmNcbkBAIC0xMSw2ICYjNDM7MTEsMTQgQEAgX191NjQgdGVzdF9yZXN1bHRfZmVudHJ5XzEgPSAwO1xuIF9fdTY0IHRlc3RfcmVzdWx0X2ZlbnRyeV8yID0gMDtcbiBfX3U2NCB0ZXN0X3Jlc3VsdF9mZXhpdF8xID0gMDtcbiBfX3U2NCB0ZXN0X3Jlc3VsdF9mZXhpdF8yID0gMDtcbiYjNDM7X191NjQgdGVzdF9yZXN1bHRfZmVudHJ5ID0gMDtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtmZW50cnkvYnBmX2ZlbnRyeV90ZXN0MVwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKGZlbnRyeSwgaW50IGEpXG4mIzQzO3tcbiYjNDM7XHR0ZXN0X3Jlc3VsdF9mZW50cnkgJiM0Mzs9IGEgPT0gMTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuIFxuIFNFQyhcJiMzNDtmZW50cnkubXVsdGlcJiMzNDspXG4gaW50IEJQRl9QUk9HKGZlbnRyeV8xKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtGVFJBQ0UmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVnaXN0ZXJfZmVudHJ5X211bHRpJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaCYjMzQ7LAogICAgJiMzNDticGZfdHJhY2luZ19tdWx0aV9hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB0cmFtcG9saW5lIGxvZ2ljIHRvIGNvcnJlY3RseSBzZXQgYGZ0cmFjZV9tYW5hZ2VkYCBmb3IgbXVsdGktYXR0YWNoIGZlbnRyeSBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBmdHJhY2UgYW5kIEJQRiB0cmFtcG9saW5lcyBpbnRlcmFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmQxZDlhYzFlODkyMTUwYjE2MGJiYWM1NzBmYmE4OGQxNzM0NWViOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDExIDExOjQxOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwppbmRleCAxYTcyMWZjNGJlZjU2Mi4uNmVhZGY2NGY3ZWM5MGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jCkBAIC0xNTM2LDYgJiM0MzsxNTM2LDcgQEAgc3RhdGljIGludCByZWdpc3Rlcl9mZW50cnlfbXVsdGkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWEKIAlpZiAoYnBmX3RyYW1wb2xpbmVfdXNlX2ptcCh0ci0mZ3Q7ZmxhZ3MpKQogCQlhZGRyID0gZnRyYWNlX2ptcF9zZXQoYWRkcik7CiAKJiM0MzsJdHItJmd0O2Z1bmMuZnRyYWNlX21hbmFnZWQgPSB0cnVlOwogCWZ0cmFjZV9oYXNoX2FkZChkYXRhLSZndDtyZWcsIGRhdGEtJmd0O2VudHJ5LCBpcCwgYWRkcik7CiAJdHItJmd0O2N1cl9pbWFnZSA9IGltOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jCmluZGV4IGYwMmZmYzdmNDFkNzg0Li4wYWE5NTMyYTA1Y2ZlYyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuYwpAQCAtNDYwLDYgJiM0Mzs0NjAsNzMgQEAgc3RhdGljIHZvaWQgdGVzdF9pbnRlcnNlY3Qodm9pZCkKIAl0cmFjaW5nX211bHRpX2ludGVyc2VjdF9fZGVzdHJveShza2VsKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZmVudHJ5X2FmdGVyX211bHRpKHZvaWQpCiYjNDM7ewomIzQzOwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZ1bmNzW10gPSB7CiYjNDM7CQkmIzM0O2JwZl9mZW50cnlfdGVzdDEmIzM0OywKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGJwZl9saW5rICpmZW50cnlfbGluayA9IE5VTEwsICptdWx0aV9saW5rID0gTlVMTDsKJiM0MzsJc3RydWN0IHRyYWNpbmdfbXVsdGlfaW50ZXJzZWN0ICpza2VsID0gTlVMTDsKJiM0MzsJTElCQlBGX09QVFMoYnBmX3RyYWNpbmdfbXVsdGlfb3B0cywgb3B0cyk7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyk7CiYjNDM7CV9fdTMyICppZHMgPSBOVUxMOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlza2VsID0gdHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7dHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfX29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cGlkID0gZ2V0cGlkKCk7CiYjNDM7CiYjNDM7CWlkcyA9IGdldF9pZHMoZnVuY3MsIEFSUkFZX1NJWkUoZnVuY3MpLCBOVUxMKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGlkcywgJiMzNDtnZXRfaWRzJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlvcHRzLmlkcyA9IGlkczsKJiM0MzsJb3B0cy5jbnQgPSBBUlJBWV9TSVpFKGZ1bmNzKTsKJiM0MzsJbXVsdGlfbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aShza2VsLSZndDtwcm9ncy5mZW50cnlfMSwgTlVMTCwgJmFtcDtvcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKG11bHRpX2xpbmssICYjMzQ7YXR0YWNoX211bHRpJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlmZW50cnlfbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2goc2tlbC0mZ3Q7cHJvZ3MuZmVudHJ5KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGZlbnRyeV9saW5rLCAmIzM0O2F0dGFjaF9mZW50cnkmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmZlbnRyeV8xKSwgJmFtcDt0b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt0ZXN0X3J1biYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7dGVzdF9yZXN1bHRfZmVudHJ5XzEsIDEsICYjMzQ7bXVsdGlfZmVudHJ5JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDt0ZXN0X3Jlc3VsdF9mZW50cnksIDEsICYjMzQ7ZmVudHJ5JiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBicGZfbGlua19fZGVzdHJveShmZW50cnlfbGluayk7CiYjNDM7CWZlbnRyeV9saW5rID0gTlVMTDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2Rlc3Ryb3lfZmVudHJ5JiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5mZW50cnlfMSksICZhbXA7dG9wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7dGVzdF9ydW5fbXVsdGkmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3Rlc3RfcmVzdWx0X2ZlbnRyeV8xLCAyLCAmIzM0O211bHRpX2ZlbnRyeV9vbmx5JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDt0ZXN0X3Jlc3VsdF9mZW50cnksIDEsICYjMzQ7ZmVudHJ5X2RldGFjaGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBicGZfbGlua19fZGVzdHJveShtdWx0aV9saW5rKTsKJiM0MzsJbXVsdGlfbGluayA9IE5VTEw7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtkZXN0cm95X211bHRpJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5mZW50cnlfMSksICZhbXA7dG9wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7dGVzdF9ydW5fZGV0YWNoZWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3Rlc3RfcmVzdWx0X2ZlbnRyeV8xLCAyLCAmIzM0O211bHRpX2ZlbnRyeV9kZXRhY2hlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7dGVzdF9yZXN1bHRfZmVudHJ5LCAxLCAmIzM0O2ZlbnRyeV9zdGlsbF9kZXRhY2hlZCYjMzQ7KTsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwlicGZfbGlua19fZGVzdHJveShmZW50cnlfbGluayk7CiYjNDM7CWJwZl9saW5rX19kZXN0cm95KG11bHRpX2xpbmspOwomIzQzOwlmcmVlKGlkcyk7CiYjNDM7CXRyYWNpbmdfbXVsdGlfaW50ZXJzZWN0X19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRlc3Rfc2Vzc2lvbih2b2lkKQogewogCUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyk7CkBAIC05NTcsNCAmIzQzOzEwMjQsNiBAQCB2b2lkIHRlc3RfdHJhY2luZ19tdWx0aV90ZXN0KHZvaWQpCiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDthdHRhY2hfYXBpX2ZhaWxzJiMzNDspKQogCQl0ZXN0X2F0dGFjaF9hcGlfZmFpbHMoKTsKIAlSVU5fVEVTVFModHJhY2luZ19tdWx0aV92ZXJpZmllcik7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7ZmVudHJ5X2FmdGVyX211bHRpJiMzNDspKQomIzQzOwkJdGVzdF9mZW50cnlfYWZ0ZXJfbXVsdGkoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX211bHRpX2ludGVyc2VjdF9hdHRhY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX211bHRpX2ludGVyc2VjdF9hdHRhY2guYwppbmRleCBjZDViZTBiYjZmZmRkNy4uNWViYmUzYjYwMmE0ZjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX211bHRpX2ludGVyc2VjdF9hdHRhY2guYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfYXR0YWNoLmMKQEAgLTExLDYgJiM0MzsxMSwxNCBAQCBfX3U2NCB0ZXN0X3Jlc3VsdF9mZW50cnlfMSA9IDA7CiBfX3U2NCB0ZXN0X3Jlc3VsdF9mZW50cnlfMiA9IDA7CiBfX3U2NCB0ZXN0X3Jlc3VsdF9mZXhpdF8xID0gMDsKIF9fdTY0IHRlc3RfcmVzdWx0X2ZleGl0XzIgPSAwOwomIzQzO19fdTY0IHRlc3RfcmVzdWx0X2ZlbnRyeSA9IDA7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7ZmVudHJ5L2JwZl9mZW50cnlfdGVzdDEmIzM0OykKJiM0MztpbnQgQlBGX1BST0coZmVudHJ5LCBpbnQgYSkKJiM0Mzt7CiYjNDM7CXRlc3RfcmVzdWx0X2ZlbnRyeSAmIzQzOz0gYSA9PSAxOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiAKIFNFQygmIzM0O2ZlbnRyeS5tdWx0aSYjMzQ7KQogaW50IEJQRl9QUk9HKGZlbnRyeV8xKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzg5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJQRiBUcmFtcG9saW5lIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCB0b3VjaGVzIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgYWxvbmcgd2l0aCBzb21lIHNlbGZ0ZXN0cy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbiBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIGFkZGluZyBgdHItJmd0O2Z1bmMuZnRyYWNlX21hbmFnZWQgPSB0cnVlO2Agd2l0aGluIHRoZSBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCBmdW5jdGlvbi4gSSByZWNvZ25pemUgdGhpcyBhcyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBCUEYgdHJhbXBvbGluZXMgaW4gY29uanVuY3Rpb24gd2l0aCBmdHJhY2UuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gVG8gZG8gdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAgaXMgYWN0dWFsbHkgdXNlZC4gSXMgaXQgYSBjb3JlIGZ1bmN0aW9uLCBvciBpcyBpdCBtb3JlIG9mIGEgaGVscGVyPyBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb250ZXh0cyBhbmQgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQ/CgpUaGVyZWZvcmUsIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSYjMzk7bSBnb2luZyB0byB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIGV2ZXJ5IGluc3RhbmNlIG9mIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBob3cgdGhlIGZ1bmN0aW9uIGlzIHVzZWQsIHdoaWNoIHdpbGwsIGluIHR1cm4sIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbmV3IGBmdHJhY2VfbWFuYWdlZGAgZmxhZy4gT25jZSBJJiMzOTt2ZSBnb3QgdGhhdCBmaWd1cmVkIG91dCwgSSBjYW4gZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoZSBmbGFnIGFmZmVjdHMgdGhlIEJQRiBzdWJzeXN0ZW0gaW4gZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ2lzdGVyX2ZlbnRyeV9tdWx0aSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTIyPXN0YXRpYyB2b2lkIGZ0cmFjZV9oYXNoX2FkZChzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2gsIHN0cnVjdCBmdHJhY2VfZnVuY19lbnRyeSAqZW50cnksXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUyOS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1MzA6c3RhdGljIGludCByZWdpc3Rlcl9mZW50cnlfbXVsdGkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnB0cilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MzEte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NDQtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTQ1OnN0YXRpYyBpbnQgdW5yZWdpc3Rlcl9mZW50cnlfbXVsdGkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsIHZvaWQgKnB0cilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NDYte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1NzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9tdWx0aV9vcHMgPSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTc1Olx0LnJlZ2lzdGVyX2ZlbnRyeSAgID0gcmVnaXN0ZXJfZmVudHJ5X211bHRpLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU3NjpcdC51bnJlZ2lzdGVyX2ZlbnRyeSA9IHVucmVnaXN0ZXJfZmVudHJ5X211bHRpLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU3Ny1cdC5tb2RpZnlfZmVudHJ5ICAgICA9IG1vZGlmeV9mZW50cnlfbXVsdGksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI4NgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgY29kZSBleHBlcnQ6CgoqKlRyYWNpbmcgdGhlIFVzZSBvZiBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCoqCgpSaWdodCwgc28gYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAgcG9wcyB1cCBpbiBgdHJhbXBvbGluZV9tdWx0aV9vcHNgLiBUaGF0JiMzOTtzIGEgZGVjZW50IHN0YXJ0aW5nIHBvaW50LiBUbyB0cnVseSB1bmRlcnN0YW5kIGl0cyBzaWduaWZpY2FuY2UgYW5kIHBvdGVudGlhbCBpbXBhY3QsIEkgbmVlZCB0byBzZWUgdGhlIGJyb2FkZXIgY29udGV4dC4gVGhlcmVmb3JlLCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGVyZSBgdHJhbXBvbGluZV9tdWx0aV9vcHNgIGl0c2VsZiBpcyBiZWluZyAqdXNlZCouIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgb2YgKnRoYXQqIGZ1bmN0aW9uIHdpbGwgZ2l2ZSBtZSB0aGUgY3J1Y2lhbCBoaWdoLWxldmVsIHZpZXcgSSBuZWVkIHRvIGFzc2VzcyB0aGlzIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgIGNvbm5lY3Rpb24uIFRoaXMgaXMgYSBjbGFzc2ljIGRlcGVuZGVuY3kgdHJhY2luZyBzY2VuYXJpbyDigJMgZ290dGEgZm9sbG93IHRoZSBjaGFpbiB0byB1bmRlcnN0YW5kIHRoZSB3aG9sZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYW1wb2xpbmVfbXVsdGlfb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1NTk9c3RhdGljIGludCBtb2RpZnlfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTczLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU3NDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX211bHRpX29wcyA9IHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NzUtXHQucmVnaXN0ZXJfZmVudHJ5ICAgPSByZWdpc3Rlcl9mZW50cnlfbXVsdGksXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTYxMj1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY2Mi1cdFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXHUwMDI2bW5vZGUtXHUwMDNlbm9kZSwgbW5vZGUtXHUwMDNldHJhbXBvbGluZSwgTlVMTCxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2NjM6XHRcdFx0XHRcdFx0IFx1MDAyNnRyYW1wb2xpbmVfbXVsdGlfb3BzLCBkYXRhKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NjQtXHRcdGlmIChlcnIpIHtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzEyPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzIzLVx0XHRXQVJOX09OX09OQ0UoX19icGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhcdTAwMjZtbm9kZS1cdTAwM2Vub2RlLCBtbm9kZS1cdTAwM2V0cmFtcG9saW5lLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTcyNDpcdFx0XHRcdFx0TlVMTCwgXHUwMDI2dHJhbXBvbGluZV9tdWx0aV9vcHMsIGRhdGEpKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MjUtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkzMAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgTXVsdGktQXR0YWNoIGluIFRyYW1wb2xpbmVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgQlBGIHRyYW1wb2xpbmUgbXVsdGktYXR0YWNoIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQuIE15IGZvY3VzIGlzIG5hcnJvd2VkIGRvd24gdG8gdGhlIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCBmdW5jdGlvbnMsIGFzIHRoZXNlIGFyZSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgbXVsdGktYXR0YWNoIGFuZCBkZXRhY2ggb3BlcmF0aW9ucywgcmVzcGVjdGl2ZWx5LiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMuIEdpdmVuIHRoYXQsIEkga25vdyB0aGlzIGlzIGEgY29yZSBwYXJ0IG9mIGhvdyBCUEYgdHJhbXBvbGluZXMgbWFuYWdlIG11bHRpcGxlIHByb2dyYW1zIG9uIGEgc2luZ2xlIGhvb2sgcG9pbnQuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gYW5kIHJlbGF0ZWQgZGV0YWlscywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB2aWV3IG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGlzIG11bHRpLWF0dGFjaCBmZWF0dXJlIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBCUEYgdHJhbXBvbGluZSBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJhbXBvbGluZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGlzYXNtLm8gbXByb2cub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgdGhpbmtpbmcgcmlnaHQgbm93IGlzIGNlbnRlcmVkIGFyb3VuZCBCUEYgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19CUEZfSklUYCBpcyBlbmFibGVkIOKAkyB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsIGZvciBCUEYgdG8gYWN0dWFsbHkgKmRvKiBhbnl0aGluZyB1c2VmdWwuIEFuZCBnZW5lcmFsbHksIEkgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIGFzIGl0IHByb3ZpZGVzIHRoZSBjb3JlIHN5c3RlbSBjYWxsIGludGVyZmFjZSBmb3IgQlBGIHByb2dyYW1zLgoKQmV5b25kIHRob3NlIGJhc2ljcywgSSYjMzk7bSB0cnlpbmcgdG8gcmVjYWxsIGlmIHRoZXJlIGFyZSBhbnkgKnNwZWNpZmljKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgbW9yZSBhZHZhbmNlZCBmdW5jdGlvbmFsaXRpZXMuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IGRlZGljYXRlZCBjb25maWdzIGFzc29jaWF0ZWQgd2l0aCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBvciBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYC4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBjb25maWdzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHRoYXQgc3BlY2lmaWNhbGx5IGVuYWJsZSBvciBkaXNhYmxlIHRoZXNlIGZlYXR1cmVzLiBNeSBndXQgc2F5cyBpdCYjMzk7cyBwcm9iYWJseSBoYW5kbGVkIGJ5IG90aGVyIGNvbmZpZ3MsIGJ1dCBpdCYjMzk7cyB3b3J0aCBhIHF1aWNrIGxvb2sgdG8gYmUgYWJzb2x1dGVseSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBvciB0byBzZWUgaWYgdGhleSBuZWVkIHNvbWUgc3BlY2lhbCBlbmFibGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9MTUyMD1pbnQgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyKHZvaWQgKmltYWdlLCB2b2lkICpidWYsIHM2NCAqZnVuY3MsIGludCBudW1fZnVuY3MpO1xuaW5jbHVkZS9saW51eC9icGYuaC0xNTIxLVxuaW5jbHVkZS9saW51eC9icGYuaDoxNTIyOmludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcbmluY2x1ZGUvbGludXgvYnBmLmgtMTUyMy1cdFx0XHRcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTE2MzU9c3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2hhc190cmFtcG9saW5lKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE2MzgtfVxuaW5jbHVkZS9saW51eC9icGYuaDoxNjM5OnN0YXRpYyBpbmxpbmUgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuaW5jbHVkZS9saW51eC9icGYuaC0xNjQwLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTc0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHRyYW1wb2xpbmVfbXVsdGlfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NzktXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTgwOnN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTgxLXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTg1LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU4NjpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU4Ny17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5NC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1OTU6c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTk2LXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjExLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTYxMjppbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjEzLVx0XHRcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY1OC1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjU5Olx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NjAtXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4Ni1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY4NzpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXHUwMDNldHJhbXBvbGluZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjg4LVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTYtXHRcdGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUsIFx1MDAyNm1ub2RlLVx1MDAzZW5vZGUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY5NzpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY5OC1cdH1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzEyPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzIxLVx0XHRkYXRhLVx1MDAzZWVudHJ5ID0gXHUwMDI2bW5vZGUtXHUwMDNlZW50cnk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzIyOlx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MjMtXHRcdFdBUk5fT05fT05DRShfX2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nKFx1MDAyNm1ub2RlLVx1MDAzZW5vZGUsIG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTczMi1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTczMzpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXHUwMDNldHJhbXBvbGluZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzM0LVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zODQwPWludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkxMS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozOTEyOlx0ZXJyID0gYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHByb2csIGlkcywgbGluayk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkxMy1cdGt2ZnJlZShpZHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODQ5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEJQRiBUcmFjZSBDb2RlYmFzZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgcGluIGRvd24gaXRzIGxvY2F0aW9uLiBJdCBsb29rcyBsaWtlIGl0IGxpdmVzIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBFeGNlbGxlbnQuIE5vdyB0aGF0IEkga25vdyB0aGUgc291cmNlIGZpbGUsIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoaWNoIGNvbmZpZyBvcHRpb25zIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBmdW5jdGlvbmFsaXR5IHdpdGhpbiBgYnBmX3RyYWNlLmNgLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBmb3IgdmVyaWZ5aW5nIHRoYXQgdGhlIGludGVuZGVkIEJQRiB0cmFjaW5nIGZlYXR1cmVzIGFyZSBldmVuIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBJJiMzOTttIHdvcmtpbmcgd2l0aC4gVGltZSB0byBjaGVjayB0aGUgYC5jb25maWdgIGZpbGVzLi4uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhY2VcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9NYWtlZmlsZT01ND1LQ09WX0lOU1RSVU1FTlRfdHJhY2VfaXJxc29mZi5vIDo9IG5cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01NS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo1NjpDRkxBR1NfYnBmX3RyYWNlLm8gOj0gLUkkKHNyYylcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01Ny1cbi0tXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9MTA5PW9iai0kKENPTkZJR19VU0VSX0VWRU5UUykgJiM0Mzs9IHRyYWNlX2V2ZW50c191c2VyLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxMTA6b2JqLSQoQ09ORklHX0JQRl9FVkVOVFMpICYjNDM7PSBicGZfdHJhY2Uub1xua2VybmVsL3RyYWNlL01ha2VmaWxlLTExMS1vYmotJChDT05GSUdfS1BST0JFX0VWRU5UUykgJiM0Mzs9IHRyYWNlX2twcm9iZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNjEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19CUEZfRVZFTlRTYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLiBOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhlIGZ1bmN0aW9uIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaW52b2x2ZWQgaW4gdGhlIGB0cmFtcG9saW5lX211bHRpX29wc2Agc3RydWN0dXJlLiBUaGlzIGB0cmFtcG9saW5lX211bHRpX29wc2Agc3RydWN0dXJlIGlzIHRoZW4gdXNlZCBieSBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCwgd2hpY2ggaW4gdHVybiwgaXMgY2FsbGVkIGJ5IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLiBIbW0sIHJpZ2h0LiBGcm9tIHdoYXQgSSByZWNhbGwsIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGlzIGNhbGxlZCBmcm9tIGBicGZfdHJhY2luZ19wcm9nX2F0dGFjaGAgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uIGluIHRoYXQgc3BhY2UuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhhdCBjb25uZWN0aW9uIG5leHQgdG8gYmUgc3VyZSBldmVyeXRoaW5nIGlzIGNvcnJlY3RseSBsaW5rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFjaW5nX211bHRpX2F0dGFjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oPTc4OT1pbnQgYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6NzkwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cik7XG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTc5MS0jZWxzZVxuLS1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9ODQ4PXN0YXRpYyBpbmxpbmUgaW50XG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjg0OTpicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtODUwLXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NzY1PXN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4MTUtXHRcdGVsc2UgaWYgKGlzX3RyYWNpbmdfbXVsdGkocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1ODE2Olx0XHRcdHJldCA9IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChwcm9nLCBhdHRyKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4MTctXHRcdGVsc2Vcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgxOT1zdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzgzOS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozODQwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODQxLXtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkyOS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozOTMwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTMxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIGZlbnRyeS9mZW50cnkubXVsdGkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gSSBjYW4gY29uZmlybSB0aGF0IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgICppcyogY2FsbGVkIGZyb20gYGxpbmtfY3JlYXRlYCB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgc3BlY2lmaWNhbGx5IHdoZW4gYGlzX3RyYWNpbmdfbXVsdGkocHJvZy0mZ3Q7ZXhwZWN0ZWRfYXR0YWNoX3R5cGUpYCBpcyB0cnVlLiBUaGF0IGNvbmZpcm1zIGl0JiMzOTtzIGEgcmVhY2hhYmxlIGNvZGUgcGF0aCBhbmQgZnVuY3Rpb25hbC4gTm8gc3VycHJpc2VzIHRoZXJlLgoKVGhlIG1lYXQgb2YgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9kaWZpY2F0aW9uIHRvIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AuIExvb2tpbmcgYXQgdGhlIGRpZmYuLi5BaCwgSSBzZWUuIFRoZXkmIzM5O3JlIHNldHRpbmcgYHRyLSZndDtmdW5jLmZ0cmFjZV9tYW5hZ2VkID0gdHJ1ZTtgLiBUaGF0IG1ha2VzIHNlbnNlLiBJdCBsb29rcyBsaWtlIHRoaXMgd2FzIGEgbWlzc2VkIGJpdCBvZiBpbml0aWFsaXphdGlvbi4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgdGhpcyB3YXMgY2F1c2luZyBpc3N1ZXMgd2l0aCBmdHJhY2UgYW5kIHRyYW1wb2xpbmUgaW50ZXJhY3Rpb25zIHdoZW4gZGVhbGluZyB3aXRoIGEgY29tYmluYXRpb24gb2YgYGZlbnRyeWAgYW5kIGBmZW50cnkubXVsdGlgIGF0dGFjaG1lbnRzIHRvIHRoZSBzYW1lIGZ1bmN0aW9uLiBXaXRob3V0IHRoaXMgZmxhZyBzZXQsIHRoZSBmdHJhY2UvdHJhbXBvbGluZSBpbnRlcmFjdGlvbiB3YXMgcHJvYmFibHkgb2ZmLgoKVGhlIGNvbmZpcm1hdGlvbiBvZiB0aGUgYnVnIGZpeCBhcHBlYXJzIHRvIGNvbWUgZnJvbSB0aGUgYHRlc3RfZmVudHJ5X2FmdGVyX211bHRpYCBzZWxmdGVzdCwgd2hpY2ggaXMgZGVmaW5pdGVseSBhIHNvbGlkIGFwcHJvYWNoLiBJdCB0ZXN0cyBhdHRhY2hpbmcgYGZlbnRyeS5tdWx0aWAgKmJlZm9yZSogYGZlbnRyeWAgdG8gdGhlIHNhbWUgZnVuY3Rpb24sIGBicGZfZmVudHJ5X3Rlc3QxYCwgd2hpY2ggc2hvdWxkIGV4cG9zZSBhbnkgaXNzdWVzIHdpdGggdGhlIGZ0cmFjZS90cmFtcG9saW5lIGludGVyYWN0aW9uLgoKTm93LCBmb3IgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcy4uLiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBrZXJuZWwgY29uZmlncyBhcmUgZW5hYmxlZDogYEJQRl9KSVRgLCBgQlBGX1NZU0NBTExgLCBgQlBGX0VWRU5UU2AsIGFuZCBgRlRSQUNFYC4gRGVmaW5pdGVseSB0aG9zZS4gSSYjMzk7bSBhbHNvIHdvbmRlcmluZyBhYm91dCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgY29kZSB0byBzZWUgaWYgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAgdXNlcyBhbnkgb2YgdGhvc2UuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYmVjYXVzZSBpdCBjb3VsZCBiZSBjcml0aWNhbC4gR29vZCwgc29saWQgd29yayBvdmVyYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdpc3Rlcl9mZW50cnlfbXVsdGkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTIyPXN0YXRpYyB2b2lkIGZ0cmFjZV9oYXNoX2FkZChzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2gsIHN0cnVjdCBmdHJhY2VfZnVuY19lbnRyeSAqZW50cnksXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUyOS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1MzA6c3RhdGljIGludCByZWdpc3Rlcl9mZW50cnlfbXVsdGkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnB0cilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MzEte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NDQtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTQ1OnN0YXRpYyBpbnQgdW5yZWdpc3Rlcl9mZW50cnlfbXVsdGkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsIHZvaWQgKnB0cilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NDYte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1NzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9tdWx0aV9vcHMgPSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTc1Olx0LnJlZ2lzdGVyX2ZlbnRyeSAgID0gcmVnaXN0ZXJfZmVudHJ5X211bHRpLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU3NjpcdC51bnJlZ2lzdGVyX2ZlbnRyeSA9IHVucmVnaXN0ZXJfZmVudHJ5X211bHRpLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU3Ny1cdC5tb2RpZnlfZmVudHJ5ICAgICA9IG1vZGlmeV9mZW50cnlfbXVsdGksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNTAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczogKipIdW50aW5nIGZvciBDb25kaXRpb25hbCBDb21waWxhdGlvbioqLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgIGZ1bmN0aW9uIGlzIHR1Y2tlZCBhd2F5IGluc2lkZSBhbnkgYCNpZmRlZmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgY29kZSB0byBzZWUgaWYgaXRzIGRlY2xhcmF0aW9uIG9yIGRlZmluaXRpb24sIG9yIGV2ZW4gYW55IGNhbGxzIHRvIGl0LCBhcmUgZ3VhcmRlZCBieSBhIG1hY3JvIHRoYXQgY29udHJvbHMgd2hldGhlciBpdCYjMzk7cyBjb21waWxlZCBvciBub3QuIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24mIzM5O3Mgc2NvcGUgYW5kIGF2YWlsYWJpbGl0eSwgYW5kIHdoZXRoZXIgSSBuZWVkIHRvIGNvbnNpZGVyIGRpZmZlcmVudCBidWlsZCBjb25maWd1cmF0aW9ucyBvciBwbGF0Zm9ybS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgd2hlbiBJJiMzOTttIHdvcmtpbmcgd2l0aCBpdC4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIGNvZGViYXNlIGZvciBpdCBhbmQgdGhlbiBtZXRpY3Vsb3VzbHkgcmV2aWV3aW5nIHRoZSBzdXJyb3VuZGluZyBsaW5lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XiNpZmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTYyPXN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMge1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTY4LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6Njk6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzAtc3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz03Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX29wcztcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTczLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzQ6I2lmZGVmIENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzUtc3RhdGljIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqZGlyZWN0X29wc19pcF9sb29rdXAoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpcClcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0yMTA9dm9pZCBicGZfaW1hZ2Vfa3N5bV9kZWwoc3RydWN0IGJwZl9rc3ltICprc3ltKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIxNi1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjIxNzojaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMTg6I2lmZGVmIENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjE5LS8qXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NjczPXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzA2LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzA3OiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcwOC1hZ2Fpbjpcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NTktXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3NjA6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzYxLVx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5ODUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkludmVzdGlnYXRpbmcgdGhlIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgIEZ1bmN0aW9uKioKClJpZ2h0LCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgdGhlIGRlZmluaXRpb24gb2YgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgc2NvcGUsIHBhcmFtZXRlcnMsIGFuZCByZXR1cm4gdmFsdWUgaXMgZXNzZW50aWFsIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGFzc2VzcyBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQmIzM5O3MgZGVjbGFyZWQgYW5kIGRlZmluZWQgc28gSSBjYW4gZmlndXJlIG91dCB3aGF0IGl0JiMzOTtzIGRvaW5nLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIGZpbmQgdGhhdCBkZWZpbml0aW9uIGFuZCBzdGFydCBidWlsZGluZyBhIG1lbnRhbCBtb2RlbCBvZiBpdHMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi90cmFtcG9saW5lLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTAwOlx0c3RhdGljIHZvaWQgY2xlYXJfdHJhY2luZ19tdWx0aV9kYXRhKHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9kYXRhICpkYXRhKVxuMTUwMTpcdHtcbjE1MDI6XHRcdHJlbW92ZV90cmFjaW5nX211bHRpX2RhdGEoZGF0YSk7XG4xNTAzOlx0XG4xNTA0Olx0XHRmcmVlX2Z0cmFjZV9oYXNoKGRhdGEtXHUwMDNlcmVnKTtcbjE1MDU6XHRcdGZyZWVfZnRyYWNlX2hhc2goZGF0YS1cdTAwM2V1bnJlZyk7XG4xNTA2Olx0XHRmcmVlX2Z0cmFjZV9oYXNoKGRhdGEtXHUwMDNlbW9kaWZ5KTtcbjE1MDc6XHR9XG4xNTA4Olx0XG4xNTA5Olx0c3RhdGljIGludCBpbml0X3RyYWNpbmdfbXVsdGlfZGF0YShzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfZGF0YSAqZGF0YSlcbjE1MTA6XHR7XG4xNTExOlx0XHRkYXRhLVx1MDAzZXJlZyAgICA9IGFsbG9jX2Z0cmFjZV9oYXNoKEZUUkFDRV9IQVNIX0RFRkFVTFRfQklUUyk7XG4xNTEyOlx0XHRkYXRhLVx1MDAzZXVucmVnICA9IGFsbG9jX2Z0cmFjZV9oYXNoKEZUUkFDRV9IQVNIX0RFRkFVTFRfQklUUyk7XG4xNTEzOlx0XHRkYXRhLVx1MDAzZW1vZGlmeSA9IGFsbG9jX2Z0cmFjZV9oYXNoKEZUUkFDRV9IQVNIX0RFRkFVTFRfQklUUyk7XG4xNTE0Olx0XG4xNTE1Olx0XHRpZiAoIWRhdGEtXHUwMDNlcmVnIHx8ICFkYXRhLVx1MDAzZXVucmVnIHx8ICFkYXRhLVx1MDAzZW1vZGlmeSkge1xuMTUxNjpcdFx0XHRjbGVhcl90cmFjaW5nX211bHRpX2RhdGEoZGF0YSk7XG4xNTE3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTUxODpcdFx0fVxuMTUxOTpcdFx0cmV0dXJuIDA7XG4xNTIwOlx0fVxuMTUyMTpcdFxuMTUyMjpcdHN0YXRpYyB2b2lkIGZ0cmFjZV9oYXNoX2FkZChzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2gsIHN0cnVjdCBmdHJhY2VfZnVuY19lbnRyeSAqZW50cnksXG4xNTIzOlx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgZGlyZWN0KVxuMTUyNDpcdHtcbjE1MjU6XHRcdGVudHJ5LVx1MDAzZWlwID0gaXA7XG4xNTI2Olx0XHRlbnRyeS1cdTAwM2VkaXJlY3QgPSBkaXJlY3Q7XG4xNTI3Olx0XHRhZGRfZnRyYWNlX2hhc2hfZW50cnkoaGFzaCwgZW50cnkpO1xuMTUyODpcdH1cbjE1Mjk6XHRcbjE1MzA6XHRzdGF0aWMgaW50IHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcHRyKVxuMTUzMTpcdHtcbjE1MzI6XHRcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSBpbS1cdTAwM2VpbWFnZTtcbjE1MzM6XHRcdHVuc2lnbmVkIGxvbmcgaXAgPSBmdHJhY2VfbG9jYXRpb24odHItXHUwMDNlaXApO1xuMTUzNDpcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2RhdGEgKmRhdGEgPSBwdHI7XG4xNTM1Olx0XG4xNTM2Olx0XHRpZiAoYnBmX3RyYW1wb2xpbmVfdXNlX2ptcCh0ci1cdTAwM2VmbGFncykpXG4xNTM3Olx0XHRcdGFkZHIgPSBmdHJhY2Vfam1wX3NldChhZGRyKTtcbjE1Mzg6XHRcbjE1Mzk6XHRcdHRyLVx1MDAzZWZ1bmMuZnRyYWNlX21hbmFnZWQgPSB0cnVlO1xuMTU0MDpcdFx0ZnRyYWNlX2hhc2hfYWRkKGRhdGEtXHUwMDNlcmVnLCBkYXRhLVx1MDAzZWVudHJ5LCBpcCwgYWRkcik7XG4xNTQxOlx0XHR0ci1cdTAwM2VjdXJfaW1hZ2UgPSBpbTtcbjE1NDI6XHRcdHJldHVybiAwO1xuMTU0MzpcdH1cbjE1NDQ6XHRcbjE1NDU6XHRzdGF0aWMgaW50IHVucmVnaXN0ZXJfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCB2b2lkICpwdHIpXG4xNTQ2Olx0e1xuMTU0NzpcdFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHRyLVx1MDAzZWN1cl9pbWFnZS1cdTAwM2VpbWFnZTtcbjE1NDg6XHRcdHVuc2lnbmVkIGxvbmcgaXAgPSBmdHJhY2VfbG9jYXRpb24odHItXHUwMDNlaXApO1xuMTU0OTpcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2RhdGEgKmRhdGEgPSBwdHI7XG4xNTUwOlx0XG4xNTUxOlx0XHRpZiAoYnBmX3RyYW1wb2xpbmVfdXNlX2ptcCh0ci1cdTAwM2VmbGFncykpXG4xNTUyOlx0XHRcdGFkZHIgPSBmdHJhY2Vfam1wX3NldChhZGRyKTtcbjE1NTM6XHRcbjE1NTQ6XHRcdGZ0cmFjZV9oYXNoX2FkZChkYXRhLVx1MDAzZXVucmVnLCBkYXRhLVx1MDAzZWVudHJ5LCBpcCwgYWRkcik7XG4xNTU1Olx0XHR0ci1cdTAwM2VjdXJfaW1hZ2UgPSBOVUxMO1xuMTU1NjpcdFx0cmV0dXJuIDA7XG4xNTU3Olx0fVxuMTU1ODpcdFxuMTU1OTpcdHN0YXRpYyBpbnQgbW9kaWZ5X2ZlbnRyeV9tdWx0aShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgb3JpZ19mbGFncywgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4xNTYwOlx0XHRcdFx0ICAgICAgIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsIHZvaWQgKnB0cilcbjE1NjE6XHR7XG4xNTYyOlx0XHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgaW0tXHUwMDNlaW1hZ2U7XG4xNTYzOlx0XHR1bnNpZ25lZCBsb25nIGlwID0gZnRyYWNlX2xvY2F0aW9uKHRyLVx1MDAzZWlwKTtcbjE1NjQ6XHRcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9kYXRhICpkYXRhID0gcHRyO1xuMTU2NTpcdFxuMTU2NjpcdFx0aWYgKGJwZl90cmFtcG9saW5lX3VzZV9qbXAodHItXHUwMDNlZmxhZ3MpKVxuMTU2NzpcdFx0XHRhZGRyID0gZnRyYWNlX2ptcF9zZXQoYWRkcik7XG4xNTY4Olx0XG4xNTY5Olx0XHRmdHJhY2VfaGFzaF9hZGQoZGF0YS1cdTAwM2Vtb2RpZnksIGRhdGEtXHUwMDNlZW50cnksIGlwLCBhZGRyKTtcbjE1NzA6XHRcdHRyLVx1MDAzZWN1cl9pbWFnZSA9IGltO1xuMTU3MTpcdFx0cmV0dXJuIDA7XG4xNTcyOlx0fVxuMTU3MzpcdFxuMTU3NDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHRyYW1wb2xpbmVfbXVsdGlfb3BzID0ge1xuMTU3NTpcdFx0LnJlZ2lzdGVyX2ZlbnRyeSAgID0gcmVnaXN0ZXJfZmVudHJ5X211bHRpLFxuMTU3NjpcdFx0LnVucmVnaXN0ZXJfZmVudHJ5ID0gdW5yZWdpc3Rlcl9mZW50cnlfbXVsdGksXG4xNTc3Olx0XHQubW9kaWZ5X2ZlbnRyeSAgICAgPSBtb2RpZnlfZmVudHJ5X211bHRpLFxuMTU3ODpcdH07XG4xNTc5Olx0XG4xNTgwOlx0c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcbjE1ODE6XHR7XG4xNTgyOlx0XHR0ci1cdTAwM2VtdWx0aV9hdHRhY2gub2xkX2ltYWdlID0gdHItXHUwMDNlY3VyX2ltYWdlO1xuMTU4MzpcdFx0dHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9mbGFncyA9IHRyLVx1MDAzZWZsYWdzO1xuMTU4NDpcdH1cbjE1ODU6XHRcbjE1ODY6XHRzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxuMTU4NzpcdHtcbjE1ODg6XHRcdGlmICh0ci1cdTAwM2VtdWx0aV9hdHRhY2gub2xkX2ltYWdlKVxuMTU4OTpcdFx0XHRicGZfdHJhbXBfaW1hZ2VfcHV0KHRyLVx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UpO1xuMTU5MDpcdFxuMTU5MTpcdFx0dHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSA9IE5VTEw7XG4xNTkyOlx0XHR0ci1cdTAwM2VtdWx0aV9hdHRhY2gub2xkX2ZsYWdzID0gMDtcbjE1OTM6XHR9XG4xNTk0Olx0XG4xNTk1Olx0c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG4xNTk2Olx0e1xuMTU5NzpcdFx0aWYgKHRyLVx1MDAzZWN1cl9pbWFnZSlcbjE1OTg6XHRcdFx0YnBmX3RyYW1wX2ltYWdlX3B1dCh0ci1cdTAwM2VjdXJfaW1hZ2UpO1xuMTU5OTpcdFx0dHItXHUwMDNlY3VyX2ltYWdlID0gdHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MTUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25kaXRpb25hbCBDb21waWxhdGlvbiBvZiBgdHJhbXBvbGluZS5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGF0IHRoZSByZWxldmFudCBzZWN0aW9uIGlzbiYjMzk7dCBndWFyZGVkIGJ5IGFueSBgI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgYmxvY2suIEdvb2QgdG8ga25vdy4gQnV0IGlzIGB0cmFtcG9saW5lLmNgIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkgYXQgYWxsPyBMZXQmIzM5O3MgYmFjayB1cCBhbmQgY2hlY2sgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYC4gQWgsIHRoZXJlIGl0IGlzOiBgb2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSB0cmFtcG9saW5lLm9gLiBTbywgaXQgbG9va3MgbGlrZSBgQ09ORklHX0JQRl9KSVRgIGlzIGRlZmluaXRlbHkgYSByZXF1aXJlbWVudCBmb3IgdGhpcy4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBuYW1lLgoKTm93LCB3aGF0IGVsc2U/IFRoaW5raW5nIGFib3V0IHdoYXQgZnVuY3Rpb25hbGl0aWVzIHJlbHkgb24gdGhpcyBmaWxlLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBwcm9iYWJseSBuZWVkZWQgZm9yIHRoZSBCUEYgc3lzdGVtIGNhbGxzLiBSaWdodCwgdGhvc2UgYXJlIGZ1bmRhbWVudGFsLiBBbmQgYmFzZWQgb24gd2hhdCBJIHNlZSBsYXRlciwgSSYjMzk7ZCBiZXQgdGhlIGZhcm0gdGhhdCBgQ09ORklHX0JQRl9FVkVOVFNgIGlzIGFsc28gbmVlZGVkLCBnaXZlbiB0aGF0IGBicGZfdHJhY2UuY2AgY2FsbHMgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgd2hpY2ggaXMgdXNlZCBieSB0aGlzIGNvZGUuCgpBbmQgZ2l2ZW4gdGhpcyBpcyB0cmFtcG9saW5lIGNvZGUsIGBDT05GSUdfRlRSQUNFYCBhbmQgYENPTkZJR19EWU5BTUlDX0ZUUkFDRWAgYXJlIGxpa2VseSBjcnVjaWFsLCB0b28sIEkgdGhpbmsuIEZ0cmFjZSBpbiBnZW5lcmFsIGlzIHByb2JhYmx5IGJlaW5nIGxldmVyYWdlZCBmb3IgdGhpcy4gT2theSwgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB3aGF0IGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgaXRzZWxmIGluY2x1ZGVzIGFuZCBkZXBlbmRzIG9uLCBqdXN0IHRvIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gR29pbmcgdG8gcnVuIHRocm91Z2ggdGhlIGNvZGUgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz02Mj1zdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02OC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjY5OiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcwLXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MjEwPXZvaWQgYnBmX2ltYWdlX2tzeW1fZGVsKHN0cnVjdCBicGZfa3N5bSAqa3N5bSlcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMTYtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMTc6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjE4LSNpZmRlZiBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0zNjc9c3RhdGljIGludCBkaXJlY3Rfb3BzX21vZChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICpwdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzcwLX1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM3MTojZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTICovXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNzItXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NjczPXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzA2LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzA3OiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcwOC1hZ2Fpbjpcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NTktXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3NjA6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzYxLVx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTQ2Nz1pbnQgX193ZWFrIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNDcyLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTQ3MzojaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMpIFx1MDAyNlx1MDAyNiBcXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTQ3NC0gICAgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpIFx1MDAyNlx1MDAyNiBcXFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3MTI9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NDYtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzQ3OiNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzQ4LVx0ICBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTUxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBCUEYgVHJhbXBvbGluZSBBdHRhY2gvRGV0YWNoIEF2YWlsYWJpbGl0eSoqCgpPa2F5LCBob2xkIG9uIGEgbWludXRlLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhpcyBjb2RlIGhhcyB0aHJvd24gYSBiaXQgb2YgYSBmbGFnLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvZiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCBhbmQgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAuIEl0IHNlZW1zIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBuZXN0ZWQgd2l0aGluIGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgYW5kIEkgbmVlZCB0byBjb25maXJtIHRoZSBjb25kaXRpb25zLiBTcGVjaWZpY2FsbHksIEkgc2VlIGAjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlICphY3R1YWxseSogcmVxdWlyZWQgZm9yIHRoZXNlIGZ1bmN0aW9ucyB0byBiZSBkZWZpbmVkLiBTbywgbGV0JiMzOTtzIHNraXAgYWhlYWQgdG8gbGluZSAxNDczLCBhbmQgY29uZmlybSB0aGlzIHRvIGJlIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi90cmFtcG9saW5lLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDYwOlx0XG4xNDYxOlx0aW50IF9fd2VhayBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKVxuMTQ2MjpcdHtcbjE0NjM6XHRcdFdBUk5fT05fT05DRShzaXplIFx1MDAzZSBQQUdFX1NJWkUpO1xuMTQ2NDpcdFx0cmV0dXJuIHNldF9tZW1vcnlfcm94KChsb25nKWltYWdlLCAxKTtcbjE0NjU6XHR9XG4xNDY2Olx0XG4xNDY3Olx0aW50IF9fd2VhayBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4xNDY4Olx0XHRcdFx0XHQgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXG4xNDY5Olx0e1xuMTQ3MDpcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbjE0NzE6XHR9XG4xNDcyOlx0XG4xNDczOlx0I2lmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTKSBcdTAwMjZcdTAwMjYgXFxcbjE0NzQ6XHQgICAgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpIFx1MDAyNlx1MDAyNiBcXFxuMTQ3NTpcdCAgICBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcbjE0NzY6XHRcbjE0Nzc6XHRzdGF0aWMgdm9pZCB0cmFtcG9saW5lX2xvY2tfYWxsKHZvaWQpXG4xNDc4Olx0e1xuMTQ3OTpcdFx0aW50IGk7XG4xNDgwOlx0XG4xNDgxOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBUUkFNUE9MSU5FX0xPQ0tTX1RBQkxFX1NJWkU7IGkmIzQzOyYjNDM7KVxuMTQ4MjpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNnRyYW1wb2xpbmVfbG9ja3NbaV0ubXV0ZXgpO1xuMTQ4MzpcdH1cbjE0ODQ6XHRcbjE0ODU6XHRzdGF0aWMgdm9pZCB0cmFtcG9saW5lX3VubG9ja19hbGwodm9pZClcbjE0ODY6XHR7XG4xNDg3Olx0XHRpbnQgaTtcbjE0ODg6XHRcbjE0ODk6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRSQU1QT0xJTkVfTE9DS1NfVEFCTEVfU0laRTsgaSYjNDM7JiM0MzspXG4xNDkwOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZ0cmFtcG9saW5lX2xvY2tzW2ldLm11dGV4KTtcbjE0OTE6XHR9XG4xNDkyOlx0XG4xNDkzOlx0c3RhdGljIHZvaWQgcmVtb3ZlX3RyYWNpbmdfbXVsdGlfZGF0YShzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfZGF0YSAqZGF0YSlcbjE0OTQ6XHR7XG4xNDk1Olx0XHRmdHJhY2VfaGFzaF9yZW1vdmUoZGF0YS1cdTAwM2VyZWcpO1xuMTQ5NjpcdFx0ZnRyYWNlX2hhc2hfcmVtb3ZlKGRhdGEtXHUwMDNldW5yZWcpO1xuMTQ5NzpcdFx0ZnRyYWNlX2hhc2hfcmVtb3ZlKGRhdGEtXHUwMDNlbW9kaWZ5KTtcbjE0OTg6XHR9XG4xNDk5Olx0XG4xNTAwOlx0c3RhdGljIHZvaWQgY2xlYXJfdHJhY2luZ19tdWx0aV9kYXRhKHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9kYXRhICpkYXRhKVxuMTUwMTpcdHtcbjE1MDI6XHRcdHJlbW92ZV90cmFjaW5nX211bHRpX2RhdGEoZGF0YSk7XG4xNTAzOlx0XG4xNTA0Olx0XHRmcmVlX2Z0cmFjZV9oYXNoKGRhdGEtXHUwMDNlcmVnKTtcbjE1MDU6XHRcdGZyZWVfZnRyYWNlX2hhc2goZGF0YS1cdTAwM2V1bnJlZyk7XG4xNTA2Olx0XHRmcmVlX2Z0cmFjZV9oYXNoKGRhdGEtXHUwMDNlbW9kaWZ5KTtcbjE1MDc6XHR9XG4xNTA4Olx0XG4xNTA5Olx0c3RhdGljIGludCBpbml0X3RyYWNpbmdfbXVsdGlfZGF0YShzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfZGF0YSAqZGF0YSlcbjE1MTA6XHR7XG4xNTExOlx0XHRkYXRhLVx1MDAzZXJlZyAgICA9IGFsbG9jX2Z0cmFjZV9oYXNoKEZUUkFDRV9IQVNIX0RFRkFVTFRfQklUUyk7XG4xNTEyOlx0XHRkYXRhLVx1MDAzZXVucmVnICA9IGFsbG9jX2Z0cmFjZV9oYXNoKEZUUkFDRV9IQVNIX0RFRkFVTFRfQklUUyk7XG4xNTEzOlx0XHRkYXRhLVx1MDAzZW1vZGlmeSA9IGFsbG9jX2Z0cmFjZV9oYXNoKEZUUkFDRV9IQVNIX0RFRkFVTFRfQklUUyk7XG4xNTE0Olx0XG4xNTE1Olx0XHRpZiAoIWRhdGEtXHUwMDNlcmVnIHx8ICFkYXRhLVx1MDAzZXVucmVnIHx8ICFkYXRhLVx1MDAzZW1vZGlmeSkge1xuMTUxNjpcdFx0XHRjbGVhcl90cmFjaW5nX211bHRpX2RhdGEoZGF0YSk7XG4xNTE3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTUxODpcdFx0fVxuMTUxOTpcdFx0cmV0dXJuIDA7XG4xNTIwOlx0fVxuMTUyMTpcdFxuMTUyMjpcdHN0YXRpYyB2b2lkIGZ0cmFjZV9oYXNoX2FkZChzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2gsIHN0cnVjdCBmdHJhY2VfZnVuY19lbnRyeSAqZW50cnksXG4xNTIzOlx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgZGlyZWN0KVxuMTUyNDpcdHtcbjE1MjU6XHRcdGVudHJ5LVx1MDAzZWlwID0gaXA7XG4xNTI2Olx0XHRlbnRyeS1cdTAwM2VkaXJlY3QgPSBkaXJlY3Q7XG4xNTI3Olx0XHRhZGRfZnRyYWNlX2hhc2hfZW50cnkoaGFzaCwgZW50cnkpO1xuMTUyODpcdH1cbjE1Mjk6XHRcbjE1MzA6XHRzdGF0aWMgaW50IHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcHRyKVxuMTUzMTpcdHtcbjE1MzI6XHRcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSBpbS1cdTAwM2VpbWFnZTtcbjE1MzM6XHRcdHVuc2lnbmVkIGxvbmcgaXAgPSBmdHJhY2VfbG9jYXRpb24odHItXHUwMDNlaXApO1xuMTUzNDpcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2RhdGEgKmRhdGEgPSBwdHI7XG4xNTM1Olx0XG4xNTM2Olx0XHRpZiAoYnBmX3RyYW1wb2xpbmVfdXNlX2ptcCh0ci1cdTAwM2VmbGFncykpXG4xNTM3Olx0XHRcdGFkZHIgPSBmdHJhY2Vfam1wX3NldChhZGRyKTtcbjE1Mzg6XHRcbjE1Mzk6XHRcdHRyLVx1MDAzZWZ1bmMuZnRyYWNlX21hbmFnZWQgPSB0cnVlO1xuMTU0MDpcdFx0ZnRyYWNlX2hhc2hfYWRkKGRhdGEtXHUwMDNlcmVnLCBkYXRhLVx1MDAzZWVudHJ5LCBpcCwgYWRkcik7XG4xNTQxOlx0XHR0ci1cdTAwM2VjdXJfaW1hZ2UgPSBpbTtcbjE1NDI6XHRcdHJldHVybiAwO1xuMTU0MzpcdH1cbjE1NDQ6XHRcbjE1NDU6XHRzdGF0aWMgaW50IHVucmVnaXN0ZXJfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCB2b2lkICpwdHIpXG4xNTQ2Olx0e1xuMTU0NzpcdFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHRyLVx1MDAzZWN1cl9pbWFnZS1cdTAwM2VpbWFnZTtcbjE1NDg6XHRcdHVuc2lnbmVkIGxvbmcgaXAgPSBmdHJhY2VfbG9jYXRpb24odHItXHUwMDNlaXApO1xuMTU0OTpcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2RhdGEgKmRhdGEgPSBwdHI7XG4xNTUwOlx0XG4xNTUxOlx0XHRpZiAoYnBmX3RyYW1wb2xpbmVfdXNlX2ptcCh0ci1cdTAwM2VmbGFncykpXG4xNTUyOlx0XHRcdGFkZHIgPSBmdHJhY2Vfam1wX3NldChhZGRyKTtcbjE1NTM6XHRcbjE1NTQ6XHRcdGZ0cmFjZV9oYXNoX2FkZChkYXRhLVx1MDAzZXVucmVnLCBkYXRhLVx1MDAzZWVudHJ5LCBpcCwgYWRkcik7XG4xNTU1Olx0XHR0ci1cdTAwM2VjdXJfaW1hZ2UgPSBOVUxMO1xuMTU1NjpcdFx0cmV0dXJuIDA7XG4xNTU3Olx0fVxuMTU1ODpcdFxuMTU1OTpcdHN0YXRpYyBpbnQgbW9kaWZ5X2ZlbnRyeV9tdWx0aShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgb3JpZ19mbGFncywgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDc0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCBhbmQgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgYXJlIG9ubHkgZGVmaW5lZCBpZiB0aGVzZSB0aHJlZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYCNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUykgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUykgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClgLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgpUaGVyZWZvcmUsIGZvciB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSwgSSBuZWVkIHRvIGVuc3VyZSB0aGUgcHJlc2VuY2Ugb2YgYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIGBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgLCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaW4gdGhlIGtlcm5lbCBidWlsZC4gRnVydGhlcm1vcmUsIHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQlBGLXJlbGF0ZWQgY29kZSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGF0IGBDT05GSUdfQlBGX0pJVGAgYW5kIGBDT05GSUdfQlBGX0VWRU5UU2AgYXJlIGVuYWJsZWQgYXMgd2VsbC4gQWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrIHRob3NlLgoKTmV4dCBzdGVwOiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IHRoZSBLY29uZmlnIGVudHJ5IGZvciBgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYCBqdXN0IHRvIGJlIGNlcnRhaW4gSSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgbGluZWQgdXAgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTUwPWNvbmZpZyBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctNTItXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo1Mzpjb25maWcgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTU0LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY0OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgIGNvbmZpZy4gSXQmIzM5O3MgYSBib29sZWFuLCBubyBwcm9tcHQsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBieSB0aGUgYXJjaGl0ZWN0dXJlIGl0c2VsZi4gVGhhdCBtZWFucyBJIGRvbiYjMzk7dCBuZWVkIHRvIHdvcnJ5IGFib3V0IG1hbnVhbGx5IHNldHRpbmcgaXQuIEluIGZhY3QsIGlmIHRoZSBhcmNoaXRlY3R1cmUgKmRvZXNuJiMzOTt0KiBzdXBwb3J0IGl0LCBJIGNhbiYjMzk7dCBldmVuICplbmFibGUqIGl0ISBTbywgZG9lcyBpdCBldmVuIG5lZWQgdG8gYmUgbGlzdGVkPyBQZXJoYXBzIG5vdCwgaWYgaXQmIzM5O3Mgbm90IHVzZXItc2VsZWN0YWJsZS4gTm93IGhvbGQgb24sIGxldCBtZSByZXJlYWQgdGhlIHByb21wdDogJiMzNDtMaXN0IG9mIGtlcm5lbCBjb25maWcgZmxhZ3MgdGhhdCBtdXN0IGJlIGV4cGxpY2l0bHkgZW5hYmxlZCB0byBjb21waWxlIGFuZCB0ZXN0IHRoZSBtb2RpZmllZCBjb2RlLiYjMzQ7IElmIGl0JiMzOTtzIG5vdCB1c2VyLXNlbGVjdGFibGUsIEkgKmNhbiYjMzk7dCogZXhwbGljaXRseSBlbmFibGUgaXQuIFRoZXJlZm9yZSwgdGhpcyBvbmUgaXMgcHJvYmFibHkgbm90IHJlbGV2YW50LiBCdXQgd2FpdCwgd2hhdCBhYm91dCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgPyBUaGF0JiMzOTtzIHRoZSBvbmUgSSBuZWVkIHRvIGxvb2sgYXQgbmV4dC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz00Nz1jb25maWcgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1Ncbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy00OS1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjUwOmNvbmZpZyBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy01MS1cdGJvb2xcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0zMjQ9Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTMyOC1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjMyOTpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMC1cdGRlZl9ib29sIHlcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMS1cdGRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTIHx8IERZTkFNSUNfRlRSQUNFX1dJVEhfQVJHU1xua2VybmVsL3RyYWNlL0tjb25maWc6MzMyOlx0ZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzMtXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9MzQzPWNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0pNUFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTM0NS1cdGRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0Vcbmtlcm5lbC90cmFjZS9LY29uZmlnOjM0NjpcdGRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTM0Ny1cdGRlcGVuZHMgb24gSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0pNUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM4MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBGdHJhY2UgYW5kIEJQRiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gVGhpcyBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIG9wdGlvbiBpcyBhIGJpdCB0cmlja3kuIEl0IGhpbmdlcyBvbiBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTYCBhbmQgYEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBCYXNpY2FsbHksIHdlIG5lZWQgdG8gZW5zdXJlIGVpdGhlciBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTYCBvciBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTYCBhcmUgZW5hYmxlZCwgYWxvbmcgd2l0aCB0aGUgQlBGIHJlbGF0ZWQgY29uZmlnczogYEJQRl9KSVRgLCBgQlBGX1NZU0NBTExgLCBhbmQgYEJQRl9FVkVOVFNgLgoKTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZS4gVGhlIGBGb2N1c1N5bWJvbHNgIGxvb2sgbGlrZSB0aGV5IHNob3VsZCBsZWFkIHVzIHRvIHRoZSByaWdodCBwYXJ0cy4gSSBzZWUgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAgYXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLiBIbW0sIGl0JiMzOTtzIHN0YXRpYywgc28gdGhhdCYjMzk7cyBhIHNsaWdodCB3cmlua2xlLCBidXQgaXQmIzM5O3MgY2FsbGVkIHRocm91Z2ggYHRyYW1wb2xpbmVfbXVsdGlfb3BzLnJlZ2lzdGVyX2ZlbnRyeWAuIFRoZSBjYWxsZXJzIG9mIHRoaXMgYXJlIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgLCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCwgYW5kIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLiBTbywgZm9jdXNpbmcgb24gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLCBhbmQgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAgc2VlbXMgbGlrZSBhIHNvbGlkIHN0cmF0ZWd5LgoKQWx0aG91Z2ggYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAgaXMgc3RhdGljLCBzeXprYWxsZXIgaGFzIGJlZW4ga25vd24gdG8gdGFyZ2V0IHN0YXRpYyBmdW5jdGlvbnMgaWYgZGVidWcgaW5mbyBpcyBwcmVzZW50LCBidXQgSSYjMzk7bSB0aGlua2luZyB0aGF0IGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGFuZCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBhcmUgbXVjaCBiZXR0ZXIgdGFyZ2V0cyBiZWNhdXNlIHRoZXkmIzM5O3JlIGV4cG9ydGVkIG9yIGF0IGxlYXN0IGdsb2JhbC4gUGx1cywgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgaXMgdGhlIGVudHJ5IHBvaW50IGZyb20gdGhlIGBicGZgIHN5c2NhbGwsIHdoaWNoIG1ha2VzIGl0IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gdGhhdCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyBpbmRlZWQgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgdG8gdmVyaWZ5IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFjaW5nX211bHRpX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgxOT1zdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzgzOS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozODQwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODQxLXtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkyOS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozOTMwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTMxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0MDAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVW5kZXJzdGFuZGluZyBNdWx0aS1BdHRhY2ggQlBGIFRyYWNlcG9pbnRzKioKClJpZ2h0LCBzbyB0aGUgY29yZSBvZiBoYW5kbGluZyBgQlBGX0xJTktfQ1JFQVRFYCBmb3IgdGhlc2UgbXVsdGktYXR0YWNoIHRyYWNlcG9pbnQgdHlwZXMsIGBCUEZfVFJBQ0VfRkVOVFJZX01VTFRJYCBhbmQgYEJQRl9UUkFDRV9GRVhJVF9NVUxUSWAsIHRoYXTigJlzIGRlZmluaXRlbHkgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLiBUaGF04oCZcyBteSBmaXJzdCBwb2ludCBvZiByZWZlcmVuY2UuCgpOb3csIHdoZXJlIGRvZXMgdGhhdCBhY3R1YWxseSAqZG8qIGl0cyB3b3JrPyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIExldCYjMzk7cyBsb29rIGF0IGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGRlZXBlciBsb2dpYyBwcm9iYWJseSByZXNpZGVzLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWNoYW5pY3Mgb2YgaG93IHRoZSBtdWx0aXBsZSBhdHRhY2htZW50cyBhcmUgb3JjaGVzdHJhdGVkIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTc0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHRyYW1wb2xpbmVfbXVsdGlfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NzktXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTgwOnN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTgxLXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTg1LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU4NjpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU4Ny17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5NC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1OTU6c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTk2LXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjExLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTYxMjppbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjEzLVx0XHRcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY1OC1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjU5Olx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NjAtXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4Ni1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY4NzpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXHUwMDNldHJhbXBvbGluZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjg4LVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTYtXHRcdGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUsIFx1MDAyNm1ub2RlLVx1MDAzZW5vZGUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY5NzpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY5OC1cdH1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzEyPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzIxLVx0XHRkYXRhLVx1MDAzZWVudHJ5ID0gXHUwMDI2bW5vZGUtXHUwMDNlZW50cnk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzIyOlx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MjMtXHRcdFdBUk5fT05fT05DRShfX2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nKFx1MDAyNm1ub2RlLVx1MDAzZW5vZGUsIG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTczMi1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTczMzpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXHUwMDNldHJhbXBvbGluZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODUzNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBCUEYgVHJhbXBvbGluZSBmb3IgS2VybmVsIEluc3RydW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgQlBGIHRyYW1wb2xpbmUgbWVjaGFuaXNtIGZvciBtb3JlIGdyYW51bGFyIGNvbnRyb2wgd2l0aGluIHRoZSBrZXJuZWwuIEkgdGhpbmsgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgYW5kIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgIGFyZSBnb2luZyB0byBiZSBrZXkgc3ltYm9scyB0byBleHBsb3JlLiBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCBmaXRzIGludG8gdGhlIHBpY3R1cmUuIEl0IHNlZW1zIGxpa2UgdGhlIG11bHRpLWF0dGFjaCBhbmQgZGV0YWNoIGZ1bmN0aW9ucyBhcmUgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGZvciBlbmFibGluZyB0aGlzIGNhcGFiaWxpdHkuCgpJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCB0byBzdXBwb3J0IHRoaXMgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYW5kIGBCUEZfRVZFTlRTYCwgb2YgY291cnNlLiBJJiMzOTtsbCBhbHNvIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGBGVFJBQ0VgIGlzIGVuYWJsZWQgdG8gaG9vayBpbnRvIGZ1bmN0aW9uIHRyYWNpbmcsIGFuZCwgc2luY2UgSSYjMzk7bSB0YXJnZXRpbmcgZGlyZWN0IGNhbGxzLCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGlzIGxpa2VseSBjcml0aWNhbC4KCkZpbmFsbHksIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IHNwZWNpZmljIGNvbmZpZyB0aGF0JiMzOTtzIGRlZGljYXRlZCB0byBCUEYgdHJhbXBvbGluZSBpdHNlbGYuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBkb3VibGUgY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX1RSQU1QJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTU5Nz1pbnQgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcyxcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjAzLXtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2MDQ6XHR1MzIgaW1hZ2Vfb2ZmID0gKl9pbWFnZV9vZmYsIGZsYWdzID0gQlBGX1RSQU1QX0ZfSU5ESVJFQ1Q7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjA1LVx0dm9pZCAqaW1hZ2UgPSAqX2ltYWdlO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02MDctXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjA4Olx0dG5vZGVzW0JQRl9UUkFNUF9GRU5UUlldLm5vZGVzWzBdID0gbm9kZTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2MDk6XHR0bm9kZXNbQlBGX1RSQU1QX0ZFTlRSWV0ubnJfbm9kZXMgPSAxO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYxMC1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02MTEtXHRpZiAobW9kZWwtXHUwMDNlcmV0X3NpemUgXHUwMDNlIDApXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjEyOlx0XHRmbGFncyB8PSBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVDtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02MTMtXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTY4Nj1zdGF0aWMgbG9uZyBicGZfc3RydWN0X29wc19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MjItXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NzIzOlx0dG5vZGVzID0ga3phbGxvY19vYmpzKCp0bm9kZXMsIEJQRl9UUkFNUF9NQVgpO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTcyNC1cdGlmICghdG5vZGVzKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk4PXN0YXRpYyBpbnQgYnBmX3RyYW1wX2Z0cmFjZV9vcHNfZnVuYyhzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCB1bnNpZ25lZCBsb25nIGlwLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExOC1cdFx0ICovXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMTk6XHRcdGlmICgodHItXHUwMDNlZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMjA6XHRcdCAgICAhKHRyLVx1MDAzZWZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9PUklHX1NUQUNLKSkge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTIxOlx0XHRcdGlmIChXQVJOX09OX09OQ0UodHItXHUwMDNlZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX1NIQVJFX0lQTU9ESUZZKSlcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEyMi1cdFx0XHRcdHJldHVybiAtRUJVU1k7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMjMtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMjQ6XHRcdFx0dHItXHUwMDNlZmxhZ3MgfD0gQlBGX1RSQU1QX0ZfU0hBUkVfSVBNT0RJRlk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMjUtXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUyLVx0Y2FzZSBGVFJBQ0VfT1BTX0NNRF9FTkFCTEVfU0hBUkVfSVBNT0RJRllfUEVFUjpcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1MzpcdFx0dHItXHUwMDNlZmxhZ3MgfD0gQlBGX1RSQU1QX0ZfU0hBUkVfSVBNT0RJRlk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTQtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTU6XHRcdGlmICgodHItXHUwMDNlZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTY6XHRcdCAgICAhKHRyLVx1MDAzZWZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9PUklHX1NUQUNLKSlcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1Ny1cdFx0XHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGUodHIsIGZhbHNlIC8qIGxvY2tfZGlyZWN0X211dGV4ICovLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MC1cdGNhc2UgRlRSQUNFX09QU19DTURfRElTQUJMRV9TSEFSRV9JUE1PRElGWV9QRUVSOlxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTYxOlx0XHR0ci1cdTAwM2VmbGFncyBcdTAwMjY9IH5CUEZfVFJBTVBfRl9TSEFSRV9JUE1PRElGWTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2Mi1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MzpcdFx0aWYgKHRyLVx1MDAzZWZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9PUklHX1NUQUNLKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY0LVx0XHRcdHJldCA9IGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgZmFsc2UgLyogbG9ja19kaXJlY3RfbXV0ZXggKi8sXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MzczPXN0YXRpYyBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKmJwZl90cmFtcG9saW5lX2xvb2t1cCh1NjQga2V5LCB1bnNpZ25lZCBsb25nIGlwKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQwMy1cdHJlZmNvdW50X3NldChcdTAwMjZ0ci1cdTAwM2VyZWZjbnQsIDEpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDA0Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQlBGX1RSQU1QX01BWDsgaSYjNDM7JiM0MzspXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00MDUtXHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZ0ci1cdTAwM2Vwcm9nc19obGlzdFtpXSk7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NTA4PWJwZl90cmFtcG9saW5lX2dldF9wcm9ncyhjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBpbnQgKnRvdGFsLCBib29sICppcF9hcmcpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNTE0LVx0KnRvdGFsID0gMDtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjUxNTpcdHRub2RlcyA9IGt6YWxsb2Nfb2JqcygqdG5vZGVzLCBCUEZfVFJBTVBfTUFYKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTUxNi1cdGlmICghdG5vZGVzKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTUxOC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjUxOTpcdGZvciAoa2luZCA9IDA7IGtpbmQgXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGtpbmQmIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy01MjAtXHRcdHRub2Rlc1traW5kXS5ucl9ub2RlcyA9IHRyLVx1MDAzZXByb2dzX2NudFtraW5kXTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz02NzM9c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02OTEtXHQvKiBjbGVhciBhbGwgYml0cyBleGNlcHQgU0hBUkVfSVBNT0RJRlkgYW5kIFRBSUxfQ0FMTF9DVFggKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjY5MjpcdHRyLVx1MDAzZWZsYWdzIFx1MDAyNj0gKEJQRl9UUkFNUF9GX1NIQVJFX0lQTU9ESUZZIHwgQlBGX1RSQU1QX0ZfVEFJTF9DQUxMX0NUWCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02OTMtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo2OTQ6XHRpZiAodG5vZGVzW0JQRl9UUkFNUF9GRVhJVF0ubnJfbm9kZXMgfHxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjY5NTpcdCAgICB0bm9kZXNbQlBGX1RSQU1QX01PRElGWV9SRVRVUk5dLm5yX25vZGVzKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo2OTY6XHRcdC8qIE5PVEU6IEJQRl9UUkFNUF9GX1JFU1RPUkVfUkVHUyBhbmQgQlBGX1RSQU1QX0ZfU0tJUF9GUkFNRVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNjk3LVx0XHQgKiBzaG91bGQgbm90IGJlIHNldCB0b2dldGhlci5cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTY5OC1cdFx0ICovXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo2OTk6XHRcdHRyLVx1MDAzZWZsYWdzIHw9IEJQRl9UUkFNUF9GX0NBTExfT1JJRyB8IEJQRl9UUkFNUF9GX1NLSVBfRlJBTUU7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MDAtXHR9IGVsc2Uge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzAxOlx0XHR0ci1cdTAwM2VmbGFncyB8PSBCUEZfVFJBTVBfRl9SRVNUT1JFX1JFR1M7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MDItXHR9XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzA0LVx0aWYgKGlwX2FyZylcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcwNTpcdFx0dHItXHUwMDNlZmxhZ3MgfD0gQlBGX1RSQU1QX0ZfSVBfQVJHO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzA2LVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcwOC1hZ2Fpbjpcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcwOTpcdGlmICh0ci1cdTAwM2VmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MTA6XHRcdGlmICh0ci1cdTAwM2VmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfU0hBUkVfSVBNT0RJRlkpIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcxMTpcdFx0XHQvKiBUaGUgQlBGX1RSQU1QX0ZfU0tJUF9GUkFNRSBjYW4gYmUgY2xlYXJlZCBpbiB0aGVcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcxMi1cdFx0XHQgKiBmaXJzdCB0cnksIHJlc2V0IGl0IGluIHRoZSBzZWNvbmQgdHJ5Llxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzEzLVx0XHRcdCAqL1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzE0Olx0XHRcdHRyLVx1MDAzZWZsYWdzIHw9IEJQRl9UUkFNUF9GX09SSUdfU1RBQ0sgfCBCUEZfVFJBTVBfRl9TS0lQX0ZSQU1FO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzE1LVx0XHR9IGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfSk1QKSkge1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcxOS1cdFx0XHQgKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcyMDpcdFx0XHR0ci1cdTAwM2VmbGFncyBcdTAwMjY9IH5CUEZfVFJBTVBfRl9TS0lQX0ZSQU1FO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzIxLVx0XHR9XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzYyLVx0XHQvKiAtRUFHQUlOIGZyb20gYnBmX3RyYW1wX2Z0cmFjZV9vcHNfZnVuYy4gTm93XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3NjM6XHRcdCAqIEJQRl9UUkFNUF9GX1NIQVJFX0lQTU9ESUZZIGlzIHNldCwgd2UgY2FuIGdlbmVyYXRlIHRoZVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzY0LVx0XHQgKiB0cmFtcG9saW5lIGFnYWluLCBhbmQgcmV0cnkgcmVnaXN0ZXIuXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzgyPXN0YXRpYyBlbnVtIGJwZl90cmFtcF9wcm9nX3R5cGUgYnBmX2F0dGFjaF90eXBlX3RvX3RyYW1wKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03ODYtXHRjYXNlIEJQRl9UUkFDRV9GRU5UUllfTVVMVEk6XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3ODc6XHRcdHJldHVybiBCUEZfVFJBTVBfRkVOVFJZO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzg4LVx0Y2FzZSBCUEZfTU9ESUZZX1JFVFVSTjpcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjc4OTpcdFx0cmV0dXJuIEJQRl9UUkFNUF9NT0RJRllfUkVUVVJOO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzkwLVx0Y2FzZSBCUEZfVFJBQ0VfRkVYSVQ6XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03OTEtXHRjYXNlIEJQRl9UUkFDRV9GRVhJVF9NVUxUSTpcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjc5MjpcdFx0cmV0dXJuIEJQRl9UUkFNUF9GRVhJVDtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc5My1cdGNhc2UgQlBGX1RSQUNFX0ZTRVNTSU9OOlxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzk0LVx0Y2FzZSBCUEZfVFJBQ0VfRlNFU1NJT05fTVVMVEk6XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3OTU6XHRcdHJldHVybiBCUEZfVFJBTVBfRlNFU1NJT047XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03OTYtXHRjYXNlIEJQRl9MU01fTUFDOlxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTgwMC1cdFx0XHQgKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjgwMTpcdFx0XHRyZXR1cm4gQlBGX1RSQU1QX0ZFWElUO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODAyLVx0XHRlbHNlXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo4MDM6XHRcdFx0cmV0dXJuIEJQRl9UUkFNUF9NT0RJRllfUkVUVVJOO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODA0LVx0ZGVmYXVsdDpcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjgwNTpcdFx0cmV0dXJuIEJQRl9UUkFNUF9SRVBMQUNFO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODA2LVx0fVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTg0NT1zdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX2FkZF9wcm9nKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODUzLVx0a2luZCA9IGJwZl9hdHRhY2hfdHlwZV90b190cmFtcChub2RlLVx1MDAzZWxpbmstXHUwMDNlcHJvZyk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo4NTQ6XHRpZiAoa2luZCA9PSBCUEZfVFJBTVBfRlNFU1NJT04pIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjg1NTpcdFx0cHJvZ19saXN0ID0gXHUwMDI2dHItXHUwMDNlcHJvZ3NfaGxpc3RbQlBGX1RSQU1QX0ZFTlRSWV07XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy04NTYtXHRcdGNudCYjNDM7JiM0Mzs7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODcyLVx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2bm9kZS1cdTAwM2V0cmFtcF9obGlzdCwgcHJvZ19saXN0KTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjg3MzpcdGlmIChraW5kID09IEJQRl9UUkFNUF9GU0VTU0lPTikge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODc0Olx0XHR0ci1cdTAwM2Vwcm9nc19jbnRbQlBGX1RSQU1QX0ZFTlRSWV0mIzQzOyYjNDM7O1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODc1LVx0XHRmZXhpdCA9IGZzZXNzaW9uX2V4aXQobm9kZSk7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODc3LVx0XHRcdHJldHVybiAtRUlOVkFMO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODc4Olx0XHRobGlzdF9hZGRfaGVhZChcdTAwMjZmZXhpdC1cdTAwM2V0cmFtcF9obGlzdCwgXHUwMDI2dHItXHUwMDNlcHJvZ3NfaGxpc3RbQlBGX1RSQU1QX0ZFWElUXSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo4Nzk6XHRcdHRyLVx1MDAzZXByb2dzX2NudFtCUEZfVFJBTVBfRkVYSVRdJiM0MzsmIzQzOztcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTg4MC1cdH0gZWxzZSB7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9ODg2PXN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODkyLVx0a2luZCA9IGJwZl9hdHRhY2hfdHlwZV90b190cmFtcChub2RlLVx1MDAzZWxpbmstXHUwMDNlcHJvZyk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo4OTM6XHRpZiAoa2luZCA9PSBCUEZfVFJBTVBfRlNFU1NJT04pIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTg5NC1cdFx0ZmV4aXQgPSBmc2Vzc2lvbl9leGl0KG5vZGUpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTg5Ny1cdFx0aGxpc3RfZGVsX2luaXQoXHUwMDI2ZmV4aXQtXHUwMDNldHJhbXBfaGxpc3QpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODk4Olx0XHR0ci1cdTAwM2Vwcm9nc19jbnRbQlBGX1RSQU1QX0ZFWElUXS0tO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODk5Olx0XHRraW5kID0gQlBGX1RSQU1QX0ZFTlRSWTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkwMC1cdH1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05MDU9c3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTIxLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTIyOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQlBGX1RSQU1QX01BWDsgaSYjNDM7JiM0MzspXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MjMtXHRcdGNudCAmIzQzOz0gdHItXHUwMDNlcHJvZ3NfY250W2ldO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTI0LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTI1Olx0aWYgKGtpbmQgPT0gQlBGX1RSQU1QX1JFUExBQ0UpIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkyNi1cdFx0LyogQ2Fubm90IGF0dGFjaCBleHRlbnNpb24gaWYgZmVudHJ5L2ZleGl0IGFyZSBpbiB1c2UuICovXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTU4PXN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTY3LVx0a2luZCA9IGJwZl9hdHRhY2hfdHlwZV90b190cmFtcChub2RlLVx1MDAzZWxpbmstXHUwMDNlcHJvZyk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5Njg6XHRpZiAoa2luZCA9PSBCUEZfVFJBTVBfUkVQTEFDRSkge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTY5LVx0XHRXQVJOX09OX09OQ0UoIXRyLVx1MDAzZWV4dGVuc2lvbl9wcm9nKTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xMDU4PXN0YXRpYyBzdHJ1Y3QgYnBmX3NoaW1fdHJhbXBfbGluayAqY2dyb3VwX3NoaW1fZmluZChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwNjMtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDY0Olx0Zm9yIChraW5kID0gMDsga2luZCBcdTAwM2MgQlBGX1RSQU1QX01BWDsga2luZCYjNDM7JiM0MzspIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwNjUtXHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIFx1MDAyNnRyLVx1MDAzZXByb2dzX2hsaXN0W2tpbmRdLCB0cmFtcF9obGlzdCkge1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTExODc9dm9pZCBicGZfdHJhbXBvbGluZV9wdXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTk2LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTE5NzpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGkmIzQzOyYjNDM7KVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTE5OC1cdFx0aWYgKFdBUk5fT05fT05DRSghaGxpc3RfZW1wdHkoXHUwMDI2dHItXHUwMDNlcHJvZ3NfaGxpc3RbaV0pKSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk0MTk9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NTEyLVx0aWYgKHRndF9wcm9nIFx1MDAyNlx1MDAyNiB0Z3RfcHJvZy1cdTAwM2VhdXgtXHUwMDNldGFpbF9jYWxsX3JlYWNoYWJsZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTUxMzpcdFx0dHItXHUwMDNlZmxhZ3MgPSBCUEZfVFJBTVBfRl9UQUlMX0NBTExfQ1RYO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NTE0LVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTc2Mj1pbnQgYnBmX2ZpeHVwX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg2NS1cdFx0ICogICB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4NjY6XHRcdCAqICAgICAgIHJldHVybiAoKCh1NjQgKiljdHgpWy0xXSBcdTAwM2VcdTAwM2UgQlBGX1RSQU1QX0lTX1JFVFVSTl9TSElGVCkgXHUwMDI2IDE7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NjctXHRcdCAqICAgfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg2OS1cdFx0aW5zbl9idWZbMF0gPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAtOCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4NzA6XHRcdGluc25fYnVmWzFdID0gQlBGX0FMVTY0X0lNTShCUEZfUlNILCBCUEZfUkVHXzAsIEJQRl9UUkFNUF9JU19SRVRVUk5fU0hJRlQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODcxLVx0XHRpbnNuX2J1ZlsyXSA9IEJQRl9BTFU2NF9JTU0oQlBGX0FORCwgQlBGX1JFR18wLCAxKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NzktXHRcdCAqICAge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5ODgwOlx0XHQgKiAgICAgICB1NjQgb2ZmID0gKCgodTY0ICopY3R4KVstMV0gXHUwMDNlXHUwMDNlIEJQRl9UUkFNUF9DT09LSUVfSU5ERVhfU0hJRlQpIFx1MDAyNiAweEZGO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODgxLVx0XHQgKiAgICAgICByZXR1cm4gXHUwMDI2KCh1NjQgKiljdHgpWy1vZmZdO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg4NC1cdFx0aW5zbl9idWZbMF0gPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAtOCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4ODU6XHRcdGluc25fYnVmWzFdID0gQlBGX0FMVTY0X0lNTShCUEZfUlNILCBCUEZfUkVHXzAsIEJQRl9UUkFNUF9DT09LSUVfSU5ERVhfU0hJRlQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODg2LVx0XHRpbnNuX2J1ZlsyXSA9IEJQRl9BTFU2NF9JTU0oQlBGX0FORCwgQlBGX1JFR18wLCAweEZGKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3ODUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEJQRiBhbmQgRHluYW1pYyBUcmFjaW5nKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBmb3IgQlBGIGFuZCBkeW5hbWljIHRyYWNpbmcsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRyYW1wb2xpbmUgZnVuY3Rpb25hbGl0eS4gSXQgc2VlbXMgbGlrZSB0aGVyZSBpc24mIzM5O3QgYSBzaW5nbGUsIGRlZGljYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgJiMzNDtCUEYgdHJhbXBvbGluZSYjMzQ7IGl0c2VsZiwgYnV0IHJhdGhlciBpdCYjMzk7cyBhY2hpZXZlZCB0aHJvdWdoIGEgY29tYmluYXRpb24gb2Ygb3RoZXIgb3B0aW9ucy4KCkluaXRpYWxseSwgSSBpZGVudGlmaWVkIHRoZXNlIGtleSBjb25maWdzOiBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGBCUEZfRVZFTlRTYCwgYEZUUkFDRWAsIGFuZCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBIb3dldmVyLCBJIG5lZWQgdG8gZGlnIGRlZXBlci4KCkkgc2VlIHRoYXQgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBpcyBhY3R1YWxseSBhIGRlZmF1bHQgYm9vbGVhbiAoYGRlZl9ib29sIHlgKSBhbmQgZGVwZW5kcyBvbiBlaXRoZXIgYERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU2Agb3IgYERZTkFNSUNfRlRSQUNFX1dJVEhfQVJHU2AsICphbmQqIGBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYC4gU2luY2UgaXQmIzM5O3MgZGVwZW5kZW50LCBpdCYjMzk7cyBub3QgZGlyZWN0bHkgdXNlci1zZWxlY3RhYmxlLCB3aGljaCBtYWtlcyBtZSByZS1ldmFsdWF0ZSB3aGV0aGVyIGl0JiMzOTtzIHVzZWZ1bCB0byBsaXN0LiBXZSBjYW4mIzM5O3QgYWN0dWFsbHkgKmVuYWJsZSogaXQuCgpBbHNvLCBJIGNoZWNrZWQgYEhBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYC4gSXQmIzM5O3MgYSBib29sZWFuIHdpdGhvdXQgYSBwcm9tcHQsIHNvIGl0JiMzOTtzIG5vdCBzb21ldGhpbmcgd2UgY2FuIGV4cGxpY2l0bHkgY29uZmlndXJlLgoKVGhlIHBvaW50IGJlaW5nLCBpZiB0aGUgYWltIGlzIHRvIHVzZSAmIzM0O2RpcmVjdCBjYWxscyYjMzQ7IHRocm91Z2ggZHluYW1pYyBmdHJhY2UsIHRoYXQgaXMgbm90IHVzZXIgc2VsZWN0YWJsZS4KCk5vdywgbGV0JiMzOTtzIHJlZmluZSB0aGlzLiBMZXQgbWUgcmV2aXNpdC4KCk9rYXksIGxldCYjMzk7cyByZXZpZXcgdGhlIGNvbmZpZ3MsIHRha2luZyBpbnRvIGFjY291bnQgd2hhdCBpcyBhY3R1YWxseSB1c2VyLXNlbGVjdGFibGU6CgpgQlBGX1NZU0NBTExgCmBCUEZfSklUYApgQlBGX0VWRU5UU2AKYEZUUkFDRWAKYERZTkFNSUNfRlRSQUNFYAoKVWx0aW1hdGVseSwgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCwgYERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU2AgYXJlIG5vdCB1c2VyIHNlbGVjdGFibGUuIFNvLCB0aGVyZSBpcyBubyB2YWx1ZSBpbiBsaXN0aW5nIHRoZW0gYXMgJiMzNDttdXN0IGJlIGV4cGxpY2l0bHkgZW5hYmxlZCYjMzQ7IGJlY2F1c2UgdGhleSBhcmUgZW5hYmxlZCBhcyBhIGNvbnNlcXVlbmNlIG9mIG90aGVyIGNvbmZpZ3VyYXRpb24gY2hvaWNlcy4gSSBhbSBub3cgbW9yZSBjb252aW5jZWQgdGhhdCB0aGUgdXNlZnVsIGNvbmZpZ3VyYXRpb24gdG8gaW5jbHVkZSBpcyBgRFlOQU1JQ19GVFJBQ0VgLCBhcyB0aGlzIGlzIHVzZXIgc2VsZWN0YWJsZS4KCk5vdywgbGV0IG1lIGNoZWNrIGBEWU5BTUlDX0ZUUkFDRWAgaW4gYGtlcm5lbC90cmFjZS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERZTkFNSUNfRlRSQUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9MjkwPWNvbmZpZyBGVU5DVElPTl9UUkFDRV9BUkdTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMzAwLVxua2VybmVsL3RyYWNlL0tjb25maWc6MzAxOmNvbmZpZyBEWU5BTUlDX0ZUUkFDRVxua2VybmVsL3RyYWNlL0tjb25maWctMzAyLVx0Ym9vbFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTMyMy1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjMyNDpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMjUtXHRkZWZfYm9vbCB5XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMzI4LVxua2VybmVsL3RyYWNlL0tjb25maWc6MzI5OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL3RyYWNlL0tjb25maWctMzMwLVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMy1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjMzNDpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QU1xua2VybmVsL3RyYWNlL0tjb25maWctMzM1LVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzNy1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjMzODpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzktXHRkZWZfYm9vbCB5XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMzQyLVxua2VybmVsL3RyYWNlL0tjb25maWc6MzQzOmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0pNUFxua2VybmVsL3RyYWNlL0tjb25maWctMzQ0LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTA5NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgRFlOQU1JQ19GVFJBQ0VgLiBTZWVtcyBsaWtlIGl0JiMzOTtzIGEgYm9vbGVhbiBvcHRpb24sIG5vIHByb21wdCBuZWNlc3NhcnksIGFuZCwgbmF0dXJhbGx5LCBpdCYjMzk7cyBzZWxlY3RlZCBieSBgRlRSQUNFYC4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYEZUUkFDRWAgY29uZmlndXJhdGlvbi4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2Ugb3B0aW9ucyB0byBlbnN1cmUgdGhlIGtlcm5lbCYjMzk7cyB0cmFjaW5nIGNhcGFiaWxpdGllcyBhcmUgc2V0IHVwIGFzIGludGVuZGVkLCBlc3BlY2lhbGx5IHdpdGhpbiBteSBhcmVhIG9mIGV4cGVydGlzZS4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2Ugc2VsZWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZUUkFDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTE5OD1jb25maWcgVFJBQ0lOR19TVVBQT1JUXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMjAzLVxua2VybmVsL3RyYWNlL0tjb25maWc6MjA0Om1lbnVjb25maWcgRlRSQUNFXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yMDUtXHRib29sIFwmIzM0O1RyYWNlcnNcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz01ODg9Y29uZmlnIEVOQUJMRV9ERUZBVUxUX1RSQUNFUlNcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy01OTYtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo1OTc6Y29uZmlnIEZUUkFDRV9TWVNDQUxMU1xua2VybmVsL3RyYWNlL0tjb25maWctNTk4LVx0Ym9vbCBcJiMzNDtUcmFjZSBzeXNjYWxsc1wmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTg2OD1jb25maWcgQlBGX0tQUk9CRV9PVkVSUklERVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg3Ni1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg3Nzpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfUEFUQ0hBQkxFX0ZVTkNUSU9OX0VOVFJZXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NzgtXHRib29sXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctODgwLVxua2VybmVsL3RyYWNlL0tjb25maWc6ODgxOmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9DQ1xua2VybmVsL3RyYWNlL0tjb25maWctODgyLVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg4Ni1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg4Nzpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfT0JKVE9PTFxua2VybmVsL3RyYWNlL0tjb25maWctODg4LVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg5NC1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg5NTpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfUkVDT1JETUNPVU5UXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04OTYtXHRkZWZfYm9vbCB5XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9MTAyMT1jb25maWcgVFJBQ0VfRVZBTF9NQVBfRklMRVxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNDgtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDQ5OmNvbmZpZyBGVFJBQ0VfUkVDT1JEX1JFQ1VSU0lPTlxua2VybmVsL3RyYWNlL0tjb25maWctMTA1MC1cdGJvb2wgXCYjMzQ7UmVjb3JkIGZ1bmN0aW9ucyB0aGF0IHJlY3Vyc2UgaW4gZnVuY3Rpb24gdHJhY2luZ1wmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNjItXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDYzOmNvbmZpZyBGVFJBQ0VfUkVDT1JEX1JFQ1VSU0lPTl9TSVpFXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDY0LVx0aW50IFwmIzM0O01heCBudW1iZXIgb2YgcmVjdXJzZWQgZnVuY3Rpb25zIHRvIHJlY29yZFwmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNzMtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDc0OmNvbmZpZyBGVFJBQ0VfVkFMSURBVEVfUkNVX0lTX1dBVENISU5HXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDc1LVx0Ym9vbCBcJiMzNDtWYWxpZGF0ZSBSQ1UgaXMgb24gZHVyaW5nIGZ0cmFjZSBleGVjdXRpb25cJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMTAxPWNvbmZpZyBHQ09WX1BST0ZJTEVfRlRSQUNFXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTExMi1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjExMTM6Y29uZmlnIEZUUkFDRV9TRUxGVEVTVFxua2VybmVsL3RyYWNlL0tjb25maWctMTExNC1cdGJvb2xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMTUtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMTE2OmNvbmZpZyBGVFJBQ0VfU1RBUlRVUF9URVNUXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTE3LVx0Ym9vbCBcJiMzNDtQZXJmb3JtIGEgc3RhcnR1cCB0ZXN0IG9uIGZ0cmFjZVwmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTExMzY9Y29uZmlnIEVWRU5UX1RSQUNFX1RFU1RfU1lTQ0FMTFNcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTQ3LVxua2VybmVsL3RyYWNlL0tjb25maWc6MTE0ODpjb25maWcgRlRSQUNFX1NPUlRfU1RBUlRVUF9URVNUXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTQ5LSAgICAgICBib29sIFwmIzM0O1ZlcmlmeSBjb21waWxlIHRpbWUgc29ydGluZyBvZiBmdHJhY2UgZnVuY3Rpb25zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTA5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIFRyYWNpbmc6IEEgUXVpY2sgSnVtcHN0YXJ0KioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGtlcm5lbCB0cmFjaW5nLCBzcGVjaWZpY2FsbHksIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgaW1tZWRpYXRlbHkganVtcCB0byBgRlRSQUNFYC4gSXQmIzM5O3MgYmFzaWNhbGx5IHRoZSBzdGFuZGFyZCwgdGhlIGZvdW5kYXRpb24sIHdoYXQgSSAqdXN1YWxseSogcmVhY2ggZm9yIHdoZW4gSSBuZWVkIHRvIGluc3RydW1lbnQgdGhpbmdzLiBJIG1lYW4sIGl0JiMzOTtzIGp1c3Qgc28gZWFzeSB0byBlbmFibGUgdGhyb3VnaCBgbWVudWNvbmZpZ2AsIHJpZ2h0PyBCdXQgdGhlbiB0aGUgcXVlc3Rpb24gaGl0cyBtZSwgbWF5YmUgc3VidGx5Li4uIHdoYXQgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBGVU5DVElPTl9UUkFDRVJgPwoKSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSB0aGluZ3MgcmVsYXRlIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gZnVsbHkgd2llbGQgdGhlbS4gSSBjYW4mIzM5O3QganVzdCBlbmFibGUgYEZUUkFDRWAgYW5kIGFzc3VtZSBldmVyeXRoaW5nIGlzIGdvaW5nIHRvIGJlIGZpbmUuIEkgbmVlZCB0byBiZSBtb3JlIGRlbGliZXJhdGUgYWJvdXQgd2hhdCBmZWF0dXJlcyBJJiMzOTttIHB1bGxpbmcgaW4uIFRoZXJlIGNvdWxkIGJlIG90aGVyIHJlbGF0ZWQgdHJhY2VycyB0byBjb25zaWRlci4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRvIGEgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGVU5DVElPTl9UUkFDRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz0yMjY9Y29uZmlnIEJPT1RUSU1FX1RSQUNJTkdcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yMzQtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoyMzU6Y29uZmlnIEZVTkNUSU9OX1RSQUNFUlxua2VybmVsL3RyYWNlL0tjb25maWctMjM2LVx0Ym9vbCBcJiMzNDtLZXJuZWwgRnVuY3Rpb24gVHJhY2VyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NDM5CgkJCQkJCQlvdXRwdXQ6IDE0NgoJCQkJCQkJdGhvdWdodHM6IDUwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIEJQRiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHVzZXIgY2FuIHNlbGVjdCBgRlVOQ1RJT05fVFJBQ0VSYCwgc28gaXQmIzM5O3MgZXNzZW50aWFsIHdlIGluY2x1ZGUgYm90aCBgRlRSQUNFYCBhbmQgYEZVTkNUSU9OX1RSQUNFUmAgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFdlIHNob3VsZCBhbHNvIGluY2x1ZGUgdGhlIHVzdWFsIEJQRiBzdXNwZWN0czogYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYEJQRl9FVkVOVFNgLgoKVGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyDigJMgYFdvcnRoRnV6emluZzogdHJ1ZWAuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IGl0JiMzOTtzIG1lc3Npbmcgd2l0aCB0aGUgQlBGIHRyYW1wb2xpbmUgbG9naWMgc3BlY2lmaWNhbGx5IHRvIGZpeCB0aGUgYGZ0cmFjZV9tYW5hZ2VkYCBzZXR0aW5nIGZvciBtdWx0aS1hdHRhY2ggYGZlbnRyeWAgcHJvZ3JhbXMuIFRoaXMgaXMgYSBjb3JlIEJQRiBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIGZ0cmFjZSB0cmFtcG9saW5lcyBtYWtlcyBpdCBhIGhpZ2gtcHJpb3JpdHkgdGFyZ2V0LgoKSW5pdGlhbGx5LCBJIGhhZCBhIGJyb2FkZXIgc2V0IG9mIGBGb2N1c1N5bWJvbHNgOiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAsIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLCBhbmQgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAuIEhvd2V2ZXIsIHVwb24gY2xvc2VyIGluc3BlY3Rpb24sIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgLCB3aGlsZSBzdGF0aWMsIGlzICp0aGUqIG1vZGlmaWVkIGZ1bmN0aW9uLiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBhbmQgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgYXJlIHRoZSBhY3R1YWwgZW50cnkgcG9pbnRzLCBzbyB0aG9zZSBhcmUga2V5LiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCBpcyBub3QgbW9kaWZpZWQuIEkmIzM5O3ZlIHJlZmluZWQgdGhlIGxpc3QgdG8gaW5jbHVkZSBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGFuZCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYC4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVpbmcgZGlyZWN0bHkgbW9kaWZpZWQgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYC4gWWVzLCBpdCBhcHBlYXJzIHNvLCBhbmQgc29tZSBzZWxmdGVzdHMsIHNvIHRoaXMgcmVmaW5lZCBzeW1ib2wgbGlzdCBpcyBhY2N1cmF0ZS4KClRoZSBmaW5hbCBjb25maWd1cmF0aW9uLCBhcyBpdCBzdGFuZHMsIGxvb2tzIHNwb3Qtb24gdG8gbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7RlRSQUNFJiMzNDssCiAgICAmIzM0O0ZVTkNUSU9OX1RSQUNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlZ2lzdGVyX2ZlbnRyeV9tdWx0aSYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2gmIzM0OywKICAgICYjMzQ7YnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdHJhbXBvbGluZSBsb2dpYyB0byBjb3JyZWN0bHkgc2V0IGBmdHJhY2VfbWFuYWdlZGAgZm9yIG11bHRpLWF0dGFjaCBmZW50cnkgcHJvZ3JhbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgZnRyYWNlIGFuZCBCUEYgdHJhbXBvbGluZXMgaW50ZXJhY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtGVFJBQ0UmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVnaXN0ZXJfZmVudHJ5X211bHRpJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaCYjMzQ7LAogICAgJiMzNDticGZfdHJhY2luZ19tdWx0aV9hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB0cmFtcG9saW5lIGxvZ2ljIHRvIGNvcnJlY3RseSBzZXQgYGZ0cmFjZV9tYW5hZ2VkYCBmb3IgbXVsdGktYXR0YWNoIGZlbnRyeSBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBmdHJhY2UgYW5kIEJQRiB0cmFtcG9saW5lcyBpbnRlcmFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQxOjEwLjYwODIzMTgzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NTI5MTY5MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJGVFJBQ0VcIixcbiAgICBcIkZVTkNUSU9OX1RSQUNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlZ2lzdGVyX2ZlbnRyeV9tdWx0aVwiLFxuICAgIFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoXCIsXG4gICAgXCJicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHRyYW1wb2xpbmUgbG9naWMgdG8gY29ycmVjdGx5IHNldCBgZnRyYWNlX21hbmFnZWRgIGZvciBtdWx0aS1hdHRhY2ggZmVudHJ5IHByb2dyYW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IGZ0cmFjZSBhbmQgQlBGIHRyYW1wb2xpbmVzIGludGVyYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MToxMC42MDgyMzcyMzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDAzNjk2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZkMWQ5YWMxZTg5MjE1MGIxNjBiYmFjNTcwZmJhODhkMTczNDVlYjhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMTEgMTE6NDE6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xcbmluZGV4IDFhNzIxZmM0YmVmNTYyLi42ZWFkZjY0ZjdlYzkwZiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xcbisrKyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXFxuQEAgLTE1MzYsNiArMTUzNiw3IEBAIHN0YXRpYyBpbnQgcmVnaXN0ZXJfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHN0cnVjdCBicGZfdHJhbXBfaW1hXFxuIFxcdGlmIChicGZfdHJhbXBvbGluZV91c2Vfam1wKHRyLVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdGFkZHIgPSBmdHJhY2Vfam1wX3NldChhZGRyKTtcXG4gXFxuK1xcdHRyLVxcdTAwM2VmdW5jLmZ0cmFjZV9tYW5hZ2VkID0gdHJ1ZTtcXG4gXFx0ZnRyYWNlX2hhc2hfYWRkKGRhdGEtXFx1MDAzZXJlZywgZGF0YS1cXHUwMDNlZW50cnksIGlwLCBhZGRyKTtcXG4gXFx0dHItXFx1MDAzZWN1cl9pbWFnZSA9IGltO1xcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jXFxuaW5kZXggZjAyZmZjN2Y0MWQ3ODQuLjBhYTk1MzJhMDVjZmVjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuY1xcbkBAIC00NjAsNiArNDYwLDczIEBAIHN0YXRpYyB2b2lkIHRlc3RfaW50ZXJzZWN0KHZvaWQpXFxuIFxcdHRyYWNpbmdfbXVsdGlfaW50ZXJzZWN0X19kZXN0cm95KHNrZWwpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0ZXN0X2ZlbnRyeV9hZnRlcl9tdWx0aSh2b2lkKVxcbit7XFxuK1xcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZnVuY3NbXSA9IHtcXG4rXFx0XFx0XFxcImJwZl9mZW50cnlfdGVzdDFcXFwiLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgYnBmX2xpbmsgKmZlbnRyeV9saW5rID0gTlVMTCwgKm11bHRpX2xpbmsgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgdHJhY2luZ19tdWx0aV9pbnRlcnNlY3QgKnNrZWwgPSBOVUxMO1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdHJhY2luZ19tdWx0aV9vcHRzLCBvcHRzKTtcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcXG4rXFx0X191MzIgKmlkcyA9IE5VTEw7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRza2VsID0gdHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJ0cmFjaW5nX211bHRpX2ludGVyc2VjdF9fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXBpZCA9IGdldHBpZCgpO1xcbitcXG4rXFx0aWRzID0gZ2V0X2lkcyhmdW5jcywgQVJSQVlfU0laRShmdW5jcyksIE5VTEwpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoaWRzLCBcXFwiZ2V0X2lkc1xcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRvcHRzLmlkcyA9IGlkcztcXG4rXFx0b3B0cy5jbnQgPSBBUlJBWV9TSVpFKGZ1bmNzKTtcXG4rXFx0bXVsdGlfbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aShza2VsLVxcdTAwM2Vwcm9ncy5mZW50cnlfMSwgTlVMTCwgXFx1MDAyNm9wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIobXVsdGlfbGluaywgXFxcImF0dGFjaF9tdWx0aVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRmZW50cnlfbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2goc2tlbC1cXHUwMDNlcHJvZ3MuZmVudHJ5KTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGZlbnRyeV9saW5rLCBcXFwiYXR0YWNoX2ZlbnRyeVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5mZW50cnlfMSksIFxcdTAwMjZ0b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInRlc3RfcnVuXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldGVzdF9yZXN1bHRfZmVudHJ5XzEsIDEsIFxcXCJtdWx0aV9mZW50cnlcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldGVzdF9yZXN1bHRfZmVudHJ5LCAxLCBcXFwiZmVudHJ5XFxcIik7XFxuK1xcbitcXHRlcnIgPSBicGZfbGlua19fZGVzdHJveShmZW50cnlfbGluayk7XFxuK1xcdGZlbnRyeV9saW5rID0gTlVMTDtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiZGVzdHJveV9mZW50cnlcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MuZmVudHJ5XzEpLCBcXHUwMDI2dG9wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X3J1bl9tdWx0aVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXRlc3RfcmVzdWx0X2ZlbnRyeV8xLCAyLCBcXFwibXVsdGlfZmVudHJ5X29ubHlcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldGVzdF9yZXN1bHRfZmVudHJ5LCAxLCBcXFwiZmVudHJ5X2RldGFjaGVkXFxcIik7XFxuK1xcbitcXHRlcnIgPSBicGZfbGlua19fZGVzdHJveShtdWx0aV9saW5rKTtcXG4rXFx0bXVsdGlfbGluayA9IE5VTEw7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImRlc3Ryb3lfbXVsdGlcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MuZmVudHJ5XzEpLCBcXHUwMDI2dG9wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X3J1bl9kZXRhY2hlZFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXRlc3RfcmVzdWx0X2ZlbnRyeV8xLCAyLCBcXFwibXVsdGlfZmVudHJ5X2RldGFjaGVkXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXRlc3RfcmVzdWx0X2ZlbnRyeSwgMSwgXFxcImZlbnRyeV9zdGlsbF9kZXRhY2hlZFxcXCIpO1xcbitcXG4rY2xlYW51cDpcXG4rXFx0YnBmX2xpbmtfX2Rlc3Ryb3koZmVudHJ5X2xpbmspO1xcbitcXHRicGZfbGlua19fZGVzdHJveShtdWx0aV9saW5rKTtcXG4rXFx0ZnJlZShpZHMpO1xcbitcXHR0cmFjaW5nX211bHRpX2ludGVyc2VjdF9fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdGVzdF9zZXNzaW9uKHZvaWQpXFxuIHtcXG4gXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcXG5AQCAtOTU3LDQgKzEwMjQsNiBAQCB2b2lkIHRlc3RfdHJhY2luZ19tdWx0aV90ZXN0KHZvaWQpXFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJhdHRhY2hfYXBpX2ZhaWxzXFxcIikpXFxuIFxcdFxcdHRlc3RfYXR0YWNoX2FwaV9mYWlscygpO1xcbiBcXHRSVU5fVEVTVFModHJhY2luZ19tdWx0aV92ZXJpZmllcik7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJmZW50cnlfYWZ0ZXJfbXVsdGlcXFwiKSlcXG4rXFx0XFx0dGVzdF9mZW50cnlfYWZ0ZXJfbXVsdGkoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfYXR0YWNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfYXR0YWNoLmNcXG5pbmRleCBjZDViZTBiYjZmZmRkNy4uNWViYmUzYjYwMmE0ZjEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfbXVsdGlfaW50ZXJzZWN0X2F0dGFjaC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfbXVsdGlfaW50ZXJzZWN0X2F0dGFjaC5jXFxuQEAgLTExLDYgKzExLDE0IEBAIF9fdTY0IHRlc3RfcmVzdWx0X2ZlbnRyeV8xID0gMDtcXG4gX191NjQgdGVzdF9yZXN1bHRfZmVudHJ5XzIgPSAwO1xcbiBfX3U2NCB0ZXN0X3Jlc3VsdF9mZXhpdF8xID0gMDtcXG4gX191NjQgdGVzdF9yZXN1bHRfZmV4aXRfMiA9IDA7XFxuK19fdTY0IHRlc3RfcmVzdWx0X2ZlbnRyeSA9IDA7XFxuK1xcbitTRUMoXFxcImZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxXFxcIilcXG4raW50IEJQRl9QUk9HKGZlbnRyeSwgaW50IGEpXFxuK3tcXG4rXFx0dGVzdF9yZXN1bHRfZmVudHJ5ICs9IGEgPT0gMTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4gXFxuIFNFQyhcXFwiZmVudHJ5Lm11bHRpXFxcIilcXG4gaW50IEJQRl9QUk9HKGZlbnRyeV8xKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MToxMS4wNTMxNDc4MTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0MDg0MjM3MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJGVFJBQ0VcIixcbiAgICBcIkZVTkNUSU9OX1RSQUNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlZ2lzdGVyX2ZlbnRyeV9tdWx0aVwiLFxuICAgIFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoXCIsXG4gICAgXCJicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHRyYW1wb2xpbmUgbG9naWMgdG8gY29ycmVjdGx5IHNldCBgZnRyYWNlX21hbmFnZWRgIGZvciBtdWx0aS1hdHRhY2ggZmVudHJ5IHByb2dyYW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IGZ0cmFjZSBhbmQgQlBGIHRyYW1wb2xpbmVzIGludGVyYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZkMWQ5YWMxZTg5MjE1MGIxNjBiYmFjNTcwZmJhODhkMTczNDVlYjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxMTo0MTowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbmluZGV4IDFhNzIxZmM0YmVmNTYyLi42ZWFkZjY0ZjdlYzkwZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG4rKysgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuQEAgLTE1MzYsNiArMTUzNiw3IEBAIHN0YXRpYyBpbnQgcmVnaXN0ZXJfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHN0cnVjdCBicGZfdHJhbXBfaW1hXG4gXHRpZiAoYnBmX3RyYW1wb2xpbmVfdXNlX2ptcCh0ci1cdTAwM2VmbGFncykpXG4gXHRcdGFkZHIgPSBmdHJhY2Vfam1wX3NldChhZGRyKTtcbiBcbitcdHRyLVx1MDAzZWZ1bmMuZnRyYWNlX21hbmFnZWQgPSB0cnVlO1xuIFx0ZnRyYWNlX2hhc2hfYWRkKGRhdGEtXHUwMDNlcmVnLCBkYXRhLVx1MDAzZWVudHJ5LCBpcCwgYWRkcik7XG4gXHR0ci1cdTAwM2VjdXJfaW1hZ2UgPSBpbTtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfbXVsdGkuY1xuaW5kZXggZjAyZmZjN2Y0MWQ3ODQuLjBhYTk1MzJhMDVjZmVjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19tdWx0aS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX211bHRpLmNcbkBAIC00NjAsNiArNDYwLDczIEBAIHN0YXRpYyB2b2lkIHRlc3RfaW50ZXJzZWN0KHZvaWQpXG4gXHR0cmFjaW5nX211bHRpX2ludGVyc2VjdF9fZGVzdHJveShza2VsKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGVzdF9mZW50cnlfYWZ0ZXJfbXVsdGkodm9pZClcbit7XG4rXHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZ1bmNzW10gPSB7XG4rXHRcdFwiYnBmX2ZlbnRyeV90ZXN0MVwiLFxuK1x0fTtcbitcdHN0cnVjdCBicGZfbGluayAqZmVudHJ5X2xpbmsgPSBOVUxMLCAqbXVsdGlfbGluayA9IE5VTEw7XG4rXHRzdHJ1Y3QgdHJhY2luZ19tdWx0aV9pbnRlcnNlY3QgKnNrZWwgPSBOVUxMO1xuK1x0TElCQlBGX09QVFMoYnBmX3RyYWNpbmdfbXVsdGlfb3B0cywgb3B0cyk7XG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpO1xuK1x0X191MzIgKmlkcyA9IE5VTEw7XG4rXHRpbnQgZXJyO1xuK1xuK1x0c2tlbCA9IHRyYWNpbmdfbXVsdGlfaW50ZXJzZWN0X19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJ0cmFjaW5nX211bHRpX2ludGVyc2VjdF9fb3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcGlkID0gZ2V0cGlkKCk7XG4rXG4rXHRpZHMgPSBnZXRfaWRzKGZ1bmNzLCBBUlJBWV9TSVpFKGZ1bmNzKSwgTlVMTCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoaWRzLCBcImdldF9pZHNcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdG9wdHMuaWRzID0gaWRzO1xuK1x0b3B0cy5jbnQgPSBBUlJBWV9TSVpFKGZ1bmNzKTtcbitcdG11bHRpX2xpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGkoc2tlbC1cdTAwM2Vwcm9ncy5mZW50cnlfMSwgTlVMTCwgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobXVsdGlfbGluaywgXCJhdHRhY2hfbXVsdGlcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGZlbnRyeV9saW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChza2VsLVx1MDAzZXByb2dzLmZlbnRyeSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoZmVudHJ5X2xpbmssIFwiYXR0YWNoX2ZlbnRyeVwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5mZW50cnlfMSksIFx1MDAyNnRvcHRzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X3J1blwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRlc3RfcmVzdWx0X2ZlbnRyeV8xLCAxLCBcIm11bHRpX2ZlbnRyeVwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0ZXN0X3Jlc3VsdF9mZW50cnksIDEsIFwiZmVudHJ5XCIpO1xuK1xuK1x0ZXJyID0gYnBmX2xpbmtfX2Rlc3Ryb3koZmVudHJ5X2xpbmspO1xuK1x0ZmVudHJ5X2xpbmsgPSBOVUxMO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImRlc3Ryb3lfZmVudHJ5XCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZlbnRyeV8xKSwgXHUwMDI2dG9wdHMpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInRlc3RfcnVuX211bHRpXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNldGVzdF9yZXN1bHRfZmVudHJ5XzEsIDIsIFwibXVsdGlfZmVudHJ5X29ubHlcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNldGVzdF9yZXN1bHRfZmVudHJ5LCAxLCBcImZlbnRyeV9kZXRhY2hlZFwiKTtcbitcbitcdGVyciA9IGJwZl9saW5rX19kZXN0cm95KG11bHRpX2xpbmspO1xuK1x0bXVsdGlfbGluayA9IE5VTEw7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiZGVzdHJveV9tdWx0aVwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5mZW50cnlfMSksIFx1MDAyNnRvcHRzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X3J1bl9kZXRhY2hlZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRlc3RfcmVzdWx0X2ZlbnRyeV8xLCAyLCBcIm11bHRpX2ZlbnRyeV9kZXRhY2hlZFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0ZXN0X3Jlc3VsdF9mZW50cnksIDEsIFwiZmVudHJ5X3N0aWxsX2RldGFjaGVkXCIpO1xuK1xuK2NsZWFudXA6XG4rXHRicGZfbGlua19fZGVzdHJveShmZW50cnlfbGluayk7XG4rXHRicGZfbGlua19fZGVzdHJveShtdWx0aV9saW5rKTtcbitcdGZyZWUoaWRzKTtcbitcdHRyYWNpbmdfbXVsdGlfaW50ZXJzZWN0X19kZXN0cm95KHNrZWwpO1xuK31cbitcbiBzdGF0aWMgdm9pZCB0ZXN0X3Nlc3Npb24odm9pZClcbiB7XG4gXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpO1xuQEAgLTk1Nyw0ICsxMDI0LDYgQEAgdm9pZCB0ZXN0X3RyYWNpbmdfbXVsdGlfdGVzdCh2b2lkKVxuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJhdHRhY2hfYXBpX2ZhaWxzXCIpKVxuIFx0XHR0ZXN0X2F0dGFjaF9hcGlfZmFpbHMoKTtcbiBcdFJVTl9URVNUUyh0cmFjaW5nX211bHRpX3ZlcmlmaWVyKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiZmVudHJ5X2FmdGVyX211bHRpXCIpKVxuK1x0XHR0ZXN0X2ZlbnRyeV9hZnRlcl9tdWx0aSgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfYXR0YWNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19tdWx0aV9pbnRlcnNlY3RfYXR0YWNoLmNcbmluZGV4IGNkNWJlMGJiNmZmZGQ3Li41ZWJiZTNiNjAyYTRmMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX211bHRpX2ludGVyc2VjdF9hdHRhY2guY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfbXVsdGlfaW50ZXJzZWN0X2F0dGFjaC5jXG5AQCAtMTEsNiArMTEsMTQgQEAgX191NjQgdGVzdF9yZXN1bHRfZmVudHJ5XzEgPSAwO1xuIF9fdTY0IHRlc3RfcmVzdWx0X2ZlbnRyeV8yID0gMDtcbiBfX3U2NCB0ZXN0X3Jlc3VsdF9mZXhpdF8xID0gMDtcbiBfX3U2NCB0ZXN0X3Jlc3VsdF9mZXhpdF8yID0gMDtcbitfX3U2NCB0ZXN0X3Jlc3VsdF9mZW50cnkgPSAwO1xuK1xuK1NFQyhcImZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxXCIpXG4raW50IEJQRl9QUk9HKGZlbnRyeSwgaW50IGEpXG4re1xuK1x0dGVzdF9yZXN1bHRfZmVudHJ5ICs9IGEgPT0gMTtcbitcdHJldHVybiAwO1xuK31cbiBcbiBTRUMoXCJmZW50cnkubXVsdGlcIilcbiBpbnQgQlBGX1BST0coZmVudHJ5XzEpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MToxMS4wNTMxNTA5NjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODcwNDI1Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBUcmFtcG9saW5lIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQgdG91Y2hlcyBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgIGFsb25nIHdpdGggc29tZSBzZWxmdGVzdHMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCdzIGFkZGluZyBgdHItXHUwMDNlZnVuYy5mdHJhY2VfbWFuYWdlZCA9IHRydWU7YCB3aXRoaW4gdGhlIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgIGZ1bmN0aW9uLiBJIHJlY29nbml6ZSB0aGlzIGFzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggQlBGIHRyYW1wb2xpbmVzIGluIGNvbmp1bmN0aW9uIHdpdGggZnRyYWNlLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gVG8gZG8gdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAgaXMgYWN0dWFsbHkgdXNlZC4gSXMgaXQgYSBjb3JlIGZ1bmN0aW9uLCBvciBpcyBpdCBtb3JlIG9mIGEgaGVscGVyPyBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb250ZXh0cyBhbmQgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQ/XG5cblRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJJ20gZ29pbmcgdG8gdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciBldmVyeSBpbnN0YW5jZSBvZiBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRoZSBmdW5jdGlvbiBpcyB1c2VkLCB3aGljaCB3aWxsLCBpbiB0dXJuLCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBgZnRyYWNlX21hbmFnZWRgIGZsYWcuIE9uY2UgSSd2ZSBnb3QgdGhhdCBmaWd1cmVkIG91dCwgSSBjYW4gZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoZSBmbGFnIGFmZmVjdHMgdGhlIEJQRiBzdWJzeXN0ZW0gaW4gZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzg5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDE6MTUuOTIzNTc4NDk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTIwNDI5MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVnaXN0ZXJfZmVudHJ5X211bHRpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1MjI9c3RhdGljIHZvaWQgZnRyYWNlX2hhc2hfYWRkKHN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaCwgc3RydWN0IGZ0cmFjZV9mdW5jX2VudHJ5ICplbnRyeSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MjktXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTUzMDpzdGF0aWMgaW50IHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcHRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MzEte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU0NC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTQ1OnN0YXRpYyBpbnQgdW5yZWdpc3Rlcl9mZW50cnlfbXVsdGkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsIHZvaWQgKnB0cilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTQ2LXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1NzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9tdWx0aV9vcHMgPSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU3NTpcXHQucmVnaXN0ZXJfZmVudHJ5ICAgPSByZWdpc3Rlcl9mZW50cnlfbXVsdGksXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU3NjpcXHQudW5yZWdpc3Rlcl9mZW50cnkgPSB1bnJlZ2lzdGVyX2ZlbnRyeV9tdWx0aSxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTc3LVxcdC5tb2RpZnlfZmVudHJ5ICAgICA9IG1vZGlmeV9mZW50cnlfbXVsdGksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQxOjE4LjExNTYzMzA3MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTAwNDQ2MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIGNvZGUgZXhwZXJ0OlxuXG4qKlRyYWNpbmcgdGhlIFVzZSBvZiBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCoqXG5cblJpZ2h0LCBzbyBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCBwb3BzIHVwIGluIGB0cmFtcG9saW5lX211bHRpX29wc2AuIFRoYXQncyBhIGRlY2VudCBzdGFydGluZyBwb2ludC4gVG8gdHJ1bHkgdW5kZXJzdGFuZCBpdHMgc2lnbmlmaWNhbmNlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LCBJIG5lZWQgdG8gc2VlIHRoZSBicm9hZGVyIGNvbnRleHQuIFRoZXJlZm9yZSwgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hlcmUgYHRyYW1wb2xpbmVfbXVsdGlfb3BzYCBpdHNlbGYgaXMgYmVpbmcgKnVzZWQqLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIG9mICp0aGF0KiBmdW5jdGlvbiB3aWxsIGdpdmUgbWUgdGhlIGNydWNpYWwgaGlnaC1sZXZlbCB2aWV3IEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCBjb25uZWN0aW9uLiBUaGlzIGlzIGEgY2xhc3NpYyBkZXBlbmRlbmN5IHRyYWNpbmcgc2NlbmFyaW8g4oCTIGdvdHRhIGZvbGxvdyB0aGUgY2hhaW4gdG8gdW5kZXJzdGFuZCB0aGUgd2hvbGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI4NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQxOjIxLjA2NTY3OTczMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU1ODk1ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyYW1wb2xpbmVfbXVsdGlfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1NTk9c3RhdGljIGludCBtb2RpZnlfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NzMtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU3NDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX211bHRpX29wcyA9IHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTc1LVxcdC5yZWdpc3Rlcl9mZW50cnkgICA9IHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2MTI9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY2Mi1cXHRcXHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhcXHUwMDI2bW5vZGUtXFx1MDAzZW5vZGUsIG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lLCBOVUxMLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2NjM6XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZ0cmFtcG9saW5lX211bHRpX29wcywgZGF0YSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY2NC1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzEyPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MjMtXFx0XFx0V0FSTl9PTl9PTkNFKF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coXFx1MDAyNm1ub2RlLVxcdTAwM2Vub2RlLCBtbm9kZS1cXHUwMDNldHJhbXBvbGluZSxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzI0OlxcdFxcdFxcdFxcdFxcdE5VTEwsIFxcdTAwMjZ0cmFtcG9saW5lX211bHRpX29wcywgZGF0YSkpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MjUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MToyMy4wMjE2MDQxNTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE2MTk4Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgTXVsdGktQXR0YWNoIGluIFRyYW1wb2xpbmVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIEJQRiB0cmFtcG9saW5lIG11bHRpLWF0dGFjaCBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkLiBNeSBmb2N1cyBpcyBuYXJyb3dlZCBkb3duIHRvIHRoZSBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBhbmQgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAgZnVuY3Rpb25zLCBhcyB0aGVzZSBhcmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIG11bHRpLWF0dGFjaCBhbmQgZGV0YWNoIG9wZXJhdGlvbnMsIHJlc3BlY3RpdmVseS4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzLiBHaXZlbiB0aGF0LCBJIGtub3cgdGhpcyBpcyBhIGNvcmUgcGFydCBvZiBob3cgQlBGIHRyYW1wb2xpbmVzIG1hbmFnZSBtdWx0aXBsZSBwcm9ncmFtcyBvbiBhIHNpbmdsZSBob29rIHBvaW50LiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIGFjdHVhbCBjb25maWd1cmF0aW9uIGFuZCByZWxhdGVkIGRldGFpbHMsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBzb3VyY2UgY29kZSBpbiBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdmlldyBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgdGhpcyBtdWx0aS1hdHRhY2ggZmVhdHVyZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgQlBGIHRyYW1wb2xpbmUgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTMwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDE6MjYuMTM3ODA0NjIyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NzE5NzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyYW1wb2xpbmVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGlzYXNtLm8gbXByb2cub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MToyNi4xOTc1MjkwMzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkxMzMyNDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IHRoaW5raW5nIHJpZ2h0IG5vdyBpcyBjZW50ZXJlZCBhcm91bmQgQlBGIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfQlBGX0pJVGAgaXMgZW5hYmxlZCDigJMgdGhhdCdzIGZ1bmRhbWVudGFsIGZvciBCUEYgdG8gYWN0dWFsbHkgKmRvKiBhbnl0aGluZyB1c2VmdWwuIEFuZCBnZW5lcmFsbHksIEkgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIGFzIGl0IHByb3ZpZGVzIHRoZSBjb3JlIHN5c3RlbSBjYWxsIGludGVyZmFjZSBmb3IgQlBGIHByb2dyYW1zLlxuXG5CZXlvbmQgdGhvc2UgYmFzaWNzLCBJJ20gdHJ5aW5nIHRvIHJlY2FsbCBpZiB0aGVyZSBhcmUgYW55ICpzcGVjaWZpYyogY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIG1vcmUgYWR2YW5jZWQgZnVuY3Rpb25hbGl0aWVzLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBkZWRpY2F0ZWQgY29uZmlncyBhc3NvY2lhdGVkIHdpdGggYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgb3IgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAuIEknbSBnb2luZyB0byBzY2FuIHRoZSBjb25maWdzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHRoYXQgc3BlY2lmaWNhbGx5IGVuYWJsZSBvciBkaXNhYmxlIHRoZXNlIGZlYXR1cmVzLiBNeSBndXQgc2F5cyBpdCdzIHByb2JhYmx5IGhhbmRsZWQgYnkgb3RoZXIgY29uZmlncywgYnV0IGl0J3Mgd29ydGggYSBxdWljayBsb29rIHRvIGJlIGFic29sdXRlbHkgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLCBvciB0byBzZWUgaWYgdGhleSBuZWVkIHNvbWUgc3BlY2lhbCBlbmFibGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMyMCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQxOjI5LjM4ODg2MzU2NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNzM2NzYwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0xNTIwPWludCBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jcyk7XFxuaW5jbHVkZS9saW51eC9icGYuaC0xNTIxLVxcbmluY2x1ZGUvbGludXgvYnBmLmg6MTUyMjppbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuaW5jbHVkZS9saW51eC9icGYuaC0xNTIzLVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MTYzNT1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfaGFzX3RyYW1wb2xpbmUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0xNjM4LX1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjE2Mzk6c3RhdGljIGlubGluZSBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuaW5jbHVkZS9saW51eC9icGYuaC0xNjQwLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTU3ND1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX211bHRpX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NzktXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU4MDpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1ODEte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU4NS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTg2OnN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU4Ny17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTk0LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1OTU6c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5Ni17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjExLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MTI6aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MTMtXFx0XFx0XFx0XFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjU4LVxcdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY1OTpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cXHUwMDNldHJhbXBvbGluZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY2MC1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODYtXFx0Zm9yX2VhY2hfbW5vZGUobW5vZGUsIGxpbmspXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY4NzpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShtbm9kZS1cXHUwMDNldHJhbXBvbGluZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4OC1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTYtXFx0XFx0YnBmX3RyYW1wb2xpbmVfcmVtb3ZlX3Byb2cobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUsIFxcdTAwMjZtbm9kZS1cXHUwMDNlbm9kZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY5NzpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfcm9sbGJhY2sobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTgtXFx0fVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTcxMj1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzIxLVxcdFxcdGRhdGEtXFx1MDAzZWVudHJ5ID0gXFx1MDAyNm1ub2RlLVxcdTAwM2VlbnRyeTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzIyOlxcdFxcdGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzIzLVxcdFxcdFdBUk5fT05fT05DRShfX2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nKFxcdTAwMjZtbm9kZS1cXHUwMDNlbm9kZSwgbW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzMyLVxcdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3MzM6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MzQtXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9Mzg0MD1pbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkxMS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkxMjpcXHRlcnIgPSBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2gocHJvZywgaWRzLCBsaW5rKTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkxMy1cXHRrdmZyZWUoaWRzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDE6MzEuMTI2MjM3MjE4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzMxODc3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBCUEYgVHJhY2UgQ29kZWJhc2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBwaW4gZG93biBpdHMgbG9jYXRpb24uIEl0IGxvb2tzIGxpa2UgaXQgbGl2ZXMgaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIEV4Y2VsbGVudC4gTm93IHRoYXQgSSBrbm93IHRoZSBzb3VyY2UgZmlsZSwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aGljaCBjb25maWcgb3B0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSB0aGUgZnVuY3Rpb25hbGl0eSB3aXRoaW4gYGJwZl90cmFjZS5jYC4gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgZm9yIHZlcmlmeWluZyB0aGF0IHRoZSBpbnRlbmRlZCBCUEYgdHJhY2luZyBmZWF0dXJlcyBhcmUgZXZlbiBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgSSdtIHdvcmtpbmcgd2l0aC4gVGltZSB0byBjaGVjayB0aGUgYC5jb25maWdgIGZpbGVzLi4uIExldCdzIHNlZSB3aGF0IHdlIGhhdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NDksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MTozNC4yNTk0MjY3ODhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTQxNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl90cmFjZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL01ha2VmaWxlPTU0PUtDT1ZfSU5TVFJVTUVOVF90cmFjZV9pcnFzb2ZmLm8gOj0gblxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01NS1cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6NTY6Q0ZMQUdTX2JwZl90cmFjZS5vIDo9IC1JJChzcmMpXFxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU3LVxcbi0tXFxua2VybmVsL3RyYWNlL01ha2VmaWxlPTEwOT1vYmotJChDT05GSUdfVVNFUl9FVkVOVFMpICs9IHRyYWNlX2V2ZW50c191c2VyLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6MTEwOm9iai0kKENPTkZJR19CUEZfRVZFTlRTKSArPSBicGZfdHJhY2Uub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS0xMTEtb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVFMpICs9IHRyYWNlX2twcm9iZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQxOjM0LjMyMDU3MjkyNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI2MDY0ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19CUEZfRVZFTlRTYCBpcyBlbmFibGVkLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIGludmVzdGlnYXRpb24uIE5vdywgbGV0J3Mgc2VlIGlmIHRoZSBmdW5jdGlvbiBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBJdCBsb29rcyBsaWtlIGl0J3MgaW52b2x2ZWQgaW4gdGhlIGB0cmFtcG9saW5lX211bHRpX29wc2Agc3RydWN0dXJlLiBUaGlzIGB0cmFtcG9saW5lX211bHRpX29wc2Agc3RydWN0dXJlIGlzIHRoZW4gdXNlZCBieSBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCwgd2hpY2ggaW4gdHVybiwgaXMgY2FsbGVkIGJ5IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLiBIbW0sIHJpZ2h0LiBGcm9tIHdoYXQgSSByZWNhbGwsIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGlzIGNhbGxlZCBmcm9tIGBicGZfdHJhY2luZ19wcm9nX2F0dGFjaGAgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uIGluIHRoYXQgc3BhY2UuIEknbGwgbmVlZCB0byBjaGVjayB0aGF0IGNvbm5lY3Rpb24gbmV4dCB0byBiZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgY29ycmVjdGx5IGxpbmtlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MTozNy42NDY2NDA5MzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDM4ODcxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9Nzg5PWludCBicGZfdXByb2JlX211bHRpX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6NzkwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cik7XFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC03OTEtI2Vsc2VcXG4tLVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9ODQ4PXN0YXRpYyBpbmxpbmUgaW50XFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDo4NDk6YnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC04NTAte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTc2NT1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4MTUtXFx0XFx0ZWxzZSBpZiAoaXNfdHJhY2luZ19tdWx0aShwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkpXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTgxNjpcXHRcXHRcXHRyZXQgPSBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2gocHJvZywgYXR0cik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTgxNy1cXHRcXHRlbHNlXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgxOT1zdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODM5LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozODQwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzg0MS17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkyOS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkzMDppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MzEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MTozOS40NTA1MzY4MDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk3NDE1MTIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIGZlbnRyeS9mZW50cnkubXVsdGkgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEkgY2FuIGNvbmZpcm0gdGhhdCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCAqaXMqIGNhbGxlZCBmcm9tIGBsaW5rX2NyZWF0ZWAgd2l0aGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIHNwZWNpZmljYWxseSB3aGVuIGBpc190cmFjaW5nX211bHRpKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpYCBpcyB0cnVlLiBUaGF0IGNvbmZpcm1zIGl0J3MgYSByZWFjaGFibGUgY29kZSBwYXRoIGFuZCBmdW5jdGlvbmFsLiBObyBzdXJwcmlzZXMgdGhlcmUuXG5cblRoZSBtZWF0IG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIG1vZGlmaWNhdGlvbiB0byBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCBpbiBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgLiBMb29raW5nIGF0IHRoZSBkaWZmLi4uQWgsIEkgc2VlLiBUaGV5J3JlIHNldHRpbmcgYHRyLVx1MDAzZWZ1bmMuZnRyYWNlX21hbmFnZWQgPSB0cnVlO2AuIFRoYXQgbWFrZXMgc2Vuc2UuIEl0IGxvb2tzIGxpa2UgdGhpcyB3YXMgYSBtaXNzZWQgYml0IG9mIGluaXRpYWxpemF0aW9uLiBJdCdzIGxpa2VseSB0aGF0IHRoaXMgd2FzIGNhdXNpbmcgaXNzdWVzIHdpdGggZnRyYWNlIGFuZCB0cmFtcG9saW5lIGludGVyYWN0aW9ucyB3aGVuIGRlYWxpbmcgd2l0aCBhIGNvbWJpbmF0aW9uIG9mIGBmZW50cnlgIGFuZCBgZmVudHJ5Lm11bHRpYCBhdHRhY2htZW50cyB0byB0aGUgc2FtZSBmdW5jdGlvbi4gV2l0aG91dCB0aGlzIGZsYWcgc2V0LCB0aGUgZnRyYWNlL3RyYW1wb2xpbmUgaW50ZXJhY3Rpb24gd2FzIHByb2JhYmx5IG9mZi5cblxuVGhlIGNvbmZpcm1hdGlvbiBvZiB0aGUgYnVnIGZpeCBhcHBlYXJzIHRvIGNvbWUgZnJvbSB0aGUgYHRlc3RfZmVudHJ5X2FmdGVyX211bHRpYCBzZWxmdGVzdCwgd2hpY2ggaXMgZGVmaW5pdGVseSBhIHNvbGlkIGFwcHJvYWNoLiBJdCB0ZXN0cyBhdHRhY2hpbmcgYGZlbnRyeS5tdWx0aWAgKmJlZm9yZSogYGZlbnRyeWAgdG8gdGhlIHNhbWUgZnVuY3Rpb24sIGBicGZfZmVudHJ5X3Rlc3QxYCwgd2hpY2ggc2hvdWxkIGV4cG9zZSBhbnkgaXNzdWVzIHdpdGggdGhlIGZ0cmFjZS90cmFtcG9saW5lIGludGVyYWN0aW9uLlxuXG5Ob3csIGZvciB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzLi4uIEknbSBnb2luZyB0byBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6IGBCUEZfSklUYCwgYEJQRl9TWVNDQUxMYCwgYEJQRl9FVkVOVFNgLCBhbmQgYEZUUkFDRWAuIERlZmluaXRlbHkgdGhvc2UuIEknbSBhbHNvIHdvbmRlcmluZyBhYm91dCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgY29kZSB0byBzZWUgaWYgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAgdXNlcyBhbnkgb2YgdGhvc2UuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBiZWNhdXNlIGl0IGNvdWxkIGJlIGNyaXRpY2FsLiBHb29kLCBzb2xpZCB3b3JrIG92ZXJhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDE6NDUuNDI0Njg5OTM4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTY4NTkwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdpc3Rlcl9mZW50cnlfbXVsdGlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTUyMj1zdGF0aWMgdm9pZCBmdHJhY2VfaGFzaF9hZGQoc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoLCBzdHJ1Y3QgZnRyYWNlX2Z1bmNfZW50cnkgKmVudHJ5LFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUyOS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTMwOnN0YXRpYyBpbnQgcmVnaXN0ZXJfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpwdHIpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUzMS17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTQ0LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1NDU6c3RhdGljIGludCB1bnJlZ2lzdGVyX2ZlbnRyeV9tdWx0aShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgb3JpZ19mbGFncywgdm9pZCAqcHRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NDYte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTU3ND1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX211bHRpX29wcyA9IHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTc1OlxcdC5yZWdpc3Rlcl9mZW50cnkgICA9IHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aSxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTc2OlxcdC51bnJlZ2lzdGVyX2ZlbnRyeSA9IHVucmVnaXN0ZXJfZmVudHJ5X211bHRpLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NzctXFx0Lm1vZGlmeV9mZW50cnkgICAgID0gbW9kaWZ5X2ZlbnRyeV9tdWx0aSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDE6NDUuNDg0MzgwNDE0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3Mjg5MzQ0MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczogKipIdW50aW5nIGZvciBDb25kaXRpb25hbCBDb21waWxhdGlvbioqLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgIGZ1bmN0aW9uIGlzIHR1Y2tlZCBhd2F5IGluc2lkZSBhbnkgYCNpZmRlZmAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIEknbSBnb2luZyB0byBoYXZlIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSBjb2RlIHRvIHNlZSBpZiBpdHMgZGVjbGFyYXRpb24gb3IgZGVmaW5pdGlvbiwgb3IgZXZlbiBhbnkgY2FsbHMgdG8gaXQsIGFyZSBndWFyZGVkIGJ5IGEgbWFjcm8gdGhhdCBjb250cm9scyB3aGV0aGVyIGl0J3MgY29tcGlsZWQgb3Igbm90LiBUaGlzIGlzIGEgY3J1Y2lhbCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJ3Mgc2NvcGUgYW5kIGF2YWlsYWJpbGl0eSwgYW5kIHdoZXRoZXIgSSBuZWVkIHRvIGNvbnNpZGVyIGRpZmZlcmVudCBidWlsZCBjb25maWd1cmF0aW9ucyBvciBwbGF0Zm9ybS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgd2hlbiBJJ20gd29ya2luZyB3aXRoIGl0LiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBncmVwcGluZyB0aGUgY29kZWJhc2UgZm9yIGl0IGFuZCB0aGVuIG1ldGljdWxvdXNseSByZXZpZXdpbmcgdGhlIHN1cnJvdW5kaW5nIGxpbmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjUwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDE6NDguMjEzMzE3MDM4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTQ0NTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeI2lmZGVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTYyPXN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMge1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNjgtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6Njk6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcwLXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz03Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX29wcztcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03My1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3NDojaWZkZWYgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzUtc3RhdGljIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqZGlyZWN0X29wc19pcF9sb29rdXAoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpcClcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTIxMD12b2lkIGJwZl9pbWFnZV9rc3ltX2RlbChzdHJ1Y3QgYnBmX2tzeW0gKmtzeW0pXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMTYtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjE3OiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMTg6I2lmZGVmIENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIxOS0vKlxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NjczPXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MDYtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzA3OiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MDgtYWdhaW46XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NTktXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzYwOiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NjEtXFx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQxOjQ4LjI3NDc3NjA5NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzgxMDMwODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgIEZ1bmN0aW9uKipcblxuUmlnaHQsIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCB0aGUgZGVmaW5pdGlvbiBvZiBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYC4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb24sIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZSwgcGFyYW1ldGVycywgYW5kIHJldHVybiB2YWx1ZSBpcyBlc3NlbnRpYWwgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gYXNzZXNzIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCdzIGRlY2xhcmVkIGFuZCBkZWZpbmVkIHNvIEkgY2FuIGZpZ3VyZSBvdXQgd2hhdCBpdCdzIGRvaW5nLiBMZXQncyBzZWUgaWYgSSBjYW4gZmluZCB0aGF0IGRlZmluaXRpb24gYW5kIHN0YXJ0IGJ1aWxkaW5nIGEgbWVudGFsIG1vZGVsIG9mIGl0cyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk4NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQxOjUxLjA1NTgwOTMxNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MDA6XFx0c3RhdGljIHZvaWQgY2xlYXJfdHJhY2luZ19tdWx0aV9kYXRhKHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9kYXRhICpkYXRhKVxcbjE1MDE6XFx0e1xcbjE1MDI6XFx0XFx0cmVtb3ZlX3RyYWNpbmdfbXVsdGlfZGF0YShkYXRhKTtcXG4xNTAzOlxcdFxcbjE1MDQ6XFx0XFx0ZnJlZV9mdHJhY2VfaGFzaChkYXRhLVxcdTAwM2VyZWcpO1xcbjE1MDU6XFx0XFx0ZnJlZV9mdHJhY2VfaGFzaChkYXRhLVxcdTAwM2V1bnJlZyk7XFxuMTUwNjpcXHRcXHRmcmVlX2Z0cmFjZV9oYXNoKGRhdGEtXFx1MDAzZW1vZGlmeSk7XFxuMTUwNzpcXHR9XFxuMTUwODpcXHRcXG4xNTA5OlxcdHN0YXRpYyBpbnQgaW5pdF90cmFjaW5nX211bHRpX2RhdGEoc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2RhdGEgKmRhdGEpXFxuMTUxMDpcXHR7XFxuMTUxMTpcXHRcXHRkYXRhLVxcdTAwM2VyZWcgICAgPSBhbGxvY19mdHJhY2VfaGFzaChGVFJBQ0VfSEFTSF9ERUZBVUxUX0JJVFMpO1xcbjE1MTI6XFx0XFx0ZGF0YS1cXHUwMDNldW5yZWcgID0gYWxsb2NfZnRyYWNlX2hhc2goRlRSQUNFX0hBU0hfREVGQVVMVF9CSVRTKTtcXG4xNTEzOlxcdFxcdGRhdGEtXFx1MDAzZW1vZGlmeSA9IGFsbG9jX2Z0cmFjZV9oYXNoKEZUUkFDRV9IQVNIX0RFRkFVTFRfQklUUyk7XFxuMTUxNDpcXHRcXG4xNTE1OlxcdFxcdGlmICghZGF0YS1cXHUwMDNlcmVnIHx8ICFkYXRhLVxcdTAwM2V1bnJlZyB8fCAhZGF0YS1cXHUwMDNlbW9kaWZ5KSB7XFxuMTUxNjpcXHRcXHRcXHRjbGVhcl90cmFjaW5nX211bHRpX2RhdGEoZGF0YSk7XFxuMTUxNzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xNTE4OlxcdFxcdH1cXG4xNTE5OlxcdFxcdHJldHVybiAwO1xcbjE1MjA6XFx0fVxcbjE1MjE6XFx0XFxuMTUyMjpcXHRzdGF0aWMgdm9pZCBmdHJhY2VfaGFzaF9hZGQoc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoLCBzdHJ1Y3QgZnRyYWNlX2Z1bmNfZW50cnkgKmVudHJ5LFxcbjE1MjM6XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgZGlyZWN0KVxcbjE1MjQ6XFx0e1xcbjE1MjU6XFx0XFx0ZW50cnktXFx1MDAzZWlwID0gaXA7XFxuMTUyNjpcXHRcXHRlbnRyeS1cXHUwMDNlZGlyZWN0ID0gZGlyZWN0O1xcbjE1Mjc6XFx0XFx0YWRkX2Z0cmFjZV9oYXNoX2VudHJ5KGhhc2gsIGVudHJ5KTtcXG4xNTI4OlxcdH1cXG4xNTI5OlxcdFxcbjE1MzA6XFx0c3RhdGljIGludCByZWdpc3Rlcl9mZW50cnlfbXVsdGkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnB0cilcXG4xNTMxOlxcdHtcXG4xNTMyOlxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSBpbS1cXHUwMDNlaW1hZ2U7XFxuMTUzMzpcXHRcXHR1bnNpZ25lZCBsb25nIGlwID0gZnRyYWNlX2xvY2F0aW9uKHRyLVxcdTAwM2VpcCk7XFxuMTUzNDpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfZGF0YSAqZGF0YSA9IHB0cjtcXG4xNTM1OlxcdFxcbjE1MzY6XFx0XFx0aWYgKGJwZl90cmFtcG9saW5lX3VzZV9qbXAodHItXFx1MDAzZWZsYWdzKSlcXG4xNTM3OlxcdFxcdFxcdGFkZHIgPSBmdHJhY2Vfam1wX3NldChhZGRyKTtcXG4xNTM4OlxcdFxcbjE1Mzk6XFx0XFx0dHItXFx1MDAzZWZ1bmMuZnRyYWNlX21hbmFnZWQgPSB0cnVlO1xcbjE1NDA6XFx0XFx0ZnRyYWNlX2hhc2hfYWRkKGRhdGEtXFx1MDAzZXJlZywgZGF0YS1cXHUwMDNlZW50cnksIGlwLCBhZGRyKTtcXG4xNTQxOlxcdFxcdHRyLVxcdTAwM2VjdXJfaW1hZ2UgPSBpbTtcXG4xNTQyOlxcdFxcdHJldHVybiAwO1xcbjE1NDM6XFx0fVxcbjE1NDQ6XFx0XFxuMTU0NTpcXHRzdGF0aWMgaW50IHVucmVnaXN0ZXJfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCB2b2lkICpwdHIpXFxuMTU0NjpcXHR7XFxuMTU0NzpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgdHItXFx1MDAzZWN1cl9pbWFnZS1cXHUwMDNlaW1hZ2U7XFxuMTU0ODpcXHRcXHR1bnNpZ25lZCBsb25nIGlwID0gZnRyYWNlX2xvY2F0aW9uKHRyLVxcdTAwM2VpcCk7XFxuMTU0OTpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfZGF0YSAqZGF0YSA9IHB0cjtcXG4xNTUwOlxcdFxcbjE1NTE6XFx0XFx0aWYgKGJwZl90cmFtcG9saW5lX3VzZV9qbXAodHItXFx1MDAzZWZsYWdzKSlcXG4xNTUyOlxcdFxcdFxcdGFkZHIgPSBmdHJhY2Vfam1wX3NldChhZGRyKTtcXG4xNTUzOlxcdFxcbjE1NTQ6XFx0XFx0ZnRyYWNlX2hhc2hfYWRkKGRhdGEtXFx1MDAzZXVucmVnLCBkYXRhLVxcdTAwM2VlbnRyeSwgaXAsIGFkZHIpO1xcbjE1NTU6XFx0XFx0dHItXFx1MDAzZWN1cl9pbWFnZSA9IE5VTEw7XFxuMTU1NjpcXHRcXHRyZXR1cm4gMDtcXG4xNTU3OlxcdH1cXG4xNTU4OlxcdFxcbjE1NTk6XFx0c3RhdGljIGludCBtb2RpZnlfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4xNTYwOlxcdFxcdFxcdFxcdCAgICAgICBib29sIGxvY2tfZGlyZWN0X211dGV4LCB2b2lkICpwdHIpXFxuMTU2MTpcXHR7XFxuMTU2MjpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgaW0tXFx1MDAzZWltYWdlO1xcbjE1NjM6XFx0XFx0dW5zaWduZWQgbG9uZyBpcCA9IGZ0cmFjZV9sb2NhdGlvbih0ci1cXHUwMDNlaXApO1xcbjE1NjQ6XFx0XFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2RhdGEgKmRhdGEgPSBwdHI7XFxuMTU2NTpcXHRcXG4xNTY2OlxcdFxcdGlmIChicGZfdHJhbXBvbGluZV91c2Vfam1wKHRyLVxcdTAwM2VmbGFncykpXFxuMTU2NzpcXHRcXHRcXHRhZGRyID0gZnRyYWNlX2ptcF9zZXQoYWRkcik7XFxuMTU2ODpcXHRcXG4xNTY5OlxcdFxcdGZ0cmFjZV9oYXNoX2FkZChkYXRhLVxcdTAwM2Vtb2RpZnksIGRhdGEtXFx1MDAzZWVudHJ5LCBpcCwgYWRkcik7XFxuMTU3MDpcXHRcXHR0ci1cXHUwMDNlY3VyX2ltYWdlID0gaW07XFxuMTU3MTpcXHRcXHRyZXR1cm4gMDtcXG4xNTcyOlxcdH1cXG4xNTczOlxcdFxcbjE1NzQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9tdWx0aV9vcHMgPSB7XFxuMTU3NTpcXHRcXHQucmVnaXN0ZXJfZmVudHJ5ICAgPSByZWdpc3Rlcl9mZW50cnlfbXVsdGksXFxuMTU3NjpcXHRcXHQudW5yZWdpc3Rlcl9mZW50cnkgPSB1bnJlZ2lzdGVyX2ZlbnRyeV9tdWx0aSxcXG4xNTc3OlxcdFxcdC5tb2RpZnlfZmVudHJ5ICAgICA9IG1vZGlmeV9mZW50cnlfbXVsdGksXFxuMTU3ODpcXHR9O1xcbjE1Nzk6XFx0XFxuMTU4MDpcXHRzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbjE1ODE6XFx0e1xcbjE1ODI6XFx0XFx0dHItXFx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UgPSB0ci1cXHUwMDNlY3VyX2ltYWdlO1xcbjE1ODM6XFx0XFx0dHItXFx1MDAzZW11bHRpX2F0dGFjaC5vbGRfZmxhZ3MgPSB0ci1cXHUwMDNlZmxhZ3M7XFxuMTU4NDpcXHR9XFxuMTU4NTpcXHRcXG4xNTg2OlxcdHN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXFxuMTU4NzpcXHR7XFxuMTU4ODpcXHRcXHRpZiAodHItXFx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UpXFxuMTU4OTpcXHRcXHRcXHRicGZfdHJhbXBfaW1hZ2VfcHV0KHRyLVxcdTAwM2VtdWx0aV9hdHRhY2gub2xkX2ltYWdlKTtcXG4xNTkwOlxcdFxcbjE1OTE6XFx0XFx0dHItXFx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UgPSBOVUxMO1xcbjE1OTI6XFx0XFx0dHItXFx1MDAzZW11bHRpX2F0dGFjaC5vbGRfZmxhZ3MgPSAwO1xcbjE1OTM6XFx0fVxcbjE1OTQ6XFx0XFxuMTU5NTpcXHRzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfcm9sbGJhY2soc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG4xNTk2OlxcdHtcXG4xNTk3OlxcdFxcdGlmICh0ci1cXHUwMDNlY3VyX2ltYWdlKVxcbjE1OTg6XFx0XFx0XFx0YnBmX3RyYW1wX2ltYWdlX3B1dCh0ci1cXHUwMDNlY3VyX2ltYWdlKTtcXG4xNTk5OlxcdFxcdHRyLVxcdTAwM2VjdXJfaW1hZ2UgPSB0ci1cXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDE6NTEuMDU1OTY0ODA1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Nzk0Njc0ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25kaXRpb25hbCBDb21waWxhdGlvbiBvZiBgdHJhbXBvbGluZS5jYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBpc24ndCBndWFyZGVkIGJ5IGFueSBgI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgYmxvY2suIEdvb2QgdG8ga25vdy4gQnV0IGlzIGB0cmFtcG9saW5lLmNgIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkgYXQgYWxsPyBMZXQncyBiYWNrIHVwIGFuZCBjaGVjayB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgLiBBaCwgdGhlcmUgaXQgaXM6IGBvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vYC4gU28sIGl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfSklUYCBpcyBkZWZpbml0ZWx5IGEgcmVxdWlyZW1lbnQgZm9yIHRoaXMuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgbmFtZS5cblxuTm93LCB3aGF0IGVsc2U/IFRoaW5raW5nIGFib3V0IHdoYXQgZnVuY3Rpb25hbGl0aWVzIHJlbHkgb24gdGhpcyBmaWxlLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBwcm9iYWJseSBuZWVkZWQgZm9yIHRoZSBCUEYgc3lzdGVtIGNhbGxzLiBSaWdodCwgdGhvc2UgYXJlIGZ1bmRhbWVudGFsLiBBbmQgYmFzZWQgb24gd2hhdCBJIHNlZSBsYXRlciwgSSdkIGJldCB0aGUgZmFybSB0aGF0IGBDT05GSUdfQlBGX0VWRU5UU2AgaXMgYWxzbyBuZWVkZWQsIGdpdmVuIHRoYXQgYGJwZl90cmFjZS5jYCBjYWxscyBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCB3aGljaCBpcyB1c2VkIGJ5IHRoaXMgY29kZS5cblxuQW5kIGdpdmVuIHRoaXMgaXMgdHJhbXBvbGluZSBjb2RlLCBgQ09ORklHX0ZUUkFDRWAgYW5kIGBDT05GSUdfRFlOQU1JQ19GVFJBQ0VgIGFyZSBsaWtlbHkgY3J1Y2lhbCwgdG9vLCBJIHRoaW5rLiBGdHJhY2UgaW4gZ2VuZXJhbCBpcyBwcm9iYWJseSBiZWluZyBsZXZlcmFnZWQgZm9yIHRoaXMuIE9rYXksIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB3aGF0IGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgaXRzZWxmIGluY2x1ZGVzIGFuZCBkZXBlbmRzIG9uLCBqdXN0IHRvIGJlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBHb2luZyB0byBydW4gdGhyb3VnaCB0aGUgY29kZSBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODE1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDE6NTUuODM1NDM1MjI0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDkzMzc0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9NjI9c3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02OC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo2OTojaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzAtc3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTIxMD12b2lkIGJwZl9pbWFnZV9rc3ltX2RlbChzdHJ1Y3QgYnBmX2tzeW0gKmtzeW0pXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMTYtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjE3OiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMTgtI2lmZGVmIENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MzY3PXN0YXRpYyBpbnQgZGlyZWN0X29wc19tb2Qoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqcHRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4KVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzcwLX1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozNzE6I2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM3Mi1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTY3Mz1zdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4LFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzA2LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcwNzojaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzA4LWFnYWluOlxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzU5LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjc2MDojaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzYxLVxcdGlmIChlcnIgPT0gLUVBR0FJTikge1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTQ2Nz1pbnQgX193ZWFrIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE0NzItXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTQ3MzojaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNDc0LSAgICBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUykgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTcxMj1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzQ2LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3NDc6I2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NDgtXFx0ICBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDE6NTUuODk2Mzc0ODVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4MDg3NDA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgVHJhbXBvbGluZSBBdHRhY2gvRGV0YWNoIEF2YWlsYWJpbGl0eSoqXG5cbk9rYXksIGhvbGQgb24gYSBtaW51dGUuIE15IGluaXRpYWwgc2NhbiBvZiB0aGlzIGNvZGUgaGFzIHRocm93biBhIGJpdCBvZiBhIGZsYWcuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9mIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYC4gSXQgc2VlbXMgbGlrZSB0aGVzZSBmdW5jdGlvbnMgYXJlIG5lc3RlZCB3aXRoaW4gYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBhbmQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmRpdGlvbnMuIFNwZWNpZmljYWxseSwgSSBzZWUgYCNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlICphY3R1YWxseSogcmVxdWlyZWQgZm9yIHRoZXNlIGZ1bmN0aW9ucyB0byBiZSBkZWZpbmVkLiBTbywgbGV0J3Mgc2tpcCBhaGVhZCB0byBsaW5lIDE0NzMsIGFuZCBjb25maXJtIHRoaXMgdG8gYmUgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNTEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MTo1OS4xNzcyNTA3ODFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzODExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDYwOlxcdFxcbjE0NjE6XFx0aW50IF9fd2VhayBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKVxcbjE0NjI6XFx0e1xcbjE0NjM6XFx0XFx0V0FSTl9PTl9PTkNFKHNpemUgXFx1MDAzZSBQQUdFX1NJWkUpO1xcbjE0NjQ6XFx0XFx0cmV0dXJuIHNldF9tZW1vcnlfcm94KChsb25nKWltYWdlLCAxKTtcXG4xNDY1OlxcdH1cXG4xNDY2OlxcdFxcbjE0Njc6XFx0aW50IF9fd2VhayBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuMTQ2ODpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXFxuMTQ2OTpcXHR7XFxuMTQ3MDpcXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbjE0NzE6XFx0fVxcbjE0NzI6XFx0XFxuMTQ3MzpcXHQjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4xNDc0OlxcdCAgICBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUykgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbjE0NzU6XFx0ICAgIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxcbjE0NzY6XFx0XFxuMTQ3NzpcXHRzdGF0aWMgdm9pZCB0cmFtcG9saW5lX2xvY2tfYWxsKHZvaWQpXFxuMTQ3ODpcXHR7XFxuMTQ3OTpcXHRcXHRpbnQgaTtcXG4xNDgwOlxcdFxcbjE0ODE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFRSQU1QT0xJTkVfTE9DS1NfVEFCTEVfU0laRTsgaSsrKVxcbjE0ODI6XFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dHJhbXBvbGluZV9sb2Nrc1tpXS5tdXRleCk7XFxuMTQ4MzpcXHR9XFxuMTQ4NDpcXHRcXG4xNDg1OlxcdHN0YXRpYyB2b2lkIHRyYW1wb2xpbmVfdW5sb2NrX2FsbCh2b2lkKVxcbjE0ODY6XFx0e1xcbjE0ODc6XFx0XFx0aW50IGk7XFxuMTQ4ODpcXHRcXG4xNDg5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBUUkFNUE9MSU5FX0xPQ0tTX1RBQkxFX1NJWkU7IGkrKylcXG4xNDkwOlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dHJhbXBvbGluZV9sb2Nrc1tpXS5tdXRleCk7XFxuMTQ5MTpcXHR9XFxuMTQ5MjpcXHRcXG4xNDkzOlxcdHN0YXRpYyB2b2lkIHJlbW92ZV90cmFjaW5nX211bHRpX2RhdGEoc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2RhdGEgKmRhdGEpXFxuMTQ5NDpcXHR7XFxuMTQ5NTpcXHRcXHRmdHJhY2VfaGFzaF9yZW1vdmUoZGF0YS1cXHUwMDNlcmVnKTtcXG4xNDk2OlxcdFxcdGZ0cmFjZV9oYXNoX3JlbW92ZShkYXRhLVxcdTAwM2V1bnJlZyk7XFxuMTQ5NzpcXHRcXHRmdHJhY2VfaGFzaF9yZW1vdmUoZGF0YS1cXHUwMDNlbW9kaWZ5KTtcXG4xNDk4OlxcdH1cXG4xNDk5OlxcdFxcbjE1MDA6XFx0c3RhdGljIHZvaWQgY2xlYXJfdHJhY2luZ19tdWx0aV9kYXRhKHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9kYXRhICpkYXRhKVxcbjE1MDE6XFx0e1xcbjE1MDI6XFx0XFx0cmVtb3ZlX3RyYWNpbmdfbXVsdGlfZGF0YShkYXRhKTtcXG4xNTAzOlxcdFxcbjE1MDQ6XFx0XFx0ZnJlZV9mdHJhY2VfaGFzaChkYXRhLVxcdTAwM2VyZWcpO1xcbjE1MDU6XFx0XFx0ZnJlZV9mdHJhY2VfaGFzaChkYXRhLVxcdTAwM2V1bnJlZyk7XFxuMTUwNjpcXHRcXHRmcmVlX2Z0cmFjZV9oYXNoKGRhdGEtXFx1MDAzZW1vZGlmeSk7XFxuMTUwNzpcXHR9XFxuMTUwODpcXHRcXG4xNTA5OlxcdHN0YXRpYyBpbnQgaW5pdF90cmFjaW5nX211bHRpX2RhdGEoc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2RhdGEgKmRhdGEpXFxuMTUxMDpcXHR7XFxuMTUxMTpcXHRcXHRkYXRhLVxcdTAwM2VyZWcgICAgPSBhbGxvY19mdHJhY2VfaGFzaChGVFJBQ0VfSEFTSF9ERUZBVUxUX0JJVFMpO1xcbjE1MTI6XFx0XFx0ZGF0YS1cXHUwMDNldW5yZWcgID0gYWxsb2NfZnRyYWNlX2hhc2goRlRSQUNFX0hBU0hfREVGQVVMVF9CSVRTKTtcXG4xNTEzOlxcdFxcdGRhdGEtXFx1MDAzZW1vZGlmeSA9IGFsbG9jX2Z0cmFjZV9oYXNoKEZUUkFDRV9IQVNIX0RFRkFVTFRfQklUUyk7XFxuMTUxNDpcXHRcXG4xNTE1OlxcdFxcdGlmICghZGF0YS1cXHUwMDNlcmVnIHx8ICFkYXRhLVxcdTAwM2V1bnJlZyB8fCAhZGF0YS1cXHUwMDNlbW9kaWZ5KSB7XFxuMTUxNjpcXHRcXHRcXHRjbGVhcl90cmFjaW5nX211bHRpX2RhdGEoZGF0YSk7XFxuMTUxNzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xNTE4OlxcdFxcdH1cXG4xNTE5OlxcdFxcdHJldHVybiAwO1xcbjE1MjA6XFx0fVxcbjE1MjE6XFx0XFxuMTUyMjpcXHRzdGF0aWMgdm9pZCBmdHJhY2VfaGFzaF9hZGQoc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoLCBzdHJ1Y3QgZnRyYWNlX2Z1bmNfZW50cnkgKmVudHJ5LFxcbjE1MjM6XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgZGlyZWN0KVxcbjE1MjQ6XFx0e1xcbjE1MjU6XFx0XFx0ZW50cnktXFx1MDAzZWlwID0gaXA7XFxuMTUyNjpcXHRcXHRlbnRyeS1cXHUwMDNlZGlyZWN0ID0gZGlyZWN0O1xcbjE1Mjc6XFx0XFx0YWRkX2Z0cmFjZV9oYXNoX2VudHJ5KGhhc2gsIGVudHJ5KTtcXG4xNTI4OlxcdH1cXG4xNTI5OlxcdFxcbjE1MzA6XFx0c3RhdGljIGludCByZWdpc3Rlcl9mZW50cnlfbXVsdGkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnB0cilcXG4xNTMxOlxcdHtcXG4xNTMyOlxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSBpbS1cXHUwMDNlaW1hZ2U7XFxuMTUzMzpcXHRcXHR1bnNpZ25lZCBsb25nIGlwID0gZnRyYWNlX2xvY2F0aW9uKHRyLVxcdTAwM2VpcCk7XFxuMTUzNDpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfZGF0YSAqZGF0YSA9IHB0cjtcXG4xNTM1OlxcdFxcbjE1MzY6XFx0XFx0aWYgKGJwZl90cmFtcG9saW5lX3VzZV9qbXAodHItXFx1MDAzZWZsYWdzKSlcXG4xNTM3OlxcdFxcdFxcdGFkZHIgPSBmdHJhY2Vfam1wX3NldChhZGRyKTtcXG4xNTM4OlxcdFxcbjE1Mzk6XFx0XFx0dHItXFx1MDAzZWZ1bmMuZnRyYWNlX21hbmFnZWQgPSB0cnVlO1xcbjE1NDA6XFx0XFx0ZnRyYWNlX2hhc2hfYWRkKGRhdGEtXFx1MDAzZXJlZywgZGF0YS1cXHUwMDNlZW50cnksIGlwLCBhZGRyKTtcXG4xNTQxOlxcdFxcdHRyLVxcdTAwM2VjdXJfaW1hZ2UgPSBpbTtcXG4xNTQyOlxcdFxcdHJldHVybiAwO1xcbjE1NDM6XFx0fVxcbjE1NDQ6XFx0XFxuMTU0NTpcXHRzdGF0aWMgaW50IHVucmVnaXN0ZXJfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCB2b2lkICpwdHIpXFxuMTU0NjpcXHR7XFxuMTU0NzpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgdHItXFx1MDAzZWN1cl9pbWFnZS1cXHUwMDNlaW1hZ2U7XFxuMTU0ODpcXHRcXHR1bnNpZ25lZCBsb25nIGlwID0gZnRyYWNlX2xvY2F0aW9uKHRyLVxcdTAwM2VpcCk7XFxuMTU0OTpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfZGF0YSAqZGF0YSA9IHB0cjtcXG4xNTUwOlxcdFxcbjE1NTE6XFx0XFx0aWYgKGJwZl90cmFtcG9saW5lX3VzZV9qbXAodHItXFx1MDAzZWZsYWdzKSlcXG4xNTUyOlxcdFxcdFxcdGFkZHIgPSBmdHJhY2Vfam1wX3NldChhZGRyKTtcXG4xNTUzOlxcdFxcbjE1NTQ6XFx0XFx0ZnRyYWNlX2hhc2hfYWRkKGRhdGEtXFx1MDAzZXVucmVnLCBkYXRhLVxcdTAwM2VlbnRyeSwgaXAsIGFkZHIpO1xcbjE1NTU6XFx0XFx0dHItXFx1MDAzZWN1cl9pbWFnZSA9IE5VTEw7XFxuMTU1NjpcXHRcXHRyZXR1cm4gMDtcXG4xNTU3OlxcdH1cXG4xNTU4OlxcdFxcbjE1NTk6XFx0c3RhdGljIGludCBtb2RpZnlfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDE6NTkuMTc3NDA1ODNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ5ODcxMTA5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAgYW5kIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGFyZSBvbmx5IGRlZmluZWQgaWYgdGhlc2UgdGhyZWUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6IGAjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKWAuIFRoYXQncyB0aGUga2V5LlxuXG5UaGVyZWZvcmUsIGZvciB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSwgSSBuZWVkIHRvIGVuc3VyZSB0aGUgcHJlc2VuY2Ugb2YgYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIGBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgLCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaW4gdGhlIGtlcm5lbCBidWlsZC4gRnVydGhlcm1vcmUsIHNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBCUEYtcmVsYXRlZCBjb2RlLCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGNoZWNrIHRoYXQgYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19CUEZfRVZFTlRTYCBhcmUgZW5hYmxlZCBhcyB3ZWxsLiBBbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2sgdGhvc2UuXG5cbk5leHQgc3RlcDogSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IHRoZSBLY29uZmlnIGVudHJ5IGZvciBgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYCBqdXN0IHRvIGJlIGNlcnRhaW4gSSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcncyBsaW5lZCB1cCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDc0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDI6MDMuNjc2MTE5MjE3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ2ODI0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9NTA9Y29uZmlnIEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTUyLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjUzOmNvbmZpZyBIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTU0LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDI6MDMuODUwODA5MTY2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDY2MzcyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AgY29uZmlnLiBJdCdzIGEgYm9vbGVhbiwgbm8gcHJvbXB0LCB3aGljaCBtZWFucyBpdCdzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBieSB0aGUgYXJjaGl0ZWN0dXJlIGl0c2VsZi4gVGhhdCBtZWFucyBJIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgbWFudWFsbHkgc2V0dGluZyBpdC4gSW4gZmFjdCwgaWYgdGhlIGFyY2hpdGVjdHVyZSAqZG9lc24ndCogc3VwcG9ydCBpdCwgSSBjYW4ndCBldmVuICplbmFibGUqIGl0ISBTbywgZG9lcyBpdCBldmVuIG5lZWQgdG8gYmUgbGlzdGVkPyBQZXJoYXBzIG5vdCwgaWYgaXQncyBub3QgdXNlci1zZWxlY3RhYmxlLiBOb3cgaG9sZCBvbiwgbGV0IG1lIHJlcmVhZCB0aGUgcHJvbXB0OiBcIkxpc3Qgb2Yga2VybmVsIGNvbmZpZyBmbGFncyB0aGF0IG11c3QgYmUgZXhwbGljaXRseSBlbmFibGVkIHRvIGNvbXBpbGUgYW5kIHRlc3QgdGhlIG1vZGlmaWVkIGNvZGUuXCIgSWYgaXQncyBub3QgdXNlci1zZWxlY3RhYmxlLCBJICpjYW4ndCogZXhwbGljaXRseSBlbmFibGUgaXQuIFRoZXJlZm9yZSwgdGhpcyBvbmUgaXMgcHJvYmFibHkgbm90IHJlbGV2YW50LiBCdXQgd2FpdCwgd2hhdCBhYm91dCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgPyBUaGF0J3MgdGhlIG9uZSBJIG5lZWQgdG8gbG9vayBhdCBuZXh0LiBMZXQncyBkaWcgaW50byB0aGF0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjQ5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQyOjA4LjI1NzQ0OTk2OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NjY5NzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTQ3PWNvbmZpZyBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctNDktXFxua2VybmVsL3RyYWNlL0tjb25maWc6NTA6Y29uZmlnIEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy01MS1cXHRib29sXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0zMjQ9Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMzI4LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjMyOTpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzAtXFx0ZGVmX2Jvb2wgeVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMS1cXHRkZXBlbmRzIG9uIERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHUyB8fCBEWU5BTUlDX0ZUUkFDRV9XSVRIX0FSR1NcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzozMzI6XFx0ZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxua2VybmVsL3RyYWNlL0tjb25maWctMzMzLVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9MzQzPWNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0pNUFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMzQ1LVxcdGRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0VcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzozNDY6XFx0ZGVwZW5kcyBvbiBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTM0Ny1cXHRkZXBlbmRzIG9uIEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9KTVBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDI6MDguNDcyMTI2NTE1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzODUxNDQyOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRnRyYWNlIGFuZCBCUEYgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcuIFRoaXMgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBvcHRpb24gaXMgYSBiaXQgdHJpY2t5LiBJdCBoaW5nZXMgb24gYERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU2AgYW5kIGBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYC4gQmFzaWNhbGx5LCB3ZSBuZWVkIHRvIGVuc3VyZSBlaXRoZXIgYERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU2Agb3IgYERZTkFNSUNfRlRSQUNFX1dJVEhfQVJHU2AgYXJlIGVuYWJsZWQsIGFsb25nIHdpdGggdGhlIEJQRiByZWxhdGVkIGNvbmZpZ3M6IGBCUEZfSklUYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBCUEZfRVZFTlRTYC5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLiBUaGUgYEZvY3VzU3ltYm9sc2AgbG9vayBsaWtlIHRoZXkgc2hvdWxkIGxlYWQgdXMgdG8gdGhlIHJpZ2h0IHBhcnRzLiBJIHNlZSBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCBhcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24uIEhtbSwgaXQncyBzdGF0aWMsIHNvIHRoYXQncyBhIHNsaWdodCB3cmlua2xlLCBidXQgaXQncyBjYWxsZWQgdGhyb3VnaCBgdHJhbXBvbGluZV9tdWx0aV9vcHMucmVnaXN0ZXJfZmVudHJ5YC4gVGhlIGNhbGxlcnMgb2YgdGhpcyBhcmUgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgLCBhbmQgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAuIFNvLCBmb2N1c2luZyBvbiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCwgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAsIGFuZCBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCBzZWVtcyBsaWtlIGEgc29saWQgc3RyYXRlZ3kuXG5cbkFsdGhvdWdoIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgIGlzIHN0YXRpYywgc3l6a2FsbGVyIGhhcyBiZWVuIGtub3duIHRvIHRhcmdldCBzdGF0aWMgZnVuY3Rpb25zIGlmIGRlYnVnIGluZm8gaXMgcHJlc2VudCwgYnV0IEknbSB0aGlua2luZyB0aGF0IGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGFuZCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBhcmUgbXVjaCBiZXR0ZXIgdGFyZ2V0cyBiZWNhdXNlIHRoZXkncmUgZXhwb3J0ZWQgb3IgYXQgbGVhc3QgZ2xvYmFsLiBQbHVzLCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyB0aGUgZW50cnkgcG9pbnQgZnJvbSB0aGUgYGJwZmAgc3lzY2FsbCwgd2hpY2ggbWFrZXMgaXQgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gdGhhdCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyBpbmRlZWQgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgdG8gdmVyaWZ5IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzgzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQyOjE0Ljg1NzI3MzIxNloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU2OTQ4MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgxOT1zdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODM5LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozODQwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzg0MS17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkyOS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkzMDppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MzEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MjoxNC45MjI5NzUwNzJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NDU2Nzk1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVuZGVyc3RhbmRpbmcgTXVsdGktQXR0YWNoIEJQRiBUcmFjZXBvaW50cyoqXG5cblJpZ2h0LCBzbyB0aGUgY29yZSBvZiBoYW5kbGluZyBgQlBGX0xJTktfQ1JFQVRFYCBmb3IgdGhlc2UgbXVsdGktYXR0YWNoIHRyYWNlcG9pbnQgdHlwZXMsIGBCUEZfVFJBQ0VfRkVOVFJZX01VTFRJYCBhbmQgYEJQRl9UUkFDRV9GRVhJVF9NVUxUSWAsIHRoYXTigJlzIGRlZmluaXRlbHkgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLiBUaGF04oCZcyBteSBmaXJzdCBwb2ludCBvZiByZWZlcmVuY2UuXG5cbk5vdywgd2hlcmUgZG9lcyB0aGF0IGFjdHVhbGx5ICpkbyogaXRzIHdvcms/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0J3MgbG9vayBhdCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBpbiBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGRlZXBlciBsb2dpYyBwcm9iYWJseSByZXNpZGVzLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWNoYW5pY3Mgb2YgaG93IHRoZSBtdWx0aXBsZSBhdHRhY2htZW50cyBhcmUgb3JjaGVzdHJhdGVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQwMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQyOjE4LjA5NzU0NjQwOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzNDcwNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1NzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9tdWx0aV9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTc5LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1ODA6c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTgxLXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1ODUtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU4NjpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1ODcte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5NC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTk1OnN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9yb2xsYmFjayhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OTYte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYxMS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjEyOmludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjEzLVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY1OC1cXHRmb3JfZWFjaF9tbm9kZShtbm9kZSwgbGluaykge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2NTk6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NjAtXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjg2LVxcdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2ODc6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODgtXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjk2LVxcdFxcdGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lLCBcXHUwMDI2bW5vZGUtXFx1MDAzZW5vZGUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2OTc6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjk4LVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3MTI9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTcyMS1cXHRcXHRkYXRhLVxcdTAwM2VlbnRyeSA9IFxcdTAwMjZtbm9kZS1cXHUwMDNlZW50cnk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTcyMjpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cXHUwMDNldHJhbXBvbGluZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTcyMy1cXHRcXHRXQVJOX09OX09OQ0UoX19icGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhcXHUwMDI2bW5vZGUtXFx1MDAzZW5vZGUsIG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTczMi1cXHRmb3JfZWFjaF9tbm9kZShtbm9kZSwgbGluaylcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzMzOlxcdFxcdGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlKG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MjoxOC4xNTg5MDE4MzVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwODA2MjYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBCUEYgVHJhbXBvbGluZSBmb3IgS2VybmVsIEluc3RydW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gdGhlIEJQRiB0cmFtcG9saW5lIG1lY2hhbmlzbSBmb3IgbW9yZSBncmFudWxhciBjb250cm9sIHdpdGhpbiB0aGUga2VybmVsLiBJIHRoaW5rIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCBhcmUgZ29pbmcgdG8gYmUga2V5IHN5bWJvbHMgdG8gZXhwbG9yZS4gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBob3cgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAgZml0cyBpbnRvIHRoZSBwaWN0dXJlLiBJdCBzZWVtcyBsaWtlIHRoZSBtdWx0aS1hdHRhY2ggYW5kIGRldGFjaCBmdW5jdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGltcG9ydGFudCBmb3IgZW5hYmxpbmcgdGhpcyBjYXBhYmlsaXR5LlxuXG5JIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCB0byBzdXBwb3J0IHRoaXMgZnVuY3Rpb25hbGl0eS4gSSdtIHRoaW5raW5nIEknbGwgbmVlZCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgQlBGX0VWRU5UU2AsIG9mIGNvdXJzZS4gSSdsbCBhbHNvIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGBGVFJBQ0VgIGlzIGVuYWJsZWQgdG8gaG9vayBpbnRvIGZ1bmN0aW9uIHRyYWNpbmcsIGFuZCwgc2luY2UgSSdtIHRhcmdldGluZyBkaXJlY3QgY2FsbHMsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgbGlrZWx5IGNyaXRpY2FsLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IHNwZWNpZmljIGNvbmZpZyB0aGF0J3MgZGVkaWNhdGVkIHRvIEJQRiB0cmFtcG9saW5lIGl0c2VsZi4gSSdsbCBtYWtlIHN1cmUgdG8gZG91YmxlIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTM2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQyOjIxLjk2Njk2NzgyM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkxMjI1MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX1RSQU1QXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz01OTc9aW50IGJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjAzLXtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjA0OlxcdHUzMiBpbWFnZV9vZmYgPSAqX2ltYWdlX29mZiwgZmxhZ3MgPSBCUEZfVFJBTVBfRl9JTkRJUkVDVDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjA1LVxcdHZvaWQgKmltYWdlID0gKl9pbWFnZTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02MDctXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjYwODpcXHR0bm9kZXNbQlBGX1RSQU1QX0ZFTlRSWV0ubm9kZXNbMF0gPSBub2RlO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2MDk6XFx0dG5vZGVzW0JQRl9UUkFNUF9GRU5UUlldLm5yX25vZGVzID0gMTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjEwLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02MTEtXFx0aWYgKG1vZGVsLVxcdTAwM2VyZXRfc2l6ZSBcXHUwMDNlIDApXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjYxMjpcXHRcXHRmbGFncyB8PSBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVDtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjEzLVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTY4Nj1zdGF0aWMgbG9uZyBicGZfc3RydWN0X29wc19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTcyMi1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NzIzOlxcdHRub2RlcyA9IGt6YWxsb2Nfb2JqcygqdG5vZGVzLCBCUEZfVFJBTVBfTUFYKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzI0LVxcdGlmICghdG5vZGVzKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTg9c3RhdGljIGludCBicGZfdHJhbXBfZnRyYWNlX29wc19mdW5jKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGxvbmcgaXAsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTgtXFx0XFx0ICovXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTE5OlxcdFxcdGlmICgodHItXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEyMDpcXHRcXHQgICAgISh0ci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9PUklHX1NUQUNLKSkge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEyMTpcXHRcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKHRyLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX1NIQVJFX0lQTU9ESUZZKSlcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMjItXFx0XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMjMtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTI0OlxcdFxcdFxcdHRyLVxcdTAwM2VmbGFncyB8PSBCUEZfVFJBTVBfRl9TSEFSRV9JUE1PRElGWTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMjUtXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTItXFx0Y2FzZSBGVFJBQ0VfT1BTX0NNRF9FTkFCTEVfU0hBUkVfSVBNT0RJRllfUEVFUjpcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTM6XFx0XFx0dHItXFx1MDAzZWZsYWdzIHw9IEJQRl9UUkFNUF9GX1NIQVJFX0lQTU9ESUZZO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTU6XFx0XFx0aWYgKCh0ci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU2OlxcdFxcdCAgICAhKHRyLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX09SSUdfU1RBQ0spKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1Ny1cXHRcXHRcXHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGUodHIsIGZhbHNlIC8qIGxvY2tfZGlyZWN0X211dGV4ICovLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYwLVxcdGNhc2UgRlRSQUNFX09QU19DTURfRElTQUJMRV9TSEFSRV9JUE1PRElGWV9QRUVSOlxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MTpcXHRcXHR0ci1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkJQRl9UUkFNUF9GX1NIQVJFX0lQTU9ESUZZO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2Mi1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjM6XFx0XFx0aWYgKHRyLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX09SSUdfU1RBQ0spXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY0LVxcdFxcdFxcdHJldCA9IGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgZmFsc2UgLyogbG9ja19kaXJlY3RfbXV0ZXggKi8sXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0zNzM9c3RhdGljIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqYnBmX3RyYW1wb2xpbmVfbG9va3VwKHU2NCBrZXksIHVuc2lnbmVkIGxvbmcgaXApXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00MDMtXFx0cmVmY291bnRfc2V0KFxcdTAwMjZ0ci1cXHUwMDNlcmVmY250LCAxKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0MDQ6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGkrKylcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00MDUtXFx0XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZ0ci1cXHUwMDNlcHJvZ3NfaGxpc3RbaV0pO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NTA4PWJwZl90cmFtcG9saW5lX2dldF9wcm9ncyhjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBpbnQgKnRvdGFsLCBib29sICppcF9hcmcpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy01MTQtXFx0KnRvdGFsID0gMDtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo1MTU6XFx0dG5vZGVzID0ga3phbGxvY19vYmpzKCp0bm9kZXMsIEJQRl9UUkFNUF9NQVgpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTUxNi1cXHRpZiAoIXRub2RlcylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTUxOC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo1MTk6XFx0Zm9yIChraW5kID0gMDsga2luZCBcXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGtpbmQrKykge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTUyMC1cXHRcXHR0bm9kZXNba2luZF0ubnJfbm9kZXMgPSB0ci1cXHUwMDNlcHJvZ3NfY250W2tpbmRdO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NjczPXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02OTEtXFx0LyogY2xlYXIgYWxsIGJpdHMgZXhjZXB0IFNIQVJFX0lQTU9ESUZZIGFuZCBUQUlMX0NBTExfQ1RYICovXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NjkyOlxcdHRyLVxcdTAwM2VmbGFncyBcXHUwMDI2PSAoQlBGX1RSQU1QX0ZfU0hBUkVfSVBNT0RJRlkgfCBCUEZfVFJBTVBfRl9UQUlMX0NBTExfQ1RYKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02OTMtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6Njk0OlxcdGlmICh0bm9kZXNbQlBGX1RSQU1QX0ZFWElUXS5ucl9ub2RlcyB8fFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjY5NTpcXHQgICAgdG5vZGVzW0JQRl9UUkFNUF9NT0RJRllfUkVUVVJOXS5ucl9ub2Rlcykge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjY5NjpcXHRcXHQvKiBOT1RFOiBCUEZfVFJBTVBfRl9SRVNUT1JFX1JFR1MgYW5kIEJQRl9UUkFNUF9GX1NLSVBfRlJBTUVcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02OTctXFx0XFx0ICogc2hvdWxkIG5vdCBiZSBzZXQgdG9nZXRoZXIuXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNjk4LVxcdFxcdCAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjY5OTpcXHRcXHR0ci1cXHUwMDNlZmxhZ3MgfD0gQlBGX1RSQU1QX0ZfQ0FMTF9PUklHIHwgQlBGX1RSQU1QX0ZfU0tJUF9GUkFNRTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MDAtXFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MDE6XFx0XFx0dHItXFx1MDAzZWZsYWdzIHw9IEJQRl9UUkFNUF9GX1JFU1RPUkVfUkVHUztcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MDItXFx0fVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzA0LVxcdGlmIChpcF9hcmcpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzA1OlxcdFxcdHRyLVxcdTAwM2VmbGFncyB8PSBCUEZfVFJBTVBfRl9JUF9BUkc7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzA2LVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzA4LWFnYWluOlxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcwOTpcXHRpZiAodHItXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzEwOlxcdFxcdGlmICh0ci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9TSEFSRV9JUE1PRElGWSkge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcxMTpcXHRcXHRcXHQvKiBUaGUgQlBGX1RSQU1QX0ZfU0tJUF9GUkFNRSBjYW4gYmUgY2xlYXJlZCBpbiB0aGVcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MTItXFx0XFx0XFx0ICogZmlyc3QgdHJ5LCByZXNldCBpdCBpbiB0aGUgc2Vjb25kIHRyeS5cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MTMtXFx0XFx0XFx0ICovXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzE0OlxcdFxcdFxcdHRyLVxcdTAwM2VmbGFncyB8PSBCUEZfVFJBTVBfRl9PUklHX1NUQUNLIHwgQlBGX1RSQU1QX0ZfU0tJUF9GUkFNRTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MTUtXFx0XFx0fSBlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0pNUCkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcxOS1cXHRcXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MjA6XFx0XFx0XFx0dHItXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5CUEZfVFJBTVBfRl9TS0lQX0ZSQU1FO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcyMS1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NjItXFx0XFx0LyogLUVBR0FJTiBmcm9tIGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMuIE5vd1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjc2MzpcXHRcXHQgKiBCUEZfVFJBTVBfRl9TSEFSRV9JUE1PRElGWSBpcyBzZXQsIHdlIGNhbiBnZW5lcmF0ZSB0aGVcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NjQtXFx0XFx0ICogdHJhbXBvbGluZSBhZ2FpbiwgYW5kIHJldHJ5IHJlZ2lzdGVyLlxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzgyPXN0YXRpYyBlbnVtIGJwZl90cmFtcF9wcm9nX3R5cGUgYnBmX2F0dGFjaF90eXBlX3RvX3RyYW1wKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc4Ni1cXHRjYXNlIEJQRl9UUkFDRV9GRU5UUllfTVVMVEk6XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6Nzg3OlxcdFxcdHJldHVybiBCUEZfVFJBTVBfRkVOVFJZO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc4OC1cXHRjYXNlIEJQRl9NT0RJRllfUkVUVVJOOlxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjc4OTpcXHRcXHRyZXR1cm4gQlBGX1RSQU1QX01PRElGWV9SRVRVUk47XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzkwLVxcdGNhc2UgQlBGX1RSQUNFX0ZFWElUOlxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc5MS1cXHRjYXNlIEJQRl9UUkFDRV9GRVhJVF9NVUxUSTpcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3OTI6XFx0XFx0cmV0dXJuIEJQRl9UUkFNUF9GRVhJVDtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03OTMtXFx0Y2FzZSBCUEZfVFJBQ0VfRlNFU1NJT046XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzk0LVxcdGNhc2UgQlBGX1RSQUNFX0ZTRVNTSU9OX01VTFRJOlxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjc5NTpcXHRcXHRyZXR1cm4gQlBGX1RSQU1QX0ZTRVNTSU9OO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc5Ni1cXHRjYXNlIEJQRl9MU01fTUFDOlxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODAwLVxcdFxcdFxcdCAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjgwMTpcXHRcXHRcXHRyZXR1cm4gQlBGX1RSQU1QX0ZFWElUO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTgwMi1cXHRcXHRlbHNlXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODAzOlxcdFxcdFxcdHJldHVybiBCUEZfVFJBTVBfTU9ESUZZX1JFVFVSTjtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy04MDQtXFx0ZGVmYXVsdDpcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo4MDU6XFx0XFx0cmV0dXJuIEJQRl9UUkFNUF9SRVBMQUNFO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTgwNi1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz04NDU9c3RhdGljIGludCBicGZfdHJhbXBvbGluZV9hZGRfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODUzLVxcdGtpbmQgPSBicGZfYXR0YWNoX3R5cGVfdG9fdHJhbXAobm9kZS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZyk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODU0OlxcdGlmIChraW5kID09IEJQRl9UUkFNUF9GU0VTU0lPTikge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjg1NTpcXHRcXHRwcm9nX2xpc3QgPSBcXHUwMDI2dHItXFx1MDAzZXByb2dzX2hsaXN0W0JQRl9UUkFNUF9GRU5UUlldO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTg1Ni1cXHRcXHRjbnQrKztcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTg3Mi1cXHRobGlzdF9hZGRfaGVhZChcXHUwMDI2bm9kZS1cXHUwMDNldHJhbXBfaGxpc3QsIHByb2dfbGlzdCk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODczOlxcdGlmIChraW5kID09IEJQRl9UUkFNUF9GU0VTU0lPTikge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjg3NDpcXHRcXHR0ci1cXHUwMDNlcHJvZ3NfY250W0JQRl9UUkFNUF9GRU5UUlldKys7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODc1LVxcdFxcdGZleGl0ID0gZnNlc3Npb25fZXhpdChub2RlKTtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTg3Ny1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo4Nzg6XFx0XFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNmZleGl0LVxcdTAwM2V0cmFtcF9obGlzdCwgXFx1MDAyNnRyLVxcdTAwM2Vwcm9nc19obGlzdFtCUEZfVFJBTVBfRkVYSVRdKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo4Nzk6XFx0XFx0dHItXFx1MDAzZXByb2dzX2NudFtCUEZfVFJBTVBfRkVYSVRdKys7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODgwLVxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz04ODY9c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfcmVtb3ZlX3Byb2coc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTg5Mi1cXHRraW5kID0gYnBmX2F0dGFjaF90eXBlX3RvX3RyYW1wKG5vZGUtXFx1MDAzZWxpbmstXFx1MDAzZXByb2cpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjg5MzpcXHRpZiAoa2luZCA9PSBCUEZfVFJBTVBfRlNFU1NJT04pIHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy04OTQtXFx0XFx0ZmV4aXQgPSBmc2Vzc2lvbl9leGl0KG5vZGUpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODk3LVxcdFxcdGhsaXN0X2RlbF9pbml0KFxcdTAwMjZmZXhpdC1cXHUwMDNldHJhbXBfaGxpc3QpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjg5ODpcXHRcXHR0ci1cXHUwMDNlcHJvZ3NfY250W0JQRl9UUkFNUF9GRVhJVF0tLTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo4OTk6XFx0XFx0a2luZCA9IEJQRl9UUkFNUF9GRU5UUlk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTAwLVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTkwNT1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkyMS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5MjI6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGkrKylcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MjMtXFx0XFx0Y250ICs9IHRyLVxcdTAwM2Vwcm9nc19jbnRbaV07XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTI0LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjkyNTpcXHRpZiAoa2luZCA9PSBCUEZfVFJBTVBfUkVQTEFDRSkge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkyNi1cXHRcXHQvKiBDYW5ub3QgYXR0YWNoIGV4dGVuc2lvbiBpZiBmZW50cnkvZmV4aXQgYXJlIGluIHVzZS4gKi9cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk1OD1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTY3LVxcdGtpbmQgPSBicGZfYXR0YWNoX3R5cGVfdG9fdHJhbXAobm9kZS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZyk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTY4OlxcdGlmIChraW5kID09IEJQRl9UUkFNUF9SRVBMQUNFKSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTY5LVxcdFxcdFdBUk5fT05fT05DRSghdHItXFx1MDAzZWV4dGVuc2lvbl9wcm9nKTtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwNTg9c3RhdGljIHN0cnVjdCBicGZfc2hpbV90cmFtcF9saW5rICpjZ3JvdXBfc2hpbV9maW5kKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDYzLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwNjQ6XFx0Zm9yIChraW5kID0gMDsga2luZCBcXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGtpbmQrKykge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwNjUtXFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXFx1MDAyNnRyLVxcdTAwM2Vwcm9nc19obGlzdFtraW5kXSwgdHJhbXBfaGxpc3QpIHtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTExODc9dm9pZCBicGZfdHJhbXBvbGluZV9wdXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExOTYtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTE5NzpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQlBGX1RSQU1QX01BWDsgaSsrKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExOTgtXFx0XFx0aWYgKFdBUk5fT05fT05DRSghaGxpc3RfZW1wdHkoXFx1MDAyNnRyLVxcdTAwM2Vwcm9nc19obGlzdFtpXSkpKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NDE5PXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NTEyLVxcdGlmICh0Z3RfcHJvZyBcXHUwMDI2XFx1MDAyNiB0Z3RfcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2V0YWlsX2NhbGxfcmVhY2hhYmxlKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTUxMzpcXHRcXHR0ci1cXHUwMDNlZmxhZ3MgPSBCUEZfVFJBTVBfRl9UQUlMX0NBTExfQ1RYO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTUxNC1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTc2Mj1pbnQgYnBmX2ZpeHVwX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODY1LVxcdFxcdCAqICAge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg2NjpcXHRcXHQgKiAgICAgICByZXR1cm4gKCgodTY0ICopY3R4KVstMV0gXFx1MDAzZVxcdTAwM2UgQlBGX1RSQU1QX0lTX1JFVFVSTl9TSElGVCkgXFx1MDAyNiAxO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg2Ny1cXHRcXHQgKiAgIH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg2OS1cXHRcXHRpbnNuX2J1ZlswXSA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzEsIC04KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4NzA6XFx0XFx0aW5zbl9idWZbMV0gPSBCUEZfQUxVNjRfSU1NKEJQRl9SU0gsIEJQRl9SRUdfMCwgQlBGX1RSQU1QX0lTX1JFVFVSTl9TSElGVCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODcxLVxcdFxcdGluc25fYnVmWzJdID0gQlBGX0FMVTY0X0lNTShCUEZfQU5ELCBCUEZfUkVHXzAsIDEpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODc5LVxcdFxcdCAqICAge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg4MDpcXHRcXHQgKiAgICAgICB1NjQgb2ZmID0gKCgodTY0ICopY3R4KVstMV0gXFx1MDAzZVxcdTAwM2UgQlBGX1RSQU1QX0NPT0tJRV9JTkRFWF9TSElGVCkgXFx1MDAyNiAweEZGO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg4MS1cXHRcXHQgKiAgICAgICByZXR1cm4gXFx1MDAyNigodTY0ICopY3R4KVstb2ZmXTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg4NC1cXHRcXHRpbnNuX2J1ZlswXSA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzEsIC04KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4ODU6XFx0XFx0aW5zbl9idWZbMV0gPSBCUEZfQUxVNjRfSU1NKEJQRl9SU0gsIEJQRl9SRUdfMCwgQlBGX1RSQU1QX0NPT0tJRV9JTkRFWF9TSElGVCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODg2LVxcdFxcdGluc25fYnVmWzJdID0gQlBGX0FMVTY0X0lNTShCUEZfQU5ELCBCUEZfUkVHXzAsIDB4RkYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MjoyMi4wMzYwOTc1MTlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE0MDc5MDIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgQlBGIGFuZCBEeW5hbWljIFRyYWNpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBmb3IgQlBGIGFuZCBkeW5hbWljIHRyYWNpbmcsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRyYW1wb2xpbmUgZnVuY3Rpb25hbGl0eS4gSXQgc2VlbXMgbGlrZSB0aGVyZSBpc24ndCBhIHNpbmdsZSwgZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBcIkJQRiB0cmFtcG9saW5lXCIgaXRzZWxmLCBidXQgcmF0aGVyIGl0J3MgYWNoaWV2ZWQgdGhyb3VnaCBhIGNvbWJpbmF0aW9uIG9mIG90aGVyIG9wdGlvbnMuXG5cbkluaXRpYWxseSwgSSBpZGVudGlmaWVkIHRoZXNlIGtleSBjb25maWdzOiBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGBCUEZfRVZFTlRTYCwgYEZUUkFDRWAsIGFuZCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBIb3dldmVyLCBJIG5lZWQgdG8gZGlnIGRlZXBlci5cblxuSSBzZWUgdGhhdCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGlzIGFjdHVhbGx5IGEgZGVmYXVsdCBib29sZWFuIChgZGVmX2Jvb2wgeWApIGFuZCBkZXBlbmRzIG9uIGVpdGhlciBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTYCBvciBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTYCwgKmFuZCogYEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBTaW5jZSBpdCdzIGRlcGVuZGVudCwgaXQncyBub3QgZGlyZWN0bHkgdXNlci1zZWxlY3RhYmxlLCB3aGljaCBtYWtlcyBtZSByZS1ldmFsdWF0ZSB3aGV0aGVyIGl0J3MgdXNlZnVsIHRvIGxpc3QuIFdlIGNhbid0IGFjdHVhbGx5ICplbmFibGUqIGl0LlxuXG5BbHNvLCBJIGNoZWNrZWQgYEhBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYC4gSXQncyBhIGJvb2xlYW4gd2l0aG91dCBhIHByb21wdCwgc28gaXQncyBub3Qgc29tZXRoaW5nIHdlIGNhbiBleHBsaWNpdGx5IGNvbmZpZ3VyZS5cblxuVGhlIHBvaW50IGJlaW5nLCBpZiB0aGUgYWltIGlzIHRvIHVzZSBcImRpcmVjdCBjYWxsc1wiIHRocm91Z2ggZHluYW1pYyBmdHJhY2UsIHRoYXQgaXMgbm90IHVzZXIgc2VsZWN0YWJsZS5cblxuTm93LCBsZXQncyByZWZpbmUgdGhpcy4gTGV0IG1lIHJldmlzaXQuXG5cbk9rYXksIGxldCdzIHJldmlldyB0aGUgY29uZmlncywgdGFraW5nIGludG8gYWNjb3VudCB3aGF0IGlzIGFjdHVhbGx5IHVzZXItc2VsZWN0YWJsZTpcblxuYEJQRl9TWVNDQUxMYFxuYEJQRl9KSVRgXG5gQlBGX0VWRU5UU2BcbmBGVFJBQ0VgXG5gRFlOQU1JQ19GVFJBQ0VgXG5cblVsdGltYXRlbHksIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NgIGFyZSBub3QgdXNlciBzZWxlY3RhYmxlLiBTbywgdGhlcmUgaXMgbm8gdmFsdWUgaW4gbGlzdGluZyB0aGVtIGFzIFwibXVzdCBiZSBleHBsaWNpdGx5IGVuYWJsZWRcIiBiZWNhdXNlIHRoZXkgYXJlIGVuYWJsZWQgYXMgYSBjb25zZXF1ZW5jZSBvZiBvdGhlciBjb25maWd1cmF0aW9uIGNob2ljZXMuIEkgYW0gbm93IG1vcmUgY29udmluY2VkIHRoYXQgdGhlIHVzZWZ1bCBjb25maWd1cmF0aW9uIHRvIGluY2x1ZGUgaXMgYERZTkFNSUNfRlRSQUNFYCwgYXMgdGhpcyBpcyB1c2VyIHNlbGVjdGFibGUuXG5cbk5vdywgbGV0IG1lIGNoZWNrIGBEWU5BTUlDX0ZUUkFDRWAgaW4gYGtlcm5lbC90cmFjZS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3ODUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDI6MjkuMTc2ODg5OTg0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQzNjk4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRFlOQU1JQ19GVFJBQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9MjkwPWNvbmZpZyBGVU5DVElPTl9UUkFDRV9BUkdTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMDAtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MzAxOmNvbmZpZyBEWU5BTUlDX0ZUUkFDRVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMwMi1cXHRib29sXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMjMtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MzI0OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMjUtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMzI4LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjMyOTpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzAtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMzMzLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjMzNDpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzNS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzctXFxua2VybmVsL3RyYWNlL0tjb25maWc6MzM4OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0FSR1NcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzktXFx0ZGVmX2Jvb2wgeVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMzQyLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjM0Mzpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9KTVBcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zNDQtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MjoyOS4yMzkzMzQ2NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA0NjE3NjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBEWU5BTUlDX0ZUUkFDRWAuIFNlZW1zIGxpa2UgaXQncyBhIGJvb2xlYW4gb3B0aW9uLCBubyBwcm9tcHQgbmVjZXNzYXJ5LCBhbmQsIG5hdHVyYWxseSwgaXQncyBzZWxlY3RlZCBieSBgRlRSQUNFYC4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYEZUUkFDRWAgY29uZmlndXJhdGlvbi4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2Ugb3B0aW9ucyB0byBlbnN1cmUgdGhlIGtlcm5lbCdzIHRyYWNpbmcgY2FwYWJpbGl0aWVzIGFyZSBzZXQgdXAgYXMgaW50ZW5kZWQsIGVzcGVjaWFsbHkgd2l0aGluIG15IGFyZWEgb2YgZXhwZXJ0aXNlLiBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBzZWxlY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA5NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQyOjMyLjM0Mzk1NDYwMVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkyNjE0MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZUUkFDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz0xOTg9Y29uZmlnIFRSQUNJTkdfU1VQUE9SVFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMjAzLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjIwNDptZW51Y29uZmlnIEZUUkFDRVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTIwNS1cXHRib29sIFxcXCJUcmFjZXJzXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9NTg4PWNvbmZpZyBFTkFCTEVfREVGQVVMVF9UUkFDRVJTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy01OTYtXFxua2VybmVsL3RyYWNlL0tjb25maWc6NTk3OmNvbmZpZyBGVFJBQ0VfU1lTQ0FMTFNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy01OTgtXFx0Ym9vbCBcXFwiVHJhY2Ugc3lzY2FsbHNcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz04Njg9Y29uZmlnIEJQRl9LUFJPQkVfT1ZFUlJJREVcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg3Ni1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4Nzc6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX1BBVENIQUJMRV9GVU5DVElPTl9FTlRSWVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg3OC1cXHRib29sXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04ODAtXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODgxOmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9DQ1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg4Mi1cXHRkZWZfYm9vbCB5XFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04ODYtXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODg3OmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9PQkpUT09MXFxua2VybmVsL3RyYWNlL0tjb25maWctODg4LVxcdGRlZl9ib29sIHlcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg5NC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4OTU6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX1JFQ09SRE1DT1VOVFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg5Ni1cXHRkZWZfYm9vbCB5XFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMDIxPWNvbmZpZyBUUkFDRV9FVkFMX01BUF9GSUxFXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDQ4LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwNDk6Y29uZmlnIEZUUkFDRV9SRUNPUkRfUkVDVVJTSU9OXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA1MC1cXHRib29sIFxcXCJSZWNvcmQgZnVuY3Rpb25zIHRoYXQgcmVjdXJzZSBpbiBmdW5jdGlvbiB0cmFjaW5nXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA2Mi1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDYzOmNvbmZpZyBGVFJBQ0VfUkVDT1JEX1JFQ1VSU0lPTl9TSVpFXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA2NC1cXHRpbnQgXFxcIk1heCBudW1iZXIgb2YgcmVjdXJzZWQgZnVuY3Rpb25zIHRvIHJlY29yZFxcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNzMtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTA3NDpjb25maWcgRlRSQUNFX1ZBTElEQVRFX1JDVV9JU19XQVRDSElOR1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNzUtXFx0Ym9vbCBcXFwiVmFsaWRhdGUgUkNVIGlzIG9uIGR1cmluZyBmdHJhY2UgZXhlY3V0aW9uXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9MTEwMT1jb25maWcgR0NPVl9QUk9GSUxFX0ZUUkFDRVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTExMi1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMTEzOmNvbmZpZyBGVFJBQ0VfU0VMRlRFU1RcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTE0LVxcdGJvb2xcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTE1LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjExMTY6Y29uZmlnIEZUUkFDRV9TVEFSVFVQX1RFU1RcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTE3LVxcdGJvb2wgXFxcIlBlcmZvcm0gYSBzdGFydHVwIHRlc3Qgb24gZnRyYWNlXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9MTEzNj1jb25maWcgRVZFTlRfVFJBQ0VfVEVTVF9TWVNDQUxMU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTE0Ny1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMTQ4OmNvbmZpZyBGVFJBQ0VfU09SVF9TVEFSVFVQX1RFU1RcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTQ5LSAgICAgICBib29sIFxcXCJWZXJpZnkgY29tcGlsZSB0aW1lIHNvcnRpbmcgb2YgZnRyYWNlIGZ1bmN0aW9uc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTE6NDI6MzIuNDAzMjIxNDU4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDIwNTY3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBUcmFjaW5nOiBBIFF1aWNrIEp1bXBzdGFydCoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQga2VybmVsIHRyYWNpbmcsIHNwZWNpZmljYWxseSwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBpbW1lZGlhdGVseSBqdW1wIHRvIGBGVFJBQ0VgLiBJdCdzIGJhc2ljYWxseSB0aGUgc3RhbmRhcmQsIHRoZSBmb3VuZGF0aW9uLCB3aGF0IEkgKnVzdWFsbHkqIHJlYWNoIGZvciB3aGVuIEkgbmVlZCB0byBpbnN0cnVtZW50IHRoaW5ncy4gSSBtZWFuLCBpdCdzIGp1c3Qgc28gZWFzeSB0byBlbmFibGUgdGhyb3VnaCBgbWVudWNvbmZpZ2AsIHJpZ2h0PyBCdXQgdGhlbiB0aGUgcXVlc3Rpb24gaGl0cyBtZSwgbWF5YmUgc3VidGx5Li4uIHdoYXQgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBGVU5DVElPTl9UUkFDRVJgP1xuXG5JdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgdGhpbmdzIHJlbGF0ZSBpbiBvcmRlciB0byBiZSBhYmxlIHRvIGZ1bGx5IHdpZWxkIHRoZW0uIEkgY2FuJ3QganVzdCBlbmFibGUgYEZUUkFDRWAgYW5kIGFzc3VtZSBldmVyeXRoaW5nIGlzIGdvaW5nIHRvIGJlIGZpbmUuIEkgbmVlZCB0byBiZSBtb3JlIGRlbGliZXJhdGUgYWJvdXQgd2hhdCBmZWF0dXJlcyBJJ20gcHVsbGluZyBpbi4gVGhlcmUgY291bGQgYmUgb3RoZXIgcmVsYXRlZCB0cmFjZXJzIHRvIGNvbnNpZGVyLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBkbyBhIGRlZXBlciBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjEwOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQyOjM1LjQwNTI4MDI0NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4MzM1NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZVTkNUSU9OX1RSQUNFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz0yMjY9Y29uZmlnIEJPT1RUSU1FX1RSQUNJTkdcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTIzNC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoyMzU6Y29uZmlnIEZVTkNUSU9OX1RSQUNFUlxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTIzNi1cXHRib29sIFxcXCJLZXJuZWwgRnVuY3Rpb24gVHJhY2VyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMTo0MjozNS40NjYxMTg2NjFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU5MzYwODczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIEJQRiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSB1c2VyIGNhbiBzZWxlY3QgYEZVTkNUSU9OX1RSQUNFUmAsIHNvIGl0J3MgZXNzZW50aWFsIHdlIGluY2x1ZGUgYm90aCBgRlRSQUNFYCBhbmQgYEZVTkNUSU9OX1RSQUNFUmAgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFdlIHNob3VsZCBhbHNvIGluY2x1ZGUgdGhlIHVzdWFsIEJQRiBzdXNwZWN0czogYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYEJQRl9FVkVOVFNgLlxuXG5UaGUgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIOKAkyBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogaXQncyBtZXNzaW5nIHdpdGggdGhlIEJQRiB0cmFtcG9saW5lIGxvZ2ljIHNwZWNpZmljYWxseSB0byBmaXggdGhlIGBmdHJhY2VfbWFuYWdlZGAgc2V0dGluZyBmb3IgbXVsdGktYXR0YWNoIGBmZW50cnlgIHByb2dyYW1zLiBUaGlzIGlzIGEgY29yZSBCUEYgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBmdHJhY2UgdHJhbXBvbGluZXMgbWFrZXMgaXQgYSBoaWdoLXByaW9yaXR5IHRhcmdldC5cblxuSW5pdGlhbGx5LCBJIGhhZCBhIGJyb2FkZXIgc2V0IG9mIGBGb2N1c1N5bWJvbHNgOiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAsIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLCBhbmQgYHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aWAuIEhvd2V2ZXIsIHVwb24gY2xvc2VyIGluc3BlY3Rpb24sIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgLCB3aGlsZSBzdGF0aWMsIGlzICp0aGUqIG1vZGlmaWVkIGZ1bmN0aW9uLiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBhbmQgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgYXJlIHRoZSBhY3R1YWwgZW50cnkgcG9pbnRzLCBzbyB0aG9zZSBhcmUga2V5LiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCBpcyBub3QgbW9kaWZpZWQuIEkndmUgcmVmaW5lZCB0aGUgbGlzdCB0byBpbmNsdWRlIGByZWdpc3Rlcl9mZW50cnlfbXVsdGlgLCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCwgYW5kIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgcmVnaXN0ZXJfZmVudHJ5X211bHRpYCBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0J3MgYmVpbmcgZGlyZWN0bHkgbW9kaWZpZWQgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYC4gWWVzLCBpdCBhcHBlYXJzIHNvLCBhbmQgc29tZSBzZWxmdGVzdHMsIHNvIHRoaXMgcmVmaW5lZCBzeW1ib2wgbGlzdCBpcyBhY2N1cmF0ZS5cblxuVGhlIGZpbmFsIGNvbmZpZ3VyYXRpb24sIGFzIGl0IHN0YW5kcywgbG9va3Mgc3BvdC1vbiB0byBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0MzksIk91dHB1dFRva2VucyI6MTQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDExOjQyOjQ1LjA1OTczMDM1N1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NjQ4NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiLFxuICAgIFwiRlRSQUNFXCIsXG4gICAgXCJGVU5DVElPTl9UUkFDRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWdpc3Rlcl9mZW50cnlfbXVsdGlcIixcbiAgICBcImJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaFwiLFxuICAgIFwiYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB0cmFtcG9saW5lIGxvZ2ljIHRvIGNvcnJlY3RseSBzZXQgYGZ0cmFjZV9tYW5hZ2VkYCBmb3IgbXVsdGktYXR0YWNoIGZlbnRyeSBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBmdHJhY2UgYW5kIEJQRiB0cmFtcG9saW5lcyBpbnRlcmFjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiLFxuICAgIFwiRlRSQUNFXCIsXG4gICAgXCJGVU5DVElPTl9UUkFDRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWdpc3Rlcl9mZW50cnlfbXVsdGlcIixcbiAgICBcImJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaFwiLFxuICAgIFwiYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB0cmFtcG9saW5lIGxvZ2ljIHRvIGNvcnJlY3RseSBzZXQgYGZ0cmFjZV9tYW5hZ2VkYCBmb3IgbXVsdGktYXR0YWNoIGZlbnRyeSBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBmdHJhY2UgYW5kIEJQRiB0cmFtcG9saW5lcyBpbnRlcmFjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow98tqd[1] Phase: Succeeded StartedAt: 2026-07-11 11:43:09 +0000 UTC FinishedAt: 2026-07-11 11:43:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-11 11:43:09 +0000 UTC FinishedAt: 2026-07-11 11:43:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[2] Phase: Succeeded StartedAt: 2026-07-11 11:43:09 +0000 UTC FinishedAt: 2026-07-11 16:15:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-11 11:43:09 +0000 UTC FinishedAt: 2026-07-11 16:15:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-11 11:43:09 +0000 UTC FinishedAt: 2026-07-11 11:43:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-11 11:43:09 +0000 UTC FinishedAt: 2026-07-11 11:43:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow98tqd/series-workflow98tqd-convert-artifact-3956026075/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-11 11:43:19 +0000 UTC FinishedAt: 2026-07-11 12:32:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-11 11:43:19 +0000 UTC FinishedAt: 2026-07-11 12:32:30 +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:*0f78abe4-9f10-4e8c-92cd-24955d445c46,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-workflow98tqd/series-workflow98tqd-convert-artifact-3956026075/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": "b1e60515-d48e-487d-9613-781b4ba63a5b", "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-workflow98tqd/series-workflow98tqd-build-action-833873945/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-11 11:43:19 +0000 UTC FinishedAt: 2026-07-11 12:32:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0f78abe4-9f10-4e8c-92cd-24955d445c46,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-workflow98tqd/series-workflow98tqd-convert-artifact-3956026075/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": "b1e60515-d48e-487d-9613-781b4ba63a5b", "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-workflow98tqd/series-workflow98tqd-build-action-833873945/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-11 12:32:30 +0000 UTC FinishedAt: 2026-07-11 12:32:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-11 12:32:30 +0000 UTC FinishedAt: 2026-07-11 12:32:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-11 12:32:30 +0000 UTC FinishedAt: 2026-07-11 12:33:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-11 12:32:30 +0000 UTC FinishedAt: 2026-07-11 12:33:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow98tqd/series-workflow98tqd-convert-artifact-1071019058/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-11 12:33:20 +0000 UTC FinishedAt: 2026-07-11 12:35:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-11 12:33:20 +0000 UTC FinishedAt: 2026-07-11 12:35:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b1e60515-d48e-487d-9613-781b4ba63a5b,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-workflow98tqd/series-workflow98tqd-build-action-833873945/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-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-11 12:35:34 +0000 UTC FinishedAt: 2026-07-11 12:35:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-11 12:35:34 +0000 UTC FinishedAt: 2026-07-11 12:35:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-11 12:35:34 +0000 UTC FinishedAt: 2026-07-11 13:10:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-11 12:35:34 +0000 UTC FinishedAt: 2026-07-11 13:10:56 +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:*0f78abe4-9f10-4e8c-92cd-24955d445c46,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-workflow98tqd/series-workflow98tqd-convert-artifact-1071019058/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": "b0b7330b-1b56-4853-aae8-662a9fdc2d2f", "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-workflow98tqd/series-workflow98tqd-build-action-1712547270/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-11 12:35:34 +0000 UTC FinishedAt: 2026-07-11 13:10:46 +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:*0f78abe4-9f10-4e8c-92cd-24955d445c46,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-workflow98tqd/series-workflow98tqd-convert-artifact-1071019058/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": "b0b7330b-1b56-4853-aae8-662a9fdc2d2f", "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-workflow98tqd/series-workflow98tqd-build-action-1712547270/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-11 13:10:56 +0000 UTC FinishedAt: 2026-07-11 13:10:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-11 13:10:56 +0000 UTC FinishedAt: 2026-07-11 13:10:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-11 13:10:56 +0000 UTC FinishedAt: 2026-07-11 13:13:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-11 13:10:56 +0000 UTC FinishedAt: 2026-07-11 13:12:58 +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:*b0b7330b-1b56-4853-aae8-662a9fdc2d2f,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-workflow98tqd/series-workflow98tqd-build-action-1712547270/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-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-11 13:13:07 +0000 UTC FinishedAt: 2026-07-11 16:15:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-11 13:13:07 +0000 UTC FinishedAt: 2026-07-11 16:15:41 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"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:*b1e60515-d48e-487d-9613-781b4ba63a5b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b0b7330b-1b56-4853-aae8-662a9fdc2d2f,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-workflow98tqd/series-workflow98tqd-build-action-833873945/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-workflow98tqd/series-workflow98tqd-build-action-1712547270/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-11 13:13:07 +0000 UTC FinishedAt: 2026-07-11 13:13:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-11 13:13:07 +0000 UTC FinishedAt: 2026-07-11 13:13:12 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"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-workflow98tqd/series-workflow98tqd-convert-artifact-3824418951/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-11 13:13:07 +0000 UTC FinishedAt: 2026-07-11 13:13:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-11 13:13:07 +0000 UTC FinishedAt: 2026-07-11 13:13:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-11 13:13:07 +0000 UTC FinishedAt: 2026-07-11 13:13:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-11 13:13:17 +0000 UTC FinishedAt: 2026-07-11 16:15:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98tqd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["register_fentry_multi","bpf_trampoline_multi_attach","bpf_tracing_multi_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","FTRACE","FUNCTION_TRACER"],"series_id":"318bc104-7bfc-4851-a4da-198dbede0b9d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-11 13:13:17 +0000 UTC FinishedAt: 2026-07-11 16:15:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b1e60515-d48e-487d-9613-781b4ba63a5b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b0b7330b-1b56-4853-aae8-662a9fdc2d2f,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-workflow98tqd/series-workflow98tqd-build-action-833873945/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-workflow98tqd/series-workflow98tqd-build-action-1712547270/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-workflow98tqd/series-workflow98tqd-convert-artifact-3824418951/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,}