Name: series-workflowtwpkb Phase: Succeeded StartedAt: 2026-09-05 18:24:24 +0000 UTC FinishedAt: 2026-09-05 22:28:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[0] Phase: Succeeded StartedAt: 2026-09-05 18:24:24 +0000 UTC FinishedAt: 2026-09-05 18:43:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 18:24:24 +0000 UTC FinishedAt: 2026-09-05 18:43:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "9eab111e765729e93087ff86a2ec9b2ae42d0fa5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET", "INET", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "9eab111e765729e93087ff86a2ec9b2ae42d0fa5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET", "INET", "DEBUG_INFO_BTF" ], "series_id": "155af2d4-4256-4f64-b299-b1d7508b6d0d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_sock_destroy", "tcp_abort" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NvY2tfZGVzdHJveSYjMzQ7LAogICAgJiMzNDt0Y3BfYWJvcnQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGtmdW5jIGBicGZfc29ja19kZXN0cm95KClgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gc3VwcG9ydCBub24tZnVsbCBzb2NrZXRzIChzdWNoIGFzIFRDUCBUSU1FX1dBSVQgc29ja2V0cykgYnkgY2hlY2tpbmcgYHNrX2Z1bGxzb2NrKHNrKWAgYmVmb3JlIGluc3BlY3RpbmcgYHNrLVx1MDAzZXNrX3Byb3RvY29sYCwgYW5kIGludm9rZXMgYHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KHNrLCBFQ09OTkFCT1JURUQpYC4gVGhlIGFjY29tcGFueWluZyBjaGFuZ2VzIGFyZSBCUEYgc2VsZnRlc3RzLlxuXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXJzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGwsIGV0Yy4pLCBhbmQgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cbi0gVGhlIHBvdGVudGlhbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggc29ja2V0IGRlc3RydWN0aW9uIChlLmcuLCBzb2NrZXQgbGlmZWN5Y2xlL3JlZmNvdW50aW5nIHJhY2VzLCBsb2NraW5nIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBkZXJlZmVyZW5jZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzLlxuLSBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVhY2hhYmxlIEJQRiBrZnVuYyBgYnBmX3NvY2tfZGVzdHJveWAgdG8gc3VwcG9ydCBub24tZnVsbCBzb2NrZXRzIChzdWNoIGFzIFRDUCBUSU1FX1dBSVQgYW5kIHJlcXVlc3Qgc29ja2V0cykgYnkgb25seSBjaGVja2luZyB0aGUgcHJvdG9jb2wgb24gZnVsbCBzb2NrZXRzIChgc2tfZnVsbHNvY2tgKS4gVGhpcyBhbGxvd3MgQlBGIGl0ZXJhdG9yIHByb2dyYW1zIHRvIGludm9rZSBzb2NrZXQgZGVzdHJ1Y3Rpb24gKGBkaWFnX2Rlc3Ryb3lgIC8gYHRjcF9hYm9ydGApIG9uIHRpbWV3YWl0IHNvY2tldHMgYW5kIHN5bi1yZWN2IHJlcXVlc3RzLCB3aGljaCBjYW4gdW5jb3ZlciByYWNlIGNvbmRpdGlvbnMgb3Igc3RhdGUtaGFuZGxpbmcgaXNzdWVzIGR1cmluZyBzb2NrZXQgdGVhcmRvd24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3ZWU0ODc0MzVkMTYxZTY4ZTdkOWZkYTcxN2YzNTQ0NDAwYmNlZDhiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxODo0MToyMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCA2MTk0MGU3NTM1NTIzLi5hNDFjYzYwYTQwMWE1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtMTI5MTIsOCAmIzQzOzEyOTEyLDkgQEAgX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuICAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWRcbiAgKlxuICAqIFJldHVybjpcbi0gKiBPbiBlcnJvciwgbWF5IHJldHVybiBFUFJPVE9OT1NVUFBPUlQsIEVJTlZBTC5cbi0gKiBFUFJPVE9OT1NVUFBPUlQgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuXG4mIzQzOyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIG9yIHdoYXRldmVyIHRoZSBwcm90b2NvbCBzcGVjaWZpY1xuJiM0MzsgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cbiYjNDM7ICogRU9QTk9UU1VQUCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC5cbiAgKiAwIG90aGVyd2lzZVxuICAqL1xuIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcbkBAIC0xMjkyNSw4ICYjNDM7MTI5MjYsMTIgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuIFx0ICogU3VwcG9ydGluZyBwcm90b2NvbHMgd2lsbCBuZWVkIHRvIGFjcXVpcmUgc29jayBsb2NrIGluIHRoZSBCUEYgY29udGV4dFxuIFx0ICogcHJpb3IgdG8gaW52b2tpbmcgdGhpcyBrZnVuYy5cbiBcdCAqL1xuLVx0aWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSB8fCAoc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdCAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKSlcbiYjNDM7XHRpZiAoIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRpZiAoc2tfZnVsbHNvY2soc2spIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdHJldHVybiBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG5pbmRleCA5YzExOTM4ZmU1OTdkLi5iOTBmYWI3MDczMzg2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG5AQCAtMTEwLDYgJiM0MzsxMTAsNzQgQEAgc3RhdGljIHZvaWQgdGVzdF90Y3Bfc2VydmVyKHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbiBcdFx0Y2xvc2Uoc2Vydik7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3RjcF90aW1ld2FpdChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBhY2NlcHRfc2VydiA9IC0xLCBuO1xuJiM0MztcdHN0cnVjdCB0aW1ldmFsIHR2ID0ge307XG4mIzQzO1x0Y2hhciBidWZbMV07XG4mIzQzO1xuJiM0MztcdHNlcnYgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBOVUxMLCAwLCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShzZXJ2LCAwLCBcJiMzNDtzdGFydF9zZXJ2ZXJcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRjbGllbiA9IGNvbm5lY3RfdG9fZmQoc2VydiwgMCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoY2xpZW4sIDAsIFwmIzM0O2Nvbm5lY3RfdG9fZmRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRhY2NlcHRfc2VydiA9IGFjY2VwdChzZXJ2LCBOVUxMLCBOVUxMKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShhY2NlcHRfc2VydiwgMCwgXCYjMzQ7c2VydiBhY2NlcHRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFjdGl2ZSBjbG9zZSBmcm9tIHRoZSBjbGllbnQsIHRoZW4gY2xvc2UgdGhlIHNlcnZlciBzaWRlLiBPbmNlXG4mIzQzO1x0ICogcmVjdigpIHNlZXMgRU9GIHRoZSBzZXJ2ZXIgRklOIGhhcyBiZWVuIHByb2Nlc3NlZCBhbmQgdGhlIGNsaWVudFxuJiM0MztcdCAqIHNvY2sgaXMgaW4gVElNRV9XQUlULiBCbG9jayB3aXRob3V0IHRpbWVvdXQgc28gYSBsb2FkZWQgQ0kgYm94XG4mIzQzO1x0ICogY2FuJiMzOTt0IHJhY2UgdXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soc2V0c29ja29wdChjbGllbiwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFx1MDAyNnR2LFxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHR2KSksIFwmIzM0O2NsZWFyIHJjdnRpbWVvXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhzaHV0ZG93bihjbGllbiwgU0hVVF9XUiksIFwmIzM0O2NsaWVudCBzaHV0ZG93blwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTWFrZSBzdXJlIHRoZSBzZXJ2ZXIgaGFzIHNlZW4gdGhlIGNsaWVudCBGSU4gYmVmb3JlIGl0IGNsb3NlcyxcbiYjNDM7XHQgKiBzbyB0aGUgdHdvIEZJTnMgbmV2ZXIgY3Jvc3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0biA9IHJlY3YoYWNjZXB0X3NlcnYsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKG4sIDAsIFwmIzM0O3NlcnZlciByZWN2IEVPRlwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGNsb3NlKGFjY2VwdF9zZXJ2KTtcbiYjNDM7XHRhY2NlcHRfc2VydiA9IC0xO1xuJiM0MztcbiYjNDM7XHQvKiBibG9jayB1bnRpbCByZXR1cm4gRU9GICovXG4mIzQzO1x0biA9IHJlY3YoY2xpZW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKG4sIDAsIFwmIzM0O2NsaWVudCByZWN2IEVPRlwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgdGhlIHRpbWV3YWl0IGNsaWVudCBzb2NrLiAqL1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kID0gMDtcbiYjNDM7XHRzdGFydF9pdGVyX3NvY2tldHMoc2tlbC1cdTAwM2Vwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kLCAxLCBcJiMzNDt0aW1ld2FpdCBzb2NrIGZvdW5kXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX09LKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2Rlc3Ryb3lfZXJyLCBcJiMzNDtkZXN0cm95IHRpbWV3YWl0IHNvY2tcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgZGVzdHJveWVkIHRpbWV3YWl0IHNvY2sgbXVzdCBiZSBnb25lLiAqL1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kID0gMDtcbiYjNDM7XHRzdGFydF9pdGVyX3NvY2tldHMoc2tlbC1cdTAwM2Vwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19mb3VuZCwgMCwgXCYjMzQ7dGltZXdhaXQgc29jayBkZXN0cm95ZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7Y2xlYW51cDpcbiYjNDM7XHRpZiAoY2xpZW4gIT0gLTEpXG4mIzQzO1x0XHRjbG9zZShjbGllbik7XG4mIzQzO1x0aWYgKGFjY2VwdF9zZXJ2ICE9IC0xKVxuJiM0MztcdFx0Y2xvc2UoYWNjZXB0X3NlcnYpO1xuJiM0MztcdGlmIChzZXJ2ICE9IC0xKVxuJiM0MztcdFx0Y2xvc2Uoc2Vydik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdGVzdF91ZHBfY2xpZW50KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbiB7XG4gXHRpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBuID0gMDtcbkBAIC0yMDQsMTEgJiM0MzsyNzIsMTIgQEAgdm9pZCB0ZXN0X3NvY2tfZGVzdHJveSh2b2lkKVxuIFx0XHR0ZXN0X3RjcF9jbGllbnQoc2tlbCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDt0Y3Bfc2VydmVyXCYjMzQ7KSlcbiBcdFx0dGVzdF90Y3Bfc2VydmVyKHNrZWwpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3RjcF90aW1ld2FpdFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X3RjcF90aW1ld2FpdChza2VsKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3VkcF9jbGllbnRcJiMzNDspKVxuIFx0XHR0ZXN0X3VkcF9jbGllbnQoc2tlbCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDt1ZHBfc2VydmVyXCYjMzQ7KSlcbiBcdFx0dGVzdF91ZHBfc2VydmVyKHNrZWwpO1xuLVxuIFx0UlVOX1RFU1RTKHNvY2tfZGVzdHJveV9wcm9nX2ZhaWwpO1xuIFxuIGNsZWFudXA6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xuaW5kZXggOWUwYmY3YTU0Y2VjOS4uMGE4ODg3NTQzMjE4YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xuQEAgLTcsNiAmIzQzOzcsOCBAQFxuICNpbmNsdWRlIFwmIzM0O2JwZl90cmFjaW5nX25ldC5oXCYjMzQ7XG4gXG4gX19iZTE2IHNlcnZfcG9ydCA9IDA7XG4mIzQzO2ludCB0d19mb3VuZCA9IDA7XG4mIzQzO2ludCB0d19kZXN0cm95X2VyciA9IDA7XG4gXG4gaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzaykgX19rc3ltO1xuIFxuQEAgLTEwMCw2ICYjNDM7MTAyLDM0IEBAIGludCBpdGVyX3RjcDZfc2VydmVyKHN0cnVjdCBicGZfaXRlcl9fdGNwICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDtpdGVyL3RjcFwmIzM0OylcbiYjNDM7aW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNvY2tfY29tbW9uICpza19jb21tb24gPSBjdHgtXHUwMDNlc2tfY29tbW9uO1xuJiM0MztcdF9fdTY0ICp2YWw7XG4mIzQzO1x0aW50IGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghc2tfY29tbW9uKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChza19jb21tb24tXHUwMDNlc2tjX2ZhbWlseSAhPSBBRl9JTkVUNilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2soc2tfY29tbW9uKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRjcF9jb25uX3NvY2tldHMsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHQvKiBUaGUgdGltZXdhaXQgc29jayBpbmhlcml0cyB0aGUgY29va2llIG9mIHRoZSBjbG9zZWQgY2xpZW50IHNvY2suICovXG4mIzQzO1x0aWYgKGJwZl9nZXRfc29ja2V0X2Nvb2tpZShza19jb21tb24pICE9ICp2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0dHdfZm91bmQmIzQzOyYjNDM7O1xuJiM0MztcdHR3X2Rlc3Ryb3lfZXJyID0gYnBmX3NvY2tfZGVzdHJveShza19jb21tb24pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuIFxuIFNFQyhcJiMzNDtpdGVyL3VkcFwmIzM0OylcbiBpbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NvY2tfZGVzdHJveSYjMzQ7LAogICAgJiMzNDt0Y3BfYWJvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlYWNoYWJsZSBCUEYga2Z1bmMgYGJwZl9zb2NrX2Rlc3Ryb3lgIHRvIHN1cHBvcnQgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIGFuZCByZXF1ZXN0IHNvY2tldHMpIGJ5IG9ubHkgY2hlY2tpbmcgdGhlIHByb3RvY29sIG9uIGZ1bGwgc29ja2V0cyAoYHNrX2Z1bGxzb2NrYCkuIFRoaXMgYWxsb3dzIEJQRiBpdGVyYXRvciBwcm9ncmFtcyB0byBpbnZva2Ugc29ja2V0IGRlc3RydWN0aW9uIChgZGlhZ19kZXN0cm95YCAvIGB0Y3BfYWJvcnRgKSBvbiB0aW1ld2FpdCBzb2NrZXRzIGFuZCBzeW4tcmVjdiByZXF1ZXN0cywgd2hpY2ggY2FuIHVuY292ZXIgcmFjZSBjb25kaXRpb25zIG9yIHN0YXRlLWhhbmRsaW5nIGlzc3VlcyBkdXJpbmcgc29ja2V0IHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2VlNDg3NDM1ZDE2MWU2OGU3ZDlmZGE3MTdmMzU0NDQwMGJjZWQ4YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTg6NDE6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDYxOTQwZTc1MzU1MjMuLmE0MWNjNjBhNDAxYTUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC0xMjkxMiw4ICYjNDM7MTI5MTIsOSBAQCBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7CiAgKiBAc29jazogUG9pbnRlciB0byBzb2NrZXQgdG8gYmUgZGVzdHJveWVkCiAgKgogICogUmV0dXJuOgotICogT24gZXJyb3IsIG1heSByZXR1cm4gRVBST1RPTk9TVVBQT1JULCBFSU5WQUwuCi0gKiBFUFJPVE9OT1NVUFBPUlQgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuCiYjNDM7ICogT24gZXJyb3IsIG1heSByZXR1cm4gRU9QTk9UU1VQUCwgb3Igd2hhdGV2ZXIgdGhlIHByb3RvY29sIHNwZWNpZmljCiYjNDM7ICogZGVzdHJveSBoYW5kbGVyIHJldHVybnMuCiYjNDM7ICogRU9QTk9UU1VQUCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC4KICAqIDAgb3RoZXJ3aXNlCiAgKi8KIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaykKQEAgLTEyOTI1LDggJiM0MzsxMjkyNiwxMiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spCiAJICogU3VwcG9ydGluZyBwcm90b2NvbHMgd2lsbCBuZWVkIHRvIGFjcXVpcmUgc29jayBsb2NrIGluIHRoZSBCUEYgY29udGV4dAogCSAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuCiAJICovCi0JaWYgKCFzay0mZ3Q7c2tfcHJvdC0mZ3Q7ZGlhZ19kZXN0cm95IHx8IChzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJmFtcDsmYW1wOwotCQkJCQkgICBzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApKQomIzQzOwlpZiAoIXNrLSZndDtza19wcm90LSZndDtkaWFnX2Rlc3Ryb3kpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmIChza19mdWxsc29jayhzaykgJmFtcDsmYW1wOwomIzQzOwkgICAgc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVENQICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJcmV0dXJuIHNrLSZndDtza19wcm90LSZndDtkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jCmluZGV4IDljMTE5MzhmZTU5N2QuLmI5MGZhYjcwNzMzODYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jCkBAIC0xMTAsNiAmIzQzOzExMCw3NCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3RjcF9zZXJ2ZXIoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKQogCQljbG9zZShzZXJ2KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRlc3RfdGNwX3RpbWV3YWl0KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbCkKJiM0Mzt7CiYjNDM7CWludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIGFjY2VwdF9zZXJ2ID0gLTEsIG47CiYjNDM7CXN0cnVjdCB0aW1ldmFsIHR2ID0ge307CiYjNDM7CWNoYXIgYnVmWzFdOwomIzQzOwomIzQzOwlzZXJ2ID0gc3RhcnRfc2VydmVyKEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgTlVMTCwgMCwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHNlcnYsIDAsICYjMzQ7c3RhcnRfc2VydmVyJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwljbGllbiA9IGNvbm5lY3RfdG9fZmQoc2VydiwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGNsaWVuLCAwLCAmIzM0O2Nvbm5lY3RfdG9fZmQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWFjY2VwdF9zZXJ2ID0gYWNjZXB0KHNlcnYsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShhY2NlcHRfc2VydiwgMCwgJiMzNDtzZXJ2IGFjY2VwdCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQWN0aXZlIGNsb3NlIGZyb20gdGhlIGNsaWVudCwgdGhlbiBjbG9zZSB0aGUgc2VydmVyIHNpZGUuIE9uY2UKJiM0MzsJICogcmVjdigpIHNlZXMgRU9GIHRoZSBzZXJ2ZXIgRklOIGhhcyBiZWVuIHByb2Nlc3NlZCBhbmQgdGhlIGNsaWVudAomIzQzOwkgKiBzb2NrIGlzIGluIFRJTUVfV0FJVC4gQmxvY2sgd2l0aG91dCB0aW1lb3V0IHNvIGEgbG9hZGVkIENJIGJveAomIzQzOwkgKiBjYW4mIzM5O3QgcmFjZSB1cy4KJiM0MzsJICovCiYjNDM7CWlmICghQVNTRVJUX09LKHNldHNvY2tvcHQoY2xpZW4sIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCAmYW1wO3R2LAomIzQzOwkJCQkgIHNpemVvZih0dikpLCAmIzM0O2NsZWFyIHJjdnRpbWVvJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhzaHV0ZG93bihjbGllbiwgU0hVVF9XUiksICYjMzQ7Y2xpZW50IHNodXRkb3duJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYWtlIHN1cmUgdGhlIHNlcnZlciBoYXMgc2VlbiB0aGUgY2xpZW50IEZJTiBiZWZvcmUgaXQgY2xvc2VzLAomIzQzOwkgKiBzbyB0aGUgdHdvIEZJTnMgbmV2ZXIgY3Jvc3MuCiYjNDM7CSAqLwomIzQzOwluID0gcmVjdihhY2NlcHRfc2VydiwgYnVmLCBzaXplb2YoYnVmKSwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKG4sIDAsICYjMzQ7c2VydmVyIHJlY3YgRU9GJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwljbG9zZShhY2NlcHRfc2Vydik7CiYjNDM7CWFjY2VwdF9zZXJ2ID0gLTE7CiYjNDM7CiYjNDM7CS8qIGJsb2NrIHVudGlsIHJldHVybiBFT0YgKi8KJiM0MzsJbiA9IHJlY3YoY2xpZW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOwomIzQzOwlpZiAoIUFTU0VSVF9FUShuLCAwLCAmIzM0O2NsaWVudCByZWN2IEVPRiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogUnVuIGl0ZXJhdG9yIHByb2dyYW0gdGhhdCBkZXN0cm95cyB0aGUgdGltZXdhaXQgY2xpZW50IHNvY2suICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQgPSAwOwomIzQzOwlzdGFydF9pdGVyX3NvY2tldHMoc2tlbC0mZ3Q7cHJvZ3MuaXRlcl90Y3A2X3RpbWV3YWl0KTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDt0d19mb3VuZCwgMSwgJiMzNDt0aW1ld2FpdCBzb2NrIGZvdW5kJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlBU1NFUlRfT0soc2tlbC0mZ3Q7YnNzLSZndDt0d19kZXN0cm95X2VyciwgJiMzNDtkZXN0cm95IHRpbWV3YWl0IHNvY2smIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFRoZSBkZXN0cm95ZWQgdGltZXdhaXQgc29jayBtdXN0IGJlIGdvbmUuICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQgPSAwOwomIzQzOwlzdGFydF9pdGVyX3NvY2tldHMoc2tlbC0mZ3Q7cHJvZ3MuaXRlcl90Y3A2X3RpbWV3YWl0KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQsIDAsICYjMzQ7dGltZXdhaXQgc29jayBkZXN0cm95ZWQmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGNsaWVuICE9IC0xKQomIzQzOwkJY2xvc2UoY2xpZW4pOwomIzQzOwlpZiAoYWNjZXB0X3NlcnYgIT0gLTEpCiYjNDM7CQljbG9zZShhY2NlcHRfc2Vydik7CiYjNDM7CWlmIChzZXJ2ICE9IC0xKQomIzQzOwkJY2xvc2Uoc2Vydik7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdGVzdF91ZHBfY2xpZW50KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbCkKIHsKIAlpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBuID0gMDsKQEAgLTIwNCwxMSAmIzQzOzI3MiwxMiBAQCB2b2lkIHRlc3Rfc29ja19kZXN0cm95KHZvaWQpCiAJCXRlc3RfdGNwX2NsaWVudChza2VsKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3RjcF9zZXJ2ZXImIzM0OykpCiAJCXRlc3RfdGNwX3NlcnZlcihza2VsKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt0Y3BfdGltZXdhaXQmIzM0OykpCiYjNDM7CQl0ZXN0X3RjcF90aW1ld2FpdChza2VsKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3VkcF9jbGllbnQmIzM0OykpCiAJCXRlc3RfdWRwX2NsaWVudChza2VsKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3VkcF9zZXJ2ZXImIzM0OykpCiAJCXRlc3RfdWRwX3NlcnZlcihza2VsKTsKLQogCVJVTl9URVNUUyhzb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsKTsKIAogY2xlYW51cDoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMKaW5kZXggOWUwYmY3YTU0Y2VjOS4uMGE4ODg3NTQzMjE4YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMKQEAgLTcsNiAmIzQzOzcsOCBAQAogI2luY2x1ZGUgJiMzNDticGZfdHJhY2luZ19uZXQuaCYjMzQ7CiAKIF9fYmUxNiBzZXJ2X3BvcnQgPSAwOwomIzQzO2ludCB0d19mb3VuZCA9IDA7CiYjNDM7aW50IHR3X2Rlc3Ryb3lfZXJyID0gMDsKIAogaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzaykgX19rc3ltOwogCkBAIC0xMDAsNiAmIzQzOzEwMiwzNCBAQCBpbnQgaXRlcl90Y3A2X3NlcnZlcihzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7aXRlci90Y3AmIzM0OykKJiM0MztpbnQgaXRlcl90Y3A2X3RpbWV3YWl0KHN0cnVjdCBicGZfaXRlcl9fdGNwICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja19jb21tb24gKnNrX2NvbW1vbiA9IGN0eC0mZ3Q7c2tfY29tbW9uOwomIzQzOwlfX3U2NCAqdmFsOwomIzQzOwlpbnQga2V5ID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFza19jb21tb24pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHNrX2NvbW1vbi0mZ3Q7c2tjX2ZhbWlseSAhPSBBRl9JTkVUNikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoIWJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2soc2tfY29tbW9uKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7dGNwX2Nvbm5fc29ja2V0cywgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwkvKiBUaGUgdGltZXdhaXQgc29jayBpbmhlcml0cyB0aGUgY29va2llIG9mIHRoZSBjbG9zZWQgY2xpZW50IHNvY2suICovCiYjNDM7CWlmIChicGZfZ2V0X3NvY2tldF9jb29raWUoc2tfY29tbW9uKSAhPSAqdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXR3X2ZvdW5kJiM0MzsmIzQzOzsKJiM0MzsJdHdfZGVzdHJveV9lcnIgPSBicGZfc29ja19kZXN0cm95KHNrX2NvbW1vbik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KIAogU0VDKCYjMzQ7aXRlci91ZHAmIzM0OykKIGludCBpdGVyX3VkcDZfY2xpZW50KHN0cnVjdCBicGZfaXRlcl9fdWRwICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBicGZfc29ja19kZXN0cm95IENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGJwZl9zb2NrX2Rlc3Ryb3lgIGRpZmYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB0aGUgaW1wbGljYXRpb25zLiBSaWdodCBhd2F5LCBJIHNlZSB0aGUgbW9kaWZpY2F0aW9ucyB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290IHNvbWUgY29uZGl0aW9uYWwgbG9naWMgcmVsYXRlZCB0byBwcm90b2NvbCBoYW5kbGluZyBhbmQgc29ja2V0IGRlc3RydWN0aW9uLgoKU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBvcmlnaW5hbGx5IGhhZCBhIGNoZWNrIHRvIHNlZSBpZiB0aGUgc29ja2V0IHByb3RvY29sIHdhcyBuZWl0aGVyIFRDUCBub3IgVURQIGJlZm9yZSByZXR1cm5pbmcgYC1FT1BOT1RTVVBQYC4gVGhhdCBjaGVjayBoYXMgYmVlbiBtb2RpZmllZC4gTm93LCBpdCBhcHBlYXJzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgY2hlY2sgYHNrX2Z1bGxzb2NrKHNrKWAgaW50cm9kdWNlZCwgYW5kIHRoZSBwcm90b2NvbCBmaWx0ZXJpbmcgaXMgd2l0aGluIHRoYXQgbmV3IGNvbmRpdGlvbmFsLiBBbHNvLCBhIGAtRU9QTk9UU1VQUGAgaXMgcmV0dXJuZWQgaWYgYGRpYWdfZGVzdHJveWAgaXMgbm90IGRlZmluZWQuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVhc29uaW5nIGhlcmUuIFRoZSBjb21tZW50IHN1Z2dlc3RzIHRoYXQgc3VwcG9ydGluZyBwcm90b2NvbHMgbXVzdCBhY3F1aXJlIHRoZSBzb2NrIGxvY2sgYmVmb3JlIGNhbGxpbmcgdGhpcyBrZnVuYy4gU28gSSBoYXZlIHRvIHVuZGVyc3RhbmQgd2h5IHRoZSBhZGRlZCBjaGVjayBhbmQgdGhlIHByb3RvY29sIGZpbHRlcmluZyBpcyByZWxldmFudCB0byB0aGlzIGxvY2tpbmcgcmVxdWlyZW1lbnQuCgpUbyB0cnVseSBncmFzcCB0aGlzLCBJIG5lZWQgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBnbyBiZXlvbmQgdGhpcyBzbmlwcGV0LiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBzZWUgaG93IGBicGZfc29ja19kZXN0cm95YCBpcyBkZWZpbmVkLiBJJiMzOTtsbCBhbHNvIGNoZWNrIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBhbmQgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEEgcXVpY2sgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHdpbGwgZ2l2ZSBtZSB0aGF0IHN1cnJvdW5kaW5nIGNvZGUsIGRlcGVuZGVuY2llcywgYW5kIGNhbGwgc2l0ZXMuIEkgbmVlZCB0byBzZWUgd2hhdCBvdGhlciBjb2RlIHRoaXMgdG91Y2hlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI5MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI5MTA6XHQgKlxuMTI5MTE6XHQgKiBQYXJhbWV0ZXJzOlxuMTI5MTI6XHQgKiBAc29jazogUG9pbnRlciB0byBzb2NrZXQgdG8gYmUgZGVzdHJveWVkXG4xMjkxMzpcdCAqXG4xMjkxNDpcdCAqIFJldHVybjpcbjEyOTE1Olx0ICogT24gZXJyb3IsIG1heSByZXR1cm4gRU9QTk9UU1VQUCwgb3Igd2hhdGV2ZXIgdGhlIHByb3RvY29sIHNwZWNpZmljXG4xMjkxNjpcdCAqIGRlc3Ryb3kgaGFuZGxlciByZXR1cm5zLlxuMTI5MTc6XHQgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuMTI5MTg6XHQgKiAwIG90aGVyd2lzZVxuMTI5MTk6XHQgKi9cbjEyOTIwOlx0X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuMTI5MjE6XHR7XG4xMjkyMjpcdFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopc29jaztcbjEyOTIzOlx0XG4xMjkyNDpcdFx0LyogVGhlIGxvY2tpbmcgc2VtYW50aWNzIHRoYXQgYWxsb3cgZm9yIHN5bmNocm9ub3VzIGV4ZWN1dGlvbiBvZiB0aGVcbjEyOTI1Olx0XHQgKiBkZXN0cm95IGhhbmRsZXJzIGFyZSBvbmx5IHN1cHBvcnRlZCBmb3IgVENQIGFuZCBVRFAuXG4xMjkyNjpcdFx0ICogU3VwcG9ydGluZyBwcm90b2NvbHMgd2lsbCBuZWVkIHRvIGFjcXVpcmUgc29jayBsb2NrIGluIHRoZSBCUEYgY29udGV4dFxuMTI5Mjc6XHRcdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXG4xMjkyODpcdFx0ICovXG4xMjkyOTpcdFx0aWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSlcbjEyOTMwOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEyOTMxOlx0XG4xMjkzMjpcdFx0aWYgKHNrX2Z1bGxzb2NrKHNrKSBcdTAwMjZcdTAwMjZcbjEyOTMzOlx0XHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4xMjkzNDpcdFx0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxuMTI5MzU6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTI5MzY6XHRcbjEyOTM3Olx0XHRyZXR1cm4gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XG4xMjkzODpcdH1cbjEyOTM5Olx0XG4xMjk0MDpcdF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4xMjk0MTpcdFxuMTI5NDI6XHRCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcbjEyOTQzOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zb2NrX2Rlc3Ryb3kpXG4xMjk0NDpcdEJURl9LRlVOQ1NfRU5EKGJwZl9za19pdGVyX2tmdW5jX2lkcylcbjEyOTQ1Olx0XG4xMjk0NjpcdHN0YXRpYyBpbnQgdHJhY2luZ19pdGVyX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbjEyOTQ3Olx0e1xuMTI5NDg6XHRcdGlmIChidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19pZHMsIGtmdW5jX2lkKSBcdTAwMjZcdTAwMjZcbjEyOTQ5Olx0XHQgICAgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfSVRFUilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjA3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTb2NrZXQgRGVzdHJ1Y3Rpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZSBzbmlwcGV0IGFuZCBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24uIEkmIzM5O20gbG9va2luZyBhdCBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudCBoZXJlLCBzcGVjaWZpY2FsbHk6CgpgYGBjCmlmICghc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveSB8fCAoc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVENQICZhbXA7JmFtcDsKCQkJCSAgIHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkpCmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoaXMgbG9va3MgbGlrZSBzb21lIHNvcnQgb2Ygc29ja2V0IGNsZWFudXAgb3IgZGVzdHJ1Y3Rpb24gbG9naWMuIFByZXZpb3VzbHksIHRoZSBjb2RlIGNoZWNrcyBmb3IgYGRpYWdfZGVzdHJveWAsIGJ1dCBJIHNlZSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYzogYHNrLSZndDtza19wcm90b2NvbGAgaXMgb25seSByZWxpYWJsZSB3aGVuIGBza19mdWxsc29jayhzaylgIGlzIHRydWUuIElmIGBza2AgaXMgKm5vdCogYSAmIzM0O2Z1bGwgc29ja2V0LCYjMzQ7IG1lYW5pbmcgaXQmIzM5O3Mgc29tZXRoaW5nIGxpa2UgYSBgaW5ldF90aW1ld2FpdF9zb2NrYCBvciBhIGByZXF1ZXN0X3NvY2tgIChzb2NrZXRzIGRlcml2ZWQgZnJvbSBgc29ja19jb21tb25gKSwgdGhlbiBgc2stJmd0O3NrX3Byb3RvY29sYCBlaXRoZXIgZG9lc24mIzM5O3QgZXhpc3QgYXQgYWxsIG9yIGl0JiMzOTtzIGF0IGFuIG9mZnNldCB0aGF0JiMzOTtzIGludmFsaWQsIGFuZCBgc2tfZnVsbHNvY2tgIGlzIGZhbHNlLiBUaGlzIGlzIGEgY3J1Y2lhbCBkaXN0aW5jdGlvbi4KClNwZWNpZmljYWxseSwgd2l0aCB0aW1ld2FpdCBzb2NrZXRzLCBgc2tfZnVsbHNvY2soc2spYCBpcyBmYWxzZS4gU28sIG5vdywgSSBuZWVkIHRvIGtub3cgYWJvdXQgYGRpYWdfZGVzdHJveWAgZm9yIFRDUCB0aW1ld2FpdCBvciBub24tZnVsbHNvY2sgaW5zdGFuY2VzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGFuZCBob3cgaXQgaGFuZGxlcyB0aGVzZSBzb2NrZXQgdHlwZXMuIEkmIzM5O2xsIG5lZWQgdG8gZ3JlcCB0aHJvdWdoIHRoZSBjb2RlYmFzZSB0byB0cmFjZSB0aGUgdXNlIG9mIGBkaWFnX2Rlc3Ryb3lgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIGluIHRoZSBjYXNlIG9mIHRpbWV3YWl0IHNvY2tldHMgYW5kIHNvY2tldHMgdGhhdCBhcmUgbm90IGZ1bGwgc29ja2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC5kaWFnX2Rlc3Ryb3kmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvcmF3LmM9OTQ4PXN0cnVjdCBwcm90byByYXdfcHJvdCA9IHtcbi0tXG5uZXQvaXB2NC9yYXcuYy05NzItI2VuZGlmXG5uZXQvaXB2NC9yYXcuYzo5NzM6XHQuZGlhZ19kZXN0cm95XHQgICA9IHJhd19hYm9ydCxcbm5ldC9pcHY0L3Jhdy5jLTk3NC19O1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzM0Nz1zdHJ1Y3QgcHJvdG8gdGNwX3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzk1LVx0Lm5vX2F1dG9iaW5kXHRcdD0gdHJ1ZSxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzM5NjpcdC5kaWFnX2Rlc3Ryb3lcdFx0PSB0Y3BfYWJvcnQsXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzOTctfTtcbi0tXG5uZXQvaXB2NC91ZHAuYz0zMTQzPXN0cnVjdCBwcm90byB1ZHBfcHJvdCA9IHtcbi0tXG5uZXQvaXB2NC91ZHAuYy0zMTczLVx0Lm9ial9zaXplXHRcdD0gc2l6ZW9mKHN0cnVjdCB1ZHBfc29jayksXG5uZXQvaXB2NC91ZHAuYzozMTc0Olx0LmRpYWdfZGVzdHJveVx0XHQ9IHVkcF9hYm9ydCxcbm5ldC9pcHY0L3VkcC5jLTMxNzUtfTtcbi0tXG5uZXQvaXB2Ni9yYXcuYz0xMjA3PXN0cnVjdCBwcm90byByYXd2Nl9wcm90ID0ge1xuLS1cbm5ldC9pcHY2L3Jhdy5jLTEyMzEtI2VuZGlmXG5uZXQvaXB2Ni9yYXcuYzoxMjMyOlx0LmRpYWdfZGVzdHJveVx0ICAgPSByYXdfYWJvcnQsXG5uZXQvaXB2Ni9yYXcuYy0xMjMzLX07XG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMjc2PXN0cnVjdCBwcm90byB0Y3B2Nl9wcm90ID0ge1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMyNS1cdC5ub19hdXRvYmluZFx0XHQ9IHRydWUsXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIzMjY6XHQuZGlhZ19kZXN0cm95XHRcdD0gdGNwX2Fib3J0LFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzI3LX07XG4tLVxubmV0L2lwdjYvdWRwLmM9MTkwOD1zdHJ1Y3QgcHJvdG8gdWRwdjZfcHJvdCA9IHtcbi0tXG5uZXQvaXB2Ni91ZHAuYy0xOTQwLVx0LmlwdjZfcGluZm9fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVkcDZfc29jaywgaW5ldDYpLFxubmV0L2lwdjYvdWRwLmM6MTk0MTpcdC5kaWFnX2Rlc3Ryb3lcdFx0PSB1ZHBfYWJvcnQsXG5uZXQvaXB2Ni91ZHAuYy0xOTQyLX07XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTQ2PXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfaW5pdCh2b2lkKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE2Ni1cdHRjcF9wcm90X292ZXJyaWRlLnJlbGVhc2VfY2IgPSB0Y3BfcmVsZWFzZV9jYl9vdmVycmlkZTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjE2NzpcdHRjcF9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE2OC0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTgwPXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfdjZfaW5pdCh2b2lkKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjIxMy1cdHRjcHY2X3Byb3Rfb3ZlcnJpZGUucmVsZWFzZV9jYiA9IHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlO1xubmV0L21wdGNwL3N1YmZsb3cuYzoyMjE0Olx0dGNwdjZfcHJvdF9vdmVycmlkZS5kaWFnX2Rlc3Ryb3kgPSB0Y3BfYWJvcnRfb3ZlcnJpZGU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTUtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NTUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB0Y3BfYWJvcnRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBUQ1AvSVAgcGljdHVyZSwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBbbWVudGlvbiBzb21ldGhpbmcgc3BlY2lmaWMgdG8geW91ciBmaWVsZCwgZS5nLiwgJiMzNDt0aGUgYXBwbGljYXRpb24tbGV2ZWwgaW1wbGljYXRpb25zIGZvciBoaWdoLXRocm91Z2hwdXQgZGF0YSB0cmFuc2ZlciwmIzM0OyBvciAmIzM0O3RoZSBwb3RlbnRpYWwgZm9yIGFidXNlIGluIEREb1MgYXR0YWNrcyYjMzQ7XS4gIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgZXJyb3IgaGFuZGxpbmcg4oCTIHdoYXQgc3BlY2lmaWMgc2l0dWF0aW9ucyB0cmlnZ2VyIHRoaXMgYWJvcnQ/IElzIGl0IGluaXRpYXRlZCBieSB0aGUgbG9jYWwgaG9zdCwgdGhlIHJlbW90ZSBob3N0LCBvciBwZXJoYXBzIGEgdGltZW91dD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIGNvbmRpdGlvbnMuCgoqKk15IEFuYWx5c2lzIG9mIGB0Y3BfYWJvcnRgKioKCkkgaGF2ZSB0byBjb25zaWRlciB0aGUgaW1tZWRpYXRlIGltcGFjdCBvbiB0aGUgY29ubmVjdGlvbiwgb2YgY291cnNlLiBEb2VzIGl0IGdyYWNlZnVsbHkgc2h1dCBkb3duIHRoZSBjb25uZWN0aW9uLCBhdHRlbXB0IHNvbWUgc29ydCBvZiBub3RpZmljYXRpb24sIG9yIHNpbXBseSBzbGFtIHRoZSBkb29yPyAgVGhlIGxldmVsIG9mIGRldGFpbCByZXF1aXJlZCBmb3IgdGhlIHJlc3BvbnNlIGlzIGNydWNpYWwsIGFzIHRoaXMgZGljdGF0ZXMgcmVjb3Zlcnkgc3RyYXRlZ3ksIHNvIEkgbmVlZCB0byBrbm93IGhvdyBpdCBpbmZvcm1zIHRoZSBhcHBsaWNhdGlvbi4gQXJlIHRoZXJlIGFueSByZXNvdXJjZSBjbGVhbnVwIHJvdXRpbmVzIGluIHRoaXMgYWJvcnQgcHJvY2Vzcz8gIEl0JiMzOTtzIGNyaXRpY2FsIHRvIGF2b2lkIHJlc291cmNlIGxlYWtzLiBBbHNvLCB3aGF0IGlzIHRoZSBpbXBhY3Qgb24gdGhlIHJlY2VpdmluZyBlbmQ/CgpGdXJ0aGVybW9yZSwgSSBoYXZlIHRvIG1lbnRhbGx5IG1vZGVsIGhvdyB0aGlzIHdvcmtzIHdpdGggZXhpc3RpbmcgY29kZWJhc2VzLiBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IGhvdyBpdCBiZWhhdmVzIGluIHByYWN0aWNlLiBDb3VsZCB0aGlzIGhhdmUgcG90ZW50aWFsIHByb2JsZW1zPyBEb2VzIHRoaXMgaW50cm9kdWNlIGxhdGVuY3k/IElzIGl0IGVmZmljaWVudCwgb3IgY2FuIHdlIHJlZmFjdG9yIGZvciBiZXR0ZXIgZWZmaWNpZW5jeT8gSXMgdGhlcmUgYW55IGNoYW5jZSBvZiBkYXRhIGNvcnJ1cHRpb24gb3IgbG9zdCBkYXRhPyBIb3cgZG9lcyB0aGlzIHdvcmsgd2l0aCBvdGhlciBmdW5jdGlvbnM/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHRjcF9hYm9ydFxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD0xNzA0PXZvaWQgdGNwX2RvbmUoc3RydWN0IHNvY2sgKnNrKTtcbmluY2x1ZGUvbmV0L3RjcC5oOjE3MDU6aW50IHRjcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpO1xuaW5jbHVkZS9uZXQvdGNwLmgtMTcwNi1cbi0tXG5uZXQvaXB2NC90Y3AuYz01MDg5PXZvaWQgdGNwX2RvbmUoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTUxMTQtXG5uZXQvaXB2NC90Y3AuYzo1MTE1OmludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxubmV0L2lwdjQvdGNwLmMtNTExNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEzNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgVENQIFN0YWNrKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGJlaGF2aW9yIGluIHRoZSBMaW51eCBUQ1AgaW1wbGVtZW50YXRpb24sIHNvIGxldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBuZXQvaXB2NC90Y3AuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1MTE1LiBJIGtub3cgdGhpcyBhcmVhIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSB0b3BpYyBJJiMzOTttIGludmVzdGlnYXRpbmcsIGJ1dCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIGRvbmUuIEZyb20gaGVyZSBJIGNhbiBleHRyYXBvbGF0ZSB3aGF0JiMzOTtzIGNhdXNpbmcgdGhlIHByb2JsZW0uIEkmIzM5O2xsIG5lZWQgdG8gZ28gZGVlcGVyIGFmdGVyIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUxMTU6XHRpbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcbjUxMTY6XHR7XG41MTE3Olx0XHRpbnQgc3RhdGUgPSBpbmV0X3NrX3N0YXRlX2xvYWQoc2spO1xuNTExODpcdFxuNTExOTpcdFx0aWYgKHN0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpIHtcbjUxMjA6XHRcdFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxID0gaW5ldF9yZXFzayhzayk7XG41MTIxOlx0XG41MTIyOlx0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbjUxMjM6XHRcdFx0aW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChyZXEtXHUwMDNlcnNrX2xpc3RlbmVyLCByZXEpO1xuNTEyNDpcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjUxMjU6XHRcdFx0cmV0dXJuIDA7XG41MTI2Olx0XHR9XG41MTI3Olx0XHRpZiAoc3RhdGUgPT0gVENQX1RJTUVfV0FJVCkge1xuNTEyODpcdFx0XHRzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyA9IGluZXRfdHdzayhzayk7XG41MTI5Olx0XG41MTMwOlx0XHRcdHJlZmNvdW50X2luYyhcdTAwMjZ0dy1cdTAwM2V0d19yZWZjbnQpO1xuNTEzMTpcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG41MTMyOlx0XHRcdGluZXRfdHdza19kZXNjaGVkdWxlX3B1dCh0dyk7XG41MTMzOlx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuNTEzNDpcdFx0XHRyZXR1cm4gMDtcbjUxMzU6XHRcdH1cbjUxMzY6XHRcbjUxMzc6XHRcdC8qIEJQRiBjb250ZXh0IGVuc3VyZXMgc29jayBsb2NraW5nLiAqL1xuNTEzODpcdFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG41MTM5Olx0XHRcdC8qIERvbiYjMzk7dCByYWNlIHdpdGggdXNlcnNwYWNlIHNvY2tldCBjbG9zZXMgc3VjaCBhcyB0Y3BfY2xvc2UuICovXG41MTQwOlx0XHRcdGxvY2tfc29jayhzayk7XG41MTQxOlx0XG41MTQyOlx0XHQvKiBBdm9pZCBjbG9zaW5nIHRoZSBzYW1lIHNvY2tldCB0d2ljZS4gKi9cbjUxNDM6XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHtcbjUxNDQ6XHRcdFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG41MTQ1Olx0XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbjUxNDY6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG41MTQ3Olx0XHR9XG41MTQ4Olx0XG41MTQ5Olx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikge1xuNTE1MDpcdFx0XHR0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xuNTE1MTpcdFx0XHRpbmV0X2Nza19saXN0ZW5fc3RvcChzayk7XG41MTUyOlx0XHR9XG41MTUzOlx0XG41MTU0Olx0XHQvKiBEb24mIzM5O3QgcmFjZSB3aXRoIEJIIHNvY2tldCBjbG9zZXMgc3VjaCBhcyBpbmV0X2Nza19saXN0ZW5fc3RvcC4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkzMAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBicGZfc29ja19kZXN0cm95YCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGJwZl9zb2NrX2Rlc3Ryb3lgIGFuZCBpbW1lZGlhdGVseSBhIGZldyB0aGluZ3MganVtcCBvdXQuIFRoZSBjb2RlJiMzOTtzIG5vdyBoYW5kbGluZyBgVENQX05FV19TWU5fUkVDVmAgYW5kIGBUQ1BfVElNRV9XQUlUYCBzdGF0ZXMgc3BlY2lmaWNhbGx5LCB3aGljaCBpcyBzbWFydC4gUHJldmlvdXNseSwgdGhlIGBicGZfc29ja19kZXN0cm95YCBmdW5jdGlvbiBoYWQgdGhpcyBjaGVjazoKCmBgYGMKaWYgKCFzay0mZ3Q7c2tfcHJvdC0mZ3Q7ZGlhZ19kZXN0cm95IHx8IChzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJmFtcDsmYW1wOwoJCQkJICAgc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKSkKCXJldHVybiAtRU9QTk9UU1VQUDsKYGBgCgpUaGUgaXNzdWUgaGVyZSwgYW5kIHRoZSBjcnV4IG9mIHRoaXMgcGF0Y2gsIGlzIHRoYXQgZm9yIG5vbi1mdWxsIHNvY2tldHMsIGxpa2UgdGhvc2UgaW4gYFRDUF9USU1FX1dBSVRgIG9yIGBUQ1BfTkVXX1NZTl9SRUNWYCwgYHNrLSZndDtza19wcm90b2NvbGAgd2FzIGJlaW5nIHJlYWQgZnJvbSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG9yIG5vbi1wcm90b2NvbCBtZW1vcnkuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHJlY2lwZSBmb3IgcHJvYmxlbXMsIGxlYWRpbmcgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBvciBvdXRyaWdodCBmYWlsdXJlcywgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBgcmVxdWVzdF9zb2NrYCBvciBgdGltZXdhaXRfc29ja2AuCgpXaXRoIHRoaXMgcGF0Y2gsIHRoZSBjaGVjayBvbiBgc2stJmd0O3NrX3Byb3RvY29sYCBpcyBvbmx5IHBlcmZvcm1lZCBpZiBgc2tfZnVsbHNvY2soc2spYCBpcyB0cnVlLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnQuIEl0IG1lYW5zIHdlIGNhbiBub3cgY2FsbCBgc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKWAgb24gdGhlc2Ugbm9uLWZ1bGwgc29ja2V0cy4KCkNydWNpYWxseSwgdGhpcyBjaGFuZ2UgaXMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYnBmX3NvY2tfZGVzdHJveWAuIFRoaXMgaXMgYSBCUEYga2Z1bmMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGV4cG9zZWQgdG8gQlBGIGl0ZXJhdG9ycywgbGlrZSB0aGUgb25lcyB1c2VkIHdpdGggYGl0ZXIvdGNwYC4gVGhpcyBpcyAqcmVhY2hhYmxlKiBrZXJuZWwgY29kZSBmcm9tIEJQRiBhbmQgY29yZSBuZXR3b3JraW5nLCB3aGljaCBpcyBhIG1ham9yIHBvaW50IHRvIGNvbnNpZGVyLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHNob3VsZCB0aGlzIGJlIGZ1enplZD8gQWJzb2x1dGVseSEgVGhpcyBvcGVucyB0aGUgZG9vciBmb3IgQlBGIHByb2dyYW1zIHRvIGRlc3Ryb3kgdGltZXdhaXQvcmVxdWVzdCBzb2NrZXRzIHZpYSBgYnBmX3NvY2tfZGVzdHJveShza19jb21tb24pYC4gVGhpcyBpcyBub3cgcmVhY2hhYmxlIHRocm91Z2ggQlBGIGl0ZXJhdG9ycywgc3BlY2lmaWNhbGx5IHdoZW4gYEJQRl9UUkFDRV9JVEVSYCBpcyB1c2VkLCBzdWNoIGFzIHdpdGggaXRlci90Y3AgYW5kIGl0ZXIvdWRwLgoKTGV0IG1lIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBmb3IgYGJwZl9zb2NrX2Rlc3Ryb3lgIGFuZCB0aGUgQlBGIGl0ZXJhdG9ycyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCBqdXN0IHRvIGJlIGNlcnRhaW4uIEkmIzM5O2xsIGFsc28gc2VlIHdoZXJlIHRoZSBgYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzYCBhbmQgYGJwZl9zb2NrX2Rlc3Ryb3lgIGZ1bmN0aW9ucyBhcmUgcmVnaXN0ZXJlZC4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UgYW5kIHdoZXJlIGl0IGNhbiBiZSBhcHBsaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc2tfaXRlcl9rZnVuY19pZHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTI5NDA9X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQxLVxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NDI6QlRGX0tGVU5DU19TVEFSVChicGZfc2tfaXRlcl9rZnVuY19pZHMpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0My1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTQ0OkJURl9LRlVOQ1NfRU5EKGJwZl9za19pdGVyX2tmdW5jX2lkcylcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQ1LVxubmV0L2NvcmUvZmlsdGVyLmM9MTI5NDY9c3RhdGljIGludCB0cmFjaW5nX2l0ZXJfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NDcte1xubmV0L2NvcmUvZmlsdGVyLmM6MTI5NDg6XHRpZiAoYnRmX2lkX3NldDhfY29udGFpbnMoXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfaWRzLCBrZnVuY19pZCkgXHUwMDI2XHUwMDI2XG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0OS1cdCAgICBwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9JVEVSKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfc2tfaXRlcl9rZnVuY19zZXQgPSB7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjk1NS1cdC5vd25lciA9IFRISVNfTU9EVUxFLFxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NTY6XHQuc2V0ICAgPSBcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19pZHMsXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk1Ny1cdC5maWx0ZXIgPSB0cmFjaW5nX2l0ZXJfZmlsdGVyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM3MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGVCUEYgYW5kIE5ldHdvcmsgRmlsdGVyaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYnBmX3NrX2l0ZXJfa2Z1bmNfc2V0YCwgc3BlY2lmaWNhbGx5IHdoZXJlIGl0JiMzOTtzICp1c2VkKiB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIG5ldHdvcmsgZmlsdGVyaW5nIGNvbnRleHQuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHNvbWUgYXNwZWN0IG9mIHNvY2tldC1sZXZlbCBmaWx0ZXJpbmcgb3IgaXRlcmF0aW9uLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gc29ja2V0cyBvciBuZXR3b3JrIG5hbWVzcGFjZXMuIEkgd2FudCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBjYWxsaW5nIGNvbnRleHQsIGhvdyB0aGUgcGFyYW1ldGVycyBhcmUgYmVpbmcgdXNlZC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYXR0YWNoaW5nIHByb2dyYW1zLCBzZXR0aW5nIHVwIGl0ZXJhdG9ycywgYXBwbHlpbmcgZmlsdGVycywgbWFuaXB1bGF0aW5nIHNvY2tldCBvcHRpb25zLCBvciB3aGF0PyBUaGUgZ29hbCBpcyB0byBwaWVjZSB0b2dldGhlciBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBUaGlzIGludmVzdGlnYXRpb24gc2hvdWxkIGdpdmUgbWUgaW5zaWdodCBpbnRvIGhvdyB0aGUga2VybmVsIHVzZXMgdGhpcyBtZWNoYW5pc20gZm9yIG5ldHdvcmsgdHJhZmZpYyBtYW5hZ2VtZW50IGFuZCBmaWx0ZXJpbmcgYXQgYSBsb3dlciBsZXZlbC4gTXkgaG9wZSBpcyB0aGlzIHdpbGwgcmV2ZWFsIG5ldyBhc3BlY3RzIGZvciBvcHRpbWl6YXRpb24gb3IgcG9zc2libHkgdnVsbmVyYWJpbGl0eSBkZXRlY3Rpb24gaW4gbXkgYXJlYSBvZiBleHBlcnRpc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19pdGVyX2tmdW5jX3NldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMjk0Nj1zdGF0aWMgaW50IHRyYWNpbmdfaXRlcl9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NTMtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjk1NDpzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX3NrX2l0ZXJfa2Z1bmNfc2V0ID0ge1xubmV0L2NvcmUvZmlsdGVyLmMtMTI5NTUtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjk2MD1zdGF0aWMgaW50IGluaXRfc3Vic3lzdGVtKHZvaWQpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk2MS17XG5uZXQvY29yZS9maWx0ZXIuYzoxMjk2MjpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfc2V0KTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTYzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NzEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGBpZmRlZmAgYmxvY2tzIGFyb3VuZCBsaW5lcyAxMjkwMC0xMjk3MCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLgoKKipEaXZpbmcgaW50byB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyAxMjkwMCB0aHJvdWdoIDEyOTcwIG9mIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgYmVpbmcgY29uZGl0aW9uYWxseSBjb21waWxlZCBoZXJlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gZGVhbHMgd2l0aCBzb21lIHNwZWNpZmljIGZlYXR1cmUsIGhhcmR3YXJlLCBvciBwZXJoYXBzIGFuIG9wdGltaXphdGlvbiB0aGF0IGlzbiYjMzk7dCB1bml2ZXJzYWxseSBhcHBsaWNhYmxlLiBJIHN1c3BlY3QgaXQgcmVsYXRlcyB0byBwYWNrZXQgZmlsdGVyaW5nLCBsaWtlbHkgaW52b2x2aW5nIHNvbWUgc3BlY2lmaWMgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBsb2dpYyBvciBpbnRlcmFjdGlvbiB3aXRoIGEgcGFydGljdWxhciBOSUMgKE5ldHdvcmsgSW50ZXJmYWNlIENvbnRyb2xsZXIpIG9yIGhhcmR3YXJlIGFjY2VsZXJhdG9yLiBUaGUgdXNlIG9mIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGlzIGEgZGVhZCBnaXZlYXdheSB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGggb3B0aW9uYWwsIGNvbmZpZ3VyYWJsZSBjb2RlIHBhdGhzLgoKSSYjMzk7bGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IHRoZSBjb25kaXRpb25zIHdpdGhpbiB0aGUgYCNpZmRlZmAgYmxvY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRlZmluZXMgYXJlIGJlaW5nIGNoZWNrZWQg4oCTIHdoYXQgKmZlYXR1cmUgZmxhZ3MqIGFyZSBjb250cm9sbGluZyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgY29kZT8gS25vd2luZyB0aGF0IHdpbGwgdGVsbCBtZSB3aHkgdGhpcyBjb2RlIGlzbiYjMzk7dCBhbHdheXMgYWN0aXZlIGFuZCB3aGljaCBwYXJ0cyBvZiB0aGUga2VybmVsIGNvbmZpZyB3b3VsZCBlbmFibGUgaXQuIEFyZSB0aGVzZSByZWxhdGVkIHRvIGhhcmR3YXJlIGNhcGFiaWxpdGllcywga2VybmVsIGZlYXR1cmVzLCBvciBwZXJoYXBzIGV2ZW4gdXNlci1zcGFjZSBjb25maWd1cmF0aW9uIHNldHRpbmdzPyBJdCBjb3VsZCBiZSBzb21ldGhpbmcgbGlrZSBzdXBwb3J0IGZvciBhIHBhcnRpY3VsYXIgQlBGIGluc3RydWN0aW9uIHNldCBvciBhbiBvcHRpbWl6YXRpb24gdGhhdCByZWxpZXMgb24gYSBzcGVjaWZpYyBOSUPigJlzIGNhcGFiaWxpdGllcy4gSeKAmW0gcHJlcGFyZWQgdG8gZmluZCB0aGF0IHRoaXMgY291bGQgYmUgcmVsYXRlZCB0byBzb21lIG9ic2N1cmUgaGFyZHdhcmUgc3VwcG9ydCwgb3Igc3BlY2lmaWMgcGFja2V0IG1hbmlwdWxhdGlvbi4KCkkmIzM5O2xsIGFsc28ga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgY29tbWVudHMgaW4gdGhpcyBzZWN0aW9uLiBUaG9zZSBjb3VsZCBvZmZlciB2YWx1YWJsZSBjbHVlcyB0byBleHBsYWluIHdoeSB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIG5lY2Vzc2FyeSBhbmQgaG93IHRoaXMgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZmlsdGVyaW5nIGVuZ2luZS4gTXkgZ29hbCBpcyB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBzY2VuYXJpb3MgaW4gd2hpY2ggdGhpcyBwYXJ0aWN1bGFyIGNvZGUgaXMgYmVpbmcgdXRpbGl6ZWQsIGFzIHdlbGwgYXMgdGhlIGRlc2lnbiBjb25zaWRlcmF0aW9ucyB0aGF0IG1hZGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gdGhlIHJpZ2h0IGFwcHJvYWNoIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjkwMDpcdFxuMTI5MDE6XHRfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4xMjkwMjpcdFxuMTI5MDM6XHQvKiBicGZfc29ja19kZXN0cm95OiBEZXN0cm95IHRoZSBnaXZlbiBzb2NrZXQgd2l0aCBFQ09OTkFCT1JURUQgZXJyb3IgY29kZS5cbjEyOTA0Olx0ICpcbjEyOTA1Olx0ICogVGhlIGZ1bmN0aW9uIGV4cGVjdHMgYSBub24tTlVMTCBwb2ludGVyIHRvIGEgc29ja2V0LCBhbmQgaW52b2tlcyB0aGVcbjEyOTA2Olx0ICogcHJvdG9jb2wgc3BlY2lmaWMgc29ja2V0IGRlc3Ryb3kgaGFuZGxlcnMuXG4xMjkwNzpcdCAqXG4xMjkwODpcdCAqIFRoZSBoZWxwZXIgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gQlBGIGNvbnRleHRzIHRoYXQgaGF2ZSBhY3F1aXJlZCB0aGUgc29ja2V0XG4xMjkwOTpcdCAqIGxvY2tzLlxuMTI5MTA6XHQgKlxuMTI5MTE6XHQgKiBQYXJhbWV0ZXJzOlxuMTI5MTI6XHQgKiBAc29jazogUG9pbnRlciB0byBzb2NrZXQgdG8gYmUgZGVzdHJveWVkXG4xMjkxMzpcdCAqXG4xMjkxNDpcdCAqIFJldHVybjpcbjEyOTE1Olx0ICogT24gZXJyb3IsIG1heSByZXR1cm4gRU9QTk9UU1VQUCwgb3Igd2hhdGV2ZXIgdGhlIHByb3RvY29sIHNwZWNpZmljXG4xMjkxNjpcdCAqIGRlc3Ryb3kgaGFuZGxlciByZXR1cm5zLlxuMTI5MTc6XHQgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuMTI5MTg6XHQgKiAwIG90aGVyd2lzZVxuMTI5MTk6XHQgKi9cbjEyOTIwOlx0X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuMTI5MjE6XHR7XG4xMjkyMjpcdFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopc29jaztcbjEyOTIzOlx0XG4xMjkyNDpcdFx0LyogVGhlIGxvY2tpbmcgc2VtYW50aWNzIHRoYXQgYWxsb3cgZm9yIHN5bmNocm9ub3VzIGV4ZWN1dGlvbiBvZiB0aGVcbjEyOTI1Olx0XHQgKiBkZXN0cm95IGhhbmRsZXJzIGFyZSBvbmx5IHN1cHBvcnRlZCBmb3IgVENQIGFuZCBVRFAuXG4xMjkyNjpcdFx0ICogU3VwcG9ydGluZyBwcm90b2NvbHMgd2lsbCBuZWVkIHRvIGFjcXVpcmUgc29jayBsb2NrIGluIHRoZSBCUEYgY29udGV4dFxuMTI5Mjc6XHRcdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXG4xMjkyODpcdFx0ICovXG4xMjkyOTpcdFx0aWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSlcbjEyOTMwOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEyOTMxOlx0XG4xMjkzMjpcdFx0aWYgKHNrX2Z1bGxzb2NrKHNrKSBcdTAwMjZcdTAwMjZcbjEyOTMzOlx0XHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4xMjkzNDpcdFx0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxuMTI5MzU6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTI5MzY6XHRcbjEyOTM3Olx0XHRyZXR1cm4gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XG4xMjkzODpcdH1cbjEyOTM5Olx0XG4xMjk0MDpcdF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4xMjk0MTpcdFxuMTI5NDI6XHRCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcbjEyOTQzOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zb2NrX2Rlc3Ryb3kpXG4xMjk0NDpcdEJURl9LRlVOQ1NfRU5EKGJwZl9za19pdGVyX2tmdW5jX2lkcylcbjEyOTQ1Olx0XG4xMjk0NjpcdHN0YXRpYyBpbnQgdHJhY2luZ19pdGVyX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbjEyOTQ3Olx0e1xuMTI5NDg6XHRcdGlmIChidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19pZHMsIGtmdW5jX2lkKSBcdTAwMjZcdTAwMjZcbjEyOTQ5Olx0XHQgICAgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfSVRFUilcbjEyOTUwOlx0XHRcdHJldHVybiAtRUFDQ0VTO1xuMTI5NTE6XHRcdHJldHVybiAwO1xuMTI5NTI6XHR9XG4xMjk1MzpcdFxuMTI5NTQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX3NrX2l0ZXJfa2Z1bmNfc2V0ID0ge1xuMTI5NTU6XHRcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuMTI5NTY6XHRcdC5zZXQgICA9IFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcyxcbjEyOTU3Olx0XHQuZmlsdGVyID0gdHJhY2luZ19pdGVyX2ZpbHRlcixcbjEyOTU4Olx0fTtcbjEyOTU5Olx0XG4xMjk2MDpcdHN0YXRpYyBpbnQgaW5pdF9zdWJzeXN0ZW0odm9pZClcbjEyOTYxOlx0e1xuMTI5NjI6XHRcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfc2V0KTtcbjEyOTYzOlx0fVxuMTI5NjQ6XHRsYXRlX2luaXRjYWxsKGluaXRfc3Vic3lzdGVtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MzIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgRmlsdGVyIENvbXBpbGF0aW9uIERlcGVuZGVuY2llcyoqCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgY29tcGlsYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgbmV0L2NvcmUvZmlsdGVyLmNgLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgc3VzcGVjdCB0aGUgY3J1Y2lhbCBpbmZvcm1hdGlvbiB3aWxsIGJlIGZvdW5kIGluIGVpdGhlciBgbmV0L2NvcmUvTWFrZWZpbGVgIG9yIHBlcmhhcHMgdGhlIGBLY29uZmlnYCBmaWxlcyB3aXRoaW4gdGhlIGBuZXQvY29yZWAgZGlyZWN0b3J5LiBNeSBhaW0gaXMgdG8gZGV0ZXJtaW5lIHVuZGVyIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBgbmV0L2NvcmUvZmlsdGVyLmNgIGlzIGNvbXBpbGVkLiBJdCYjMzk7cyBoaWdobHkgbGlrZWx5IHRoYXQgdW5kZXJzdGFuZGluZyB0aGUgYENPTkZJR19gIGZsYWdzIGlzIGtleSBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoaW5ncyBsaWtlIGBDT05GSUdfQlBGX1NZU0NBTExgIG9yIHRoZSBicm9hZGVyIGBDT05GSUdfTkVUYCBhcmUgcmVxdWlyZWQgb3IgaW5mbHVlbmNlIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBmaWx0ZXIgY29kZS4gS25vd2luZyB0aG9zZSBkZXBlbmRlbmNpZXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgYW5kIHdoZW4gdGhpcyBtb2R1bGUgZ2V0cyBidWlsdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsdGVyXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XHRcdCAgICAgJiM0Mzs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlx0XHRcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cdFx0XHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtODctICpcbm5ldC9jb3JlL3BrdGdlbi5jOjg4OiAqIFJlbW92ZSBpZiBmaXggZnJvbSBhZGRlZCBIYXJhbGQgV2VsdGUgXHUwMDNjbGFmb3JnZUBuZXRmaWx0ZXIub3JnXHUwMDNlIDA0MDQxOVxubmV0L2NvcmUvcGt0Z2VuLmMtODktICogaWE2NCBjb21waWxhdGlvbiBmaXggZnJvbSAgQXJvbiBHcmlmZmlzIFx1MDAzY2Fyb25AaHAuY29tXHUwMDNlIDA0MDYwNFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg5MAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3kgb2YgQlBGIFN5c2NhbGwgU3VwcG9ydCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBrZnVuY3Mgb3IsIG1vcmUgc3BlY2lmaWNhbGx5LCBmb3IgdGhlIHJlZ2lzdHJhdGlvbiBvZiBCVEYga2Z1bmMgSUQgc2V0cyB0aHJvdWdoIGByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0YC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIGZvciBhbnkgZGlyZWN0IGRlcGVuZGVuY2llcyBvciBjb2RlIHBhdGhzLiBMZXQmIzM5O3MgZmlyZSB1cCBhIGBncmVwYCBhbmQgc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlIGZvciBpbnN0YW5jZXMgb2YgYHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXRgLiBUaGF0IHNob3VsZCBxdWlja2x5IHJldmVhbCBhbnkgZGlyZWN0IHJlbGF0aW9uc2hpcHMgYW5kIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhhdCBjb25maWcgb3B0aW9uIGZhY3RvcnMgaW50byBpdHMgZXhpc3RlbmNlIG9yIGJlaGF2aW9yLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXA7IEkgY2FuJiMzOTt0IHN0YXJ0IG9wdGltaXppbmcgb3IgaW50ZWdyYXRpbmcgdW50aWwgSSYjMzk7bSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlc2UgYmFzZSBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZ3JlcCBzZWFyY2ggdHVybnMgdXAhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdD00OTQ9dHlwZS4gQW4gZXhhbXBsZSBpcyBzaG93biBiZWxvdzo6XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdC01MDctICAgICAgICB7XG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0OjUwODogICAgICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcdTAwMjZicGZfdGFza19rZnVuY19zZXQpO1xuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdC01MDktICAgICAgICB9XG4tLVxuZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jPTEyMjc9c3RhdGljIHZvaWQgX19pbml0IHdha2V1cF9zb3VyY2VzX2JwZl9pbml0KHZvaWQpXG5kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmMtMTIyOC17XG5kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmM6MTIyOTpcdGlmIChyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2d2FrZXVwX3NvdXJjZV9rZnVuY19zZXQpKVxuZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jLTEyMzAtXHRcdHBtX3ByX2RiZyhcJiMzNDtXYWtldXA6IGZhaWxlZCB0byByZWdpc3RlciBCVEYga2Z1bmNzXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2hpZC9icGYvaGlkX2JwZl9kaXNwYXRjaC5jPTY1OD1zdGF0aWMgaW50IF9faW5pdCBoaWRfYnBmX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2hpZC9icGYvaGlkX2JwZl9kaXNwYXRjaC5jLTY2Ny1cbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmM6NjY4Olx0ZXJyID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFx1MDAyNmhpZF9icGZfa2Z1bmNfc2V0KTtcbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmMtNjY5LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmMtNjczLVxuZHJpdmVycy9oaWQvYnBmL2hpZF9icGZfZGlzcGF0Y2guYzo2NzQ6XHRlcnIgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2aGlkX2JwZl9zeXNjYWxsX2tmdW5jX3NldCk7XG5kcml2ZXJzL2hpZC9icGYvaGlkX2JwZl9kaXNwYXRjaC5jLTY3NS1cdGlmIChlcnIpIHtcbi0tXG5mcy9iaW5mbXRfbWlzY19icGYuYz0zMjE9c3RhdGljIGludCBibV9icGZfaW5pdChzdHJ1Y3QgYnRmICpidGYpXG5mcy9iaW5mbXRfbWlzY19icGYuYy0zMjIte1xuZnMvYmluZm10X21pc2NfYnBmLmM6MzIzOlx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxuZnMvYmluZm10X21pc2NfYnBmLmMtMzI0LVx0XHRcdFx0XHQgXHUwMDI2Ym1fYnBmX2tmdW5jX3NldCk7XG4tLVxuZnMvYnBmX2ZzX2tmdW5jcy5jPTQ5Mj1zdGF0aWMgaW50IF9faW5pdCBicGZfZnNfa2Z1bmNzX2luaXQodm9pZClcbi0tXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDk1LVxuZnMvYnBmX2ZzX2tmdW5jcy5jOjQ5NjpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sIFx1MDAyNmJwZl9mc19rZnVuY19zZXQpO1xuZnMvYnBmX2ZzX2tmdW5jcy5jLTQ5Ny1cdGlmIChyZXQgfHwgIUlTX0VOQUJMRUQoQ09ORklHX0JJTkZNVF9NSVNDX0JQRikpXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDk4LVx0XHRyZXR1cm4gcmV0O1xuZnMvYnBmX2ZzX2tmdW5jcy5jOjQ5OTpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyxcbmZzL2JwZl9mc19rZnVuY3MuYy01MDAtXHRcdFx0XHRcdCBcdTAwMjZicGZfZnNfa2Z1bmNfc2V0KTtcbi0tXG5mcy92ZXJpdHkvbWVhc3VyZS5jPTE4Nj12b2lkIF9faW5pdCBmc3Zlcml0eV9pbml0X2JwZih2b2lkKVxuZnMvdmVyaXR5L21lYXN1cmUuYy0xODcte1xuZnMvdmVyaXR5L21lYXN1cmUuYzoxODg6XHRyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLCBcdTAwMjZicGZfZnN2ZXJpdHlfc2V0KTtcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTg5LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2J0Zi5oPTU4Nz11MzIgKmJ0Zl9rZnVuY19pc19tb2RpZnlfcmV0dXJuKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGtmdW5jX2J0Zl9pZCxcbmluY2x1ZGUvbGludXgvYnRmLmgtNTg4LVx0XHRcdFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbmluY2x1ZGUvbGludXgvYnRmLmg6NTg5OmludCByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXG5pbmNsdWRlL2xpbnV4L2J0Zi5oLTU5MC1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCAqcyk7XG4tLVxuaW5jbHVkZS9saW51eC9idGYuaD02NDc9c3RhdGljIGlubGluZSB1MzIgKmJ0Zl9rZnVuY19pZF9zZXRfY29udGFpbnMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmluY2x1ZGUvbGludXgvYnRmLmgtNjUzLX1cbmluY2x1ZGUvbGludXgvYnRmLmg6NjU0OnN0YXRpYyBpbmxpbmUgaW50IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcbmluY2x1ZGUvbGludXgvYnRmLmgtNjU1LVx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgKnMpXG4tLVxuaW9fdXJpbmcvYnBmLW9wcy5jPTEyMD1zdGF0aWMgaW50IGJwZl9pb19pbml0KHN0cnVjdCBidGYgKmJ0Zilcbi0tXG5pb191cmluZy9icGYtb3BzLmMtMTI5LVxuaW9fdXJpbmcvYnBmLW9wcy5jOjEzMDpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxuaW9fdXJpbmcvYnBmLW9wcy5jLTEzMS1cdFx0XHRcdFx0XHUwMDI2YnBmX2lvX3VyaW5nX2tmdW5jX3NldCk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTExMzE9c3RhdGljIGludCBfX2luaXQga2Z1bmNfaW5pdCh2b2lkKVxua2VybmVsL2JwZi9hcmVuYS5jLTExMzIte1xua2VybmVsL2JwZi9hcmVuYS5jOjExMzM6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQywgXHUwMDI2Y29tbW9uX2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTEzNC19XG4tLVxua2VybmVsL2JwZi9idGYuYz04OTAyPXN0YXRpYyBpbnQgYnRmX3BvcHVsYXRlX2tmdW5jX3NldChzdHJ1Y3QgYnRmICpidGYsIGVudW0gYnRmX2tmdW5jX2hvb2sgaG9vayxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg5NDgtXHRzZXQgPSB0YWItXHUwMDNlc2V0c1tob29rXTtcbmtlcm5lbC9icGYvYnRmLmM6ODk0OTpcdC8qIFdhcm4gd2hlbiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0IGlzIGNhbGxlZCB0d2ljZSBmb3IgdGhlIHNhbWUgaG9va1xua2VybmVsL2JwZi9idGYuYy04OTUwLVx0ICogZm9yIG1vZHVsZSBzZXRzLlxuLS1cbmtlcm5lbC9icGYvYnRmLmM9OTE3Mz11MzIgKmJ0Zl9rZnVuY19pc19tb2RpZnlfcmV0dXJuKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGtmdW5jX2J0Zl9pZCxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTkxODEtXG5rZXJuZWwvYnBmL2J0Zi5jOjkxODI6c3RhdGljIGludCBfX3JlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoZW51bSBidGZfa2Z1bmNfaG9vayBob29rLFxua2VybmVsL2JwZi9idGYuYy05MTgzLVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0ICprc2V0KVxuLS1cbmtlcm5lbC9icGYvYnRmLmMtOTIwOC0vKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgaW52b2tlZCBvbmx5IGZyb20gaW5pdGNhbGxzL21vZHVsZSBpbml0IGZ1bmN0aW9ucyAqL1xua2VybmVsL2JwZi9idGYuYzo5MjA5OmludCByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXG5rZXJuZWwvYnBmL2J0Zi5jLTkyMTAtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgKmtzZXQpXG4tLVxua2VybmVsL2JwZi9idGYuYy05MjIyLVx0aG9vayA9IGJwZl9wcm9nX3R5cGVfdG9fa2Z1bmNfaG9vayhwcm9nX3R5cGUpO1xua2VybmVsL2JwZi9idGYuYzo5MjIzOlx0cmV0dXJuIF9fcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChob29rLCBrc2V0KTtcbmtlcm5lbC9icGYvYnRmLmMtOTIyNC19XG5rZXJuZWwvYnBmL2J0Zi5jOjkyMjU6RVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTkyMjYtXG4tLVxua2VybmVsL2JwZi9idGYuYz05MjI4PWludCByZWdpc3Rlcl9idGZfZm1vZHJldF9pZF9zZXQoY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgKmtzZXQpXG5rZXJuZWwvYnBmL2J0Zi5jLTkyMjkte1xua2VybmVsL2JwZi9idGYuYzo5MjMwOlx0cmV0dXJuIF9fcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCVEZfS0ZVTkNfSE9PS19GTU9EUkVULCBrc2V0KTtcbmtlcm5lbC9icGYvYnRmLmMtOTIzMS19XG4tLVxua2VybmVsL2JwZi9jcHVtYXNrLmM9NTE1PXN0YXRpYyBpbnQgX19pbml0IGNwdW1hc2tfa2Z1bmNfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9icGYvY3B1bWFzay5jLTUyNS1cdHJldCA9IGJwZl9tZW1fYWxsb2NfaW5pdChcdTAwMjZicGZfY3B1bWFza19tYSwgc2l6ZW9mKHN0cnVjdCBicGZfY3B1bWFzayksIGZhbHNlKTtcbmtlcm5lbC9icGYvY3B1bWFzay5jOjUyNjpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2Y3B1bWFza19rZnVuY19zZXQpO1xua2VybmVsL2JwZi9jcHVtYXNrLmM6NTI3Olx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcdTAwMjZjcHVtYXNrX2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL2NwdW1hc2suYzo1Mjg6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFx1MDAyNmNwdW1hc2tfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvY3B1bWFzay5jLTUyOS1cdHJldHVybiAgcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhjcHVtYXNrX2R0b3JzLFxuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmM9Mzc5PXN0YXRpYyBpbnQgX19pbml0IGNyeXB0b19rZnVuY19pbml0KHZvaWQpXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy0zODgtXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM4OTpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmNyeXB0X2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL2NyeXB0by5jOjM5MDpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCBcdTAwMjZjcnlwdF9rZnVuY19zZXQpO1xua2VybmVsL2JwZi9jcnlwdG8uYzozOTE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1hEUCwgXHUwMDI2Y3J5cHRfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzkyOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxua2VybmVsL2JwZi9jcnlwdG8uYy0zOTMtXHRcdFx0XHRcdCAgICAgICBcdTAwMjZjcnlwdF9pbml0X2tmdW5jX3NldCk7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk4Mj1zdGF0aWMgaW50IF9faW5pdCBrZnVuY19pbml0KHZvaWQpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk5Ny1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5OTg6XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2Z2VuZXJpY19rZnVuY19zZXQpO1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDk5OTpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcdTAwMjZnZW5lcmljX2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDAwOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsIFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDI6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDM6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMDQtXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGdlbmVyaWNfZHRvcnMsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTAwNi1cdFx0XHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDc6XHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9VTlNQRUMsIFx1MDAyNmNvbW1vbl9rZnVuY19zZXQpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNTAwOC19XG4tLVxua2VybmVsL2JwZi9tYXBfaXRlci5jPTIzMD1zdGF0aWMgaW50IGluaXRfc3Vic3lzdGVtKHZvaWQpXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMjMxLXtcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYzoyMzI6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQywgXHUwMDI2YnBmX21hcF9pdGVyX2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMjMzLX1cbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz03NTk9c3RhdGljIF9faW5pdCBpbnQgcnFzcGlubG9ja19yZWdpc3Rlcl9rZnVuY3Modm9pZClcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTc2MC17XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo3NjE6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQywgXHUwMDI2cnFzcGlubG9ja19rZnVuY19zZXQpO1xua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzYyLX1cbi0tXG5rZXJuZWwvY2dyb3VwL3JzdGF0LmM9NzY2PXN0YXRpYyBpbnQgX19pbml0IGJwZl9yc3RhdF9rZnVuY19pbml0KHZvaWQpXG5rZXJuZWwvY2dyb3VwL3JzdGF0LmMtNzY3LXtcbmtlcm5lbC9jZ3JvdXAvcnN0YXQuYzo3Njg6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsXG5rZXJuZWwvY2dyb3VwL3JzdGF0LmMtNzY5LVx0XHRcdFx0XHQgXHUwMDI2YnBmX3JzdGF0X2tmdW5jX3NldCk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9jaWQuYz0xMTYwPWludCBzY3hfY2lkX2tmdW5jX2luaXQodm9pZClcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMTE2MS17XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjExNjI6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFx1MDAyNnNjeF9rZnVuY19zZXRfaW5pdF9jaWRzKSA/Olxua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoxMTYzOlx0XHRyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2c2N4X2tmdW5jX3NldF9jaWQpID86XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjExNjQ6XHRcdHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcdTAwMjZzY3hfa2Z1bmNfc2V0X2NpZCkgPzpcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MTE2NTpcdFx0cmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFx1MDAyNnNjeF9rZnVuY19zZXRfY2lkKTtcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMTE2Ni19XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMDg5OD1zdGF0aWMgaW50IF9faW5pdCBzY3hfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NzYtXHQgKiBrZnVuYyByZWdpc3RyYXRpb24gY2FuJiMzOTt0IGJlIGRvbmUgZnJvbSBpbml0X3NjaGVkX2V4dF9jbGFzcygpIGFzXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTc3Olx0ICogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldCgpIG5lZWRzIG1vc3Qgb2YgdGhlIHN5c3RlbSB0byBiZSB1cC5cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NzgtXHQgKlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5ODYtXHQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5ODc6XHRpZiAoKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk4OC1cdFx0XHRcdFx0ICAgICBcdTAwMjZzY3hfa2Z1bmNfc2V0X2VucXVldWVfZGlzcGF0Y2gpKSB8fFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk4OTpcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTkwLVx0XHRcdFx0XHQgICAgIFx1MDAyNnNjeF9rZnVuY19zZXRfZGlzcGF0Y2gpKSB8fFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5MTpcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTkyLVx0XHRcdFx0XHQgICAgIFx1MDAyNnNjeF9rZnVuY19zZXRfY3B1X3JlbGVhc2UpKSB8fFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5MzpcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTk0LVx0XHRcdFx0XHQgICAgIFx1MDAyNnNjeF9rZnVuY19zZXRfdW5sb2NrZWQpKSB8fFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5NTpcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTk2LVx0XHRcdFx0XHQgICAgIFx1MDAyNnNjeF9rZnVuY19zZXRfdW5sb2NrZWQpKSB8fFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5NzpcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTk4LVx0XHRcdFx0XHQgICAgIFx1MDAyNnNjeF9rZnVuY19zZXRfYW55KSkgfHxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5OTk6XHQgICAgKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTAwMC1cdFx0XHRcdFx0ICAgICBcdTAwMjZzY3hfa2Z1bmNfc2V0X2FueSkpIHx8XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDAxOlx0ICAgIChyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTEwMDItXHRcdFx0XHRcdCAgICAgXHUwMDI2c2N4X2tmdW5jX3NldF9hbnkpKSkge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jPTE1NTQ9aW50IHNjeF9pZGxlX2luaXQodm9pZClcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTE1NTUte1xua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1NjpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2c2N4X2tmdW5jX3NldF9pZGxlKSA/Olxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1NzpcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2c2N4X2tmdW5jX3NldF9pZGxlKSA/Olxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1ODpcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2c2N4X2tmdW5jX3NldF9pZGxlKSA/Olxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1OTpcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2c2N4X2tmdW5jX3NldF9zZWxlY3RfY3B1KSA/Olxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU2MDpcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2c2N4X2tmdW5jX3NldF9zZWxlY3RfY3B1KTtcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTE1NjEtfVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNDU5PXN0YXRpYyBpbnQgX19pbml0IGJwZl90cmFjZV9rZnVuY3NfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNDYyLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM0NjM6XHRlcnIgPSBlcnIgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0tQUk9CRSwgXHUwMDI2YnBmX3Nlc3Npb25fa2Z1bmNfc2V0KTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNDY0Olx0ZXJyID0gZXJyID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcdTAwMjZicGZfc2Vzc2lvbl9rZnVuY19zZXQpO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM0NjUtXG4tLVxubW0vYnBmX21lbWNvbnRyb2wuYz0xODI9c3RhdGljIGludCBfX2luaXQgYnBmX21lbWNvbnRyb2xfaW5pdCh2b2lkKVxuLS1cbm1tL2JwZl9tZW1jb250cm9sLmMtMTg1LVxubW0vYnBmX21lbWNvbnRyb2wuYzoxODY6XHRlcnIgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVU5TUEVDLFxubW0vYnBmX21lbWNvbnRyb2wuYy0xODctXHRcdFx0XHRcdFx1MDAyNmJwZl9tZW1jb250cm9sX2tmdW5jX3NldCk7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTE4ODg9c3RhdGljIGludCBfX2luaXQgYnBmX3Byb2dfdGVzdF9ydW5faW5pdCh2b2lkKVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xOTAyLVx0cmV0ID0gcmVnaXN0ZXJfYnRmX2Ztb2RyZXRfaWRfc2V0KFx1MDAyNmJwZl90ZXN0X21vZGlmeV9yZXR1cm5fc2V0KTtcbm5ldC9icGYvdGVzdF9ydW4uYzoxOTAzOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmJwZl9wcm9nX3Rlc3Rfa2Z1bmNfc2V0KTtcbm5ldC9icGYvdGVzdF9ydW4uYzoxOTA0Olx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcdTAwMjZicGZfcHJvZ190ZXN0X2tmdW5jX3NldCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTkwNTpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2YnBmX3Byb2dfdGVzdF9rZnVuY19zZXQpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTE5MDYtXHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfcHJvZ190ZXN0X2R0b3Jfa2Z1bmMsXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MzA3PXN0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzE2LVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MzE3Olx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXG5uZXQvY29yZS9icGZfa3NvY2suYy0zMTgtXHRcdFx0XHRcdFx1MDAyNmtzb2NrX2luaXRfa2Z1bmNfc2V0KTtcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMxOTpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMyMC1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNmtzb2NrX2tmdW5jX3NldCk7XG5uZXQvY29yZS9icGZfa3NvY2suYzozMjE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xTTSxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMyMi1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNmtzb2NrX2tmdW5jX3NldCk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTI4NzU9c3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg3OC1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyODc5Olx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODA6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NLX1NLQiwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODI6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODgzOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4NDpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX09VVCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODU6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9JTiwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODY6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4NzpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODg6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX05FVEZJTFRFUiwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODk6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODkwOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiX21ldGEpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2JfbWV0YSk7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5MjpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3hkcCk7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5MzpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUixcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODk0LVx0XHRcdFx0XHQgICAgICAgXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX2FkZHIpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTU6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF90Y3BfcmVxc2spO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTY6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFx1MDAyNmJwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODk3Olx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU09DS19PUFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19vcHMpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTI4OTgtfVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTYwPXN0YXRpYyBpbnQgaW5pdF9zdWJzeXN0ZW0odm9pZClcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTYxLXtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTYyOlx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19zZXQpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTI5NjMtfVxuLS1cbm5ldC9jb3JlL3hkcC5jPTk5Mz1zdGF0aWMgaW50IF9faW5pdCB4ZHBfbWV0YWRhdGFfaW5pdCh2b2lkKVxubmV0L2NvcmUveGRwLmMtOTk0LXtcbm5ldC9jb3JlL3hkcC5jOjk5NTpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcdTAwMjZ4ZHBfbWV0YWRhdGFfa2Z1bmNfc2V0KTtcbm5ldC9jb3JlL3hkcC5jLTk5Ni19XG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTM0NT1zdGF0aWMgaW50IF9faW5pdCBicGZfdGNwX2NhX2tmdW5jX2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzQ4LVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjM0OTpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcdTAwMjZicGZfdGNwX2NhX2tmdW5jX3NldCk7XG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzUwLVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2JwZl9zdHJ1Y3Rfb3BzKFx1MDAyNmJwZl90Y3BfY29uZ2VzdGlvbl9vcHMsIHRjcF9jb25nZXN0aW9uX29wcyk7XG4tLVxubmV0L2lwdjQvZm91X2JwZi5jPTExMz1pbnQgcmVnaXN0ZXJfZm91X2JwZih2b2lkKVxubmV0L2lwdjQvZm91X2JwZi5jLTExNC17XG5uZXQvaXB2NC9mb3VfYnBmLmM6MTE1Olx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXG5uZXQvaXB2NC9mb3VfYnBmLmMtMTE2LVx0XHRcdFx0XHQgXHUwMDI2Zm91X2JwZl9rZnVuY19zZXQpO1xuLS1cbm5ldC9pcHY0L3RjcF9iYnIuYz0xMTc1PXN0YXRpYyBpbnQgX19pbml0IGJicl9yZWdpc3Rlcih2b2lkKVxuLS1cbm5ldC9pcHY0L3RjcF9iYnIuYy0xMTgwLVxubmV0L2lwdjQvdGNwX2Jici5jOjExODE6XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2dGNwX2Jicl9rZnVuY19zZXQpO1xubmV0L2lwdjQvdGNwX2Jici5jLTExODItXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9pcHY0L3RjcF9jdWJpYy5jPTUwMT1zdGF0aWMgaW50IF9faW5pdCBjdWJpY3RjcF9yZWdpc3Rlcih2b2lkKVxuLS1cbm5ldC9pcHY0L3RjcF9jdWJpYy5jLTUzNC1cbm5ldC9pcHY0L3RjcF9jdWJpYy5jOjUzNTpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcdTAwMjZ0Y3BfY3ViaWNfa2Z1bmNfc2V0KTtcbm5ldC9pcHY0L3RjcF9jdWJpYy5jLTUzNi1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L2lwdjQvdGNwX2RjdGNwLmM9Mjk0PXN0YXRpYyBpbnQgX19pbml0IGRjdGNwX3JlZ2lzdGVyKHZvaWQpXG4tLVxubmV0L2lwdjQvdGNwX2RjdGNwLmMtMjk5LVxubmV0L2lwdjQvdGNwX2RjdGNwLmM6MzAwOlx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFx1MDAyNnRjcF9kY3RjcF9rZnVuY19zZXQpO1xubmV0L2lwdjQvdGNwX2RjdGNwLmMtMzAxLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz01NDA9aW50IHJlZ2lzdGVyX25mX2Nvbm50cmFja19icGYodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01NDMtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzo1NDQ6XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcdTAwMjZuZl9jb25udHJhY2tfa2Z1bmNfc2V0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjU0NTpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcdTAwMjZuZl9jb25udHJhY2tfa2Z1bmNfc2V0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTU0Ni1cdGlmICghcmV0KSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jPTExNj1pbnQgbmZfZmxvd19yZWdpc3Rlcl9icGYodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy0xMTcte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jOjExODpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTExOS1cdFx0XHRcdFx0IFx1MDAyNm5mX2Zsb3dfa2Z1bmNfc2V0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYz02Nj1pbnQgcmVnaXN0ZXJfbmZfbmF0X2JwZih2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2JwZi5jLTY5LVxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmM6NzA6XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmMtNzEtXHRcdFx0XHRcdFx1MDAyNm5mX2JwZl9uYXRfa2Z1bmNfc2V0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYy03NC1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2JwZi5jOjc1Olx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYy03Ni1cdFx0XHRcdFx0IFx1MDAyNm5mX2JwZl9uYXRfa2Z1bmNfc2V0KTtcbi0tXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmM9NDYwPXN0YXRpYyBpbnQgX19pbml0IGJwZl9xZGlzY19rZnVuY19pbml0KHZvaWQpXG4tLVxubmV0L3NjaGVkL2JwZl9xZGlzYy5jLTQ2OS1cbm5ldC9zY2hlZC9icGZfcWRpc2MuYzo0NzA6XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2YnBmX3FkaXNjX2tmdW5jX3NldCk7XG5uZXQvc2NoZWQvYnBmX3FkaXNjLmMtNDcxLVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhza2Jfa2Z1bmNfZHRvcnMsXG4tLVxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfYnBmLmM9MTA2PWludCBfX2luaXQgcmVnaXN0ZXJfeGZybV9pbnRlcmZhY2VfYnBmKHZvaWQpXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9icGYuYy0xMDcte1xubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfYnBmLmM6MTA4Olx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9icGYuYy0xMDktXHRcdFx0XHRcdCBcdTAwMjZ4ZnJtX2ludGVyZmFjZV9rZnVuY19zZXQpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGVfYnBmLmM9MTMwPWludCBfX2luaXQgcmVnaXN0ZXJfeGZybV9zdGF0ZV9icGYodm9pZClcbm5ldC94ZnJtL3hmcm1fc3RhdGVfYnBmLmMtMTMxLXtcbm5ldC94ZnJtL3hmcm1fc3RhdGVfYnBmLmM6MTMyOlx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsXG5uZXQveGZybS94ZnJtX3N0YXRlX2JwZi5jLTEzMy1cdFx0XHRcdFx0IFx1MDAyNnhmcm1fc3RhdGVfeGRwX2tmdW5jX3NldCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3RfbW9kb3JkZXJfeC5jPTI1PXN0YXRpYyBpbnQgX19pbml0IGJwZl90ZXN0X21vZG9yZGVyX3hfaW5pdCh2b2lkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3RfbW9kb3JkZXJfeC5jLTI2LXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3guYzoyNzpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3RfbW9kb3JkZXJfeC5jLTI4LVx0XHRcdFx0XHQgXHUwMDI2YnBmX3Rlc3RfbW9kb3JkZXJfeF9zZXQpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3kuYz0yNT1zdGF0aWMgaW50IF9faW5pdCBicGZfdGVzdF9tb2RvcmRlcl95X2luaXQodm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3kuYy0yNi17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdF9tb2RvcmRlcl95LmM6Mjc6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3kuYy0yOC1cdFx0XHRcdFx0IFx1MDAyNmJwZl90ZXN0X21vZG9yZGVyX3lfc2V0KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jPTIxMzA9c3RhdGljIGludCBicGZfdGVzdG1vZF9pbml0KHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYy0yMTQwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYzoyMTQxOlx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQywgXHUwMDI2YnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX3NldCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjIxNDI6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6MjE0MzpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6MjE0NDpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6MjE0NTpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMtMjE0Ni1cdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfZm1vZHJldF9pZF9zZXQoXHUwMDI2YnBmX3Rlc3Rtb2RfdHJhbXBvbGluZV9jb3VudF9mbW9kcmV0X3NldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODE2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgZm9yIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIHRoZSBOZXR3b3JrIEZpbHRlciBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHplcm8gaW4gb24gaG93IHRoZXNlIGBpbml0X3N1YnN5c3RlbWAgYW5kIGBicGZfc29ja19kZXN0cm95YCBmdW5jdGlvbnMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBuZXR3b3JrIGZpbHRlciBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgY29uZmlybWluZyB3aGV0aGVyIG9yIG5vdCB0aGVzZSBjYWxscyBhcmUgd3JhcHBlZCBpbiBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIGxpa2UgYCNpZmRlZmAgYmxvY2tzLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBhbmQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaWYgZGlmZmVyZW50IGZlYXR1cmVzIG9yIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGFyZSBhZmZlY3RpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZXNlIGZ1bmN0aW9ucy4gU28sIGxldCYjMzk7cyBzdGFydCBhdCBsaW5lIDEyODUwIG9mIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIHdvcmsgbXkgd2F5IHRocm91Z2ggdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4gSSB3YW50IHRvIHNlZSBpZiB0aGV5JiMzOTtyZSBoYW5kbGVkIGRpZmZlcmVudGx5IGJhc2VkIG9uIGZsYWdzIG9yIHNldHRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI4NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyODUwOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfeGRwID0ge1xuMTI4NTE6XHRcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuMTI4NTI6XHRcdC5zZXQgPSBcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X3hkcCxcbjEyODUzOlx0fTtcbjEyODU0Olx0XG4xMjg1NTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X3NvY2tfYWRkciA9IHtcbjEyODU2Olx0XHQub3duZXIgPSBUSElTX01PRFVMRSxcbjEyODU3Olx0XHQuc2V0ID0gXHUwMDI2YnBmX2tmdW5jX2NoZWNrX3NldF9zb2NrX2FkZHIsXG4xMjg1ODpcdH07XG4xMjg1OTpcdFxuMTI4NjA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF90Y3BfcmVxc2sgPSB7XG4xMjg2MTpcdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4xMjg2MjpcdFx0LnNldCA9IFx1MDAyNmJwZl9rZnVuY19jaGVja19zZXRfdGNwX3JlcXNrLFxuMTI4NjM6XHR9O1xuMTI4NjQ6XHRcbjEyODY1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfc29ja19vcHMgPSB7XG4xMjg2NjpcdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4xMjg2NzpcdFx0LnNldCA9IFx1MDAyNmJwZl9rZnVuY19jaGVja19zZXRfc29ja19vcHMsXG4xMjg2ODpcdH07XG4xMjg2OTpcdFxuMTI4NzA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9pY21wX3NlbmQgPSB7XG4xMjg3MTpcdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4xMjg3MjpcdFx0LnNldCA9IFx1MDAyNmJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kLFxuMTI4NzM6XHR9O1xuMTI4NzQ6XHRcbjEyODc1Olx0c3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZClcbjEyODc2Olx0e1xuMTI4Nzc6XHRcdGludCByZXQ7XG4xMjg3ODpcdFxuMTI4Nzk6XHRcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbjEyODgwOlx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xuMTI4ODE6XHRcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0tfU0tCLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG4xMjg4MjpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG4xMjg4MzpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG4xMjg4NDpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfT1VULCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG4xMjg4NTpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfSU4sIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbjEyODg2Olx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG4xMjg4NzpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG4xMjg4ODpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9ORVRGSUxURVIsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbjEyODg5Olx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbjEyODkwOlx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF9za2JfbWV0YSk7XG4xMjg5MTpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1QsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiX21ldGEpO1xuMTI4OTI6XHRcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3hkcCk7XG4xMjg5MzpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxuMTI4OTQ6XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19hZGRyKTtcbjEyODk1Olx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF90Y3BfcmVxc2spO1xuMTI4OTY6XHRcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiwgXHUwMDI2YnBmX2tmdW5jX3NldF9pY21wX3NlbmQpO1xuMTI4OTc6XHRcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tfT1BTLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NvY2tfb3BzKTtcbjEyODk4Olx0fVxuMTI4OTk6XHRsYXRlX2luaXRjYWxsKGJwZl9rZnVuY19pbml0KTtcbjEyOTAwOlx0XG4xMjkwMTpcdF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbjEyOTAyOlx0XG4xMjkwMzpcdC8qIGJwZl9zb2NrX2Rlc3Ryb3k6IERlc3Ryb3kgdGhlIGdpdmVuIHNvY2tldCB3aXRoIEVDT05OQUJPUlRFRCBlcnJvciBjb2RlLlxuMTI5MDQ6XHQgKlxuMTI5MDU6XHQgKiBUaGUgZnVuY3Rpb24gZXhwZWN0cyBhIG5vbi1OVUxMIHBvaW50ZXIgdG8gYSBzb2NrZXQsIGFuZCBpbnZva2VzIHRoZVxuMTI5MDY6XHQgKiBwcm90b2NvbCBzcGVjaWZpYyBzb2NrZXQgZGVzdHJveSBoYW5kbGVycy5cbjEyOTA3Olx0ICpcbjEyOTA4Olx0ICogVGhlIGhlbHBlciBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBCUEYgY29udGV4dHMgdGhhdCBoYXZlIGFjcXVpcmVkIHRoZSBzb2NrZXRcbjEyOTA5Olx0ICogbG9ja3MuXG4xMjkxMDpcdCAqXG4xMjkxMTpcdCAqIFBhcmFtZXRlcnM6XG4xMjkxMjpcdCAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWRcbjEyOTEzOlx0ICpcbjEyOTE0Olx0ICogUmV0dXJuOlxuMTI5MTU6XHQgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBvciB3aGF0ZXZlciB0aGUgcHJvdG9jb2wgc3BlY2lmaWNcbjEyOTE2Olx0ICogZGVzdHJveSBoYW5kbGVyIHJldHVybnMuXG4xMjkxNzpcdCAqIEVPUE5PVFNVUFAgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuXG4xMjkxODpcdCAqIDAgb3RoZXJ3aXNlXG4xMjkxOTpcdCAqL1xuMTI5MjA6XHRfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spXG4xMjkyMTpcdHtcbjEyOTIyOlx0XHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilzb2NrO1xuMTI5MjM6XHRcbjEyOTI0Olx0XHQvKiBUaGUgbG9ja2luZyBzZW1hbnRpY3MgdGhhdCBhbGxvdyBmb3Igc3luY2hyb25vdXMgZXhlY3V0aW9uIG9mIHRoZVxuMTI5MjU6XHRcdCAqIGRlc3Ryb3kgaGFuZGxlcnMgYXJlIG9ubHkgc3VwcG9ydGVkIGZvciBUQ1AgYW5kIFVEUC5cbjEyOTI2Olx0XHQgKiBTdXBwb3J0aW5nIHByb3RvY29scyB3aWxsIG5lZWQgdG8gYWNxdWlyZSBzb2NrIGxvY2sgaW4gdGhlIEJQRiBjb250ZXh0XG4xMjkyNzpcdFx0ICogcHJpb3IgdG8gaW52b2tpbmcgdGhpcyBrZnVuYy5cbjEyOTI4Olx0XHQgKi9cbjEyOTI5Olx0XHRpZiAoIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KVxuMTI5MzA6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTI5MzE6XHRcbjEyOTMyOlx0XHRpZiAoc2tfZnVsbHNvY2soc2spIFx1MDAyNlx1MDAyNlxuMTI5MzM6XHRcdCAgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjZcbjEyOTM0Olx0XHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXG4xMjkzNTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMjkzNjpcdFxuMTI5Mzc6XHRcdHJldHVybiBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcbjEyOTM4Olx0fVxuMTI5Mzk6XHRcbjEyOTQwOlx0X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcbjEyOTQxOlx0XG4xMjk0MjpcdEJURl9LRlVOQ1NfU1RBUlQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKVxuMTI5NDM6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlcbjEyOTQ0Olx0QlRGX0tGVU5DU19FTkQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKVxuMTI5NDU6XHRcbjEyOTQ2Olx0c3RhdGljIGludCB0cmFjaW5nX2l0ZXJfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxuMTI5NDc6XHR7XG4xMjk0ODpcdFx0aWYgKGJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcywga2Z1bmNfaWQpIFx1MDAyNlx1MDAyNlxuMTI5NDk6XHRcdCAgICBwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9JVEVSKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM2OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQlBGIFNvY2sgRGVzdHJ1Y3Rpb24gTWVjaGFuaXNtKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgYGJwZl9zb2NrX2Rlc3Ryb3lgLiBJdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBhdmFpbGFiaWxpdHkgaW4gdGhlIGtlcm5lbCwgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmtpbmcgYW5kIEJQRiBzeXNjYWxscy4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgd2hldGhlciB0aGUgZW50aXJlIGBuZXQvY29yZS9maWx0ZXIuY2AgZmlsZSBpcyBnYXRlZCBiZWhpbmQgc29tZSBjb25kaXRpb25hbCBvciBpZiBgYnBmX3NvY2tfZGVzdHJveWAgaXMgKmFsd2F5cyogYnVpbHQgaWYgYE5FVGAgYW5kIGBCUEZfU1lTQ0FMTGAgYXJlIGJvdGggZW5hYmxlZC4gTXkgaW5zdGluY3QgaXMgdG8gZXhhbWluZSB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYCBmb3IgdGhlIG1vc3QgZGVmaW5pdGl2ZSBhbnN3ZXIuIFRoYXQgc2hvdWxkIGhhdmUgdGhlIGJ1aWxkIHJ1bGVzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgcmVsZXZhbnQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCB3aWxsIGlsbHVtaW5hdGUgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIHRoYXQgZnVuY3Rpb24uIEZyb20gdGhlcmUgSSYjMzk7bGwgYmUgYWJsZSB0byB0ZWxsIGlmIGl0JiMzOTtzIGFsd2F5cyBpbmNsdWRlZCBvciBub3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbHRlclxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVx0XHQgICAgICYjNDM7PSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZToxMzpcdFx0XHRuZWlnaGJvdXIubyBydG5ldGxpbmsubyB1dGlscy5vIGxpbmtfd2F0Y2gubyBmaWx0ZXIubyBcXFxubmV0L2NvcmUvTWFrZWZpbGUtMTQtXHRcdFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTc0MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzLCBkaXN0aWxsZWQgaW50byBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IGFzIHlvdSByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmRzIHNvbWVvbmUgYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBpbm5lciB3b3JraW5nczoKCioqQ2hlY2tpbmcgQlBGIGFuZCBCVEYgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgQlBGX1NZU0NBTExgIGlzIGRlZmluZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIGBERUJVR19JTkZPX0JURmAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoZSBsb2dpY2FsIHBsYWNlcyB0byBsb29rIGFyZSBgaW5pdC9LY29uZmlnYCDigJMgdGhhdCYjMzk7cyB3aGVyZSBhIGxvdCBvZiB0aGUgaW5pdGlhbCBmZWF0dXJlcyBhcmUgZGVjbGFyZWQg4oCTIGFuZCBga2VybmVsL2JwZi9LY29uZmlnYCwgc2luY2Ugd2UmIzM5O3JlIHNwZWNpZmljYWxseSB0YWxraW5nIGFib3V0IEJQRi4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgaW5kZXBlbmRlbnRseSBhbmQgaWYgdGhlIGBERUJVR19JTkZPX0JURmAgaXMgY29uZGl0aW9uYWxseSBhZmZlY3RlZC4KClRoZW4sIHRvIGJlIGVmZmljaWVudCwgaW5zdGVhZCBvZiBtYW51YWxseSBzaWZ0aW5nIHRocm91Z2ggdGhlIGZpbGUsIEkmIzM5O2xsIHF1aWNrbHkgdXNlIGBncmVwYCB0byBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciBib3RoIGBCUEZfU1lTQ0FMTGAgYW5kIGBERUJVR19JTkZPX0JURmAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIHJlbGV2YW50IGxpbmVzIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLCBhbmQgYWxzbyB0aGUgYnJvYWRlciBjb2RlYmFzZSB0byBzZWUgd2hhdCBkZXBlbmRzIG9uIHRoZW0sIG9yIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZS4gVGhpcyB3aWxsIGhvcGVmdWxseSBwcm92aWRlIHRoZSBjb250ZXh0IEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZWlyIHJlbGF0aW9uc2hpcCBhbmQgZW5zdXJlIHRoZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQuIFRoaXMgaXMgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCB0byB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTc0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBCVEYgYW5kIEtmdW5jcyoqCgpPa2F5LCBzbyBJJiMzOTttIHdvbmRlcmluZyBhYm91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYENPTkZJR19ERUJVR19JTkZPX0JURmAgYW5kIGtlcm5lbCBmdW5jdGlvbnMg4oCTIGFyZSB3ZSB0cnVseSByZWxpYW50IG9uIEJURiBpbmZvcm1hdGlvbiBmb3Iga2Z1bmMgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXRgIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVmaW5lZCB3aXRoaW4gYGluY2x1ZGUvbGludXgvYnRmLmhgLiBVbmRlcnN0YW5kaW5nIHRoYXQgcmVnaXN0cmF0aW9uIHByb2Nlc3Mgd2lsbCBsaWtlbHkgc2hlZCBsaWdodCBvbiB0aGUgZGVwZW5kZW5jeSwgb3IgbGFjayB0aGVyZW9mLCBvbiB0aGUgZGVidWcgQlRGIGRhdGEuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBkaXZlIGludG8gdGhlIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9idGYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTg1Olx0aW50IGJ0Zl9rZnVuY19jaGVja19mbGFnKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGtmdW5jX2J0Zl9pZCwgdTMyIGZsYWcpO1xuIDU4NjpcdGJvb2wgYnRmX2tmdW5jX2lzX2FsbG93ZWQoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIga2Z1bmNfYnRmX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xuIDU4NzpcdHUzMiAqYnRmX2tmdW5jX2lzX21vZGlmeV9yZXR1cm4oY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIga2Z1bmNfYnRmX2lkLFxuIDU4ODpcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbiA1ODk6XHRpbnQgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxuIDU5MDpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0ICpzKTtcbiA1OTE6XHRpbnQgcmVnaXN0ZXJfYnRmX2Ztb2RyZXRfaWRfc2V0KGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0ICprc2V0KTtcbiA1OTI6XHRzMzIgYnRmX2ZpbmRfZHRvcl9rZnVuYyhzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfaWQpO1xuIDU5MzpcdGludCByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3MoY29uc3Qgc3RydWN0IGJ0Zl9pZF9kdG9yX2tmdW5jICpkdG9ycywgdTMyIGFkZF9jbnQsXG4gNTk0Olx0XHRcdFx0XHRzdHJ1Y3QgbW9kdWxlICpvd25lcik7XG4gNTk1Olx0c3RydWN0IGJ0Zl9zdHJ1Y3RfbWV0YSAqYnRmX2ZpbmRfc3RydWN0X21ldGEoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkKTtcbiA1OTY6XHRib29sIGJ0Zl9pc19wcm9qZWN0aW9uX29mKGNvbnN0IGNoYXIgKnBuYW1lLCBjb25zdCBjaGFyICp0bmFtZSk7XG4gNTk3Olx0Ym9vbCBidGZfaXNfcHJvZ19jdHhfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4gNTk4Olx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxuIDU5OTpcdFx0XHRcdCAgIGludCBhcmcpO1xuIDYwMDpcdGludCBnZXRfa2Vybl9jdHhfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csIGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUpO1xuIDYwMTpcdGJvb2wgYnRmX3R5cGVzX2FyZV9zYW1lKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZjEsIHUzMiBpZDEsXG4gNjAyOlx0XHRcdFx0Y29uc3Qgc3RydWN0IGJ0ZiAqYnRmMiwgdTMyIGlkMik7XG4gNjAzOlx0aW50IGJ0Zl9jaGVja19pdGVyX2FyZyhzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuYywgaW50IGFyZ19pZHgpO1xuIDYwNDpcdFxuIDYwNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBidGZfdHlwZV9pc19zdHJ1Y3RfcHRyKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KVxuIDYwNjpcdHtcbiA2MDc6XHRcdGlmICghYnRmX3R5cGVfaXNfcHRyKHQpKVxuIDYwODpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNjA5Olx0XG4gNjEwOlx0XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVx1MDAzZXR5cGUsIE5VTEwpO1xuIDYxMTpcdFxuIDYxMjpcdFx0cmV0dXJuIGJ0Zl90eXBlX2lzX3N0cnVjdCh0KTtcbiA2MTM6XHR9XG4gNjE0Olx0I2Vsc2VcbiA2MTU6XHRzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYnRmX3R5cGVfYnlfaWQoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIDYxNjpcdFx0XHRcdFx0XHRcdCAgICB1MzIgdHlwZV9pZClcbiA2MTc6XHR7XG4gNjE4Olx0XHRyZXR1cm4gTlVMTDtcbiA2MTk6XHR9XG4gNjIwOlx0XG4gNjIxOlx0c3RhdGljIGlubGluZSB2b2lkIGJ0Zl9zZXRfYmFzZV9idGYoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmICpiYXNlX2J0ZilcbiA2MjI6XHR7XG4gNjIzOlx0fVxuIDYyNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzMxNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gQlRGIGluIGBpbmNsdWRlL2xpbnV4L2J0Zi5oYCoqCgpPa2F5LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgQlRGIHN0dWZmIGJldHRlci4gU3BlY2lmaWNhbGx5LCB0aGVyZSYjMzk7cyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgYXJvdW5kIGxpbmUgNTg1IGluIHRoZSBgaW5jbHVkZS9saW51eC9idGYuaGAgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdoYXQmIzM5O3MgZGVmaW5lZCBpbiB0aGUgYGlmZGVmYCBibG9jayBpbW1lZGlhdGVseSAqYWJvdmUqIHRoYXQgbGluZS4gSSYjMzk7bSBhc3N1bWluZyBpdCByZWxhdGVzIHRvIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiwgZmVhdHVyZSBvciBwbGF0Zm9ybS4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG1hZ2ljIGhhcHBlbnMsIGFuZCB1bmRlcnN0YW5kaW5nIHRoYXQgbG9naWMgd2lsbCBnaXZlIG1lIHNvbWUgY29udGV4dCBiZWZvcmUgSSBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIGNvZGUgaW4gdGhlIGFyZWEgb2YgaW50ZXJlc3QsIHdoaWNoIGlzIGxpa2VseSBkZXBlbmRlbnQgb24gdGhhdCBjb25kaXRpb25hbCBsb2dpYy4gSSBhbnRpY2lwYXRlIHRoYXQgdGhlIGAjaWZkZWZgIHdpbGwgbGlrZWx5IGNvbmRpdGlvbiBpbmNsdXNpb24gb2Ygb3RoZXIgcmVsZXZhbnQgaGVhZGVycywgZGVjbGFyYXRpb25zLCBvciBtYXliZSBldmVuIGZ1bmN0aW9uIGRlZmluaXRpb25zIHRoYXQgSSBuZWVkIGZvciBmdWxsIGNvbXByZWhlbnNpb24gb2YgdGhlIGNvZGUmIzM5O3MgYmVoYXZpb3IuIFRpbWUgdG8gb3BlbiB0aGUgZmlsZSBhbmQgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9idGYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTUwOlx0ZW51bSBidGZfZmllbGRfaXRlcl9raW5kIHtcbiA1NTE6XHRcdEJURl9GSUVMRF9JVEVSX0lEUyxcbiA1NTI6XHRcdEJURl9GSUVMRF9JVEVSX1NUUlMsXG4gNTUzOlx0fTtcbiA1NTQ6XHRcbiA1NTU6XHRzdHJ1Y3QgYnRmX2ZpZWxkX2Rlc2Mge1xuIDU1NjpcdFx0Lyogb25jZS1wZXItdHlwZSBvZmZzZXRzICovXG4gNTU3Olx0XHRpbnQgdF9vZmZfY250LCB0X29mZnNbMl07XG4gNTU4Olx0XHQvKiBtZW1iZXIgc3RydWN0IHNpemUsIG9yIHplcm8sIGlmIG5vIG1lbWJlcnMgKi9cbiA1NTk6XHRcdGludCBtX3N6O1xuIDU2MDpcdFx0LyogcmVwZWF0ZWQgcGVyLW1lbWJlciBvZmZzZXRzICovXG4gNTYxOlx0XHRpbnQgbV9vZmZfY250LCBtX29mZnNbMV07XG4gNTYyOlx0fTtcbiA1NjM6XHRcbiA1NjQ6XHRzdHJ1Y3QgYnRmX2ZpZWxkX2l0ZXIge1xuIDU2NTpcdFx0c3RydWN0IGJ0Zl9maWVsZF9kZXNjIGRlc2M7XG4gNTY2Olx0XHR2b2lkICpwO1xuIDU2NzpcdFx0aW50IG1faWR4O1xuIDU2ODpcdFx0aW50IG9mZl9pZHg7XG4gNTY5Olx0XHRpbnQgdmxlbjtcbiA1NzA6XHR9O1xuIDU3MTpcdFxuIDU3MjpcdCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbiA1NzM6XHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmJ0Zl90eXBlX2J5X2lkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIHR5cGVfaWQpO1xuIDU3NDpcdHZvaWQgYnRmX3NldF9iYXNlX2J0ZihzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGYgKmJhc2VfYnRmKTtcbiA1NzU6XHRpbnQgYnRmX3JlbG9jYXRlKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0ZiAqYmFzZV9idGYsIF9fdTMyICoqbWFwX2lkcyk7XG4gNTc2Olx0aW50IGJ0Zl9maWVsZF9pdGVyX2luaXQoc3RydWN0IGJ0Zl9maWVsZF9pdGVyICppdCwgc3RydWN0IGJ0Zl90eXBlICp0LFxuIDU3NzpcdFx0XHRcdGVudW0gYnRmX2ZpZWxkX2l0ZXJfa2luZCBpdGVyX2tpbmQpO1xuIDU3ODpcdF9fdTMyICpidGZfZmllbGRfaXRlcl9uZXh0KHN0cnVjdCBidGZfZmllbGRfaXRlciAqaXQpO1xuIDU3OTpcdFxuIDU4MDpcdGNvbnN0IGNoYXIgKmJ0Zl9uYW1lX2J5X29mZnNldChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBvZmZzZXQpO1xuIDU4MTpcdGNvbnN0IGNoYXIgKmJ0Zl9zdHJfYnlfb2Zmc2V0KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIG9mZnNldCk7XG4gNTgyOlx0c3RydWN0IGJ0ZiAqYnRmX3BhcnNlX3ZtbGludXgodm9pZCk7XG4gNTgzOlx0c3RydWN0IGJ0ZiAqYnBmX3Byb2dfZ2V0X3RhcmdldF9idGYoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbiA1ODQ6XHR1MzIgKmJ0Zl9rZnVuY19mbGFncyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBrZnVuY19idGZfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG4gNTg1Olx0aW50IGJ0Zl9rZnVuY19jaGVja19mbGFnKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGtmdW5jX2J0Zl9pZCwgdTMyIGZsYWcpO1xuIDU4NjpcdGJvb2wgYnRmX2tmdW5jX2lzX2FsbG93ZWQoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIga2Z1bmNfYnRmX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xuIDU4NzpcdHUzMiAqYnRmX2tmdW5jX2lzX21vZGlmeV9yZXR1cm4oY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIga2Z1bmNfYnRmX2lkLFxuIDU4ODpcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbiA1ODk6XHRpbnQgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ1MAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQlBGIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlIGZvciBJdGVyYXRvcnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGZvY3VzaW5nIG9uIGVuYWJsaW5nIEJQRiBpdGVyYXRvcnMsIHBhcnRpY3VsYXJseSB0aG9zZSB0b3VjaGluZyBvbiBUQ1AuIEkga25vdyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgLCBgQ09ORklHX05FVGAsIGFuZCBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCBhcmUgZGVmaW5pdGVseSBpbiBwbGF5IOKAkyB0aG9zZSBhcmUgdGhlIGZvdW5kYXRpb24uIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyBzcGVjaWZpYyB0byBgQlBGX1RSQUNFX0lURVJgIG9yIHRob3NlIHJlbGF0ZWQgdG8gdGhlIGBpdGVyL3RjcGAgZnVuY3Rpb25hbGl0eS4gU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBzZWFyY2ggZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gYGJwZl9pdGVyX3RjcGAgb3IgYW55IG90aGVyIHVzZSBvZiBpdGVyYXRvcnMgaW4gdGhlIEJQRiB3b3JsZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIG1vcmUgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2l0ZXJfcmVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0PTMwMD1maWxlLlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0LTMwMy1cbkRvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0OjMwNDogIHN0cnVjdCBicGZfaXRlcl9yZWcge1xuRG9jdW1lbnRhdGlvbi9icGYvYnBmX2l0ZXJhdG9ycy5yc3QtMzA1LSAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRhcmdldDtcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9icGZfaXRlcmF0b3JzLnJzdC0zMTYtXG5Eb2N1bWVudGF0aW9uL2JwZi9icGZfaXRlcmF0b3JzLnJzdDozMTc6QWZ0ZXIgZmlsbGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUgZmllbGRzLCBjYWxsIGBgYnBmX2l0ZXJfcmVnX3RhcmdldCgpYGAgdG9cbkRvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0LTMxOC1yZWdpc3RlciB0aGUgaXRlcmF0b3IgdG8gdGhlIG1haW4gQlBGIGl0ZXJhdG9yIHN1YnN5c3RlbS5cbkRvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0LTMxOS1cbkRvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0OjMyMDpUaGUgZm9sbG93aW5nIGlzIHRoZSBicmVha2Rvd24gZm9yIGVhY2ggZmllbGQgaW4gc3RydWN0IGBgYnBmX2l0ZXJfcmVnYGAuXG5Eb2N1bWVudGF0aW9uL2JwZi9icGZfaXRlcmF0b3JzLnJzdC0zMjEtXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0yOTgwPWVudW0gYnBmX2l0ZXJfZmVhdHVyZSB7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0yOTg0LSNkZWZpbmUgQlBGX0lURVJfQ1RYX0FSR19NQVggMlxuaW5jbHVkZS9saW51eC9icGYuaDoyOTg1OnN0cnVjdCBicGZfaXRlcl9yZWcge1xuaW5jbHVkZS9saW51eC9icGYuaC0yOTg2LVx0Y29uc3QgY2hhciAqdGFyZ2V0O1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9MzAwND1zdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9tYXBfZWxlbSB7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0zMDEwLVxuaW5jbHVkZS9saW51eC9icGYuaDozMDExOmludCBicGZfaXRlcl9yZWdfdGFyZ2V0KGNvbnN0IHN0cnVjdCBicGZfaXRlcl9yZWcgKnJlZ19pbmZvKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MzAxMjp2b2lkIGJwZl9pdGVyX3VucmVnX3RhcmdldChjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfcmVnICpyZWdfaW5mbyk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMwMTMtaW50IGJwZl9pdGVyX3Byb2dfc3VwcG9ydGVkKHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jPTEwPXN0cnVjdCBicGZfaXRlcl90YXJnZXRfaW5mbyB7XG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMTEtXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6MTI6XHRjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfcmVnICpyZWdfaW5mbztcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy0xMy1cdHUzMiBidGZfaWQ7XHQvKiBjYWNoZWQgdmFsdWUgKi9cbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9MjgzPWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnBmX2l0ZXJfZm9wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMjkxLSAqIGEgY29uc3Qgc3RhdGljIHZhcmlhYmxlIGFuZCBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG9cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzoyOTI6ICogYnBmX2l0ZXJfcmVnX3RhcmdldCgpLlxua2VybmVsL2JwZi9icGZfaXRlci5jLTI5My0gKi9cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzoyOTQ6aW50IGJwZl9pdGVyX3JlZ190YXJnZXQoY29uc3Qgc3RydWN0IGJwZl9pdGVyX3JlZyAqcmVnX2luZm8pXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMjk1LXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMzExLVxua2VybmVsL2JwZi9icGZfaXRlci5jOjMxMjp2b2lkIGJwZl9pdGVyX3VucmVnX3RhcmdldChjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfcmVnICpyZWdfaW5mbylcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy0zMTMte1xuLS1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYz0zNzA9YnBmX2l0ZXJfZ2V0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTM3Ny1cdFx0aWYgKHRpbmZvLVx1MDAzZWJ0Zl9pZCA9PSBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkKSB7XG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6Mzc4Olx0XHRcdGNvbnN0IHN0cnVjdCBicGZfaXRlcl9yZWcgKnJlZ19pbmZvO1xua2VybmVsL2JwZi9icGZfaXRlci5jLTM3OS1cbi0tXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM9Mjg0PURFRklORV9CUEZfSVRFUl9GVU5DKGNncm91cCwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTI4Ni1cbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzoyODc6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX2Nncm91cF9yZWdfaW5mbyA9IHtcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0yODgtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDtjZ3JvdXBcJiMzNDssXG4tLVxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jPTMwMj1zdGF0aWMgaW50IF9faW5pdCBicGZfY2dyb3VwX2l0ZXJfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0zMDQtXHRicGZfY2dyb3VwX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSBicGZfY2dyb3VwX2J0Zl9pZFswXTtcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzozMDU6XHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZicGZfY2dyb3VwX3JlZ19pbmZvKTtcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0zMDYtfVxuLS1cbmtlcm5lbC9icGYvZG1hYnVmX2l0ZXIuYz0xMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBkbWFidWZfaXRlcl9zZXFfaW5mbyA9IHtcbi0tXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmMtMTIyLVxua2VybmVsL2JwZi9kbWFidWZfaXRlci5jOjEyMzpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfZG1hYnVmX3JlZ19pbmZvID0ge1xua2VybmVsL2JwZi9kbWFidWZfaXRlci5jLTEyNC1cdC50YXJnZXRcdFx0XHQ9IFwmIzM0O2RtYWJ1ZlwmIzM0Oyxcbi0tXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmM9MTM4PXN0YXRpYyBpbnQgX19pbml0IGRtYWJ1Zl9pdGVyX2luaXQodm9pZClcbi0tXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmMtMTQwLVx0YnBmX2RtYWJ1Zl9yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID0gYnBmX2RtYWJ1Zl9idGZfaWRbMF07XG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmM6MTQxOlx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXHUwMDI2YnBmX2RtYWJ1Zl9yZWdfaW5mbyk7XG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmMtMTQyLX1cbi0tXG5rZXJuZWwvYnBmL2ttZW1fY2FjaGVfaXRlci5jPTIxNz1ERUZJTkVfQlBGX0lURVJfRlVOQyhrbWVtX2NhY2hlLCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcbi0tXG5rZXJuZWwvYnBmL2ttZW1fY2FjaGVfaXRlci5jLTIxOS1cbmtlcm5lbC9icGYva21lbV9jYWNoZV9pdGVyLmM6MjIwOnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGJwZl9rbWVtX2NhY2hlX3JlZ19pbmZvID0ge1xua2VybmVsL2JwZi9rbWVtX2NhY2hlX2l0ZXIuYy0yMjEtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDtrbWVtX2NhY2hlXCYjMzQ7LFxuLS1cbmtlcm5lbC9icGYva21lbV9jYWNoZV9pdGVyLmM9MjMyPXN0YXRpYyBpbnQgX19pbml0IGJwZl9rbWVtX2NhY2hlX2l0ZXJfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9icGYva21lbV9jYWNoZV9pdGVyLmMtMjM0LVx0YnBmX2ttZW1fY2FjaGVfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9IGJwZl9rbWVtX2NhY2hlX2J0Zl9pZFswXTtcbmtlcm5lbC9icGYva21lbV9jYWNoZV9pdGVyLmM6MjM1Olx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXHUwMDI2YnBmX2ttZW1fY2FjaGVfcmVnX2luZm8pO1xua2VybmVsL2JwZi9rbWVtX2NhY2hlX2l0ZXIuYy0yMzYtfVxuLS1cbmtlcm5lbC9icGYvbGlua19pdGVyLmM9ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBicGZfbGlua19zZXFfaW5mbyA9IHtcbi0tXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTg5LVxua2VybmVsL2JwZi9saW5rX2l0ZXIuYzo5MDpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfbGlua19yZWdfaW5mbyA9IHtcbmtlcm5lbC9icGYvbGlua19pdGVyLmMtOTEtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDticGZfbGlua1wmIzM0Oyxcbi0tXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jPTEwMD1zdGF0aWMgaW50IF9faW5pdCBicGZfbGlua19pdGVyX2luaXQodm9pZClcbi0tXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTEwMi1cdGJwZl9saW5rX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSAqYnRmX2JwZl9saW5rX2lkO1xua2VybmVsL2JwZi9saW5rX2l0ZXIuYzoxMDM6XHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZicGZfbGlua19yZWdfaW5mbyk7XG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTEwNC19XG4tLVxua2VybmVsL2JwZi9tYXBfaXRlci5jPTgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gYnBmX21hcF9zZXFfaW5mbyA9IHtcbi0tXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtODktXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM6OTA6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX21hcF9yZWdfaW5mbyA9IHtcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy05MS1cdC50YXJnZXRcdFx0XHQ9IFwmIzM0O2JwZl9tYXBcJiMzNDssXG4tLVxua2VybmVsL2JwZi9tYXBfaXRlci5jPTE2OT1ERUZJTkVfQlBGX0lURVJfRlVOQyhicGZfbWFwX2VsZW0sIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xNzEtXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM6MTcyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGJwZl9tYXBfZWxlbV9yZWdfaW5mbyA9IHtcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xNzMtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDticGZfbWFwX2VsZW1cJiMzNDssXG4tLVxua2VybmVsL2JwZi9tYXBfaXRlci5jPTE4Nz1zdGF0aWMgaW50IF9faW5pdCBicGZfbWFwX2l0ZXJfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xOTEtXHRicGZfbWFwX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSAqYnRmX2JwZl9tYXBfaWQ7XG5rZXJuZWwvYnBmL21hcF9pdGVyLmM6MTkyOlx0cmV0ID0gYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZicGZfbWFwX3JlZ19pbmZvKTtcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xOTMtXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xOTUtXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM6MTk2Olx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXHUwMDI2YnBmX21hcF9lbGVtX3JlZ19pbmZvKTtcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xOTctfVxuLS1cbmtlcm5lbC9icGYvcHJvZ19pdGVyLmM9ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBicGZfcHJvZ19zZXFfaW5mbyA9IHtcbi0tXG5rZXJuZWwvYnBmL3Byb2dfaXRlci5jLTg5LVxua2VybmVsL2JwZi9wcm9nX2l0ZXIuYzo5MDpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfcHJvZ19yZWdfaW5mbyA9IHtcbmtlcm5lbC9icGYvcHJvZ19pdGVyLmMtOTEtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDticGZfcHJvZ1wmIzM0Oyxcbi0tXG5rZXJuZWwvYnBmL3Byb2dfaXRlci5jPTEwMD1zdGF0aWMgaW50IF9faW5pdCBicGZfcHJvZ19pdGVyX2luaXQodm9pZClcbi0tXG5rZXJuZWwvYnBmL3Byb2dfaXRlci5jLTEwMi1cdGJwZl9wcm9nX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSAqYnRmX2JwZl9wcm9nX2lkO1xua2VybmVsL2JwZi9wcm9nX2l0ZXIuYzoxMDM6XHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZicGZfcHJvZ19yZWdfaW5mbyk7XG5rZXJuZWwvYnBmL3Byb2dfaXRlci5jLTEwNC19XG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz02ODQ9c3RhdGljIHZvaWQgYnBmX2l0ZXJfdGFza19zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eCwgc3RydWN0IHNlcV9maWxlICpzZXEpXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy02OTItXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjY5MzpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyB0YXNrX3JlZ19pbmZvID0ge1xua2VybmVsL2JwZi90YXNrX2l0ZXIuYy02OTQtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDt0YXNrXCYjMzQ7LFxuLS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmM9NzA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gdGFza19maWxlX3NlcV9pbmZvID0ge1xuLS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmMtNzEzLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo3MTQ6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgdGFza19maWxlX3JlZ19pbmZvID0ge1xua2VybmVsL2JwZi90YXNrX2l0ZXIuYy03MTUtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDt0YXNrX2ZpbGVcJiMzNDssXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz03MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyB0YXNrX3ZtYV9zZXFfaW5mbyA9IHtcbi0tXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTczNi1cbmtlcm5lbC9icGYvdGFza19pdGVyLmM6NzM3OnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIHRhc2tfdm1hX3JlZ19pbmZvID0ge1xua2VybmVsL2JwZi90YXNrX2l0ZXIuYy03MzgtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDt0YXNrX3ZtYVwmIzM0Oyxcbi0tXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jPTEyMDI9c3RhdGljIGludCBfX2luaXQgdGFza19pdGVyX2luaXQodm9pZClcbi0tXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEyMTItXHR0YXNrX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSBidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9UQVNLXTtcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6MTIxMzpcdHJldCA9IGJwZl9pdGVyX3JlZ190YXJnZXQoXHUwMDI2dGFza19yZWdfaW5mbyk7XG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEyMTQtXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTIxOC1cdHRhc2tfZmlsZV9yZWdfaW5mby5jdHhfYXJnX2luZm9bMV0uYnRmX2lkID0gYnRmX3RyYWNpbmdfaWRzW0JURl9UUkFDSU5HX1RZUEVfRklMRV07XG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjEyMTk6XHRyZXQgPSAgYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZ0YXNrX2ZpbGVfcmVnX2luZm8pO1xua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMjIwLVx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEyMjQtXHR0YXNrX3ZtYV9yZWdfaW5mby5jdHhfYXJnX2luZm9bMV0uYnRmX2lkID0gYnRmX3RyYWNpbmdfaWRzW0JURl9UUkFDSU5HX1RZUEVfVk1BXTtcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6MTIyNTpcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFx1MDAyNnRhc2tfdm1hX3JlZ19pbmZvKTtcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTIyNi19XG4tLVxua2VybmVsL2thbGxzeW1zLmM9ODU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8ga3N5bV9pdGVyX3NlcV9pbmZvID0ge1xuLS1cbmtlcm5lbC9rYWxsc3ltcy5jLTg2MC1cbmtlcm5lbC9rYWxsc3ltcy5jOjg2MTpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBrc3ltX2l0ZXJfcmVnX2luZm8gPSB7XG5rZXJuZWwva2FsbHN5bXMuYy04NjItXHQudGFyZ2V0ICAgICAgICAgICAgICAgICA9IFwmIzM0O2tzeW1cJiMzNDssXG4tLVxua2VybmVsL2thbGxzeW1zLmM9ODc0PXN0YXRpYyBpbnQgX19pbml0IGJwZl9rc3ltX2l0ZXJfcmVnaXN0ZXIodm9pZClcbi0tXG5rZXJuZWwva2FsbHN5bXMuYy04NzYtXHRrc3ltX2l0ZXJfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9ICpidGZfa3N5bV9pdGVyX2lkO1xua2VybmVsL2thbGxzeW1zLmM6ODc3Olx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXHUwMDI2a3N5bV9pdGVyX3JlZ19pbmZvKTtcbmtlcm5lbC9rYWxsc3ltcy5jLTg3OC19XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBpdGVyX3NlcV9pbmZvID0ge1xuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODk3LVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo4OTg6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvID0ge1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04OTktXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDticGZfc2tfc3RvcmFnZV9tYXBcJiMzNDssXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz05MTQ9c3RhdGljIGludCBfX2luaXQgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdCh2b2lkKVxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE3LVx0XHRidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9TT0NLXTtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6OTE4Olx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXHUwMDI2YnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvKTtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE5LX1cbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE5NjY9c3RhdGljIHZvaWQgc29ja19tYXBfaXRlcl9kZXRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfaXRlcl9hdXhfaW5mbyAqYXV4KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTk3MC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTk3MTpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBzb2NrX21hcF9pdGVyX3JlZyA9IHtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTk3Mi1cdC50YXJnZXRcdFx0XHQ9IFwmIzM0O3NvY2ttYXBcJiMzNDssXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xOTg2PXN0YXRpYyBpbnQgX19pbml0IGJwZl9zb2NrbWFwX2l0ZXJfaW5pdCh2b2lkKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTk4OS1cdFx0YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS107XG5uZXQvY29yZS9zb2NrX21hcC5jOjE5OTA6XHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZzb2NrX21hcF9pdGVyX3JlZyk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE5OTEtfVxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzYxNj1icGZfaXRlcl90Y3BfZ2V0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzYyOC1cbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzYyOTpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyB0Y3BfcmVnX2luZm8gPSB7XG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM2MzAtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDt0Y3BcJiMzNDssXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjM5LVxubmV0L2lwdjQvdGNwX2lwdjQuYzozNjQwOnN0YXRpYyB2b2lkIF9faW5pdCBicGZfaXRlcl9yZWdpc3Rlcih2b2lkKVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjQxLXtcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzY0Mi1cdHRjcF9yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID0gYnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS19DT01NT05dO1xubmV0L2lwdjQvdGNwX2lwdjQuYzozNjQzOlx0aWYgKGJwZl9pdGVyX3JlZ190YXJnZXQoXHUwMDI2dGNwX3JlZ19pbmZvKSlcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzY0NC1cdFx0cHJfd2FybihcJiMzNDtXYXJuaW5nOiBjb3VsZCBub3QgcmVnaXN0ZXIgYnBmIGl0ZXJhdG9yIHRjcFxcblwmIzM0Oyk7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0zNjQ5PXZvaWQgX19pbml0IHRjcF92NF9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjc0LSNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjM2NzU6XHRicGZfaXRlcl9yZWdpc3RlcigpO1xubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjc2LSNlbmRpZlxuLS1cbm5ldC9pcHY0L3VkcC5jPTM4ODI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyB1ZHBfc2VxX2luZm8gPSB7XG4tLVxubmV0L2lwdjQvdWRwLmMtMzg4OC1cbm5ldC9pcHY0L3VkcC5jOjM4ODk6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgdWRwX3JlZ19pbmZvID0ge1xubmV0L2lwdjQvdWRwLmMtMzg5MC1cdC50YXJnZXRcdFx0XHQ9IFwmIzM0O3VkcFwmIzM0Oyxcbi0tXG5uZXQvaXB2NC91ZHAuYy0zODk4LVxubmV0L2lwdjQvdWRwLmM6Mzg5OTpzdGF0aWMgdm9pZCBfX2luaXQgYnBmX2l0ZXJfcmVnaXN0ZXIodm9pZClcbm5ldC9pcHY0L3VkcC5jLTM5MDAte1xubmV0L2lwdjQvdWRwLmMtMzkwMS1cdHVkcF9yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID0gYnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfVURQXTtcbm5ldC9pcHY0L3VkcC5jOjM5MDI6XHRpZiAoYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZ1ZHBfcmVnX2luZm8pKVxubmV0L2lwdjQvdWRwLmMtMzkwMy1cdFx0cHJfd2FybihcJiMzNDtXYXJuaW5nOiBjb3VsZCBub3QgcmVnaXN0ZXIgYnBmIGl0ZXJhdG9yIHVkcFxcblwmIzM0Oyk7XG4tLVxubmV0L2lwdjQvdWRwLmM9MzkwNz12b2lkIF9faW5pdCB1ZHBfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTM5MjEtI2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcbm5ldC9pcHY0L3VkcC5jOjM5MjI6XHRicGZfaXRlcl9yZWdpc3RlcigpO1xubmV0L2lwdjQvdWRwLmMtMzkyMy0jZW5kaWZcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTY4OTI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBpcHY2X3JvdXRlX3NlcV9pbmZvID0ge1xuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNjg5OC1cbm5ldC9pcHY2L3JvdXRlLmM6Njg5OTpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBpcHY2X3JvdXRlX3JlZ19pbmZvID0ge1xubmV0L2lwdjYvcm91dGUuYy02OTAwLVx0LnRhcmdldFx0XHRcdD0gXCYjMzQ7aXB2Nl9yb3V0ZVwmIzM0Oyxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTY5MDgtXG5uZXQvaXB2Ni9yb3V0ZS5jOjY5MDk6c3RhdGljIGludCBfX2luaXQgYnBmX2l0ZXJfcmVnaXN0ZXIodm9pZClcbm5ldC9pcHY2L3JvdXRlLmMtNjkxMC17XG5uZXQvaXB2Ni9yb3V0ZS5jLTY5MTEtXHRpcHY2X3JvdXRlX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSAqYnRmX2ZpYjZfaW5mb19pZDtcbm5ldC9pcHY2L3JvdXRlLmM6NjkxMjpcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFx1MDAyNmlwdjZfcm91dGVfcmVnX2luZm8pO1xubmV0L2lwdjYvcm91dGUuYy02OTEzLX1cbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTY5MzA9aW50IF9faW5pdCBpcDZfcm91dGVfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNjk4MC0jaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxubmV0L2lwdjYvcm91dGUuYzo2OTgxOlx0cmV0ID0gYnBmX2l0ZXJfcmVnaXN0ZXIoKTtcbm5ldC9pcHY2L3JvdXRlLmMtNjk4Mi1cdGlmIChyZXQpXG4tLVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jPTI4OTU9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBuZXRsaW5rX3NlcV9pbmZvID0ge1xuLS1cbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yOTAxLVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjI5MDI6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgbmV0bGlua19yZWdfaW5mbyA9IHtcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yOTAzLVx0LnRhcmdldFx0XHRcdD0gXCYjMzQ7bmV0bGlua1wmIzM0Oyxcbi0tXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMjkxMS1cbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoyOTEyOnN0YXRpYyBpbnQgX19pbml0IGJwZl9pdGVyX3JlZ2lzdGVyKHZvaWQpXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMjkxMy17XG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMjkxNC1cdG5ldGxpbmtfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9ICpidGZfbmV0bGlua19zb2NrX2lkO1xubmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjI5MTU6XHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZuZXRsaW5rX3JlZ19pbmZvKTtcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yOTE2LX1cbi0tXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM9MjkxOT1zdGF0aWMgaW50IF9faW5pdCBuZXRsaW5rX3Byb3RvX2luaXQodm9pZClcbi0tXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMjkyNy0jaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjI5Mjg6XHRlcnIgPSBicGZfaXRlcl9yZWdpc3RlcigpO1xubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTI5MjktXHRpZiAoZXJyKVxuLS1cbm5ldC91bml4L2FmX3VuaXguYz0zOTA4PWJwZl9pdGVyX3VuaXhfZ2V0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLFxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zOTIwLVxubmV0L3VuaXgvYWZfdW5peC5jOjM5MjE6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgdW5peF9yZWdfaW5mbyA9IHtcbm5ldC91bml4L2FmX3VuaXguYy0zOTIyLVx0LnRhcmdldFx0XHRcdD0gXCYjMzQ7dW5peFwmIzM0Oyxcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzkzMS1cbm5ldC91bml4L2FmX3VuaXguYzozOTMyOnN0YXRpYyB2b2lkIF9faW5pdCBicGZfaXRlcl9yZWdpc3Rlcih2b2lkKVxubmV0L3VuaXgvYWZfdW5peC5jLTM5MzMte1xubmV0L3VuaXgvYWZfdW5peC5jLTM5MzQtXHR1bml4X3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSBidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9VTklYXTtcbm5ldC91bml4L2FmX3VuaXguYzozOTM1Olx0aWYgKGJwZl9pdGVyX3JlZ190YXJnZXQoXHUwMDI2dW5peF9yZWdfaW5mbykpXG5uZXQvdW5peC9hZl91bml4LmMtMzkzNi1cdFx0cHJfd2FybihcJiMzNDtXYXJuaW5nOiBjb3VsZCBub3QgcmVnaXN0ZXIgYnBmIGl0ZXJhdG9yIHVuaXhcXG5cJiMzNDspO1xuLS1cbm5ldC91bml4L2FmX3VuaXguYz0zOTQwPXN0YXRpYyBpbnQgX19pbml0IGFmX3VuaXhfaW5pdCh2b2lkKVxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zOTY4LSNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXG5uZXQvdW5peC9hZl91bml4LmM6Mzk2OTpcdGJwZl9pdGVyX3JlZ2lzdGVyKCk7XG5uZXQvdW5peC9hZl91bml4LmMtMzk3MC0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwNTUKCQkJCQkJCW91dHB1dDogMTY1CgkJCQkJCQl0aG91Z2h0czogNTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBhdGNoIGZvciBGdXp6aW5nIFByaW9yaXRpemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBpbXBhY3RzIHRoZSBpbnRlcmFjdGlvbiBvZiBCUEYgd2l0aCBuZXR3b3JrIHNvY2tldHMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgQlBGX1NZU0NBTExgLCBgTkVUYCwgYW5kIGBJTkVUYCBmdW5jdGlvbmFsaXRpZXMuIE15IGluaXRpYWwgY2hlY2sgd2l0aCBgRm9jdXNTeW1ib2xzYCB6ZXJvZWQgaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgbW9kaWZpZWQ6IGBicGZfc29ja19kZXN0cm95YCBhbmQgdGhlIHJlbGF0ZWQgYHRjcF9hYm9ydGAuIFRoZSBkaXJlY3QgY2FsbCB0byBgdGNwX2Fib3J0YCBmcm9tIGBzay0mZ3Q7c2tfcHJvdC0mZ3Q7ZGlhZ19kZXN0cm95YCB3aGVuIGBicGZfc29ja19kZXN0cm95YCBpcyBpbnZva2VkIGZvciBUQ1AgY29ubmVjdGlvbnMsIGluY2x1ZGluZyB0aG9zZSBpbiB0aGUgdGltZXdhaXQvc3luX3JlY3Ygc3RhdGVzLCBpcyBjcml0aWNhbC4gV2UgYWxzbyBoYXZlIHRvIGNvbnNpZGVyIGBpbmV0X3R3c2tfZGVzY2hlZHVsZV9wdXRgIG9yIGBpbmV0X2Nza19yZXFza19xdWV1ZV9kcm9wYCwgdGhvdWdoIGB0Y3BfYWJvcnRgIGlzIHRoZSBwcmltYXJ5IHRhcmdldC4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBicGZfc29ja19kZXN0cm95YCBpcyBpbmRlZWQgYSBkaXN0aW5jdCwgbm9uLWlubGluZWQga2Z1bmMgd2l0aGluIGB2bWxpbnV4YCwgZXhwb3J0ZWQgdmlhIEJURiwgc28gd2UgY2FuIGFkZHJlc3MgaXQgc3BlY2lmaWNhbGx5LiBBIHJldmlldyBvZiB0aGUgcGF0Y2ggaW5kaWNhdGVzIHRoYXQgdGhlIGNoYW5nZSBlbmNvbXBhc3NlcyBtb2RpZmljYXRpb25zIHRvIGBuZXQvY29yZS9maWx0ZXIuY2AgKHNwZWNpZmljYWxseSBgYnBmX3NvY2tfZGVzdHJveWApIGFuZCB0aGUgc2VsZnRlc3RzIGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvLi4uYCBkaXJlY3RvcnkuCgpOb3csIGxldCYjMzk7cyBjb25maWd1cmUgdGhlIGZ1enppbmcgcnVuLiBXZSYjMzk7cmUgc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAg4oCTIGFic29sdXRlbHkuIFRoZSAqcmVhc29uaW5nKiBpcyBjbGVhcjogdGhpcyBwYXRjaCBhbGxvd3MgdGhlIGRlc3RydWN0aW9uIG9mIG5vbi1mdWxseSBlc3RhYmxpc2hlZCBzb2NrZXRzLCBsaWtlIFRDUCB0aW1ld2FpdCBvciByZXF1ZXN0IHNvY2tldHMsIHRocm91Z2ggQlBGIGl0ZXJhdG9ycywgYWNoaWV2ZWQgYnkgY2hlY2tpbmcgYHNrX2Z1bGxzb2NrKClgIGJlZm9yZSBwcm90b2NvbCB2ZXJpZmljYXRpb24uIE15IGBGb2N1c1N5bWJvbHNgIGxpc3QgaXM6IGBbJiMzNDticGZfc29ja19kZXN0cm95JiMzNDssICYjMzQ7dGNwX2Fib3J0JiMzNDtdYC4gVGhlIHJlcXVpcmVkIGBFbmFibGVDb25maWdzYCBhcmU6IGBbJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LCAmIzM0O05FVCYjMzQ7LCAmIzM0O0lORVQmIzM0OywgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7XWAuIEZpbmFsbHksIEkgY29uZmlybWVkIHRoZXJlIGFyZSBubyBgQ09ORklHX2AgcHJlZml4ZXMuIEV2ZXJ5dGhpbmcgbG9va3Mgc29saWQuIEkgYW0gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc29ja19kZXN0cm95JiMzNDssCiAgICAmIzM0O3RjcF9hYm9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVhY2hhYmxlIEJQRiBrZnVuYyBgYnBmX3NvY2tfZGVzdHJveWAgdG8gc3VwcG9ydCBub24tZnVsbCBzb2NrZXRzIChzdWNoIGFzIFRDUCBUSU1FX1dBSVQgYW5kIHJlcXVlc3Qgc29ja2V0cykgYnkgb25seSBjaGVja2luZyB0aGUgcHJvdG9jb2wgb24gZnVsbCBzb2NrZXRzIChgc2tfZnVsbHNvY2tgKS4gVGhpcyBhbGxvd3MgQlBGIGl0ZXJhdG9yIHByb2dyYW1zIHRvIGludm9rZSBzb2NrZXQgZGVzdHJ1Y3Rpb24gKGBkaWFnX2Rlc3Ryb3lgIC8gYHRjcF9hYm9ydGApIG9uIHRpbWV3YWl0IHNvY2tldHMgYW5kIHN5bi1yZWN2IHJlcXVlc3RzLCB3aGljaCBjYW4gdW5jb3ZlciByYWNlIGNvbmRpdGlvbnMgb3Igc3RhdGUtaGFuZGxpbmcgaXNzdWVzIGR1cmluZyBzb2NrZXQgdGVhcmRvd24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NvY2tfZGVzdHJveSYjMzQ7LAogICAgJiMzNDt0Y3BfYWJvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlYWNoYWJsZSBCUEYga2Z1bmMgYGJwZl9zb2NrX2Rlc3Ryb3lgIHRvIHN1cHBvcnQgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIGFuZCByZXF1ZXN0IHNvY2tldHMpIGJ5IG9ubHkgY2hlY2tpbmcgdGhlIHByb3RvY29sIG9uIGZ1bGwgc29ja2V0cyAoYHNrX2Z1bGxzb2NrYCkuIFRoaXMgYWxsb3dzIEJQRiBpdGVyYXRvciBwcm9ncmFtcyB0byBpbnZva2Ugc29ja2V0IGRlc3RydWN0aW9uIChgZGlhZ19kZXN0cm95YCAvIGB0Y3BfYWJvcnRgKSBvbiB0aW1ld2FpdCBzb2NrZXRzIGFuZCBzeW4tcmVjdiByZXF1ZXN0cywgd2hpY2ggY2FuIHVuY292ZXIgcmFjZSBjb25kaXRpb25zIG9yIHN0YXRlLWhhbmRsaW5nIGlzc3VlcyBkdXJpbmcgc29ja2V0IHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBrZnVuYyBgYnBmX3NvY2tfZGVzdHJveSgpYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIHN1cHBvcnQgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIGJ5IGNoZWNraW5nIGBza19mdWxsc29jayhzaylgIGJlZm9yZSBpbnNwZWN0aW5nIGBzay1cdTAwM2Vza19wcm90b2NvbGAsIGFuZCBpbnZva2VzIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKWAuIFRoZSBhY2NvbXBhbnlpbmcgY2hhbmdlcyBhcmUgQlBGIHNlbGZ0ZXN0cy5cblxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBzdHJ1Y3R1cmUgY29weWluZyB0byB1c2Vyc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsLCBldGMuKSwgYW5kIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG4tIFRoZSBwb3RlbnRpYWwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHNvY2tldCBkZXN0cnVjdGlvbiAoZS5nLiwgc29ja2V0IGxpZmVjeWNsZS9yZWZjb3VudGluZyByYWNlcywgbG9ja2luZyBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgZGVyZWZlcmVuY2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycy5cbi0gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdlZTQ4NzQzNWQxNjFlNjhlN2Q5ZmRhNzE3ZjM1NDQ0MDBiY2VkOGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDE4OjQxOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCA2MTk0MGU3NTM1NTIzLi5hNDFjYzYwYTQwMWE1IDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtMTI5MTIsOCAmIzQzOzEyOTEyLDkgQEAgX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpOwogICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZAogICoKICAqIFJldHVybjoKLSAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVQUk9UT05PU1VQUE9SVCwgRUlOVkFMLgotICogRVBST1RPTk9TVVBQT1JUIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLgomIzQzOyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIG9yIHdoYXRldmVyIHRoZSBwcm90b2NvbCBzcGVjaWZpYwomIzQzOyAqIGRlc3Ryb3kgaGFuZGxlciByZXR1cm5zLgomIzQzOyAqIEVPUE5PVFNVUFAgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuCiAgKiAwIG90aGVyd2lzZQogICovCiBfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spCkBAIC0xMjkyNSw4ICYjNDM7MTI5MjYsMTIgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKQogCSAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHQKIAkgKiBwcmlvciB0byBpbnZva2luZyB0aGlzIGtmdW5jLgogCSAqLwotCWlmICghc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveSB8fCAoc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVENQICZhbXA7JmFtcDsKLQkJCQkJICAgc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKSkKJiM0MzsJaWYgKCFzay0mZ3Q7c2tfcHJvdC0mZ3Q7ZGlhZ19kZXN0cm95KQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlpZiAoc2tfZnVsbHNvY2soc2spICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCAmYW1wOyZhbXA7CiYjNDM7CSAgICBzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXJldHVybiBzay0mZ3Q7c2tfcHJvdC0mZ3Q7ZGlhZ19kZXN0cm95KHNrLCBFQ09OTkFCT1JURUQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYwppbmRleCA5YzExOTM4ZmU1OTdkLi5iOTBmYWI3MDczMzg2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYwpAQCAtMTEwLDYgJiM0MzsxMTAsNzQgQEAgc3RhdGljIHZvaWQgdGVzdF90Y3Bfc2VydmVyKHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbCkKIAkJY2xvc2Uoc2Vydik7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3RjcF90aW1ld2FpdChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpCiYjNDM7ewomIzQzOwlpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBhY2NlcHRfc2VydiA9IC0xLCBuOwomIzQzOwlzdHJ1Y3QgdGltZXZhbCB0diA9IHt9OwomIzQzOwljaGFyIGJ1ZlsxXTsKJiM0MzsKJiM0MzsJc2VydiA9IHN0YXJ0X3NlcnZlcihBRl9JTkVUNiwgU09DS19TVFJFQU0sIE5VTEwsIDAsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9HRShzZXJ2LCAwLCAmIzM0O3N0YXJ0X3NlcnZlciYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJY2xpZW4gPSBjb25uZWN0X3RvX2ZkKHNlcnYsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9HRShjbGllbiwgMCwgJiMzNDtjb25uZWN0X3RvX2ZkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlhY2NlcHRfc2VydiA9IGFjY2VwdChzZXJ2LCBOVUxMLCBOVUxMKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoYWNjZXB0X3NlcnYsIDAsICYjMzQ7c2VydiBhY2NlcHQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEFjdGl2ZSBjbG9zZSBmcm9tIHRoZSBjbGllbnQsIHRoZW4gY2xvc2UgdGhlIHNlcnZlciBzaWRlLiBPbmNlCiYjNDM7CSAqIHJlY3YoKSBzZWVzIEVPRiB0aGUgc2VydmVyIEZJTiBoYXMgYmVlbiBwcm9jZXNzZWQgYW5kIHRoZSBjbGllbnQKJiM0MzsJICogc29jayBpcyBpbiBUSU1FX1dBSVQuIEJsb2NrIHdpdGhvdXQgdGltZW91dCBzbyBhIGxvYWRlZCBDSSBib3gKJiM0MzsJICogY2FuJiMzOTt0IHJhY2UgdXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoIUFTU0VSVF9PSyhzZXRzb2Nrb3B0KGNsaWVuLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgJmFtcDt0diwKJiM0MzsJCQkJICBzaXplb2YodHYpKSwgJiMzNDtjbGVhciByY3Z0aW1lbyYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soc2h1dGRvd24oY2xpZW4sIFNIVVRfV1IpLCAmIzM0O2NsaWVudCBzaHV0ZG93biYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTWFrZSBzdXJlIHRoZSBzZXJ2ZXIgaGFzIHNlZW4gdGhlIGNsaWVudCBGSU4gYmVmb3JlIGl0IGNsb3NlcywKJiM0MzsJICogc28gdGhlIHR3byBGSU5zIG5ldmVyIGNyb3NzLgomIzQzOwkgKi8KJiM0MzsJbiA9IHJlY3YoYWNjZXB0X3NlcnYsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOwomIzQzOwlpZiAoIUFTU0VSVF9FUShuLCAwLCAmIzM0O3NlcnZlciByZWN2IEVPRiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJY2xvc2UoYWNjZXB0X3NlcnYpOwomIzQzOwlhY2NlcHRfc2VydiA9IC0xOwomIzQzOwomIzQzOwkvKiBibG9jayB1bnRpbCByZXR1cm4gRU9GICovCiYjNDM7CW4gPSByZWN2KGNsaWVuLCBidWYsIHNpemVvZihidWYpLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEobiwgMCwgJiMzNDtjbGllbnQgcmVjdiBFT0YmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgdGhlIHRpbWV3YWl0IGNsaWVudCBzb2NrLiAqLwomIzQzOwlza2VsLSZndDtic3MtJmd0O3R3X2ZvdW5kID0gMDsKJiM0MzsJc3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtJmd0O3Byb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQsIDEsICYjMzQ7dGltZXdhaXQgc29jayBmb3VuZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJQVNTRVJUX09LKHNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZGVzdHJveV9lcnIsICYjMzQ7ZGVzdHJveSB0aW1ld2FpdCBzb2NrJiMzNDspOwomIzQzOwomIzQzOwkvKiBUaGUgZGVzdHJveWVkIHRpbWV3YWl0IHNvY2sgbXVzdCBiZSBnb25lLiAqLwomIzQzOwlza2VsLSZndDtic3MtJmd0O3R3X2ZvdW5kID0gMDsKJiM0MzsJc3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtJmd0O3Byb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3R3X2ZvdW5kLCAwLCAmIzM0O3RpbWV3YWl0IHNvY2sgZGVzdHJveWVkJiMzNDspOwomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CWlmIChjbGllbiAhPSAtMSkKJiM0MzsJCWNsb3NlKGNsaWVuKTsKJiM0MzsJaWYgKGFjY2VwdF9zZXJ2ICE9IC0xKQomIzQzOwkJY2xvc2UoYWNjZXB0X3NlcnYpOwomIzQzOwlpZiAoc2VydiAhPSAtMSkKJiM0MzsJCWNsb3NlKHNlcnYpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRlc3RfdWRwX2NsaWVudChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpCiB7CiAJaW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgbiA9IDA7CkBAIC0yMDQsMTEgJiM0MzsyNzIsMTIgQEAgdm9pZCB0ZXN0X3NvY2tfZGVzdHJveSh2b2lkKQogCQl0ZXN0X3RjcF9jbGllbnQoc2tlbCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt0Y3Bfc2VydmVyJiMzNDspKQogCQl0ZXN0X3RjcF9zZXJ2ZXIoc2tlbCk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dGNwX3RpbWV3YWl0JiMzNDspKQomIzQzOwkJdGVzdF90Y3BfdGltZXdhaXQoc2tlbCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt1ZHBfY2xpZW50JiMzNDspKQogCQl0ZXN0X3VkcF9jbGllbnQoc2tlbCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt1ZHBfc2VydmVyJiMzNDspKQogCQl0ZXN0X3VkcF9zZXJ2ZXIoc2tlbCk7Ci0KIAlSVU5fVEVTVFMoc29ja19kZXN0cm95X3Byb2dfZmFpbCk7CiAKIGNsZWFudXA6CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jCmluZGV4IDllMGJmN2E1NGNlYzkuLjBhODg4NzU0MzIxOGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jCkBAIC03LDYgJiM0Mzs3LDggQEAKICNpbmNsdWRlICYjMzQ7YnBmX3RyYWNpbmdfbmV0LmgmIzM0OwogCiBfX2JlMTYgc2Vydl9wb3J0ID0gMDsKJiM0MztpbnQgdHdfZm91bmQgPSAwOwomIzQzO2ludCB0d19kZXN0cm95X2VyciA9IDA7CiAKIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc2spIF9fa3N5bTsKIApAQCAtMTAwLDYgJiM0MzsxMDIsMzQgQEAgaW50IGl0ZXJfdGNwNl9zZXJ2ZXIoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O2l0ZXIvdGNwJiMzNDspCiYjNDM7aW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2tfY29tbW9uICpza19jb21tb24gPSBjdHgtJmd0O3NrX2NvbW1vbjsKJiM0MzsJX191NjQgKnZhbDsKJiM0MzsJaW50IGtleSA9IDA7CiYjNDM7CiYjNDM7CWlmICghc2tfY29tbW9uKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChza19jb21tb24tJmd0O3NrY19mYW1pbHkgIT0gQUZfSU5FVDYpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFicGZfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrKHNrX2NvbW1vbikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3RjcF9jb25uX3NvY2tldHMsICZhbXA7a2V5KTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJLyogVGhlIHRpbWV3YWl0IHNvY2sgaW5oZXJpdHMgdGhlIGNvb2tpZSBvZiB0aGUgY2xvc2VkIGNsaWVudCBzb2NrLiAqLwomIzQzOwlpZiAoYnBmX2dldF9zb2NrZXRfY29va2llKHNrX2NvbW1vbikgIT0gKnZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl0d19mb3VuZCYjNDM7JiM0Mzs7CiYjNDM7CXR3X2Rlc3Ryb3lfZXJyID0gYnBmX3NvY2tfZGVzdHJveShza19jb21tb24pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiAKIFNFQygmIzM0O2l0ZXIvdWRwJiMzNDspCiBpbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA3OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQW5hbHlzaXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIGtlcm5lbCBwYXRjaCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0JiMzOTtzIGRpZyBpbi4gSSBzZWUgdGhleSYjMzk7dmUgbW9kaWZpZWQgdGhlIGBicGZfc29ja19kZXN0cm95YCBmdW5jdGlvbi4gVGhlIGNvZGUmIzM5O3MgYmVlbiBzaW1wbGlmaWVkIGEgYml0LCBidXQgdGhlcmUmIzM5O3MgYSBuZXcgY2hlY2sgdXNpbmcgYHNrX2Z1bGxzb2NrKHNrKWAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBza19mdWxsc29ja2AgYWN0dWFsbHkgKmRvZXMqIGFuZCwgaW1wb3J0YW50bHksIHRoZSBjb250ZXh0cyBpbiB3aGljaCBgYnBmX3NvY2tfZGVzdHJveWAgaXMgY2FsbGVkIGFuZCBob3cgdGhlIG5ldyBjaGVjayBpbnRlcmFjdHMgd2l0aCBkaWZmZXJlbnQgc29ja2V0IHR5cGVzLiBJJiMzOTttIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCBUQ1AgYW5kIFVEUCwgYXMgdGhlIGNvbW1lbnQgbWVudGlvbnMgcHJvdG9jb2wtc3BlY2lmaWMgbG9ja2luZyBzZW1hbnRpY3MuIFRoZSByZW1vdmVkIGNvbmRpdGlvbiBhbmQgYWRkZWQgY29uZGl0aW9uIGNvdWxkIGNoYW5nZSBiZWhhdmlvciBmb3Igc29tZSBwcm90b2NvbHMuCgpJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2VhcmNoIGZvciB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX3NvY2tfZGVzdHJveWAsIGBza19mdWxsc29ja2AsIGFuZCBgZGlhZ19kZXN0cm95YCB1c2luZyBgZ3JlcHBlcmAuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGJlaGF2ZSBpbiB0aGUgcHJlc2VuY2Ugb2YgVENQIHRpbWV3YWl0IHNvY2tldHMsIG9yIGFueSBvdGhlciBraW5kIG9mICYjMzQ7bm9uLWZ1bGxzb2NrJiMzNDsgc2NlbmFyaW9zLiBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIG1pZ2h0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBzYWZldHkgaXNzdWVzLCBlc3BlY2lhbGx5IHdpdGggdGhvc2UgZGVsaWNhdGUsIG9mdGVuIHRyYW5zaWVudCwgc3RhdGVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgc2hvdWxkIGFsbG93IG1lIHRvIG1ha2UgYW4gaW5mb3JtZWQgZGVjaXNpb24gYXMgdG8gd2hldGhlciBhIHNwZWNpYWxpemVkIGZ1enppbmcgY2FtcGFpZ24gaXMgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBza19mdWxsc29jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3OTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHNrX2Z1bGxzb2NrYCBpbiBgaW5jbHVkZS9uZXQvc29jay5oYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHNrX2Z1bGxzb2NrYCBpcyBiZWluZyB1c2VkLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgZGVmaW5pdGlvbiwgd2hpY2ggbGlrZWx5IGxpdmVzIGluIGBpbmNsdWRlL25ldC9zb2NrLmhgLiBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIHN0cnVjdHVyZSBvciBtYWNybywgYW5kIHRoZSBoZWFkZXIgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBjb250ZXh0LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBgc29ja2Agc3RydWN0dXJlIGl0c2VsZiwgYW55IGFzc29jaWF0ZWQgZmxhZ3Mgb3Igc3RhdGVzLCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBkYXRhIGZsb3csIGFuZCBzb2NrZXQgbGlmZWN5Y2xlIGluIGdlbmVyYWwuIEl0IHdpbGwgYWxzbyBiZSB1c2VmdWwgdG8gc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgdmFyaWFibGUsIGBza19mdWxsc29ja2AgaGFzIGJlZW4gdXNlZCwgc28gSSBhbSBnb2luZyB0byBuZWVkIHRvIGRvIHNvbWUgY29kZSBzZWFyY2hlcyBiYXNlZCBvbiB0aGlzIGluZm9ybWF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfZnVsbHNvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9zb2NrLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc29jay5oPTMwMTY9c2tiX3NrX2lzX3ByZWZldGNoZWQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmgtMzAyNy0gKi9cbmluY2x1ZGUvbmV0L3NvY2suaDozMDI4OnN0YXRpYyBpbmxpbmUgYm9vbCBza19mdWxsc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5pbmNsdWRlL25ldC9zb2NrLmgtMzAyOS17XG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTMwMzQ9c2tfaXNfcmVmY291bnRlZChzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTMwMzYtXHQvKiBPbmx5IGZ1bGwgc29ja2V0cyBoYXZlIHNrLVx1MDAzZXNrX2ZsYWdzLiAqL1xuaW5jbHVkZS9uZXQvc29jay5oOjMwMzc6XHRyZXR1cm4gIXNrX2Z1bGxzb2NrKHNrKSB8fCAhc29ja19mbGFnKHNrLCBTT0NLX1JDVV9GUkVFKTtcbmluY2x1ZGUvbmV0L3NvY2suaC0zMDM4LX1cbi0tXG5pbmNsdWRlL25ldC9zb2NrLmg9MzA0MT1za19yZXF1ZXN0c193aWZpX3N0YXR1cyhzdHJ1Y3Qgc29jayAqc2spXG5pbmNsdWRlL25ldC9zb2NrLmgtMzA0Mi17XG5pbmNsdWRlL25ldC9zb2NrLmg6MzA0MzpcdHJldHVybiBzayBcdTAwMjZcdTAwMjYgc2tfZnVsbHNvY2soc2spIFx1MDAyNlx1MDAyNiBzb2NrX2ZsYWcoc2ssIFNPQ0tfV0lGSV9TVEFUVVMpO1xuaW5jbHVkZS9uZXQvc29jay5oLTMwNDQtfVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0zMTE2PXN0YXRpYyBpbmxpbmUgdm9pZCBza19wYWNpbmdfc2hpZnRfdXBkYXRlKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbmluY2x1ZGUvbmV0L3NvY2suaC0zMTE3LXtcbmluY2x1ZGUvbmV0L3NvY2suaDozMTE4Olx0aWYgKCFzayB8fCAhc2tfZnVsbHNvY2soc2spIHx8IFJFQURfT05DRShzay1cdTAwM2Vza19wYWNpbmdfc2hpZnQpID09IHZhbClcbmluY2x1ZGUvbmV0L3NvY2suaC0zMTE5LVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBzb2NrLmhgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIG5ldHdvcmsgc29ja2V0IGJlaGF2aW9yLiBMZXQmIzM5O3MgcHVsbCB1cCB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgaW5jbHVkZS9uZXQvc29jay5oYC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBhcm91bmQgbGluZSAzMDI4LiBIb3BlZnVsbHksIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGFyZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGF0IGEgZ3JhbnVsYXIgbGV2ZWwuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc29jay5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMDIwOlx0I2Vsc2VcbjMwMjE6XHRcdHJldHVybiBmYWxzZTtcbjMwMjI6XHQjZW5kaWYgLyogQ09ORklHX0lORVQgKi9cbjMwMjM6XHR9XG4zMDI0Olx0XG4zMDI1Olx0LyogVGhpcyBoZWxwZXIgY2hlY2tzIGlmIGEgc29ja2V0IGlzIGEgZnVsbCBzb2NrZXQsXG4zMDI2Olx0ICogaWUgX25vdF8gYSB0aW1ld2FpdCBvciByZXF1ZXN0IHNvY2tldC5cbjMwMjc6XHQgKi9cbjMwMjg6XHRzdGF0aWMgaW5saW5lIGJvb2wgc2tfZnVsbHNvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuMzAyOTpcdHtcbjMwMzA6XHRcdHJldHVybiAoMSBcdTAwM2NcdTAwM2Mgc2stXHUwMDNlc2tfc3RhdGUpIFx1MDAyNiB+KFRDUEZfVElNRV9XQUlUIHwgVENQRl9ORVdfU1lOX1JFQ1YpO1xuMzAzMTpcdH1cbjMwMzI6XHRcbjMwMzM6XHRzdGF0aWMgaW5saW5lIGJvb2xcbjMwMzQ6XHRza19pc19yZWZjb3VudGVkKHN0cnVjdCBzb2NrICpzaylcbjMwMzU6XHR7XG4zMDM2Olx0XHQvKiBPbmx5IGZ1bGwgc29ja2V0cyBoYXZlIHNrLVx1MDAzZXNrX2ZsYWdzLiAqL1xuMzAzNzpcdFx0cmV0dXJuICFza19mdWxsc29jayhzaykgfHwgIXNvY2tfZmxhZyhzaywgU09DS19SQ1VfRlJFRSk7XG4zMDM4Olx0fVxuMzAzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTM3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlbHZpbmcgaW50byBTb2NrZXQgU3RydWN0dXJlcyBhbmQgRGVzdHJ1Y3Rpb24gTWVjaGFuaXNtcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBgYnBmX3NvY2tfZGVzdHJveWAgZnVuY3Rpb24gd2FzIGNoZWNraW5nIGBzay0mZ3Q7c2tfcHJvdG9jb2xgLCBldmVuIHRob3VnaCBpdCBzZWVtcyBsaWtlIHRoYXQgZmllbGQgbWlnaHQgbm90IGFsd2F5cyBiZSByZWxpYWJsZSBvciBldmVuIHZhbGlkIGluIHNvY2tldHMgdGhhdCBhcmUgaW4gdGhlIGBUSU1FX1dBSVRgIG9yIGBSRVFVRVNUYCBzdGF0ZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIHN0cnVjdHVyZXMgdGhlbXNlbHZlcywgcGFydGljdWxhcmx5IGBzdHJ1Y3Qgc29ja19jb21tb25gLCBgc3RydWN0IGluZXRfdGltZXdhaXRfc29ja2AsIGFuZCBgc3RydWN0IHRjcF90aW1ld2FpdF9zb2NrYC4gU2VlaW5nIGhvdyB0aGVzZSBhcmUgZGVmaW5lZCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIHNvY2tldCAoYHNrYCkgd2lsbCBsaWtlbHkgc2hlZCBsaWdodCBvbiB0aGUgaXNzdWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2Ugc29ja2V0cyBhbmQgd2hlcmUgYHNrLSZndDtza19wcm90b2NvbGAgZml0cyBpbi4KCkZvbGxvd2luZyB0aGF0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcGF0aCB0aGUgc29ja2V0IHRha2VzIHRvIGJlIGRlc3Ryb3llZC4gVGhlcmVmb3JlLCBJIHdpbGwgc2VhcmNoIGZvciB0aGUgZnVuY3Rpb24gYGRpYWdfZGVzdHJveWAgYWNyb3NzIHRoZSBgbmV0L2AgZGlyZWN0b3J5IGFuZCBmdW5jdGlvbnMgc3VjaCBhcyBgdGNwX3R3c2tfZGlhZ19kZXN0cm95YCBvciBgdGNwX2RpYWdfZGVzdHJveWAgdG8gZ2V0IGEgc2Vuc2Ugb2YgdGhlIGRlc3RydWN0aW9uIHByb2Nlc3MuIEhvcGVmdWxseSwgdGhpcyB3aWxsIHRlbGwgbWUgd2hhdCB0aGUgZGVzdHJ1Y3Rpb24gcm91dGluZXMgZGVwZW5kIG9uLiBJdCBzaG91bGQgc2hvdyBpZiB0aGUgcHJvdG9jb2wgaXMgbmVlZGVkIG9yIG5vdC4gSSYjMzk7bSBob3BpbmcgdG8gcGlucG9pbnQgdGhlIGV4YWN0IG1vbWVudCBvciBjb250ZXh0IHdoZXJlIHRoZSBwcm90b2NvbCBtaWdodCBiZWNvbWUgdW5hdmFpbGFibGUgb3IgdW5kZWZpbmVkLCBhbmQgdGh1cywgd2h5IHRoYXQgY2hlY2sgaW4gYGJwZl9zb2NrX2Rlc3Ryb3lgIG1pZ2h0IGhhdmUgY2F1c2VkIHByb2JsZW1zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2Ygd2hldGhlciB0aGUgY2hlY2sgd2FzIG5lY2Vzc2FyeSwgYW5kIGhvdyB3ZSBjb3VsZCBoYW5kbGUgdGhlIHNvY2tldCYjMzk7cyBzdGF0ZXMgbW9yZSByb2J1c3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlhZ19kZXN0cm95JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMjkyMD1fX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI5MjgtXHQgKi9cbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTI5Olx0aWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSlcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTMwLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI5MzYtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjkzNzpcdHJldHVybiBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTM4LX1cbi0tXG5uZXQvY29yZS9zb2NrX2RpYWcuYz0xNDM9c3RhdGljIHZvaWQgc29ja19kaWFnX2Jyb2FkY2FzdF9kZXN0cm95X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTE0OS1cdHN0cnVjdCBza19idWZmICpza2I7XG5uZXQvY29yZS9zb2NrX2RpYWcuYzoxNTA6XHRjb25zdCBlbnVtIHNrbmV0bGlua19ncm91cHMgZ3JvdXAgPSBzb2NrX2RpYWdfZGVzdHJveV9ncm91cChzayk7XG5uZXQvY29yZS9zb2NrX2RpYWcuYy0xNTEtXHRpbnQgZXJyID0gLTE7XG4tLVxubmV0L2NvcmUvc29ja19kaWFnLmM9Mjk1PXN0YXRpYyBpbnQgc29ja19kaWFnX2JpbmQoc3RydWN0IG5ldCAqbmV0LCBpbnQgZ3JvdXApXG4tLVxubmV0L2NvcmUvc29ja19kaWFnLmMtMzExLVxubmV0L2NvcmUvc29ja19kaWFnLmM6MzEyOmludCBzb2NrX2RpYWdfZGVzdHJveShzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXG5uZXQvY29yZS9zb2NrX2RpYWcuYy0zMTMte1xuLS1cbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTMxNi1cbm5ldC9jb3JlL3NvY2tfZGlhZy5jOjMxNzpcdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kpXG5uZXQvY29yZS9zb2NrX2RpYWcuYy0zMTgtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTMxOS1cbm5ldC9jb3JlL3NvY2tfZGlhZy5jOjMyMDpcdHJldHVybiBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgZXJyKTtcbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTMyMS19XG5uZXQvY29yZS9zb2NrX2RpYWcuYzozMjI6RVhQT1JUX1NZTUJPTF9HUEwoc29ja19kaWFnX2Rlc3Ryb3kpO1xubmV0L2NvcmUvc29ja19kaWFnLmMtMzIzLVxuLS1cbm5ldC9pcHY0L3Jhdy5jPTk0OD1zdHJ1Y3QgcHJvdG8gcmF3X3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvcmF3LmMtOTcyLSNlbmRpZlxubmV0L2lwdjQvcmF3LmM6OTczOlx0LmRpYWdfZGVzdHJveVx0ICAgPSByYXdfYWJvcnQsXG5uZXQvaXB2NC9yYXcuYy05NzQtfTtcbi0tXG5uZXQvaXB2NC9yYXdfZGlhZy5jPTE4Nz1zdGF0aWMgdm9pZCByYXdfZGlhZ19nZXRfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2RpYWdfbXNnICpyLFxuLS1cbm5ldC9pcHY0L3Jhd19kaWFnLmMtMTk0LSNpZmRlZiBDT05GSUdfSU5FVF9ESUFHX0RFU1RST1lcbm5ldC9pcHY0L3Jhd19kaWFnLmM6MTk1OnN0YXRpYyBpbnQgcmF3X2RpYWdfZGVzdHJveShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxubmV0L2lwdjQvcmF3X2RpYWcuYy0xOTYtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyICpyKVxuLS1cbm5ldC9pcHY0L3Jhd19kaWFnLmMtMjA0LVx0XHRyZXR1cm4gUFRSX0VSUihzayk7XG5uZXQvaXB2NC9yYXdfZGlhZy5jOjIwNTpcdGVyciA9IHNvY2tfZGlhZ19kZXN0cm95KHNrLCBFQ09OTkFCT1JURUQpO1xubmV0L2lwdjQvcmF3X2RpYWcuYy0yMDYtXHRzb2NrX3B1dChzayk7XG4tLVxubmV0L2lwdjQvcmF3X2RpYWcuYz0yMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciByYXdfZGlhZ19oYW5kbGVyID0ge1xuLS1cbm5ldC9pcHY0L3Jhd19kaWFnLmMtMjE4LSNpZmRlZiBDT05GSUdfSU5FVF9ESUFHX0RFU1RST1lcbm5ldC9pcHY0L3Jhd19kaWFnLmM6MjE5Olx0LmRlc3Ryb3lcdFx0PSByYXdfZGlhZ19kZXN0cm95LFxubmV0L2lwdjQvcmF3X2RpYWcuYy0yMjAtI2VuZGlmXG4tLVxubmV0L2lwdjQvdGNwX2RpYWcuYz02MDQ9c3RhdGljIGludCB0Y3BfZGlhZ19kdW1wX29uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4tLVxubmV0L2lwdjQvdGNwX2RpYWcuYy02NDEtI2lmZGVmIENPTkZJR19JTkVUX0RJQUdfREVTVFJPWVxubmV0L2lwdjQvdGNwX2RpYWcuYzo2NDI6c3RhdGljIGludCB0Y3BfZGlhZ19kZXN0cm95KHN0cnVjdCBza19idWZmICppbl9za2IsXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY0My1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnJlcSlcbi0tXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY1Mi1cbm5ldC9pcHY0L3RjcF9kaWFnLmM6NjUzOlx0ZXJyID0gc29ja19kaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY1NC1cbi0tXG5uZXQvaXB2NC90Y3BfZGlhZy5jPTY2MT1zdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyIHRjcF9kaWFnX2hhbmRsZXIgPSB7XG4tLVxubmV0L2lwdjQvdGNwX2RpYWcuYy02NjktI2lmZGVmIENPTkZJR19JTkVUX0RJQUdfREVTVFJPWVxubmV0L2lwdjQvdGNwX2RpYWcuYzo2NzA6XHQuZGVzdHJveVx0XHQ9IHRjcF9kaWFnX2Rlc3Ryb3ksXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY3MS0jZW5kaWZcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTMzNDc9c3RydWN0IHByb3RvIHRjcF9wcm90ID0ge1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM5NS1cdC5ub19hdXRvYmluZFx0XHQ9IHRydWUsXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjMzOTY6XHQuZGlhZ19kZXN0cm95XHRcdD0gdGNwX2Fib3J0LFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzk3LX07XG4tLVxubmV0L2lwdjQvdWRwLmM9MzE0Mz1zdHJ1Y3QgcHJvdG8gdWRwX3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvdWRwLmMtMzE3My1cdC5vYmpfc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgdWRwX3NvY2spLFxubmV0L2lwdjQvdWRwLmM6MzE3NDpcdC5kaWFnX2Rlc3Ryb3lcdFx0PSB1ZHBfYWJvcnQsXG5uZXQvaXB2NC91ZHAuYy0zMTc1LX07XG4tLVxubmV0L2lwdjQvdWRwX2RpYWcuYz0xNDQ9c3RhdGljIHZvaWQgdWRwX2RpYWdfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqcixcbi0tXG5uZXQvaXB2NC91ZHBfZGlhZy5jLTE1MS0jaWZkZWYgQ09ORklHX0lORVRfRElBR19ERVNUUk9ZXG5uZXQvaXB2NC91ZHBfZGlhZy5jOjE1MjpzdGF0aWMgaW50IHVkcF9kaWFnX2Rlc3Ryb3koc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbm5ldC9pcHY0L3VkcF9kaWFnLmMtMTUzLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxKVxuLS1cbm5ldC9pcHY0L3VkcF9kaWFnLmMtMjAwLVxubmV0L2lwdjQvdWRwX2RpYWcuYzoyMDE6XHRlcnIgPSBzb2NrX2RpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcbm5ldC9pcHY0L3VkcF9kaWFnLmMtMjAyLVxuLS1cbm5ldC9pcHY0L3VkcF9kaWFnLmM9MjA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgdWRwX2RpYWdfaGFuZGxlciA9IHtcbi0tXG5uZXQvaXB2NC91ZHBfZGlhZy5jLTIxNi0jaWZkZWYgQ09ORklHX0lORVRfRElBR19ERVNUUk9ZXG5uZXQvaXB2NC91ZHBfZGlhZy5jOjIxNzpcdC5kZXN0cm95XHQgPSB1ZHBfZGlhZ19kZXN0cm95LFxubmV0L2lwdjQvdWRwX2RpYWcuYy0yMTgtI2VuZGlmXG4tLVxubmV0L2lwdjYvcmF3LmM9MTIwNz1zdHJ1Y3QgcHJvdG8gcmF3djZfcHJvdCA9IHtcbi0tXG5uZXQvaXB2Ni9yYXcuYy0xMjMxLSNlbmRpZlxubmV0L2lwdjYvcmF3LmM6MTIzMjpcdC5kaWFnX2Rlc3Ryb3lcdCAgID0gcmF3X2Fib3J0LFxubmV0L2lwdjYvcmF3LmMtMTIzMy19O1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjI3Nj1zdHJ1Y3QgcHJvdG8gdGNwdjZfcHJvdCA9IHtcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIzMjUtXHQubm9fYXV0b2JpbmRcdFx0PSB0cnVlLFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMzI2Olx0LmRpYWdfZGVzdHJveVx0XHQ9IHRjcF9hYm9ydCxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMyNy19O1xuLS1cbm5ldC9pcHY2L3VkcC5jPTE5MDg9c3RydWN0IHByb3RvIHVkcHY2X3Byb3QgPSB7XG4tLVxubmV0L2lwdjYvdWRwLmMtMTk0MC1cdC5pcHY2X3BpbmZvX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB1ZHA2X3NvY2ssIGluZXQ2KSxcbm5ldC9pcHY2L3VkcC5jOjE5NDE6XHQuZGlhZ19kZXN0cm95XHRcdD0gdWRwX2Fib3J0LFxubmV0L2lwdjYvdWRwLmMtMTk0Mi19O1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE0Nj12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjYtXHR0Y3BfcHJvdF9vdmVycmlkZS5yZWxlYXNlX2NiID0gdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIxNjc6XHR0Y3BfcHJvdF9vdmVycmlkZS5kaWFnX2Rlc3Ryb3kgPSB0Y3BfYWJvcnRfb3ZlcnJpZGU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjgtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE4MD12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X3Y2X2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTMtXHR0Y3B2Nl9wcm90X292ZXJyaWRlLnJlbGVhc2VfY2IgPSB0Y3BfcmVsZWFzZV9jYl9vdmVycmlkZTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjIxNDpcdHRjcHY2X3Byb3Rfb3ZlcnJpZGUuZGlhZ19kZXN0cm95ID0gdGNwX2Fib3J0X292ZXJyaWRlO1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMjE1LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODczNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFNvY2tldCBTdHJ1Y3R1cmVzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgc29ja2V0IGRhdGEgc3RydWN0dXJlcyBhZ2FpbiwgYW5kIHRoZSBzcGVjaWZpYyByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlbSBhcmUsIGFzIGFsd2F5cywgdGhlIGtleS4gTGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzOiBgc3RydWN0IHNvY2tfY29tbW9uYCwgYHN0cnVjdCBzb2NrYCwgYW5kIGBzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrYC4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgdG8gcHVsbCB1cCB0aGUgbWVtb3J5IG1hcHMgYW5kIGxpa2VseSB0aGUgaW5oZXJpdGFuY2UgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZW0uIFdoZXJlIGRvZXMgZWFjaCBvbmUgY29tZSBpbiB0byBwbGF5PyBXaGF0IGNvcmUgZmVhdHVyZXMgYXJlIGVhY2ggcmVzcG9uc2libGUgZm9yPwoKSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBmb3VuZGF0aW9uLCBzbyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyBgc3RydWN0IHNvY2tfY29tbW9uYC4gSSYjMzk7bGwgd2FudCB0byByZXZpZXcgdGhlIGJhc2ljIGVsZW1lbnRzIHRoYXQgYXJlIGNvbW1vbiBhY3Jvc3Mgc29ja2V0IHR5cGVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGhhcHBlbmluZyBhdCB0aGUgbG93IGxldmVsLiBHb3R0YSByZWZyZXNoIHRoZSBtZW1vcnkgb2Ygd2hhdCYjMzk7cyBmdW5kYW1lbnRhbCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgc29ja19jb21tb24gXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc29jay5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NvY2suaD0xMDg9dHlwZWRlZiBfX3U2NCBfX2JpdHdpc2UgX19hZGRycGFpcjtcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmgtMTU1LSAqL1xuaW5jbHVkZS9uZXQvc29jay5oOjE1NjpzdHJ1Y3Qgc29ja19jb21tb24ge1xuaW5jbHVkZS9uZXQvc29jay5oLTE1Ny1cdHVuaW9uIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA3NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHN0cnVjdCBzb2NrX2NvbW1vbmAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBkaWcgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgSSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZSB0aGF0IHVuZGVycGlucyBzb2NrZXQgb3BlcmF0aW9ucyBpbiB0aGUgTGludXgga2VybmVsLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gYHN0cnVjdCBzb2NrX2NvbW1vbmAgd2l0aGluIGBpbmNsdWRlL25ldC9zb2NrLmhgLiBJJiMzOTt2ZSBwcm9iYWJseSBsb29rZWQgYXQgdGhpcyBhIHRob3VzYW5kIHRpbWVzLCBidXQgZXZlcnkgdGltZSBJIHJldmlldyBpdCBJIGZpbmQgc29tZXRoaW5nIG5ldyBvciBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCBmaXRzIGludG8gdGhlIHdob2xlLiBJ4oCZbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgc3RydWN0dXJlIHRpZXMgaW50byB0aGUgdmFyaW91cyBzb2NrZXQgc3RhdGVzIGFuZCBsaWZlY3ljbGUgZXZlbnRzLiBIb3BlZnVsbHksIGl0JiMzOTtzIGFsbCBpbiB0aGUgaGVhZGVyLCBvciB0aGUgcmVsYXRlZCBzb3VyY2UgZmlsZXMuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgc29ja2V0IHF1ZXVpbmcgaXMgbWFuYWdlZCBpbiByZWxhdGlvbiB0byBSWC9UWCBwYXRocywgbG9ja2luZyBtZWNoYW5pc21zLCBhbmQgdGhlIGltcGFjdCBvZiB2YXJpb3VzIHNvY2tldCBvcHRpb25zIGFuZCBmbGFncy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgZmluZGluZyBwb2ludGVycyB0byBxdWV1ZXMsIGZsYWdzIGluZGljYXRpbmcgc3RhdGUgKGxpa2UgYFRDUF9FU1RBQkxJU0hFRGAgb3IgYFNPQ0tfREVBRGApLCBhbmQgcG9zc2libHkgZmllbGRzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlc291cmNlIGFsbG9jYXRpb24uIEl0JiMzOTtzIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIGNoZWNrIGZvciBhbnkgbnVhbmNlcyBvciBjaGFuZ2VzIHNpbmNlIG15IGxhc3QgZGVlcCBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NvY2suaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTU2Olx0c3RydWN0IHNvY2tfY29tbW9uIHtcbiAxNTc6XHRcdHVuaW9uIHtcbiAxNTg6XHRcdFx0X19hZGRycGFpclx0c2tjX2FkZHJwYWlyO1xuIDE1OTpcdFx0XHRzdHJ1Y3Qge1xuIDE2MDpcdFx0XHRcdF9fYmUzMlx0c2tjX2RhZGRyO1xuIDE2MTpcdFx0XHRcdF9fYmUzMlx0c2tjX3Jjdl9zYWRkcjtcbiAxNjI6XHRcdFx0fTtcbiAxNjM6XHRcdH07XG4gMTY0Olx0XHR1bmlvbiAge1xuIDE2NTpcdFx0XHR1bnNpZ25lZCBpbnRcdHNrY19oYXNoO1xuIDE2NjpcdFx0XHRfX3UxNlx0XHRza2NfdTE2aGFzaGVzWzJdO1xuIDE2NzpcdFx0fTtcbiAxNjg6XHRcdC8qIHNrY19kcG9ydCBcdTAwMjZcdTAwMjYgc2tjX251bSBtdXN0IGJlIGdyb3VwZWQgYXMgd2VsbCAqL1xuIDE2OTpcdFx0dW5pb24ge1xuIDE3MDpcdFx0XHRfX3BvcnRwYWlyXHRza2NfcG9ydHBhaXI7XG4gMTcxOlx0XHRcdHN0cnVjdCB7XG4gMTcyOlx0XHRcdFx0X19iZTE2XHRza2NfZHBvcnQ7XG4gMTczOlx0XHRcdFx0X191MTZcdHNrY19udW07XG4gMTc0Olx0XHRcdH07XG4gMTc1Olx0XHR9O1xuIDE3NjpcdFxuIDE3NzpcdFx0dW5zaWduZWQgc2hvcnRcdFx0c2tjX2ZhbWlseTtcbiAxNzg6XHRcdHZvbGF0aWxlIHVuc2lnbmVkIGNoYXJcdHNrY19zdGF0ZTtcbiAxNzk6XHRcdHVuc2lnbmVkIGNoYXJcdFx0c2tjX3JldXNlOjQ7XG4gMTgwOlx0XHR1bnNpZ25lZCBjaGFyXHRcdHNrY19yZXVzZXBvcnQ6MTtcbiAxODE6XHRcdHVuc2lnbmVkIGNoYXJcdFx0c2tjX2lwdjZvbmx5OjE7XG4gMTgyOlx0XHR1bnNpZ25lZCBjaGFyXHRcdHNrY19uZXRfcmVmY250OjE7XG4gMTgzOlx0XHR1bnNpZ25lZCBjaGFyXHRcdHNrY19ieXBhc3NfcHJvdF9tZW06MTtcbiAxODQ6XHRcdGludFx0XHRcdHNrY19ib3VuZF9kZXZfaWY7XG4gMTg1Olx0XHR1bmlvbiB7XG4gMTg2Olx0XHRcdHN0cnVjdCBobGlzdF9ub2RlXHRza2NfYmluZF9ub2RlO1xuIDE4NzpcdFx0XHRzdHJ1Y3QgaGxpc3Rfbm9kZVx0c2tjX3BvcnRhZGRyX25vZGU7XG4gMTg4Olx0XHR9O1xuIDE4OTpcdFx0c3RydWN0IHByb3RvXHRcdCpza2NfcHJvdDtcbiAxOTA6XHRcdHBvc3NpYmxlX25ldF90XHRcdHNrY19uZXQ7XG4gMTkxOlx0XG4gMTkyOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gMTkzOlx0XHRzdHJ1Y3QgaW42X2FkZHJcdFx0c2tjX3Y2X2RhZGRyO1xuIDE5NDpcdFx0c3RydWN0IGluNl9hZGRyXHRcdHNrY192Nl9yY3Zfc2FkZHI7XG4gMTk1Olx0I2VuZGlmXG4gMTk2Olx0XG4gMTk3Olx0XHRhdG9taWM2NF90XHRcdHNrY19jb29raWU7XG4gMTk4Olx0XG4gMTk5Olx0XHQvKiBmb2xsb3dpbmcgZmllbGRzIGFyZSBwYWRkaW5nIHRvIGZvcmNlXG4gMjAwOlx0XHQgKiBvZmZzZXQoc3RydWN0IHNvY2ssIHNrX3JlZmNudCkgPT0gMTI4IG9uIDY0Yml0IGFyY2hlc1xuIDIwMTpcdFx0ICogYXNzdW1pbmcgSVBWNiBpcyBlbmFibGVkLiBXZSB1c2UgdGhpcyBwYWRkaW5nIGRpZmZlcmVudGx5XG4gMjAyOlx0XHQgKiBmb3IgZGlmZmVyZW50IGtpbmQgb2YgJiMzOTtzb2NrZXRzJiMzOTtcbiAyMDM6XHRcdCAqL1xuIDIwNDpcdFx0dW5pb24ge1xuIDIwNTpcdFx0XHR1bnNpZ25lZCBsb25nXHRza2NfZmxhZ3M7XG4gMjA2Olx0XHRcdHN0cnVjdCBzb2NrXHQqc2tjX2xpc3RlbmVyOyAvKiByZXF1ZXN0X3NvY2sgKi9cbiAyMDc6XHRcdFx0c3RydWN0IGluZXRfdGltZXdhaXRfZGVhdGhfcm93ICpza2NfdHdfZHI7IC8qIGluZXRfdGltZXdhaXRfc29jayAqL1xuIDIwODpcdFx0fTtcbiAyMDk6XHRcdC8qXG4gMjEwOlx0XHQgKiBmaWVsZHMgYmV0d2VlbiBkb250Y29weV9iZWdpbi9kb250Y29weV9lbmRcbiAyMTE6XHRcdCAqIGFyZSBub3QgY29waWVkIGluIHNvY2tfY29weSgpXG4gMjEyOlx0XHQgKi9cbiAyMTM6XHRcdC8qIHByaXZhdGU6ICovXG4gMjE0Olx0XHRpbnRcdFx0XHRza2NfZG9udGNvcHlfYmVnaW5bMF07XG4gMjE1Olx0XHQvKiBwdWJsaWM6ICovXG4gMjE2Olx0XHR1bmlvbiB7XG4gMjE3Olx0XHRcdHN0cnVjdCBobGlzdF9ub2RlXHRza2Nfbm9kZTtcbiAyMTg6XHRcdFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgc2tjX251bGxzX25vZGU7XG4gMjE5Olx0XHR9O1xuIDIyMDpcdFx0dW5zaWduZWQgc2hvcnRcdFx0c2tjX3R4X3F1ZXVlX21hcHBpbmc7XG4gMjIxOlx0I2lmZGVmIENPTkZJR19TT0NLX1JYX1FVRVVFX01BUFBJTkdcbiAyMjI6XHRcdHVuc2lnbmVkIHNob3J0XHRcdHNrY19yeF9xdWV1ZV9tYXBwaW5nO1xuIDIyMzpcdCNlbmRpZlxuIDIyNDpcdFx0dW5pb24ge1xuIDIyNTpcdFx0XHRpbnRcdFx0c2tjX2luY29taW5nX2NwdTtcbiAyMjY6XHRcdFx0dTMyXHRcdHNrY19yY3Zfd25kO1xuIDIyNzpcdFx0XHR1MzJcdFx0c2tjX3R3X3Jjdl9ueHQ7IC8qIHN0cnVjdCB0Y3BfdGltZXdhaXRfc29jayAgKi9cbiAyMjg6XHRcdH07XG4gMjI5Olx0XG4gMjMwOlx0XHRyZWZjb3VudF90XHRcdHNrY19yZWZjbnQ7XG4gMjMxOlx0XHQvKiBwcml2YXRlOiAqL1xuIDIzMjpcdFx0aW50ICAgICAgICAgICAgICAgICAgICAgc2tjX2RvbnRjb3B5X2VuZFswXTtcbiAyMzM6XHRcdHVuaW9uIHtcbiAyMzQ6XHRcdFx0dTMyXHRcdHNrY19yeGhhc2g7XG4gMjM1Olx0XHRcdHUzMlx0XHRza2Nfd2luZG93X2NsYW1wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU5MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsJiMzOTtzIE5ldHdvcmsgU29ja2V0IFN0cnVjdHVyZSoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYHN0cnVjdCBzb2NrYC4gTGV0JiMzOTtzIHNlZS4uLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgc29tZXdoZXJlIGluIGhlcmUsIGBza19wcm90b2NvbGAgaXMgZGVmaW5lZC4gSSB0aGluayBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBjb21tb24gc29ja2V0IGRhdGEsIG1heWJlIGRlZmluZWQgdXNpbmcgYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGAjZGVmaW5lIHNrX3Byb3RvY29sIF9fc2tfY29tbW9uLnNrY19wcm90b2NvbGAuLi4gb3Igd2FzIGl0IGEgc2xpZ2h0bHkgZGlmZmVyZW50IG5hbWluZyBjb252ZW50aW9uPyBFaXRoZXIgd2F5LCBJIG5lZWQgdG8gY29uZmlybSB3aGVyZSBgc2tfcHJvdG9jb2xgIGFjdHVhbGx5IGxpdmVzIHdpdGhpbiB0aGlzIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyB0aGUga2V5OiB1bmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgbWVtYmVycy4gVGltZSB0byB0cmFjZSB3aGVyZSBleGFjdGx5IGl0JiMzOTtzIGRlY2xhcmVkIGFuZCBob3cgaXQgaXMgdXNlZC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0JiMzOTtzIGxvY2F0ZWQgdG8gY29udGludWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX3Byb3RvY29sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc29jay5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NvY2suaD0yNDI9c3RydWN0IHNrX2ZpbHRlcjtcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmgtMzAxLSAgKlx0QHNrX3R5cGU6IHNvY2tldCB0eXBlICglU09DS19TVFJFQU0sIGV0YylcbmluY2x1ZGUvbmV0L3NvY2suaDozMDI6ICAqXHRAc2tfcHJvdG9jb2w6IHdoaWNoIHByb3RvY29sIHRoaXMgc29ja2V0IGJlbG9uZ3MgaW4gdGhpcyBuZXR3b3JrIGZhbWlseVxuaW5jbHVkZS9uZXQvc29jay5oLTMwMy0gICpcdEBza19wZWVyX2xvY2s6IGxvY2sgcHJvdGVjdGluZyBAc2tfcGVlcl9waWQgYW5kIEBza19wZWVyX2NyZWRcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmg9MzY1PXN0cnVjdCBzb2NrIHtcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmgtNTExLVx0a3VpZF90XHRcdFx0c2tfdWlkO1xuaW5jbHVkZS9uZXQvc29jay5oOjUxMjpcdHUxNlx0XHRcdHNrX3Byb3RvY29sO1xuaW5jbHVkZS9uZXQvc29jay5oLTUxMy1cdHUxNlx0XHRcdHNrX3R5cGU7XG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTI5NjU9c3RhdGljIGlubGluZSBib29sIHNrX2lzX3RjcChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTI5NjgtXHQgICAgICAgc2stXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1NUUkVBTSBcdTAwMjZcdTAwMjZcbmluY2x1ZGUvbmV0L3NvY2suaDoyOTY5Olx0ICAgICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVENQO1xuaW5jbHVkZS9uZXQvc29jay5oLTI5NzAtfVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0yOTcyPXN0YXRpYyBpbmxpbmUgYm9vbCBza19pc191ZHAoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC0yOTc1LVx0ICAgICAgIHNrLVx1MDAzZXNrX3R5cGUgPT0gU09DS19ER1JBTSBcdTAwMjZcdTAwMjZcbmluY2x1ZGUvbmV0L3NvY2suaDoyOTc2Olx0ICAgICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQO1xuaW5jbHVkZS9uZXQvc29jay5oLTI5NzctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI1OAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDYxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYGJwZl9zb2NrX2Rlc3Ryb3lgIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuLi4gVGhlIGBza19wcm90b2NvbGAgZmllbGQgaXMgbG9jYXRlZCB3aXRoaW4gdGhlIGBzdHJ1Y3Qgc29ja2Agc3RydWN0dXJlLCBhbmQgaXQgYXBwZWFycyAqYWZ0ZXIqIHRoZSBgc3RydWN0IHNvY2tfY29tbW9uYCBwb3J0aW9uIG9mIHRoYXQgc3RydWN0dXJlLiBCdXQsIGltcG9ydGFudGx5LCBgc3RydWN0IGluZXRfdGltZXdhaXRfc29ja2AgKmRvZXNuJiMzOTt0KiBjb250YWluIGEgZnVsbCBgc3RydWN0IHNvY2tgISBJdCBvbmx5IGNvbnRhaW5zIGEgYHN0cnVjdCBzb2NrX2NvbW1vbmAuIFJpZ2h0LCBzbyBpZiBgYnBmX3NvY2tfZGVzdHJveWAgZ2V0cyBoYW5kZWQgYSBgc3RydWN0IHNvY2tfY29tbW9uICpzb2NrYCwgd2hpY2gsIGluIHNvbWUgY2FzZXMsIGNvdWxkIGFjdHVhbGx5IGJlIGEgYHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKmAgY29taW5nIGZyb20gYSBCUEYgaXRlcmF0b3IsIGFuZCB0aGVuIGl0IGNhc3RzIHRoYXQgdG8gYSBgc3RydWN0IHNvY2sgKmAuLi4gdGhhdCYjMzk7cyBhIHByb2JsZW0uCgpCYXNpY2FsbHksICpiZWZvcmUqLCB3aGVuIHRoZSBjb2RlIHRyaWVkIHRvIHJlYWQgYHNrLSZndDtza19wcm90b2NvbGAgaW4gdGhlIGBicGZfc29ja19kZXN0cm95YCBmdW5jdGlvbiwgaXQgd2FzIGVmZmVjdGl2ZWx5IHJlYWRpbmcgbWVtb3J5ICpiZXlvbmQqIHRoZSBib3VuZHMgb2YgdGhlIGBpbmV0X3RpbWV3YWl0X3NvY2tgIHN0cnVjdHVyZS4gSWYgdGhlIGBpbmV0X3RpbWV3YWl0X3NvY2tgIHN0cnVjdHVyZSBpcyBzbWFsbGVyIHRoYW4gYHN0cnVjdCBzb2NrYCwgd2Ugd2VyZSByZWFkaW5nIGdhcmJhZ2UhCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgc2l6ZXMuLi4gWWVhaCwgYHN0cnVjdCBzb2NrYCBpcyBkZWZpbml0ZWx5ICptdWNoKiBsYXJnZXIgdGhhbiBgc3RydWN0IGluZXRfdGltZXdhaXRfc29ja2AuICBHb3QgaXQuCgpBbHJpZ2h0LCB3aGF0IGFib3V0IHRoYXQgYHNrX2Z1bGxzb2NrKHNrKWAgY2FsbD8gVGhhdCBjaGVja3MgdGhlIGBzay0mZ3Q7c2tfc3RhdGVgLiBPa2F5LCBidXQgd2hlcmUgaXMgYHNrX3N0YXRlYD8gQWgsIGl0JiMzOTtzIGluc2lkZSBgc3RydWN0IHNvY2tfY29tbW9uYCBhcyBgc2tjX3N0YXRlYC4gUGVyZmVjdC4gU28gd2UgZG8gbm90IGhhdmUgYW4gaXNzdWUgd2l0aCBgc2tfZnVsbHNvY2tgLgoKTm93IGxldCYjMzk7cyBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBjaGFuZ2UgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBmb3IgYGJwZl9zb2NrX2Rlc3Ryb3lgOgoKYGBgYwpfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spCnsKCXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKXNvY2s7CgoJLyogVGhlIGxvY2tpbmcgc2VtYW50aWNzIHRoYXQgYWxsb3cgZm9yIGNvbmN1cnJlbnQgc29jayBkZXN0cm95IGFyZQoJICogc3BlY2lmaWMgdG8gZWFjaCBwcm90b2NvbCwgc28gb25seSBhbGxvdyB0aGUgc3VwcG9ydGVkIHByb3RvY29scy4KCSAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHQKCSAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuCgkgKi8KCWlmICghc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveSkKCQlyZXR1cm4gLUVPUE5PVFNVUFA7CgoJaWYgKHNrX2Z1bGxzb2NrKHNrKSAmYW1wOyZhbXA7CgkgICAgc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVENQICZhbXA7JmFtcDsKCSAgICBzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApCgkJcmV0dXJuIC1FT1BOT1RTVVBQOwoKCXJldHVybiBzay0mZ3Q7c2tfcHJvdC0mZ3Q7ZGlhZ19kZXN0cm95KHNrLCBFQ09OTkFCT1JURUQpOwp9CmBgYAoKT2theSwgc28gdGhlIHZ1bG5lcmFiaWxpdHkgaXMgdGhlIGBzay0mZ3Q7c2tfcHJvdG9jb2xgIGFjY2Vzcy4gTm93IGxldCYjMzk7cyBzZWUgd2hhdCBgc2stJmd0O3NrX3Byb3RgIGFjdHVhbGx5ICppcyogd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgdGltZXdhaXQgc29ja2V0IG9yIGEgcmVxdWVzdCBzb2NrZXQuIFdlIG5lZWQgdG8gY2hlY2sgd2hlcmUgYGRpYWdfZGVzdHJveWAgZ2V0cyBjYWxsZWQgZm9yIHRoZXNlIHR5cGVzLiBPa2F5LCBzbyBJIHNob3VsZCBzZWFyY2ggZm9yIGB0d3NrYCBhbmQgYGRpYWdfZGVzdHJveWAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLiBJIGFtIG5vdCBzZWVpbmcgYGRpYWdfZGVzdHJveWAgZGlyZWN0bHkuIExldCYjMzk7cyBsb29rIGZvciBgdGNwX3R3c2tfZGlhZ19kZXN0cm95YCwgYHRjcF90d3NrX2Rlc2NoZWR1bGVfcmV0cnlgLCBgdGNwX2Fib3J0YCwgb3IgYGluZXRfdHdza19kZXNjaGVkdWxlX3B1dGAuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2Fib3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYz02Mjc9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgaXB2NF9uZXRfdGFibGVbXSA9IHtcbi0tXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xMjc5LVx0e1xubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTI4MDpcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O3RjcF9hYm9ydF9vbl9vdmVyZmxvd1wmIzM0Oyxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jOjEyODE6XHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQuaXB2NC5zeXNjdGxfdGNwX2Fib3J0X29uX292ZXJmbG93LFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMtMTI4Mi1cdFx0Lm1heGxlblx0XHQ9IHNpemVvZih1OCksXG4tLVxubmV0L2lwdjQvdGNwLmM9NTA4OT12b2lkIHRjcF9kb25lKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3AuYy01MTE0LVxubmV0L2lwdjQvdGNwLmM6NTExNTppbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcbm5ldC9pcHY0L3RjcC5jLTUxMTYte1xuLS1cbm5ldC9pcHY0L3RjcC5jLTUxNjctfVxubmV0L2lwdjQvdGNwLmM6NTE2ODpFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYWJvcnQpO1xubmV0L2lwdjQvdGNwLmMtNTE2OS1cbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTMzNDc9c3RydWN0IHByb3RvIHRjcF9wcm90ID0ge1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM5NS1cdC5ub19hdXRvYmluZFx0XHQ9IHRydWUsXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjMzOTY6XHQuZGlhZ19kZXN0cm95XHRcdD0gdGNwX2Fib3J0LFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzk3LX07XG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTY4Nz1zdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk1OC1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo5NTk6XHRpZiAoIVJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Fib3J0X29uX292ZXJmbG93KSkge1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk2MC1cdFx0aW5ldF9yc2socmVxKS1cdTAwM2VhY2tlZCA9IDE7XG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMjc2PXN0cnVjdCBwcm90byB0Y3B2Nl9wcm90ID0ge1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMyNS1cdC5ub19hdXRvYmluZFx0XHQ9IHRydWUsXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIzMjY6XHQuZGlhZ19kZXN0cm95XHRcdD0gdGNwX2Fib3J0LFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzI3LX07XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0yMDk2PXN0YXRpYyB2b2lkIHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlKHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTExLVxubmV0L21wdGNwL3N1YmZsb3cuYzoyMTEyOnN0YXRpYyBpbnQgdGNwX2Fib3J0X292ZXJyaWRlKHN0cnVjdCBzb2NrICpzc2ssIGludCBlcnIpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxMTMte1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjExOS1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MjEyMDpcdHJldHVybiB0Y3BfYWJvcnQoc3NrLCBlcnIpO1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMTIxLX1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIxNDY9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd19pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTY2LVx0dGNwX3Byb3Rfb3ZlcnJpZGUucmVsZWFzZV9jYiA9IHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlO1xubmV0L21wdGNwL3N1YmZsb3cuYzoyMTY3Olx0dGNwX3Byb3Rfb3ZlcnJpZGUuZGlhZ19kZXN0cm95ID0gdGNwX2Fib3J0X292ZXJyaWRlO1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMTY4LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIxODA9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd192Nl9pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yMjEzLVx0dGNwdjZfcHJvdF9vdmVycmlkZS5yZWxlYXNlX2NiID0gdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIyMTQ6XHR0Y3B2Nl9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjIxNS0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4tLVxubmV0L3NtYy9hZl9zbWMuYz0zMjg9aW50IHNtY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zNDMtXHRpZiAoc21jLVx1MDAzZWNvbm5lY3Rfbm9uYmxvY2sgXHUwMDI2XHUwMDI2IG9sZF9zdGF0ZSA9PSBTTUNfSU5JVClcbm5ldC9zbWMvYWZfc21jLmM6MzQ0Olx0XHR0Y3BfYWJvcnQoc21jLVx1MDAzZWNsY3NvY2stXHUwMDNlc2ssIEVDT05OQUJPUlRFRCk7XG5uZXQvc21jL2FmX3NtYy5jLTM0NS1cbi0tXG5uZXQvc21jL3NtY19jbG9zZS5jPTEyOD12b2lkIHNtY19jbG9zZV9hY3RpdmVfYWJvcnQoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9zbWNfY2xvc2UuYy0xMzUtXHRcdGlmIChzbWMtXHUwMDNlY2xjc29jayBcdTAwMjZcdTAwMjYgc21jLVx1MDAzZWNsY3NvY2stXHUwMDNlc2spXG5uZXQvc21jL3NtY19jbG9zZS5jOjEzNjpcdFx0XHR0Y3BfYWJvcnQoc21jLVx1MDAzZWNsY3NvY2stXHUwMDNlc2ssIEVDT05OQUJPUlRFRCk7XG5uZXQvc21jL3NtY19jbG9zZS5jLTEzNy1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5OTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgdGNwX2Fib3J0YCBmdW5jdGlvbjoKCioqRGl2aW5nIGludG8gYHRjcF9hYm9ydGAqKgoKT2theSwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBndXRzIG9mIGBuZXQvaXB2NC90Y3AuY2AgYW5kIHNwZWNpZmljYWxseSwgdGhhdCBgdGNwX2Fib3J0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IFRDUCBjb25uZWN0aW9ucyBhcmUgZ3JhY2VmdWxseSAob3IsIGxlc3MgZ3JhY2VmdWxseSwgZGVwZW5kaW5nIG9uIHRoZSBzaXR1YXRpb24pIHRvcm4gZG93biB3aGVuIHNvbWV0aGluZyBnb2VzIHdyb25nIGF0IHRoZSBrZXJuZWwgbGV2ZWwuIFJpZ2h0IGF3YXksIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgY3JpdGljYWwgZm9yIGhhbmRsaW5nIGEgdmFyaWV0eSBvZiBlcnJvciBzY2VuYXJpb3Mg4oCTIHRoaW5ncyBsaWtlIHVucmVjb3ZlcmFibGUgY29uZ2VzdGlvbiwgUlNUIHNlZ21lbnRzIGJlaW5nIHJlY2VpdmVkIHdoZW4gd2Ugd2VyZW4mIzM5O3QgZXhwZWN0aW5nIHRoZW0sIG9yIHBlcmhhcHMgaW50ZXJuYWwga2VybmVsIGluY29uc2lzdGVuY2llcy4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHN0YXRlIHRyYW5zaXRpb25zLiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGluZmx1ZW5jZSB0aGUgVENQIHN0YXRlIG1hY2hpbmU/IERvZXMgaXQgYWx3YXlzIHRyaWdnZXIgYSBoYXJkIHJlc2V0PyBPciBhcmUgdGhlcmUgbW9yZSBudWFuY2VkIGFwcHJvYWNoZXMgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gc3RhdGU/IEkgaW1hZ2luZSB0aGVyZSBhcmUgZGlmZmVyZW50IGNvZGVwYXRocyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgY29ubmVjdGlvbiBpcyBFU1RBQkxJU0hFRCwgTElTVEVOLCBvciBpbiBzb21lIG90aGVyIGludGVyaW0gc3RhdGUuIEhhbmRsaW5nIGEgRklOX1dBSVQgc3RhdGUgZGlmZmVyZW50bHkgdGhhbiBhIFNZTl9TRU5UIHN0YXRlIGlzIGdvaW5nIHRvIGJlIGtleSwgYW5kIEnigJlsbCBiZSB3YXRjaGluZyBmb3IgdGhvc2Ugc3BlY2lmaWMgbG9naWMgYnJhbmNoZXMuCgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIFRDUCBzdGFjay4gSG93IGRvZXMgaXQgc2lnbmFsIHRoZSBhcHBsaWNhdGlvbiBsYXllciBhYm91dCB0aGUgY29ubmVjdGlvbiYjMzk7cyBkZW1pc2U/IERvZXMgaXQgc2VuZCBhbiBlcnJvciBjb2RlIGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uIG9yIGlzIHRoZSBzb2NrZXQgc2ltcGx5IGNsb3NlZD8gQW5kIHdoYXQgYWJvdXQgcmVzb3VyY2UgY2xlYW51cD8gRG9lcyBpdCBoYW5kbGUgcmVsZWFzaW5nIGFueSBhbGxvY2F0ZWQgYnVmZmVycywgdGltZXJzLCBvciBvdGhlciBjb25uZWN0aW9uLXNwZWNpZmljIGRhdGEgc3RydWN0dXJlcz8gQSBtZW1vcnkgbGVhayBoZXJlIGlzIHVuYWNjZXB0YWJsZS4gVGhlIGxldmVsIG9mIGRldGFpbCBhbmQgY2FyZSBpbiB0aGVzZSBhcmVhcyB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgdmlldyBvZiB0aGUgcXVhbGl0eSBvZiB0aGUgc3RhY2ssIGFuZCBob3cgcm9idXN0IGl0IGlzLgoKVGhlIHVzZSBvZiBsb2NrcyBpcyBhbHNvIGEgY29uY2Vybi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IHByb3RlY3RzIGFuZCB0aGUgcG90ZW50aWFsIGZvciBhbnkgcmFjZSBjb25kaXRpb25zLiBBIGZ1bmN0aW9uIGxpa2UgdGhpcyBpcyBnb2luZyB0byBiZSBjcml0aWNhbCBmb3IgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHksIGFuZCBJIHdhbnQgdG8gc2VlIGhvdyB0aGF0JiMzOTtzIGhhbmRsZWQuIEZpbmFsbHksIEkmIzM5O20gaG9waW5nIHRvIHNlZSB3ZWxsLWNvbW1lbnRlZCBjb2RlLCBhcyBpdCYjMzk7cyBpbXBlcmF0aXZlIHRoYXQgSSBnYWluIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgZnVuY3Rpb24mIzM5O3MgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MTE1Olx0aW50IHRjcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXG41MTE2Olx0e1xuNTExNzpcdFx0aW50IHN0YXRlID0gaW5ldF9za19zdGF0ZV9sb2FkKHNrKTtcbjUxMTg6XHRcbjUxMTk6XHRcdGlmIChzdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKSB7XG41MTIwOlx0XHRcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSA9IGluZXRfcmVxc2soc2spO1xuNTEyMTpcdFxuNTEyMjpcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG41MTIzOlx0XHRcdGluZXRfY3NrX3JlcXNrX3F1ZXVlX2Ryb3AocmVxLVx1MDAzZXJza19saXN0ZW5lciwgcmVxKTtcbjUxMjQ6XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG41MTI1Olx0XHRcdHJldHVybiAwO1xuNTEyNjpcdFx0fVxuNTEyNzpcdFx0aWYgKHN0YXRlID09IFRDUF9USU1FX1dBSVQpIHtcbjUxMjg6XHRcdFx0c3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBpbmV0X3R3c2soc2spO1xuNTEyOTpcdFxuNTEzMDpcdFx0XHRyZWZjb3VudF9pbmMoXHUwMDI2dHctXHUwMDNldHdfcmVmY250KTtcbjUxMzE6XHRcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuNTEzMjpcdFx0XHRpbmV0X3R3c2tfZGVzY2hlZHVsZV9wdXQodHcpO1xuNTEzMzpcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjUxMzQ6XHRcdFx0cmV0dXJuIDA7XG41MTM1Olx0XHR9XG41MTM2Olx0XG41MTM3Olx0XHQvKiBCUEYgY29udGV4dCBlbnN1cmVzIHNvY2sgbG9ja2luZy4gKi9cbjUxMzg6XHRcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxuNTEzOTpcdFx0XHQvKiBEb24mIzM5O3QgcmFjZSB3aXRoIHVzZXJzcGFjZSBzb2NrZXQgY2xvc2VzIHN1Y2ggYXMgdGNwX2Nsb3NlLiAqL1xuNTE0MDpcdFx0XHRsb2NrX3NvY2soc2spO1xuNTE0MTpcdFxuNTE0MjpcdFx0LyogQXZvaWQgY2xvc2luZyB0aGUgc2FtZSBzb2NrZXQgdHdpY2UuICovXG41MTQzOlx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XG41MTQ0Olx0XHRcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxuNTE0NTpcdFx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG41MTQ2Olx0XHRcdHJldHVybiAtRU5PRU5UO1xuNTE0NzpcdFx0fVxuNTE0ODpcdFxuNTE0OTpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pIHtcbjUxNTA6XHRcdFx0dGNwX3NldF9zdGF0ZShzaywgVENQX0NMT1NFKTtcbjUxNTE6XHRcdFx0aW5ldF9jc2tfbGlzdGVuX3N0b3Aoc2spO1xuNTE1MjpcdFx0fVxuNTE1MzpcdFxuNTE1NDpcdFx0LyogRG9uJiMzOTt0IHJhY2Ugd2l0aCBCSCBzb2NrZXQgY2xvc2VzIHN1Y2ggYXMgaW5ldF9jc2tfbGlzdGVuX3N0b3AuICovXG41MTU1Olx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG41MTU2Olx0XHRiaF9sb2NrX3NvY2soc2spO1xuNTE1NzpcdFxuNTE1ODpcdFx0aWYgKHRjcF9uZWVkX3Jlc2V0KHNrLVx1MDAzZXNrX3N0YXRlKSlcbjUxNTk6XHRcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XG41MTYwOlx0XHR0Y3BfZG9uZV93aXRoX2Vycm9yKHNrLCBlcnIpO1xuNTE2MTpcdFxuNTE2MjpcdFx0YmhfdW5sb2NrX3NvY2soc2spO1xuNTE2MzpcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG41MTY0Olx0XHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcbjUxNjU6XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbjUxNjY6XHRcdHJldHVybiAwO1xuNTE2NzpcdH1cbjUxNjg6XHRFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYWJvcnQpO1xuNTE2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMwNgoJCQkJCQkJb3V0cHV0OiAyNTQKCQkJCQkJCXRob3VnaHRzOiAxMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIFJlYXNvbmluZyBmb3IgVENQIFRpbWUtV2FpdCBTb2NrZXQgRGVzdHJ1Y3Rpb24gaW4gQlBGKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCByZXF1aXJlcyBLTVNBTiBvciBpZiBLQVNBTiBhbmQgc3RhbmRhcmQgZGVidWdnZXJzIGFyZSBzdWZmaWNpZW50LiBUaGUgY29yZSBjaGFuZ2UgZm9jdXNlcyBvbiBzYWZlbHkgZGVzdHJveWluZyBUQ1AgVElNRV9XQUlUIHNvY2tldHMgYW5kIHNpbWlsYXIgJiMzNDttaW5pLXNvY2tldHMmIzM0OyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0IHZpYSBgYnBmX3NvY2tfZGVzdHJveWAuIFNwZWNpZmljYWxseSwgaXQgYWRkcmVzc2VzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5IHdoZW4gYHNrLSZndDtza19wcm90b2NvbGAgd2FzIGFjY2Vzc2VkIG9uIHRoZXNlIG5vbi1mdWxsIHNvY2tldHMsIHdoaWNoIHVzZSBgaW5ldF90aW1ld2FpdF9zb2NrYCBpbnN0ZWFkIG9mIGBzdHJ1Y3Qgc29ja2AuCgpJbml0aWFsbHksIGB0Y3BfYWJvcnRgIHdhcyB1c2VkIHRvIGhhbmRsZSB0aGUgY2xlYW51cCBhbmQgaXQgdG91Y2hlZCB0aGVzZSB0aW1lLXdhaXQgc29ja2V0cy4gTm93LCB0aGlzIHBhdGNoIG5vdyBjaGVja3MgYHNrX2Z1bGxzb2NrKHNrKWAgKmJlZm9yZSogYWNjZXNzaW5nIGBzay0mZ3Q7c2tfcHJvdG9jb2xgLiBJZiBpdCAqaXMqIGEgZnVsbCBzb2NrZXQsIGl0IHByb2NlZWRzIHdpdGggdGhlIHByb3RvY29sIGNoZWNrLiBJZiBpdCYjMzk7cyAqbm90KiBmdWxsIChsaWtlIGEgYFRJTUVfV0FJVGAgc29ja2V0KSwgaXQgaW52b2tlcyBgc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveWAgKHdoaWNoIGlzIGB0Y3BfYWJvcnRgIGhlcmUpIHRvIGNsZWFubHkgaGFuZGxlIGRlc3RydWN0aW9uLCBlbnN1cmluZyB3ZSBhdm9pZCB0aGUgb3V0LW9mLWJvdW5kcyByZWFkIGlzc3VlLiBXZSYjMzk7cmUgYWxzbyBhZGRpbmcgc2VsZnRlc3RzIHRvIHZlcmlmeSB0aGlzIGJlaGF2aW9yLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgS01TQU4tc3BlY2lmaWMgcmlza3M/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYToKCiogICAqKlVzZXItc3BhY2UgY29waWVzL2xlYWtzPyoqIE5vcGUuIE5vIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLiBUaGVyZSYjMzk7cyBubyBkYXRhIGNvcHlpbmcgdXNpbmcgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIGV0Yy4KKiAgICoqVW5pbml0aWFsaXplZCB2YXJpYWJsZXMvY29uZGl0aW9uYWwgbG9naWM/KiogQWJzb2x1dGVseSBub3QuIFRoZSBjb2RlIGlzICpwcmV2ZW50aW5nKiBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIG5vdCBhZGRpbmcgYW55IGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFdlIGFyZSBhZGRpbmcgYSBjaGVjayB0byBlbnN1cmUgd2Ugb25seSBhY2Nlc3MgdGhlIGZ1bGwgc29ja2V0LgoqICAgKipDb21wbGV4IGFsbG9jYXRpb25zPyoqIE5vIG5ldyBhbGxvY2F0aW9ucyB0aGF0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgcHJlc2VudC4KKiAgICoqQm91bmRzIGNoZWNrcy9sZW5ndGggaXNzdWVzPyoqIFRoZSBtYWluIGNoYW5nZSAqaXMqIGEgYm91bmRzIGNoZWNrLCBidXQgaXQmIzM5O3MgKnN0cmVuZ3RoZW5pbmcqIHRoZSBib3VuZHMgY2hlY2tpbmcuIFRoZSBjaGVjayBlbnN1cmVzIHdlJiMzOTtyZSAqbm90KiBhY2Nlc3NpbmcgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0IHByb3RlY3RzIGBzay0mZ3Q7c2tfcHJvdG9jb2xgLgoKSW4gZmFjdCwgdGhpcyBwYXRjaCBpcyAqcHJldmVudGluZyogdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZSBwcmV2aW91cyBjb2RlIHdhcyBhY2Nlc3NpbmcgYHNrLSZndDtza19wcm90b2NvbGAgb24gd2hhdCB3ZXJlIGVzc2VudGlhbGx5LCBzbWFsbGVyIGBzb2NrX2NvbW1vbmAgc3RydWN0dXJlcy4gVGhlIG5ldyBsb2dpYyBpcyBkZXNpZ25lZCB0byAqYXZvaWQqIHRoYXQuCgpUaGUgYnVncyBwb3RlbnRpYWxseSBpbnRyb2R1Y2VkIGFyZSBvZiB0aGUgdHlwZSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dlcnMgYXJlIGJ1aWx0IHRvIGZpbmQuIEZvciBleGFtcGxlLCBpZiB0aGVyZSB3ZXJlIGlzc3VlcyB3aXRoIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcsIHVzZS1hZnRlci1mcmVlLCBvciBpZiBgZGlhZ19kZXN0cm95YCB3YXMgaW5jb3JyZWN0bHkgY2FsbGVkLCB0aGVzZSB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCB3aGljaCBhcmUgYWxsIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgbG9ja2RlcC4KClRoZXJlZm9yZSwgdGhlIHJlYXNvbmluZyBpcyBhcyBmb2xsb3dzOgoKKiAgICoqS0FTQU4gLyBTdGFuZGFyZCBEZXRlY3RvcnM6KiogVGhlIHBhdGNoIG1haW5seSBhZGRyZXNzZXMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHNvY2tldCBsaWZlY3ljbGUgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2Ugbm9uLWZ1bGwgc29ja2V0cy4gVGhlc2Ugcmlza3MgYXJlIHJlbGF0ZWQgdG8gcmVmY291bnRpbmcsIHNvY2tldCBsaWZlY3ljbGUvbG9ja2luZyAoaGFuZGxlZCBieSBgaW5ldF90d3NrX2Rlc2NoZWR1bGVfcHV0YCksIHVzZS1hZnRlci1mcmVlLCBhbmQgaW52YWxpZCBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBtb25pdG9yZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCB0aGUgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLgoqICAgKipLTVNBTjoqKiBUaGUgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgbWVtb3J5IGNvcGllcyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIGJ1ZmZlciBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gQWN0dWFsbHksIHRoZSBwYXRjaCAqcHJldmVudHMqIGFuIG91dC1vZi1ib3VuZHMgcmVhZGluZyBvZiBgc2tfcHJvdG9jb2xgIG9uIG1pbmktc29ja2V0cywgc28gdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBLTVNBTi4KClNvLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gV2UgY2FuIHNhZmVseSBtYXJrIHRoaXMgYXMgbm90IG5lZWRpbmcgS01TQU4gZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBrZnVuYyBgYnBmX3NvY2tfZGVzdHJveSgpYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIHN1cHBvcnQgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIGJ5IGNoZWNraW5nIGBza19mdWxsc29jayhzaylgIGJlZm9yZSBpbnNwZWN0aW5nIGBzay1cdTAwM2Vza19wcm90b2NvbGAsIGFuZCBpbnZva2VzIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKWAuIFRoZSBhY2NvbXBhbnlpbmcgY2hhbmdlcyBhcmUgQlBGIHNlbGZ0ZXN0cy5cblxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBzdHJ1Y3R1cmUgY29weWluZyB0byB1c2Vyc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsLCBldGMuKSwgYW5kIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG4tIFRoZSBwb3RlbnRpYWwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHNvY2tldCBkZXN0cnVjdGlvbiAoZS5nLiwgc29ja2V0IGxpZmVjeWNsZS9yZWZjb3VudGluZyByYWNlcywgbG9ja2luZyBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgZGVyZWZlcmVuY2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycy5cbi0gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYga2Z1bmMgYGJwZl9zb2NrX2Rlc3Ryb3koKWAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBzdXBwb3J0IG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBzb2NrZXRzKSBieSBjaGVja2luZyBgc2tfZnVsbHNvY2soc2spYCBiZWZvcmUgaW5zcGVjdGluZyBgc2stXHUwMDNlc2tfcHJvdG9jb2xgLCBhbmQgaW52b2tlcyBgc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRClgLiBUaGUgYWNjb21wYW55aW5nIGNoYW5nZXMgYXJlIEJQRiBzZWxmdGVzdHMuXG5cbktNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlcnNwYWNlICh2aWEgY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCwgZXRjLiksIGFuZCBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuLSBUaGUgcG90ZW50aWFsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBzb2NrZXQgZGVzdHJ1Y3Rpb24gKGUuZy4sIHNvY2tldCBsaWZlY3ljbGUvcmVmY291bnRpbmcgcmFjZXMsIGxvY2tpbmcgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGRlcmVmZXJlbmNlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMuXG4tIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQxOjI0LjI4MjQyMDMwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzQzOTEwMzQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zb2NrX2Rlc3Ryb3lcIixcbiAgICBcInRjcF9hYm9ydFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBrZnVuYyBgYnBmX3NvY2tfZGVzdHJveSgpYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIHN1cHBvcnQgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIGJ5IGNoZWNraW5nIGBza19mdWxsc29jayhzaylgIGJlZm9yZSBpbnNwZWN0aW5nIGBzay1cXHUwMDNlc2tfcHJvdG9jb2xgLCBhbmQgaW52b2tlcyBgc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKWAuIFRoZSBhY2NvbXBhbnlpbmcgY2hhbmdlcyBhcmUgQlBGIHNlbGZ0ZXN0cy5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBzdHJ1Y3R1cmUgY29weWluZyB0byB1c2Vyc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsLCBldGMuKSwgYW5kIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXFxuLSBUaGUgcG90ZW50aWFsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBzb2NrZXQgZGVzdHJ1Y3Rpb24gKGUuZy4sIHNvY2tldCBsaWZlY3ljbGUvcmVmY291bnRpbmcgcmFjZXMsIGxvY2tpbmcgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGRlcmVmZXJlbmNlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMuXFxuLSBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWFjaGFibGUgQlBGIGtmdW5jIGBicGZfc29ja19kZXN0cm95YCB0byBzdXBwb3J0IG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBhbmQgcmVxdWVzdCBzb2NrZXRzKSBieSBvbmx5IGNoZWNraW5nIHRoZSBwcm90b2NvbCBvbiBmdWxsIHNvY2tldHMgKGBza19mdWxsc29ja2ApLiBUaGlzIGFsbG93cyBCUEYgaXRlcmF0b3IgcHJvZ3JhbXMgdG8gaW52b2tlIHNvY2tldCBkZXN0cnVjdGlvbiAoYGRpYWdfZGVzdHJveWAgLyBgdGNwX2Fib3J0YCkgb24gdGltZXdhaXQgc29ja2V0cyBhbmQgc3luLXJlY3YgcmVxdWVzdHMsIHdoaWNoIGNhbiB1bmNvdmVyIHJhY2UgY29uZGl0aW9ucyBvciBzdGF0ZS1oYW5kbGluZyBpc3N1ZXMgZHVyaW5nIHNvY2tldCB0ZWFyZG93bi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDE6MjQuMjgyNDI0OTY0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTUzMDA3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3ZWU0ODc0MzVkMTYxZTY4ZTdkOWZkYTcxN2YzNTQ0NDAwYmNlZDhiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMTg6NDE6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDYxOTQwZTc1MzU1MjMuLmE0MWNjNjBhNDAxYTUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC0xMjkxMiw4ICsxMjkxMiw5IEBAIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4gICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZFxcbiAgKlxcbiAgKiBSZXR1cm46XFxuLSAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVQUk9UT05PU1VQUE9SVCwgRUlOVkFMLlxcbi0gKiBFUFJPVE9OT1NVUFBPUlQgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuXFxuKyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIG9yIHdoYXRldmVyIHRoZSBwcm90b2NvbCBzcGVjaWZpY1xcbisgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cXG4rICogRU9QTk9UU1VQUCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC5cXG4gICogMCBvdGhlcndpc2VcXG4gICovXFxuIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcXG5AQCAtMTI5MjUsOCArMTI5MjYsMTIgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxcbiBcXHQgKiBTdXBwb3J0aW5nIHByb3RvY29scyB3aWxsIG5lZWQgdG8gYWNxdWlyZSBzb2NrIGxvY2sgaW4gdGhlIEJQRiBjb250ZXh0XFxuIFxcdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXFxuIFxcdCAqL1xcbi1cXHRpZiAoIXNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VkaWFnX2Rlc3Ryb3kgfHwgKHNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRcXHRcXHQgICBzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApKVxcbitcXHRpZiAoIXNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VkaWFnX2Rlc3Ryb3kpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGlmIChza19mdWxsc29jayhzaykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbiBcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xcbmluZGV4IDljMTE5MzhmZTU5N2QuLmI5MGZhYjcwNzMzODYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xcbkBAIC0xMTAsNiArMTEwLDc0IEBAIHN0YXRpYyB2b2lkIHRlc3RfdGNwX3NlcnZlcihzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpXFxuIFxcdFxcdGNsb3NlKHNlcnYpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0ZXN0X3RjcF90aW1ld2FpdChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpXFxuK3tcXG4rXFx0aW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgYWNjZXB0X3NlcnYgPSAtMSwgbjtcXG4rXFx0c3RydWN0IHRpbWV2YWwgdHYgPSB7fTtcXG4rXFx0Y2hhciBidWZbMV07XFxuK1xcbitcXHRzZXJ2ID0gc3RhcnRfc2VydmVyKEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgTlVMTCwgMCwgMCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKHNlcnYsIDAsIFxcXCJzdGFydF9zZXJ2ZXJcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0Y2xpZW4gPSBjb25uZWN0X3RvX2ZkKHNlcnYsIDApO1xcbitcXHRpZiAoIUFTU0VSVF9HRShjbGllbiwgMCwgXFxcImNvbm5lY3RfdG9fZmRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0YWNjZXB0X3NlcnYgPSBhY2NlcHQoc2VydiwgTlVMTCwgTlVMTCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGFjY2VwdF9zZXJ2LCAwLCBcXFwic2VydiBhY2NlcHRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQWN0aXZlIGNsb3NlIGZyb20gdGhlIGNsaWVudCwgdGhlbiBjbG9zZSB0aGUgc2VydmVyIHNpZGUuIE9uY2VcXG4rXFx0ICogcmVjdigpIHNlZXMgRU9GIHRoZSBzZXJ2ZXIgRklOIGhhcyBiZWVuIHByb2Nlc3NlZCBhbmQgdGhlIGNsaWVudFxcbitcXHQgKiBzb2NrIGlzIGluIFRJTUVfV0FJVC4gQmxvY2sgd2l0aG91dCB0aW1lb3V0IHNvIGEgbG9hZGVkIENJIGJveFxcbitcXHQgKiBjYW4ndCByYWNlIHVzLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFBU1NFUlRfT0soc2V0c29ja29wdChjbGllbiwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFxcdTAwMjZ0dixcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2YodHYpKSwgXFxcImNsZWFyIHJjdnRpbWVvXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0aWYgKCFBU1NFUlRfT0soc2h1dGRvd24oY2xpZW4sIFNIVVRfV1IpLCBcXFwiY2xpZW50IHNodXRkb3duXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE1ha2Ugc3VyZSB0aGUgc2VydmVyIGhhcyBzZWVuIHRoZSBjbGllbnQgRklOIGJlZm9yZSBpdCBjbG9zZXMsXFxuK1xcdCAqIHNvIHRoZSB0d28gRklOcyBuZXZlciBjcm9zcy5cXG4rXFx0ICovXFxuK1xcdG4gPSByZWN2KGFjY2VwdF9zZXJ2LCBidWYsIHNpemVvZihidWYpLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEobiwgMCwgXFxcInNlcnZlciByZWN2IEVPRlxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRjbG9zZShhY2NlcHRfc2Vydik7XFxuK1xcdGFjY2VwdF9zZXJ2ID0gLTE7XFxuK1xcbitcXHQvKiBibG9jayB1bnRpbCByZXR1cm4gRU9GICovXFxuK1xcdG4gPSByZWN2KGNsaWVuLCBidWYsIHNpemVvZihidWYpLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEobiwgMCwgXFxcImNsaWVudCByZWN2IEVPRlxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKiBSdW4gaXRlcmF0b3IgcHJvZ3JhbSB0aGF0IGRlc3Ryb3lzIHRoZSB0aW1ld2FpdCBjbGllbnQgc29jay4gKi9cXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2V0d19mb3VuZCA9IDA7XFxuK1xcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVxcdTAwM2Vwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpO1xcbitcXHRpZiAoIUFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXR3X2ZvdW5kLCAxLCBcXFwidGltZXdhaXQgc29jayBmb3VuZFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRBU1NFUlRfT0soc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2V0d19kZXN0cm95X2VyciwgXFxcImRlc3Ryb3kgdGltZXdhaXQgc29ja1xcXCIpO1xcbitcXG4rXFx0LyogVGhlIGRlc3Ryb3llZCB0aW1ld2FpdCBzb2NrIG11c3QgYmUgZ29uZS4gKi9cXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2V0d19mb3VuZCA9IDA7XFxuK1xcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVxcdTAwM2Vwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2V0d19mb3VuZCwgMCwgXFxcInRpbWV3YWl0IHNvY2sgZGVzdHJveWVkXFxcIik7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRpZiAoY2xpZW4gIT0gLTEpXFxuK1xcdFxcdGNsb3NlKGNsaWVuKTtcXG4rXFx0aWYgKGFjY2VwdF9zZXJ2ICE9IC0xKVxcbitcXHRcXHRjbG9zZShhY2NlcHRfc2Vydik7XFxuK1xcdGlmIChzZXJ2ICE9IC0xKVxcbitcXHRcXHRjbG9zZShzZXJ2KTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdGVzdF91ZHBfY2xpZW50KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcXG4ge1xcbiBcXHRpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBuID0gMDtcXG5AQCAtMjA0LDExICsyNzIsMTIgQEAgdm9pZCB0ZXN0X3NvY2tfZGVzdHJveSh2b2lkKVxcbiBcXHRcXHR0ZXN0X3RjcF9jbGllbnQoc2tlbCk7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJ0Y3Bfc2VydmVyXFxcIikpXFxuIFxcdFxcdHRlc3RfdGNwX3NlcnZlcihza2VsKTtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInRjcF90aW1ld2FpdFxcXCIpKVxcbitcXHRcXHR0ZXN0X3RjcF90aW1ld2FpdChza2VsKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInVkcF9jbGllbnRcXFwiKSlcXG4gXFx0XFx0dGVzdF91ZHBfY2xpZW50KHNrZWwpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwidWRwX3NlcnZlclxcXCIpKVxcbiBcXHRcXHR0ZXN0X3VkcF9zZXJ2ZXIoc2tlbCk7XFxuLVxcbiBcXHRSVU5fVEVTVFMoc29ja19kZXN0cm95X3Byb2dfZmFpbCk7XFxuIFxcbiBjbGVhbnVwOlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jXFxuaW5kZXggOWUwYmY3YTU0Y2VjOS4uMGE4ODg3NTQzMjE4YSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jXFxuQEAgLTcsNiArNyw4IEBAXFxuICNpbmNsdWRlIFxcXCJicGZfdHJhY2luZ19uZXQuaFxcXCJcXG4gXFxuIF9fYmUxNiBzZXJ2X3BvcnQgPSAwO1xcbitpbnQgdHdfZm91bmQgPSAwO1xcbitpbnQgdHdfZGVzdHJveV9lcnIgPSAwO1xcbiBcXG4gaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzaykgX19rc3ltO1xcbiBcXG5AQCAtMTAwLDYgKzEwMiwzNCBAQCBpbnQgaXRlcl90Y3A2X3NlcnZlcihzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rU0VDKFxcXCJpdGVyL3RjcFxcXCIpXFxuK2ludCBpdGVyX3RjcDZfdGltZXdhaXQoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja19jb21tb24gKnNrX2NvbW1vbiA9IGN0eC1cXHUwMDNlc2tfY29tbW9uO1xcbitcXHRfX3U2NCAqdmFsO1xcbitcXHRpbnQga2V5ID0gMDtcXG4rXFxuK1xcdGlmICghc2tfY29tbW9uKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChza19jb21tb24tXFx1MDAzZXNrY19mYW1pbHkgIT0gQUZfSU5FVDYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFicGZfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrKHNrX2NvbW1vbikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2dGNwX2Nvbm5fc29ja2V0cywgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0LyogVGhlIHRpbWV3YWl0IHNvY2sgaW5oZXJpdHMgdGhlIGNvb2tpZSBvZiB0aGUgY2xvc2VkIGNsaWVudCBzb2NrLiAqL1xcbitcXHRpZiAoYnBmX2dldF9zb2NrZXRfY29va2llKHNrX2NvbW1vbikgIT0gKnZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHR0d19mb3VuZCsrO1xcbitcXHR0d19kZXN0cm95X2VyciA9IGJwZl9zb2NrX2Rlc3Ryb3koc2tfY29tbW9uKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuIFxcbiBTRUMoXFxcIml0ZXIvdWRwXFxcIilcXG4gaW50IGl0ZXJfdWRwNl9jbGllbnQoc3RydWN0IGJwZl9pdGVyX191ZHAgKmN0eClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDE6MjQuNjk4NDEwMTI0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3MTAwMjM1OTE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zb2NrX2Rlc3Ryb3lcIixcbiAgICBcInRjcF9hYm9ydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWFjaGFibGUgQlBGIGtmdW5jIGBicGZfc29ja19kZXN0cm95YCB0byBzdXBwb3J0IG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBhbmQgcmVxdWVzdCBzb2NrZXRzKSBieSBvbmx5IGNoZWNraW5nIHRoZSBwcm90b2NvbCBvbiBmdWxsIHNvY2tldHMgKGBza19mdWxsc29ja2ApLiBUaGlzIGFsbG93cyBCUEYgaXRlcmF0b3IgcHJvZ3JhbXMgdG8gaW52b2tlIHNvY2tldCBkZXN0cnVjdGlvbiAoYGRpYWdfZGVzdHJveWAgLyBgdGNwX2Fib3J0YCkgb24gdGltZXdhaXQgc29ja2V0cyBhbmQgc3luLXJlY3YgcmVxdWVzdHMsIHdoaWNoIGNhbiB1bmNvdmVyIHJhY2UgY29uZGl0aW9ucyBvciBzdGF0ZS1oYW5kbGluZyBpc3N1ZXMgZHVyaW5nIHNvY2tldCB0ZWFyZG93bi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZWU0ODc0MzVkMTYxZTY4ZTdkOWZkYTcxN2YzNTQ0NDAwYmNlZDhiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxODo0MToyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDYxOTQwZTc1MzU1MjMuLmE0MWNjNjBhNDAxYTUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC0xMjkxMiw4ICsxMjkxMiw5IEBAIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbiAgKiBAc29jazogUG9pbnRlciB0byBzb2NrZXQgdG8gYmUgZGVzdHJveWVkXG4gICpcbiAgKiBSZXR1cm46XG4tICogT24gZXJyb3IsIG1heSByZXR1cm4gRVBST1RPTk9TVVBQT1JULCBFSU5WQUwuXG4tICogRVBST1RPTk9TVVBQT1JUIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuKyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIG9yIHdoYXRldmVyIHRoZSBwcm90b2NvbCBzcGVjaWZpY1xuKyAqIGRlc3Ryb3kgaGFuZGxlciByZXR1cm5zLlxuKyAqIEVPUE5PVFNVUFAgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuXG4gICogMCBvdGhlcndpc2VcbiAgKi9cbiBfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spXG5AQCAtMTI5MjUsOCArMTI5MjYsMTIgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuIFx0ICogU3VwcG9ydGluZyBwcm90b2NvbHMgd2lsbCBuZWVkIHRvIGFjcXVpcmUgc29jayBsb2NrIGluIHRoZSBCUEYgY29udGV4dFxuIFx0ICogcHJpb3IgdG8gaW52b2tpbmcgdGhpcyBrZnVuYy5cbiBcdCAqL1xuLVx0aWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSB8fCAoc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdCAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKSlcbitcdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGlmIChza19mdWxsc29jayhzaykgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdHJldHVybiBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG5pbmRleCA5YzExOTM4ZmU1OTdkLi5iOTBmYWI3MDczMzg2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG5AQCAtMTEwLDYgKzExMCw3NCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3RjcF9zZXJ2ZXIoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuIFx0XHRjbG9zZShzZXJ2KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGVzdF90Y3BfdGltZXdhaXQoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuK3tcbitcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIGFjY2VwdF9zZXJ2ID0gLTEsIG47XG4rXHRzdHJ1Y3QgdGltZXZhbCB0diA9IHt9O1xuK1x0Y2hhciBidWZbMV07XG4rXG4rXHRzZXJ2ID0gc3RhcnRfc2VydmVyKEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgTlVMTCwgMCwgMCk7XG4rXHRpZiAoIUFTU0VSVF9HRShzZXJ2LCAwLCBcInN0YXJ0X3NlcnZlclwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0Y2xpZW4gPSBjb25uZWN0X3RvX2ZkKHNlcnYsIDApO1xuK1x0aWYgKCFBU1NFUlRfR0UoY2xpZW4sIDAsIFwiY29ubmVjdF90b19mZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0YWNjZXB0X3NlcnYgPSBhY2NlcHQoc2VydiwgTlVMTCwgTlVMTCk7XG4rXHRpZiAoIUFTU0VSVF9HRShhY2NlcHRfc2VydiwgMCwgXCJzZXJ2IGFjY2VwdFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LypcbitcdCAqIEFjdGl2ZSBjbG9zZSBmcm9tIHRoZSBjbGllbnQsIHRoZW4gY2xvc2UgdGhlIHNlcnZlciBzaWRlLiBPbmNlXG4rXHQgKiByZWN2KCkgc2VlcyBFT0YgdGhlIHNlcnZlciBGSU4gaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCB0aGUgY2xpZW50XG4rXHQgKiBzb2NrIGlzIGluIFRJTUVfV0FJVC4gQmxvY2sgd2l0aG91dCB0aW1lb3V0IHNvIGEgbG9hZGVkIENJIGJveFxuK1x0ICogY2FuJ3QgcmFjZSB1cy5cbitcdCAqL1xuK1x0aWYgKCFBU1NFUlRfT0soc2V0c29ja29wdChjbGllbiwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFx1MDAyNnR2LFxuK1x0XHRcdFx0ICBzaXplb2YodHYpKSwgXCJjbGVhciByY3Z0aW1lb1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aWYgKCFBU1NFUlRfT0soc2h1dGRvd24oY2xpZW4sIFNIVVRfV1IpLCBcImNsaWVudCBzaHV0ZG93blwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LypcbitcdCAqIE1ha2Ugc3VyZSB0aGUgc2VydmVyIGhhcyBzZWVuIHRoZSBjbGllbnQgRklOIGJlZm9yZSBpdCBjbG9zZXMsXG4rXHQgKiBzbyB0aGUgdHdvIEZJTnMgbmV2ZXIgY3Jvc3MuXG4rXHQgKi9cbitcdG4gPSByZWN2KGFjY2VwdF9zZXJ2LCBidWYsIHNpemVvZihidWYpLCAwKTtcbitcdGlmICghQVNTRVJUX0VRKG4sIDAsIFwic2VydmVyIHJlY3YgRU9GXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRjbG9zZShhY2NlcHRfc2Vydik7XG4rXHRhY2NlcHRfc2VydiA9IC0xO1xuK1xuK1x0LyogYmxvY2sgdW50aWwgcmV0dXJuIEVPRiAqL1xuK1x0biA9IHJlY3YoY2xpZW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuK1x0aWYgKCFBU1NFUlRfRVEobiwgMCwgXCJjbGllbnQgcmVjdiBFT0ZcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgdGhlIHRpbWV3YWl0IGNsaWVudCBzb2NrLiAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQgPSAwO1xuK1x0c3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtXHUwMDNlcHJvZ3MuaXRlcl90Y3A2X3RpbWV3YWl0KTtcbitcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kLCAxLCBcInRpbWV3YWl0IHNvY2sgZm91bmRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdEFTU0VSVF9PSyhza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19kZXN0cm95X2VyciwgXCJkZXN0cm95IHRpbWV3YWl0IHNvY2tcIik7XG4rXG4rXHQvKiBUaGUgZGVzdHJveWVkIHRpbWV3YWl0IHNvY2sgbXVzdCBiZSBnb25lLiAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQgPSAwO1xuK1x0c3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtXHUwMDNlcHJvZ3MuaXRlcl90Y3A2X3RpbWV3YWl0KTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19mb3VuZCwgMCwgXCJ0aW1ld2FpdCBzb2NrIGRlc3Ryb3llZFwiKTtcbitcbitjbGVhbnVwOlxuK1x0aWYgKGNsaWVuICE9IC0xKVxuK1x0XHRjbG9zZShjbGllbik7XG4rXHRpZiAoYWNjZXB0X3NlcnYgIT0gLTEpXG4rXHRcdGNsb3NlKGFjY2VwdF9zZXJ2KTtcbitcdGlmIChzZXJ2ICE9IC0xKVxuK1x0XHRjbG9zZShzZXJ2KTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGVzdF91ZHBfY2xpZW50KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbiB7XG4gXHRpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBuID0gMDtcbkBAIC0yMDQsMTEgKzI3MiwxMiBAQCB2b2lkIHRlc3Rfc29ja19kZXN0cm95KHZvaWQpXG4gXHRcdHRlc3RfdGNwX2NsaWVudChza2VsKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidGNwX3NlcnZlclwiKSlcbiBcdFx0dGVzdF90Y3Bfc2VydmVyKHNrZWwpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ0Y3BfdGltZXdhaXRcIikpXG4rXHRcdHRlc3RfdGNwX3RpbWV3YWl0KHNrZWwpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ1ZHBfY2xpZW50XCIpKVxuIFx0XHR0ZXN0X3VkcF9jbGllbnQoc2tlbCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInVkcF9zZXJ2ZXJcIikpXG4gXHRcdHRlc3RfdWRwX3NlcnZlcihza2VsKTtcbi1cbiBcdFJVTl9URVNUUyhzb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsKTtcbiBcbiBjbGVhbnVwOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbmluZGV4IDllMGJmN2E1NGNlYzkuLjBhODg4NzU0MzIxOGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbkBAIC03LDYgKzcsOCBAQFxuICNpbmNsdWRlIFwiYnBmX3RyYWNpbmdfbmV0LmhcIlxuIFxuIF9fYmUxNiBzZXJ2X3BvcnQgPSAwO1xuK2ludCB0d19mb3VuZCA9IDA7XG4raW50IHR3X2Rlc3Ryb3lfZXJyID0gMDtcbiBcbiBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNrKSBfX2tzeW07XG4gXG5AQCAtMTAwLDYgKzEwMiwzNCBAQCBpbnQgaXRlcl90Y3A2X3NlcnZlcihzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcIml0ZXIvdGNwXCIpXG4raW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuK3tcbitcdHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tfY29tbW9uID0gY3R4LVx1MDAzZXNrX2NvbW1vbjtcbitcdF9fdTY0ICp2YWw7XG4rXHRpbnQga2V5ID0gMDtcbitcbitcdGlmICghc2tfY29tbW9uKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChza19jb21tb24tXHUwMDNlc2tjX2ZhbWlseSAhPSBBRl9JTkVUNilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIWJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2soc2tfY29tbW9uKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRjcF9jb25uX3NvY2tldHMsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXHQvKiBUaGUgdGltZXdhaXQgc29jayBpbmhlcml0cyB0aGUgY29va2llIG9mIHRoZSBjbG9zZWQgY2xpZW50IHNvY2suICovXG4rXHRpZiAoYnBmX2dldF9zb2NrZXRfY29va2llKHNrX2NvbW1vbikgIT0gKnZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR0d19mb3VuZCsrO1xuK1x0dHdfZGVzdHJveV9lcnIgPSBicGZfc29ja19kZXN0cm95KHNrX2NvbW1vbik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4gXG4gU0VDKFwiaXRlci91ZHBcIilcbiBpbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDE6MjQuNjk4NDEyMTUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY0NjE3NTkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGJwZl9zb2NrX2Rlc3Ryb3kgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGJwZl9zb2NrX2Rlc3Ryb3lgIGRpZmYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGNoYW5nZWQgYW5kIHRoZSBpbXBsaWNhdGlvbnMuIFJpZ2h0IGF3YXksIEkgc2VlIHRoZSBtb2RpZmljYXRpb25zIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBJdCBsb29rcyBsaWtlIHdlJ3ZlIGdvdCBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIHJlbGF0ZWQgdG8gcHJvdG9jb2wgaGFuZGxpbmcgYW5kIHNvY2tldCBkZXN0cnVjdGlvbi5cblxuU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBvcmlnaW5hbGx5IGhhZCBhIGNoZWNrIHRvIHNlZSBpZiB0aGUgc29ja2V0IHByb3RvY29sIHdhcyBuZWl0aGVyIFRDUCBub3IgVURQIGJlZm9yZSByZXR1cm5pbmcgYC1FT1BOT1RTVVBQYC4gVGhhdCBjaGVjayBoYXMgYmVlbiBtb2RpZmllZC4gTm93LCBpdCBhcHBlYXJzIHRoZXJlJ3MgYSBzcGVjaWZpYyBjaGVjayBgc2tfZnVsbHNvY2soc2spYCBpbnRyb2R1Y2VkLCBhbmQgdGhlIHByb3RvY29sIGZpbHRlcmluZyBpcyB3aXRoaW4gdGhhdCBuZXcgY29uZGl0aW9uYWwuIEFsc28sIGEgYC1FT1BOT1RTVVBQYCBpcyByZXR1cm5lZCBpZiBgZGlhZ19kZXN0cm95YCBpcyBub3QgZGVmaW5lZC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBoZXJlLiBUaGUgY29tbWVudCBzdWdnZXN0cyB0aGF0IHN1cHBvcnRpbmcgcHJvdG9jb2xzIG11c3QgYWNxdWlyZSB0aGUgc29jayBsb2NrIGJlZm9yZSBjYWxsaW5nIHRoaXMga2Z1bmMuIFNvIEkgaGF2ZSB0byB1bmRlcnN0YW5kIHdoeSB0aGUgYWRkZWQgY2hlY2sgYW5kIHRoZSBwcm90b2NvbCBmaWx0ZXJpbmcgaXMgcmVsZXZhbnQgdG8gdGhpcyBsb2NraW5nIHJlcXVpcmVtZW50LlxuXG5UbyB0cnVseSBncmFzcCB0aGlzLCBJIG5lZWQgY29udGV4dC4gSSdsbCBuZWVkIHRvIGdvIGJleW9uZCB0aGlzIHNuaXBwZXQuIEknbSBnb2luZyB0byBwdWxsIHVwIGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gc2VlIGhvdyBgYnBmX3NvY2tfZGVzdHJveWAgaXMgZGVmaW5lZC4gSSdsbCBhbHNvIGNoZWNrIHdoZXJlIGl0J3MgY2FsbGVkIGFuZCB0aGUgcmVsYXRlZCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gQSBxdWljayBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgd2lsbCBnaXZlIG1lIHRoYXQgc3Vycm91bmRpbmcgY29kZSwgZGVwZW5kZW5jaWVzLCBhbmQgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGNvZGUgdGhpcyB0b3VjaGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDE6MzEuMzQ0NTkxMTAzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjkxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5MTA6XFx0ICpcXG4xMjkxMTpcXHQgKiBQYXJhbWV0ZXJzOlxcbjEyOTEyOlxcdCAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWRcXG4xMjkxMzpcXHQgKlxcbjEyOTE0OlxcdCAqIFJldHVybjpcXG4xMjkxNTpcXHQgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBvciB3aGF0ZXZlciB0aGUgcHJvdG9jb2wgc3BlY2lmaWNcXG4xMjkxNjpcXHQgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cXG4xMjkxNzpcXHQgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxcbjEyOTE4OlxcdCAqIDAgb3RoZXJ3aXNlXFxuMTI5MTk6XFx0ICovXFxuMTI5MjA6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxcbjEyOTIxOlxcdHtcXG4xMjkyMjpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilzb2NrO1xcbjEyOTIzOlxcdFxcbjEyOTI0OlxcdFxcdC8qIFRoZSBsb2NraW5nIHNlbWFudGljcyB0aGF0IGFsbG93IGZvciBzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgdGhlXFxuMTI5MjU6XFx0XFx0ICogZGVzdHJveSBoYW5kbGVycyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIFRDUCBhbmQgVURQLlxcbjEyOTI2OlxcdFxcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcXG4xMjkyNzpcXHRcXHQgKiBwcmlvciB0byBpbnZva2luZyB0aGlzIGtmdW5jLlxcbjEyOTI4OlxcdFxcdCAqL1xcbjEyOTI5OlxcdFxcdGlmICghc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveSlcXG4xMjkzMDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTI5MzE6XFx0XFxuMTI5MzI6XFx0XFx0aWYgKHNrX2Z1bGxzb2NrKHNrKSBcXHUwMDI2XFx1MDAyNlxcbjEyOTMzOlxcdFxcdCAgICBzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjZcXG4xMjkzNDpcXHRcXHQgICAgc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxcbjEyOTM1OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMjkzNjpcXHRcXG4xMjkzNzpcXHRcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG4xMjkzODpcXHR9XFxuMTI5Mzk6XFx0XFxuMTI5NDA6XFx0X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG4xMjk0MTpcXHRcXG4xMjk0MjpcXHRCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcXG4xMjk0MzpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlcXG4xMjk0NDpcXHRCVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXFxuMTI5NDU6XFx0XFxuMTI5NDY6XFx0c3RhdGljIGludCB0cmFjaW5nX2l0ZXJfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbjEyOTQ3OlxcdHtcXG4xMjk0ODpcXHRcXHRpZiAoYnRmX2lkX3NldDhfY29udGFpbnMoXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcywga2Z1bmNfaWQpIFxcdTAwMjZcXHUwMDI2XFxuMTI5NDk6XFx0XFx0ICAgIHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9JVEVSKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MTozMS4zNDYzODc2NDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDg0NTIyMTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTb2NrZXQgRGVzdHJ1Y3Rpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUgc25pcHBldCBhbmQgZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24uIEknbSBsb29raW5nIGF0IGEgY29uZGl0aW9uYWwgc3RhdGVtZW50IGhlcmUsIHNwZWNpZmljYWxseTpcblxuYGBgY1xuaWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSB8fCAoc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG5cdFx0XHRcdCAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKSlcbmBgYFxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhpcyBsb29rcyBsaWtlIHNvbWUgc29ydCBvZiBzb2NrZXQgY2xlYW51cCBvciBkZXN0cnVjdGlvbiBsb2dpYy4gUHJldmlvdXNseSwgdGhlIGNvZGUgY2hlY2tzIGZvciBgZGlhZ19kZXN0cm95YCwgYnV0IEkgc2VlIHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHByb2JsZW1hdGljOiBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIGlzIG9ubHkgcmVsaWFibGUgd2hlbiBgc2tfZnVsbHNvY2soc2spYCBpcyB0cnVlLiBJZiBgc2tgIGlzICpub3QqIGEgXCJmdWxsIHNvY2tldCxcIiBtZWFuaW5nIGl0J3Mgc29tZXRoaW5nIGxpa2UgYSBgaW5ldF90aW1ld2FpdF9zb2NrYCBvciBhIGByZXF1ZXN0X3NvY2tgIChzb2NrZXRzIGRlcml2ZWQgZnJvbSBgc29ja19jb21tb25gKSwgdGhlbiBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIGVpdGhlciBkb2Vzbid0IGV4aXN0IGF0IGFsbCBvciBpdCdzIGF0IGFuIG9mZnNldCB0aGF0J3MgaW52YWxpZCwgYW5kIGBza19mdWxsc29ja2AgaXMgZmFsc2UuIFRoaXMgaXMgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLlxuXG5TcGVjaWZpY2FsbHksIHdpdGggdGltZXdhaXQgc29ja2V0cywgYHNrX2Z1bGxzb2NrKHNrKWAgaXMgZmFsc2UuIFNvLCBub3csIEkgbmVlZCB0byBrbm93IGFib3V0IGBkaWFnX2Rlc3Ryb3lgIGZvciBUQ1AgdGltZXdhaXQgb3Igbm9uLWZ1bGxzb2NrIGluc3RhbmNlcy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGFuZCBob3cgaXQgaGFuZGxlcyB0aGVzZSBzb2NrZXQgdHlwZXMuIEknbGwgbmVlZCB0byBncmVwIHRocm91Z2ggdGhlIGNvZGViYXNlIHRvIHRyYWNlIHRoZSB1c2Ugb2YgYGRpYWdfZGVzdHJveWAgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgaW4gdGhlIGNhc2Ugb2YgdGltZXdhaXQgc29ja2V0cyBhbmQgc29ja2V0cyB0aGF0IGFyZSBub3QgZnVsbCBzb2NrZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjA3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDE6MzguNDMwOTEzNzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMjQ4MTI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcLmRpYWdfZGVzdHJveVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9yYXcuYz05NDg9c3RydWN0IHByb3RvIHJhd19wcm90ID0ge1xcbi0tXFxubmV0L2lwdjQvcmF3LmMtOTcyLSNlbmRpZlxcbm5ldC9pcHY0L3Jhdy5jOjk3MzpcXHQuZGlhZ19kZXN0cm95XFx0ICAgPSByYXdfYWJvcnQsXFxubmV0L2lwdjQvcmF3LmMtOTc0LX07XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTMzNDc9c3RydWN0IHByb3RvIHRjcF9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzk1LVxcdC5ub19hdXRvYmluZFxcdFxcdD0gdHJ1ZSxcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjMzOTY6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdGNwX2Fib3J0LFxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM5Ny19O1xcbi0tXFxubmV0L2lwdjQvdWRwLmM9MzE0Mz1zdHJ1Y3QgcHJvdG8gdWRwX3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0zMTczLVxcdC5vYmpfc2l6ZVxcdFxcdD0gc2l6ZW9mKHN0cnVjdCB1ZHBfc29jayksXFxubmV0L2lwdjQvdWRwLmM6MzE3NDpcXHQuZGlhZ19kZXN0cm95XFx0XFx0PSB1ZHBfYWJvcnQsXFxubmV0L2lwdjQvdWRwLmMtMzE3NS19O1xcbi0tXFxubmV0L2lwdjYvcmF3LmM9MTIwNz1zdHJ1Y3QgcHJvdG8gcmF3djZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jLTEyMzEtI2VuZGlmXFxubmV0L2lwdjYvcmF3LmM6MTIzMjpcXHQuZGlhZ19kZXN0cm95XFx0ICAgPSByYXdfYWJvcnQsXFxubmV0L2lwdjYvcmF3LmMtMTIzMy19O1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMjc2PXN0cnVjdCBwcm90byB0Y3B2Nl9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzI1LVxcdC5ub19hdXRvYmluZFxcdFxcdD0gdHJ1ZSxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIzMjY6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdGNwX2Fib3J0LFxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMyNy19O1xcbi0tXFxubmV0L2lwdjYvdWRwLmM9MTkwOD1zdHJ1Y3QgcHJvdG8gdWRwdjZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTE5NDAtXFx0LmlwdjZfcGluZm9fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVkcDZfc29jaywgaW5ldDYpLFxcbm5ldC9pcHY2L3VkcC5jOjE5NDE6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdWRwX2Fib3J0LFxcbm5ldC9pcHY2L3VkcC5jLTE5NDItfTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE0Nj12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X2luaXQodm9pZClcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE2Ni1cXHR0Y3BfcHJvdF9vdmVycmlkZS5yZWxlYXNlX2NiID0gdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGU7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoyMTY3OlxcdHRjcF9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjgtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTgwPXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfdjZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMjEzLVxcdHRjcHY2X3Byb3Rfb3ZlcnJpZGUucmVsZWFzZV9jYiA9IHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjIxNDpcXHR0Y3B2Nl9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTUtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MTo0MC40NjM0MDQ2MDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjg1MjY2NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgdGNwX2Fib3J0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgVENQL0lQIHBpY3R1cmUsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgW21lbnRpb24gc29tZXRoaW5nIHNwZWNpZmljIHRvIHlvdXIgZmllbGQsIGUuZy4sIFwidGhlIGFwcGxpY2F0aW9uLWxldmVsIGltcGxpY2F0aW9ucyBmb3IgaGlnaC10aHJvdWdocHV0IGRhdGEgdHJhbnNmZXIsXCIgb3IgXCJ0aGUgcG90ZW50aWFsIGZvciBhYnVzZSBpbiBERG9TIGF0dGFja3NcIl0uICBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgZXJyb3IgaGFuZGxpbmcg4oCTIHdoYXQgc3BlY2lmaWMgc2l0dWF0aW9ucyB0cmlnZ2VyIHRoaXMgYWJvcnQ/IElzIGl0IGluaXRpYXRlZCBieSB0aGUgbG9jYWwgaG9zdCwgdGhlIHJlbW90ZSBob3N0LCBvciBwZXJoYXBzIGEgdGltZW91dD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIGNvbmRpdGlvbnMuXG5cbioqTXkgQW5hbHlzaXMgb2YgYHRjcF9hYm9ydGAqKlxuXG5JIGhhdmUgdG8gY29uc2lkZXIgdGhlIGltbWVkaWF0ZSBpbXBhY3Qgb24gdGhlIGNvbm5lY3Rpb24sIG9mIGNvdXJzZS4gRG9lcyBpdCBncmFjZWZ1bGx5IHNodXQgZG93biB0aGUgY29ubmVjdGlvbiwgYXR0ZW1wdCBzb21lIHNvcnQgb2Ygbm90aWZpY2F0aW9uLCBvciBzaW1wbHkgc2xhbSB0aGUgZG9vcj8gIFRoZSBsZXZlbCBvZiBkZXRhaWwgcmVxdWlyZWQgZm9yIHRoZSByZXNwb25zZSBpcyBjcnVjaWFsLCBhcyB0aGlzIGRpY3RhdGVzIHJlY292ZXJ5IHN0cmF0ZWd5LCBzbyBJIG5lZWQgdG8ga25vdyBob3cgaXQgaW5mb3JtcyB0aGUgYXBwbGljYXRpb24uIEFyZSB0aGVyZSBhbnkgcmVzb3VyY2UgY2xlYW51cCByb3V0aW5lcyBpbiB0aGlzIGFib3J0IHByb2Nlc3M/ICBJdCdzIGNyaXRpY2FsIHRvIGF2b2lkIHJlc291cmNlIGxlYWtzLiBBbHNvLCB3aGF0IGlzIHRoZSBpbXBhY3Qgb24gdGhlIHJlY2VpdmluZyBlbmQ/XG5cbkZ1cnRoZXJtb3JlLCBJIGhhdmUgdG8gbWVudGFsbHkgbW9kZWwgaG93IHRoaXMgd29ya3Mgd2l0aCBleGlzdGluZyBjb2RlYmFzZXMuIEkgaW1tZWRpYXRlbHkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgaG93IGl0IGJlaGF2ZXMgaW4gcHJhY3RpY2UuIENvdWxkIHRoaXMgaGF2ZSBwb3RlbnRpYWwgcHJvYmxlbXM/IERvZXMgdGhpcyBpbnRyb2R1Y2UgbGF0ZW5jeT8gSXMgaXQgZWZmaWNpZW50LCBvciBjYW4gd2UgcmVmYWN0b3IgZm9yIGJldHRlciBlZmZpY2llbmN5PyBJcyB0aGVyZSBhbnkgY2hhbmNlIG9mIGRhdGEgY29ycnVwdGlvbiBvciBsb3N0IGRhdGE/IEhvdyBkb2VzIHRoaXMgd29yayB3aXRoIG90aGVyIGZ1bmN0aW9ucz9cblxuXG4iLCJJbnB1dFRva2VucyI6NzY1NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQxOjQzLjE0ODY3NDExMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTE0OTM2NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCB0Y3BfYWJvcnRcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD0xNzA0PXZvaWQgdGNwX2RvbmUoc3RydWN0IHNvY2sgKnNrKTtcXG5pbmNsdWRlL25ldC90Y3AuaDoxNzA1OmludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKTtcXG5pbmNsdWRlL25ldC90Y3AuaC0xNzA2LVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9NTA4OT12b2lkIHRjcF9kb25lKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTUxMTQtXFxubmV0L2lwdjQvdGNwLmM6NTExNTppbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcXG5uZXQvaXB2NC90Y3AuYy01MTE2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDE6NDUuNjYzNjE2NzE2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgxMzc3MTMyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUQ1AgU3RhY2sqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgYSBzcGVjaWZpYyBiZWhhdmlvciBpbiB0aGUgTGludXggVENQIGltcGxlbWVudGF0aW9uLCBzbyBsZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBuZXQvaXB2NC90Y3AuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1MTE1LiBJIGtub3cgdGhpcyBhcmVhIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSB0b3BpYyBJJ20gaW52ZXN0aWdhdGluZywgYnV0IEkgbmVlZCB0byBnZXQgdG8gdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoYXQncyBiZWluZyBkb25lLiBGcm9tIGhlcmUgSSBjYW4gZXh0cmFwb2xhdGUgd2hhdCdzIGNhdXNpbmcgdGhlIHByb2JsZW0uIEknbGwgbmVlZCB0byBnbyBkZWVwZXIgYWZ0ZXIgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEzNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQxOjQ3LjQ3NzM5MDc2MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzYxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTExNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTExNTpcXHRpbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcXG41MTE2OlxcdHtcXG41MTE3OlxcdFxcdGludCBzdGF0ZSA9IGluZXRfc2tfc3RhdGVfbG9hZChzayk7XFxuNTExODpcXHRcXG41MTE5OlxcdFxcdGlmIChzdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKSB7XFxuNTEyMDpcXHRcXHRcXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEgPSBpbmV0X3JlcXNrKHNrKTtcXG41MTIxOlxcdFxcbjUxMjI6XFx0XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbjUxMjM6XFx0XFx0XFx0aW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChyZXEtXFx1MDAzZXJza19saXN0ZW5lciwgcmVxKTtcXG41MTI0OlxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbjUxMjU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTEyNjpcXHRcXHR9XFxuNTEyNzpcXHRcXHRpZiAoc3RhdGUgPT0gVENQX1RJTUVfV0FJVCkge1xcbjUxMjg6XFx0XFx0XFx0c3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBpbmV0X3R3c2soc2spO1xcbjUxMjk6XFx0XFxuNTEzMDpcXHRcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNnR3LVxcdTAwM2V0d19yZWZjbnQpO1xcbjUxMzE6XFx0XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbjUxMzI6XFx0XFx0XFx0aW5ldF90d3NrX2Rlc2NoZWR1bGVfcHV0KHR3KTtcXG41MTMzOlxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbjUxMzQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTEzNTpcXHRcXHR9XFxuNTEzNjpcXHRcXG41MTM3OlxcdFxcdC8qIEJQRiBjb250ZXh0IGVuc3VyZXMgc29jayBsb2NraW5nLiAqL1xcbjUxMzg6XFx0XFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXFxuNTEzOTpcXHRcXHRcXHQvKiBEb24ndCByYWNlIHdpdGggdXNlcnNwYWNlIHNvY2tldCBjbG9zZXMgc3VjaCBhcyB0Y3BfY2xvc2UuICovXFxuNTE0MDpcXHRcXHRcXHRsb2NrX3NvY2soc2spO1xcbjUxNDE6XFx0XFxuNTE0MjpcXHRcXHQvKiBBdm9pZCBjbG9zaW5nIHRoZSBzYW1lIHNvY2tldCB0d2ljZS4gKi9cXG41MTQzOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XFxuNTE0NDpcXHRcXHRcXHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcXG41MTQ1OlxcdFxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuNTE0NjpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG41MTQ3OlxcdFxcdH1cXG41MTQ4OlxcdFxcbjUxNDk6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOKSB7XFxuNTE1MDpcXHRcXHRcXHR0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xcbjUxNTE6XFx0XFx0XFx0aW5ldF9jc2tfbGlzdGVuX3N0b3Aoc2spO1xcbjUxNTI6XFx0XFx0fVxcbjUxNTM6XFx0XFxuNTE1NDpcXHRcXHQvKiBEb24ndCByYWNlIHdpdGggQkggc29ja2V0IGNsb3NlcyBzdWNoIGFzIGluZXRfY3NrX2xpc3Rlbl9zdG9wLiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MTo0Ny40Nzc2MzExMDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE3MDg5ODA4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBicGZfc29ja19kZXN0cm95YCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBicGZfc29ja19kZXN0cm95YCBhbmQgaW1tZWRpYXRlbHkgYSBmZXcgdGhpbmdzIGp1bXAgb3V0LiBUaGUgY29kZSdzIG5vdyBoYW5kbGluZyBgVENQX05FV19TWU5fUkVDVmAgYW5kIGBUQ1BfVElNRV9XQUlUYCBzdGF0ZXMgc3BlY2lmaWNhbGx5LCB3aGljaCBpcyBzbWFydC4gUHJldmlvdXNseSwgdGhlIGBicGZfc29ja19kZXN0cm95YCBmdW5jdGlvbiBoYWQgdGhpcyBjaGVjazpcblxuYGBgY1xuaWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSB8fCAoc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG5cdFx0XHRcdCAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKSlcblx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuYGBgXG5cblRoZSBpc3N1ZSBoZXJlLCBhbmQgdGhlIGNydXggb2YgdGhpcyBwYXRjaCwgaXMgdGhhdCBmb3Igbm9uLWZ1bGwgc29ja2V0cywgbGlrZSB0aG9zZSBpbiBgVENQX1RJTUVfV0FJVGAgb3IgYFRDUF9ORVdfU1lOX1JFQ1ZgLCBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIHdhcyBiZWluZyByZWFkIGZyb20gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBvciBub24tcHJvdG9jb2wgbWVtb3J5LiBUaGF0J3MgYSBjbGFzc2ljIHJlY2lwZSBmb3IgcHJvYmxlbXMsIGxlYWRpbmcgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBvciBvdXRyaWdodCBmYWlsdXJlcywgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBgcmVxdWVzdF9zb2NrYCBvciBgdGltZXdhaXRfc29ja2AuXG5cbldpdGggdGhpcyBwYXRjaCwgdGhlIGNoZWNrIG9uIGBzay1cdTAwM2Vza19wcm90b2NvbGAgaXMgb25seSBwZXJmb3JtZWQgaWYgYHNrX2Z1bGxzb2NrKHNrKWAgaXMgdHJ1ZS4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnQuIEl0IG1lYW5zIHdlIGNhbiBub3cgY2FsbCBgc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRClgIG9uIHRoZXNlIG5vbi1mdWxsIHNvY2tldHMuXG5cbkNydWNpYWxseSwgdGhpcyBjaGFuZ2UgaXMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYnBmX3NvY2tfZGVzdHJveWAuIFRoaXMgaXMgYSBCUEYga2Z1bmMsIHdoaWNoIG1lYW5zIGl0J3MgZXhwb3NlZCB0byBCUEYgaXRlcmF0b3JzLCBsaWtlIHRoZSBvbmVzIHVzZWQgd2l0aCBgaXRlci90Y3BgLiBUaGlzIGlzICpyZWFjaGFibGUqIGtlcm5lbCBjb2RlIGZyb20gQlBGIGFuZCBjb3JlIG5ldHdvcmtpbmcsIHdoaWNoIGlzIGEgbWFqb3IgcG9pbnQgdG8gY29uc2lkZXIuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBzaG91bGQgdGhpcyBiZSBmdXp6ZWQ/IEFic29sdXRlbHkhIFRoaXMgb3BlbnMgdGhlIGRvb3IgZm9yIEJQRiBwcm9ncmFtcyB0byBkZXN0cm95IHRpbWV3YWl0L3JlcXVlc3Qgc29ja2V0cyB2aWEgYGJwZl9zb2NrX2Rlc3Ryb3koc2tfY29tbW9uKWAuIFRoaXMgaXMgbm93IHJlYWNoYWJsZSB0aHJvdWdoIEJQRiBpdGVyYXRvcnMsIHNwZWNpZmljYWxseSB3aGVuIGBCUEZfVFJBQ0VfSVRFUmAgaXMgdXNlZCwgc3VjaCBhcyB3aXRoIGl0ZXIvdGNwIGFuZCBpdGVyL3VkcC5cblxuTGV0IG1lIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBmb3IgYGJwZl9zb2NrX2Rlc3Ryb3lgIGFuZCB0aGUgQlBGIGl0ZXJhdG9ycyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCBqdXN0IHRvIGJlIGNlcnRhaW4uIEknbGwgYWxzbyBzZWUgd2hlcmUgdGhlIGBicGZfc2tfaXRlcl9rZnVuY19pZHNgIGFuZCBgYnBmX3NvY2tfZGVzdHJveWAgZnVuY3Rpb25zIGFyZSByZWdpc3RlcmVkLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSBhbmQgd2hlcmUgaXQgY2FuIGJlIGFwcGxpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MzAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MTo1MS42NDg1MzM5NTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTM3MzkzNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyOTQwPV9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NDEtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NDI6QlRGX0tGVU5DU19TVEFSVChicGZfc2tfaXRlcl9rZnVuY19pZHMpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NDMtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zb2NrX2Rlc3Ryb3kpXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NDQ6QlRGX0tGVU5DU19FTkQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQ1LVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTQ2PXN0YXRpYyBpbnQgdHJhY2luZ19pdGVyX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0Ny17XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NDg6XFx0aWYgKGJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFxcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19pZHMsIGtmdW5jX2lkKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQ5LVxcdCAgICBwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfSVRFUilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfc2tfaXRlcl9rZnVuY19zZXQgPSB7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NTUtXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NTY6XFx0LnNldCAgID0gXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcyxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk1Ny1cXHQuZmlsdGVyID0gdHJhY2luZ19pdGVyX2ZpbHRlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDE6NTMuMjYyMjc4NDg0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzOTM0MTIwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGVCUEYgYW5kIE5ldHdvcmsgRmlsdGVyaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGJwZl9za19pdGVyX2tmdW5jX3NldGAsIHNwZWNpZmljYWxseSB3aGVyZSBpdCdzICp1c2VkKiB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIG5ldHdvcmsgZmlsdGVyaW5nIGNvbnRleHQuIEknbSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gc29tZSBhc3BlY3Qgb2Ygc29ja2V0LWxldmVsIGZpbHRlcmluZyBvciBpdGVyYXRpb24sIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBzb2NrZXRzIG9yIG5ldHdvcmsgbmFtZXNwYWNlcy4gSSB3YW50IHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIGNhbGxpbmcgY29udGV4dCwgaG93IHRoZSBwYXJhbWV0ZXJzIGFyZSBiZWluZyB1c2VkLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhdHRhY2hpbmcgcHJvZ3JhbXMsIHNldHRpbmcgdXAgaXRlcmF0b3JzLCBhcHBseWluZyBmaWx0ZXJzLCBtYW5pcHVsYXRpbmcgc29ja2V0IG9wdGlvbnMsIG9yIHdoYXQ/IFRoZSBnb2FsIGlzIHRvIHBpZWNlIHRvZ2V0aGVyIGl0cyBmdW5jdGlvbmFsaXR5IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIFRoaXMgaW52ZXN0aWdhdGlvbiBzaG91bGQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gaG93IHRoZSBrZXJuZWwgdXNlcyB0aGlzIG1lY2hhbmlzbSBmb3IgbmV0d29yayB0cmFmZmljIG1hbmFnZW1lbnQgYW5kIGZpbHRlcmluZyBhdCBhIGxvd2VyIGxldmVsLiBNeSBob3BlIGlzIHRoaXMgd2lsbCByZXZlYWwgbmV3IGFzcGVjdHMgZm9yIG9wdGltaXphdGlvbiBvciBwb3NzaWJseSB2dWxuZXJhYmlsaXR5IGRldGVjdGlvbiBpbiBteSBhcmVhIG9mIGV4cGVydGlzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNzEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MTo1NS42NTU2OTMxODhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDgxMzQ1NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NrX2l0ZXJfa2Z1bmNfc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyOTQ2PXN0YXRpYyBpbnQgdHJhY2luZ19pdGVyX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTUzLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTU0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfc2tfaXRlcl9rZnVuY19zZXQgPSB7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NTUtXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjk2MD1zdGF0aWMgaW50IGluaXRfc3Vic3lzdGVtKHZvaWQpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NjEte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTYyOlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX3NldCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NjMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MTo1Ny4yNjM4MzI2MTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzMyNTI2MTkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgYGlmZGVmYCBibG9ja3MgYXJvdW5kIGxpbmVzIDEyOTAwLTEyOTcwIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuXG5cbioqRGl2aW5nIGludG8gdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIGBuZXQvY29yZS9maWx0ZXIuY2AqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDEyOTAwIHRocm91Z2ggMTI5NzAgb2YgYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGJlaW5nIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaGVyZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gZGVhbHMgd2l0aCBzb21lIHNwZWNpZmljIGZlYXR1cmUsIGhhcmR3YXJlLCBvciBwZXJoYXBzIGFuIG9wdGltaXphdGlvbiB0aGF0IGlzbid0IHVuaXZlcnNhbGx5IGFwcGxpY2FibGUuIEkgc3VzcGVjdCBpdCByZWxhdGVzIHRvIHBhY2tldCBmaWx0ZXJpbmcsIGxpa2VseSBpbnZvbHZpbmcgc29tZSBzcGVjaWZpYyBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGxvZ2ljIG9yIGludGVyYWN0aW9uIHdpdGggYSBwYXJ0aWN1bGFyIE5JQyAoTmV0d29yayBJbnRlcmZhY2UgQ29udHJvbGxlcikgb3IgaGFyZHdhcmUgYWNjZWxlcmF0b3IuIFRoZSB1c2Ugb2YgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgaXMgYSBkZWFkIGdpdmVhd2F5IHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCBvcHRpb25hbCwgY29uZmlndXJhYmxlIGNvZGUgcGF0aHMuXG5cbkknbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IHRoZSBjb25kaXRpb25zIHdpdGhpbiB0aGUgYCNpZmRlZmAgYmxvY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRlZmluZXMgYXJlIGJlaW5nIGNoZWNrZWQg4oCTIHdoYXQgKmZlYXR1cmUgZmxhZ3MqIGFyZSBjb250cm9sbGluZyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgY29kZT8gS25vd2luZyB0aGF0IHdpbGwgdGVsbCBtZSB3aHkgdGhpcyBjb2RlIGlzbid0IGFsd2F5cyBhY3RpdmUgYW5kIHdoaWNoIHBhcnRzIG9mIHRoZSBrZXJuZWwgY29uZmlnIHdvdWxkIGVuYWJsZSBpdC4gQXJlIHRoZXNlIHJlbGF0ZWQgdG8gaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCBrZXJuZWwgZmVhdHVyZXMsIG9yIHBlcmhhcHMgZXZlbiB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3M/IEl0IGNvdWxkIGJlIHNvbWV0aGluZyBsaWtlIHN1cHBvcnQgZm9yIGEgcGFydGljdWxhciBCUEYgaW5zdHJ1Y3Rpb24gc2V0IG9yIGFuIG9wdGltaXphdGlvbiB0aGF0IHJlbGllcyBvbiBhIHNwZWNpZmljIE5JQ+KAmXMgY2FwYWJpbGl0aWVzLiBJ4oCZbSBwcmVwYXJlZCB0byBmaW5kIHRoYXQgdGhpcyBjb3VsZCBiZSByZWxhdGVkIHRvIHNvbWUgb2JzY3VyZSBoYXJkd2FyZSBzdXBwb3J0LCBvciBzcGVjaWZpYyBwYWNrZXQgbWFuaXB1bGF0aW9uLlxuXG5JJ2xsIGFsc28ga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgY29tbWVudHMgaW4gdGhpcyBzZWN0aW9uLiBUaG9zZSBjb3VsZCBvZmZlciB2YWx1YWJsZSBjbHVlcyB0byBleHBsYWluIHdoeSB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIG5lY2Vzc2FyeSBhbmQgaG93IHRoaXMgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZmlsdGVyaW5nIGVuZ2luZS4gTXkgZ29hbCBpcyB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBzY2VuYXJpb3MgaW4gd2hpY2ggdGhpcyBwYXJ0aWN1bGFyIGNvZGUgaXMgYmVpbmcgdXRpbGl6ZWQsIGFzIHdlbGwgYXMgdGhlIGRlc2lnbiBjb25zaWRlcmF0aW9ucyB0aGF0IG1hZGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gdGhlIHJpZ2h0IGFwcHJvYWNoIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODcxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6MDAuNTg5MDk3MTc0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjkwMCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5MDA6XFx0XFxuMTI5MDE6XFx0X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbjEyOTAyOlxcdFxcbjEyOTAzOlxcdC8qIGJwZl9zb2NrX2Rlc3Ryb3k6IERlc3Ryb3kgdGhlIGdpdmVuIHNvY2tldCB3aXRoIEVDT05OQUJPUlRFRCBlcnJvciBjb2RlLlxcbjEyOTA0OlxcdCAqXFxuMTI5MDU6XFx0ICogVGhlIGZ1bmN0aW9uIGV4cGVjdHMgYSBub24tTlVMTCBwb2ludGVyIHRvIGEgc29ja2V0LCBhbmQgaW52b2tlcyB0aGVcXG4xMjkwNjpcXHQgKiBwcm90b2NvbCBzcGVjaWZpYyBzb2NrZXQgZGVzdHJveSBoYW5kbGVycy5cXG4xMjkwNzpcXHQgKlxcbjEyOTA4OlxcdCAqIFRoZSBoZWxwZXIgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gQlBGIGNvbnRleHRzIHRoYXQgaGF2ZSBhY3F1aXJlZCB0aGUgc29ja2V0XFxuMTI5MDk6XFx0ICogbG9ja3MuXFxuMTI5MTA6XFx0ICpcXG4xMjkxMTpcXHQgKiBQYXJhbWV0ZXJzOlxcbjEyOTEyOlxcdCAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWRcXG4xMjkxMzpcXHQgKlxcbjEyOTE0OlxcdCAqIFJldHVybjpcXG4xMjkxNTpcXHQgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBvciB3aGF0ZXZlciB0aGUgcHJvdG9jb2wgc3BlY2lmaWNcXG4xMjkxNjpcXHQgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cXG4xMjkxNzpcXHQgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxcbjEyOTE4OlxcdCAqIDAgb3RoZXJ3aXNlXFxuMTI5MTk6XFx0ICovXFxuMTI5MjA6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxcbjEyOTIxOlxcdHtcXG4xMjkyMjpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilzb2NrO1xcbjEyOTIzOlxcdFxcbjEyOTI0OlxcdFxcdC8qIFRoZSBsb2NraW5nIHNlbWFudGljcyB0aGF0IGFsbG93IGZvciBzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgdGhlXFxuMTI5MjU6XFx0XFx0ICogZGVzdHJveSBoYW5kbGVycyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIFRDUCBhbmQgVURQLlxcbjEyOTI2OlxcdFxcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcXG4xMjkyNzpcXHRcXHQgKiBwcmlvciB0byBpbnZva2luZyB0aGlzIGtmdW5jLlxcbjEyOTI4OlxcdFxcdCAqL1xcbjEyOTI5OlxcdFxcdGlmICghc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveSlcXG4xMjkzMDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTI5MzE6XFx0XFxuMTI5MzI6XFx0XFx0aWYgKHNrX2Z1bGxzb2NrKHNrKSBcXHUwMDI2XFx1MDAyNlxcbjEyOTMzOlxcdFxcdCAgICBzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjZcXG4xMjkzNDpcXHRcXHQgICAgc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxcbjEyOTM1OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMjkzNjpcXHRcXG4xMjkzNzpcXHRcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG4xMjkzODpcXHR9XFxuMTI5Mzk6XFx0XFxuMTI5NDA6XFx0X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG4xMjk0MTpcXHRcXG4xMjk0MjpcXHRCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcXG4xMjk0MzpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlcXG4xMjk0NDpcXHRCVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXFxuMTI5NDU6XFx0XFxuMTI5NDY6XFx0c3RhdGljIGludCB0cmFjaW5nX2l0ZXJfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbjEyOTQ3OlxcdHtcXG4xMjk0ODpcXHRcXHRpZiAoYnRmX2lkX3NldDhfY29udGFpbnMoXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcywga2Z1bmNfaWQpIFxcdTAwMjZcXHUwMDI2XFxuMTI5NDk6XFx0XFx0ICAgIHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9JVEVSKVxcbjEyOTUwOlxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbjEyOTUxOlxcdFxcdHJldHVybiAwO1xcbjEyOTUyOlxcdH1cXG4xMjk1MzpcXHRcXG4xMjk1NDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX3NrX2l0ZXJfa2Z1bmNfc2V0ID0ge1xcbjEyOTU1OlxcdFxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbjEyOTU2OlxcdFxcdC5zZXQgICA9IFxcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19pZHMsXFxuMTI5NTc6XFx0XFx0LmZpbHRlciA9IHRyYWNpbmdfaXRlcl9maWx0ZXIsXFxuMTI5NTg6XFx0fTtcXG4xMjk1OTpcXHRcXG4xMjk2MDpcXHRzdGF0aWMgaW50IGluaXRfc3Vic3lzdGVtKHZvaWQpXFxuMTI5NjE6XFx0e1xcbjEyOTYyOlxcdFxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX3NldCk7XFxuMTI5NjM6XFx0fVxcbjEyOTY0OlxcdGxhdGVfaW5pdGNhbGwoaW5pdF9zdWJzeXN0ZW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjowMC41ODk1MjkzNTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE0MTQwNjI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIEZpbHRlciBDb21waWxhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgY29tcGlsYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgbmV0L2NvcmUvZmlsdGVyLmNgLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgc3VzcGVjdCB0aGUgY3J1Y2lhbCBpbmZvcm1hdGlvbiB3aWxsIGJlIGZvdW5kIGluIGVpdGhlciBgbmV0L2NvcmUvTWFrZWZpbGVgIG9yIHBlcmhhcHMgdGhlIGBLY29uZmlnYCBmaWxlcyB3aXRoaW4gdGhlIGBuZXQvY29yZWAgZGlyZWN0b3J5LiBNeSBhaW0gaXMgdG8gZGV0ZXJtaW5lIHVuZGVyIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBgbmV0L2NvcmUvZmlsdGVyLmNgIGlzIGNvbXBpbGVkLiBJdCdzIGhpZ2hseSBsaWtlbHkgdGhhdCB1bmRlcnN0YW5kaW5nIHRoZSBgQ09ORklHX2AgZmxhZ3MgaXMga2V5IGhlcmUuIEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGluZ3MgbGlrZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBvciB0aGUgYnJvYWRlciBgQ09ORklHX05FVGAgYXJlIHJlcXVpcmVkIG9yIGluZmx1ZW5jZSB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgZmlsdGVyIGNvZGUuIEtub3dpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGFuZCB3aGVuIHRoaXMgbW9kdWxlIGdldHMgYnVpbHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDMyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjowMi43MzA5Mzg3MjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4ODEzMjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbHRlclxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtODctICpcXG5uZXQvY29yZS9wa3RnZW4uYzo4ODogKiBSZW1vdmUgaWYgZml4IGZyb20gYWRkZWQgSGFyYWxkIFdlbHRlIFxcdTAwM2NsYWZvcmdlQG5ldGZpbHRlci5vcmdcXHUwMDNlIDA0MDQxOVxcbm5ldC9jb3JlL3BrdGdlbi5jLTg5LSAqIGlhNjQgY29tcGlsYXRpb24gZml4IGZyb20gIEFyb24gR3JpZmZpcyBcXHUwMDNjYXJvbkBocC5jb21cXHUwMDNlIDA0MDYwNFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjowMi43ODk3NTcxMTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxNTQwOTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jeSBvZiBCUEYgU3lzY2FsbCBTdXBwb3J0KipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3Iga2Z1bmNzIG9yLCBtb3JlIHNwZWNpZmljYWxseSwgZm9yIHRoZSByZWdpc3RyYXRpb24gb2YgQlRGIGtmdW5jIElEIHNldHMgdGhyb3VnaCBgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldGAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayBmb3IgYW55IGRpcmVjdCBkZXBlbmRlbmNpZXMgb3IgY29kZSBwYXRocy4gTGV0J3MgZmlyZSB1cCBhIGBncmVwYCBhbmQgc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlIGZvciBpbnN0YW5jZXMgb2YgYHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXRgLiBUaGF0IHNob3VsZCBxdWlja2x5IHJldmVhbCBhbnkgZGlyZWN0IHJlbGF0aW9uc2hpcHMgYW5kIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhhdCBjb25maWcgb3B0aW9uIGZhY3RvcnMgaW50byBpdHMgZXhpc3RlbmNlIG9yIGJlaGF2aW9yLiBJdCdzIGEgZnVuZGFtZW50YWwgc3RlcDsgSSBjYW4ndCBzdGFydCBvcHRpbWl6aW5nIG9yIGludGVncmF0aW5nIHVudGlsIEknbSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlc2UgYmFzZSBkZXBlbmRlbmNpZXMuIExldCdzIHNlZSB3aGF0IHRoZSBncmVwIHNlYXJjaCB0dXJucyB1cCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTI4OTAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjowNS4xMDUxNzI0OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NzU3NjQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3Q9NDk0PXR5cGUuIEFuIGV4YW1wbGUgaXMgc2hvd24gYmVsb3c6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdC01MDctICAgICAgICB7XFxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdDo1MDg6ICAgICAgICAgICAgICAgIHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXFx1MDAyNmJwZl90YXNrX2tmdW5jX3NldCk7XFxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdC01MDktICAgICAgICB9XFxuLS1cXG5kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmM9MTIyNz1zdGF0aWMgdm9pZCBfX2luaXQgd2FrZXVwX3NvdXJjZXNfYnBmX2luaXQodm9pZClcXG5kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmMtMTIyOC17XFxuZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jOjEyMjk6XFx0aWYgKHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLCBcXHUwMDI2d2FrZXVwX3NvdXJjZV9rZnVuY19zZXQpKVxcbmRyaXZlcnMvYmFzZS9wb3dlci93YWtldXAuYy0xMjMwLVxcdFxcdHBtX3ByX2RiZyhcXFwiV2FrZXVwOiBmYWlsZWQgdG8gcmVnaXN0ZXIgQlRGIGtmdW5jc1xcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL2hpZC9icGYvaGlkX2JwZl9kaXNwYXRjaC5jPTY1OD1zdGF0aWMgaW50IF9faW5pdCBoaWRfYnBmX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmMtNjY3LVxcbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmM6NjY4OlxcdGVyciA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2aGlkX2JwZl9rZnVuY19zZXQpO1xcbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmMtNjY5LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmMtNjczLVxcbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmM6Njc0OlxcdGVyciA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLCBcXHUwMDI2aGlkX2JwZl9zeXNjYWxsX2tmdW5jX3NldCk7XFxuZHJpdmVycy9oaWQvYnBmL2hpZF9icGZfZGlzcGF0Y2guYy02NzUtXFx0aWYgKGVycikge1xcbi0tXFxuZnMvYmluZm10X21pc2NfYnBmLmM9MzIxPXN0YXRpYyBpbnQgYm1fYnBmX2luaXQoc3RydWN0IGJ0ZiAqYnRmKVxcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTMyMi17XFxuZnMvYmluZm10X21pc2NfYnBmLmM6MzIzOlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyxcXG5mcy9iaW5mbXRfbWlzY19icGYuYy0zMjQtXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZibV9icGZfa2Z1bmNfc2V0KTtcXG4tLVxcbmZzL2JwZl9mc19rZnVuY3MuYz00OTI9c3RhdGljIGludCBfX2luaXQgYnBmX2ZzX2tmdW5jc19pbml0KHZvaWQpXFxuLS1cXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDk1LVxcbmZzL2JwZl9mc19rZnVuY3MuYzo0OTY6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xTTSwgXFx1MDAyNmJwZl9mc19rZnVuY19zZXQpO1xcbmZzL2JwZl9mc19rZnVuY3MuYy00OTctXFx0aWYgKHJldCB8fCAhSVNfRU5BQkxFRChDT05GSUdfQklORk1UX01JU0NfQlBGKSlcXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDk4LVxcdFxcdHJldHVybiByZXQ7XFxuZnMvYnBmX2ZzX2tmdW5jcy5jOjQ5OTpcXHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXFxuZnMvYnBmX2ZzX2tmdW5jcy5jLTUwMC1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmJwZl9mc19rZnVuY19zZXQpO1xcbi0tXFxuZnMvdmVyaXR5L21lYXN1cmUuYz0xODY9dm9pZCBfX2luaXQgZnN2ZXJpdHlfaW5pdF9icGYodm9pZClcXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTE4Ny17XFxuZnMvdmVyaXR5L21lYXN1cmUuYzoxODg6XFx0cmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xTTSwgXFx1MDAyNmJwZl9mc3Zlcml0eV9zZXQpO1xcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTg5LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvYnRmLmg9NTg3PXUzMiAqYnRmX2tmdW5jX2lzX21vZGlmeV9yZXR1cm4oY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIga2Z1bmNfYnRmX2lkLFxcbmluY2x1ZGUvbGludXgvYnRmLmgtNTg4LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuaW5jbHVkZS9saW51eC9idGYuaDo1ODk6aW50IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcXG5pbmNsdWRlL2xpbnV4L2J0Zi5oLTU5MC1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCAqcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2J0Zi5oPTY0Nz1zdGF0aWMgaW5saW5lIHUzMiAqYnRmX2tmdW5jX2lkX3NldF9jb250YWlucyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2J0Zi5oLTY1My19XFxuaW5jbHVkZS9saW51eC9idGYuaDo2NTQ6c3RhdGljIGlubGluZSBpbnQgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxcbmluY2x1ZGUvbGludXgvYnRmLmgtNjU1LVxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCAqcylcXG4tLVxcbmlvX3VyaW5nL2JwZi1vcHMuYz0xMjA9c3RhdGljIGludCBicGZfaW9faW5pdChzdHJ1Y3QgYnRmICpidGYpXFxuLS1cXG5pb191cmluZy9icGYtb3BzLmMtMTI5LVxcbmlvX3VyaW5nL2JwZi1vcHMuYzoxMzA6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXFxuaW9fdXJpbmcvYnBmLW9wcy5jLTEzMS1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2YnBmX2lvX3VyaW5nX2tmdW5jX3NldCk7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTEzMT1zdGF0aWMgaW50IF9faW5pdCBrZnVuY19pbml0KHZvaWQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTExMzIte1xcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTMzOlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVU5TUEVDLCBcXHUwMDI2Y29tbW9uX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTExMzQtfVxcbi0tXFxua2VybmVsL2JwZi9idGYuYz04OTAyPXN0YXRpYyBpbnQgYnRmX3BvcHVsYXRlX2tmdW5jX3NldChzdHJ1Y3QgYnRmICpidGYsIGVudW0gYnRmX2tmdW5jX2hvb2sgaG9vayxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODk0OC1cXHRzZXQgPSB0YWItXFx1MDAzZXNldHNbaG9va107XFxua2VybmVsL2JwZi9idGYuYzo4OTQ5OlxcdC8qIFdhcm4gd2hlbiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0IGlzIGNhbGxlZCB0d2ljZSBmb3IgdGhlIHNhbWUgaG9va1xcbmtlcm5lbC9icGYvYnRmLmMtODk1MC1cXHQgKiBmb3IgbW9kdWxlIHNldHMuXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTkxNzM9dTMyICpidGZfa2Z1bmNfaXNfbW9kaWZ5X3JldHVybihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBrZnVuY19idGZfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTkxODEtXFxua2VybmVsL2JwZi9idGYuYzo5MTgyOnN0YXRpYyBpbnQgX19yZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KGVudW0gYnRmX2tmdW5jX2hvb2sgaG9vayxcXG5rZXJuZWwvYnBmL2J0Zi5jLTkxODMtXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0ICprc2V0KVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy05MjA4LS8qIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBpbnZva2VkIG9ubHkgZnJvbSBpbml0Y2FsbHMvbW9kdWxlIGluaXQgZnVuY3Rpb25zICovXFxua2VybmVsL2JwZi9idGYuYzo5MjA5OmludCByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXFxua2VybmVsL2JwZi9idGYuYy05MjEwLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0ICprc2V0KVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy05MjIyLVxcdGhvb2sgPSBicGZfcHJvZ190eXBlX3RvX2tmdW5jX2hvb2socHJvZ190eXBlKTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjkyMjM6XFx0cmV0dXJuIF9fcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChob29rLCBrc2V0KTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTkyMjQtfVxcbmtlcm5lbC9icGYvYnRmLmM6OTIyNTpFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTkyMjYtXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTkyMjg9aW50IHJlZ2lzdGVyX2J0Zl9mbW9kcmV0X2lkX3NldChjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCAqa3NldClcXG5rZXJuZWwvYnBmL2J0Zi5jLTkyMjkte1xcbmtlcm5lbC9icGYvYnRmLmM6OTIzMDpcXHRyZXR1cm4gX19yZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJURl9LRlVOQ19IT09LX0ZNT0RSRVQsIGtzZXQpO1xcbmtlcm5lbC9icGYvYnRmLmMtOTIzMS19XFxuLS1cXG5rZXJuZWwvYnBmL2NwdW1hc2suYz01MTU9c3RhdGljIGludCBfX2luaXQgY3B1bWFza19rZnVuY19pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2NwdW1hc2suYy01MjUtXFx0cmV0ID0gYnBmX21lbV9hbGxvY19pbml0KFxcdTAwMjZicGZfY3B1bWFza19tYSwgc2l6ZW9mKHN0cnVjdCBicGZfY3B1bWFzayksIGZhbHNlKTtcXG5rZXJuZWwvYnBmL2NwdW1hc2suYzo1MjY6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcXHUwMDI2Y3B1bWFza19rZnVuY19zZXQpO1xcbmtlcm5lbC9icGYvY3B1bWFzay5jOjUyNzpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZjcHVtYXNrX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9jcHVtYXNrLmM6NTI4OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXFx1MDAyNmNwdW1hc2tfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2NwdW1hc2suYy01MjktXFx0cmV0dXJuICByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGNwdW1hc2tfZHRvcnMsXFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jPTM3OT1zdGF0aWMgaW50IF9faW5pdCBjcnlwdG9fa2Z1bmNfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYy0zODgtXFxua2VybmVsL2JwZi9jcnlwdG8uYzozODk6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmNyeXB0X2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9jcnlwdG8uYzozOTA6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1QsIFxcdTAwMjZjcnlwdF9rZnVuY19zZXQpO1xcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzkxOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcXHUwMDI2Y3J5cHRfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM5MjpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXFxua2VybmVsL2JwZi9jcnlwdG8uYy0zOTMtXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjcnlwdF9pbml0X2tmdW5jX3NldCk7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00OTgyPXN0YXRpYyBpbnQgX19pbml0IGtmdW5jX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5OTctXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDk5ODpcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTk5OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcXHUwMDI2Z2VuZXJpY19rZnVuY19zZXQpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDA6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsIFxcdTAwMjZnZW5lcmljX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NTAwMTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZnZW5lcmljX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NTAwMjpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFxcdTAwMjZnZW5lcmljX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NTAwMzpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFxcdTAwMjZnZW5lcmljX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTAwNC1cXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGdlbmVyaWNfZHRvcnMsXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDA2LVxcdFxcdFxcdFxcdFxcdFxcdCAgVEhJU19NT0RVTEUpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDc6XFx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVU5TUEVDLCBcXHUwMDI2Y29tbW9uX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTAwOC19XFxuLS1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM9MjMwPXN0YXRpYyBpbnQgaW5pdF9zdWJzeXN0ZW0odm9pZClcXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMjMxLXtcXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM6MjMyOlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVU5TUEVDLCBcXHUwMDI2YnBmX21hcF9pdGVyX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9tYXBfaXRlci5jLTIzMy19XFxuLS1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz03NTk9c3RhdGljIF9faW5pdCBpbnQgcnFzcGlubG9ja19yZWdpc3Rlcl9rZnVuY3Modm9pZClcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03NjAte1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjc2MTpcXHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQywgXFx1MDAyNnJxc3BpbmxvY2tfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03NjItfVxcbi0tXFxua2VybmVsL2Nncm91cC9yc3RhdC5jPTc2Nj1zdGF0aWMgaW50IF9faW5pdCBicGZfcnN0YXRfa2Z1bmNfaW5pdCh2b2lkKVxcbmtlcm5lbC9jZ3JvdXAvcnN0YXQuYy03Njcte1xcbmtlcm5lbC9jZ3JvdXAvcnN0YXQuYzo3Njg6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLFxcbmtlcm5lbC9jZ3JvdXAvcnN0YXQuYy03NjktXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZicGZfcnN0YXRfa2Z1bmNfc2V0KTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM9MTE2MD1pbnQgc2N4X2NpZF9rZnVuY19pbml0KHZvaWQpXFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0xMTYxLXtcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjExNjI6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2c2N4X2tmdW5jX3NldF9pbml0X2NpZHMpID86XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoxMTYzOlxcdFxcdHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2c2N4X2tmdW5jX3NldF9jaWQpID86XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoxMTY0OlxcdFxcdHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcXHUwMDI2c2N4X2tmdW5jX3NldF9jaWQpID86XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoxMTY1OlxcdFxcdHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLCBcXHUwMDI2c2N4X2tmdW5jX3NldF9jaWQpO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMTE2Ni19XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwODk4PXN0YXRpYyBpbnQgX19pbml0IHNjeF9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTc2LVxcdCAqIGtmdW5jIHJlZ2lzdHJhdGlvbiBjYW4ndCBiZSBkb25lIGZyb20gaW5pdF9zY2hlZF9leHRfY2xhc3MoKSBhc1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5Nzc6XFx0ICogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldCgpIG5lZWRzIG1vc3Qgb2YgdGhlIHN5c3RlbSB0byBiZSB1cC5cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTc4LVxcdCAqXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTg2LVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5ODc6XFx0aWYgKChyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTg4LVxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnNjeF9rZnVuY19zZXRfZW5xdWV1ZV9kaXNwYXRjaCkpIHx8XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk4OTpcXHQgICAgKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5OTAtXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2c2N4X2tmdW5jX3NldF9kaXNwYXRjaCkpIHx8XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5MTpcXHQgICAgKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5OTItXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2c2N4X2tmdW5jX3NldF9jcHVfcmVsZWFzZSkpIHx8XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5MzpcXHQgICAgKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5OTQtXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2c2N4X2tmdW5jX3NldF91bmxvY2tlZCkpIHx8XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5NTpcXHQgICAgKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5OTYtXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2c2N4X2tmdW5jX3NldF91bmxvY2tlZCkpIHx8XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5NzpcXHQgICAgKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5OTgtXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2c2N4X2tmdW5jX3NldF9hbnkpKSB8fFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5OTk6XFx0ICAgIChyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORyxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTExMDAwLVxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnNjeF9rZnVuY19zZXRfYW55KSkgfHxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDAxOlxcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTAwMi1cXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2FueSkpKSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYz0xNTU0PWludCBzY3hfaWRsZV9pbml0KHZvaWQpXFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmMtMTU1NS17XFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1NjpcXHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2lkbGUpID86XFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1NzpcXHQgICAgICAgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2lkbGUpID86XFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1ODpcXHQgICAgICAgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2lkbGUpID86XFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1OTpcXHQgICAgICAgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X3NlbGVjdF9jcHUpID86XFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU2MDpcXHQgICAgICAgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X3NlbGVjdF9jcHUpO1xcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTE1NjEtfVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM0NTk9c3RhdGljIGludCBfX2luaXQgYnBmX3RyYWNlX2tmdW5jc19pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzQ2Mi1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzQ2MzpcXHRlcnIgPSBlcnIgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0tQUk9CRSwgXFx1MDAyNmJwZl9zZXNzaW9uX2tmdW5jX3NldCk7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM0NjQ6XFx0ZXJyID0gZXJyID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcXHUwMDI2YnBmX3Nlc3Npb25fa2Z1bmNfc2V0KTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzQ2NS1cXG4tLVxcbm1tL2JwZl9tZW1jb250cm9sLmM9MTgyPXN0YXRpYyBpbnQgX19pbml0IGJwZl9tZW1jb250cm9sX2luaXQodm9pZClcXG4tLVxcbm1tL2JwZl9tZW1jb250cm9sLmMtMTg1LVxcbm1tL2JwZl9tZW1jb250cm9sLmM6MTg2OlxcdGVyciA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9VTlNQRUMsXFxubW0vYnBmX21lbWNvbnRyb2wuYy0xODctXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmJwZl9tZW1jb250cm9sX2tmdW5jX3NldCk7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTg4OD1zdGF0aWMgaW50IF9faW5pdCBicGZfcHJvZ190ZXN0X3J1bl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTkwMi1cXHRyZXQgPSByZWdpc3Rlcl9idGZfZm1vZHJldF9pZF9zZXQoXFx1MDAyNmJwZl90ZXN0X21vZGlmeV9yZXR1cm5fc2V0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTkwMzpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9wcm9nX3Rlc3Rfa2Z1bmNfc2V0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTkwNDpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZicGZfcHJvZ190ZXN0X2tmdW5jX3NldCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjE5MDU6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLCBcXHUwMDI2YnBmX3Byb2dfdGVzdF9rZnVuY19zZXQpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xOTA2LVxcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGJwZl9wcm9nX3Rlc3RfZHRvcl9rZnVuYyxcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jPTMwNz1zdGF0aWMgaW50IF9faW5pdCBicGZfa3NvY2tfa2Z1bmNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzE2LVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMxNzpcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcXG5uZXQvY29yZS9icGZfa3NvY2suYy0zMTgtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmtzb2NrX2luaXRfa2Z1bmNfc2V0KTtcXG5uZXQvY29yZS9icGZfa3NvY2suYzozMTk6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMyMC1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmtzb2NrX2tmdW5jX3NldCk7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MzIxOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLFxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMyMi1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmtzb2NrX2tmdW5jX3NldCk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjg3NT1zdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI4NzgtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4Nzk6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4MDpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4MTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NLX1NLQiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4MjpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODM6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODg0OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX09VVCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4NTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9JTiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4NjpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODg3OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4ODpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX05FVEZJTFRFUiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4OTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTA6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYl9tZXRhKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5MTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiX21ldGEpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODkyOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcXHUwMDI2YnBmX2tmdW5jX3NldF94ZHApO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODkzOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg5NC1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19hZGRyKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5NTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfdGNwX3JlcXNrKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5NjpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTc6XFx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU09DS19PUFMsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NvY2tfb3BzKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg5OC19XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjk2MD1zdGF0aWMgaW50IGluaXRfc3Vic3lzdGVtKHZvaWQpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NjEte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTYyOlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX3NldCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NjMtfVxcbi0tXFxubmV0L2NvcmUveGRwLmM9OTkzPXN0YXRpYyBpbnQgX19pbml0IHhkcF9tZXRhZGF0YV9pbml0KHZvaWQpXFxubmV0L2NvcmUveGRwLmMtOTk0LXtcXG5uZXQvY29yZS94ZHAuYzo5OTU6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsIFxcdTAwMjZ4ZHBfbWV0YWRhdGFfa2Z1bmNfc2V0KTtcXG5uZXQvY29yZS94ZHAuYy05OTYtfVxcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTM0NT1zdGF0aWMgaW50IF9faW5pdCBicGZfdGNwX2NhX2tmdW5jX2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zNDgtXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjM0OTpcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXFx1MDAyNmJwZl90Y3BfY2Ffa2Z1bmNfc2V0KTtcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzUwLVxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9icGZfc3RydWN0X29wcyhcXHUwMDI2YnBmX3RjcF9jb25nZXN0aW9uX29wcywgdGNwX2Nvbmdlc3Rpb25fb3BzKTtcXG4tLVxcbm5ldC9pcHY0L2ZvdV9icGYuYz0xMTM9aW50IHJlZ2lzdGVyX2ZvdV9icGYodm9pZClcXG5uZXQvaXB2NC9mb3VfYnBmLmMtMTE0LXtcXG5uZXQvaXB2NC9mb3VfYnBmLmM6MTE1OlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLFxcbm5ldC9pcHY0L2ZvdV9icGYuYy0xMTYtXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZmb3VfYnBmX2tmdW5jX3NldCk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYmJyLmM9MTE3NT1zdGF0aWMgaW50IF9faW5pdCBiYnJfcmVnaXN0ZXIodm9pZClcXG4tLVxcbm5ldC9pcHY0L3RjcF9iYnIuYy0xMTgwLVxcbm5ldC9pcHY0L3RjcF9iYnIuYzoxMTgxOlxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2dGNwX2Jicl9rZnVuY19zZXQpO1xcbm5ldC9pcHY0L3RjcF9iYnIuYy0xMTgyLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2lwdjQvdGNwX2N1YmljLmM9NTAxPXN0YXRpYyBpbnQgX19pbml0IGN1YmljdGNwX3JlZ2lzdGVyKHZvaWQpXFxuLS1cXG5uZXQvaXB2NC90Y3BfY3ViaWMuYy01MzQtXFxubmV0L2lwdjQvdGNwX2N1YmljLmM6NTM1OlxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2dGNwX2N1YmljX2tmdW5jX3NldCk7XFxubmV0L2lwdjQvdGNwX2N1YmljLmMtNTM2LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2lwdjQvdGNwX2RjdGNwLmM9Mjk0PXN0YXRpYyBpbnQgX19pbml0IGRjdGNwX3JlZ2lzdGVyKHZvaWQpXFxuLS1cXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYy0yOTktXFxubmV0L2lwdjQvdGNwX2RjdGNwLmM6MzAwOlxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2dGNwX2RjdGNwX2tmdW5jX3NldCk7XFxubmV0L2lwdjQvdGNwX2RjdGNwLmMtMzAxLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM9NTQwPWludCByZWdpc3Rlcl9uZl9jb25udHJhY2tfYnBmKHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01NDMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6NTQ0OlxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsIFxcdTAwMjZuZl9jb25udHJhY2tfa2Z1bmNfc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzo1NDU6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFxcdTAwMjZuZl9jb25udHJhY2tfa2Z1bmNfc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01NDYtXFx0aWYgKCFyZXQpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYz0xMTY9aW50IG5mX2Zsb3dfcmVnaXN0ZXJfYnBmKHZvaWQpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTExNy17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jOjExODpcXHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1hEUCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtMTE5LVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bmZfZmxvd19rZnVuY19zZXQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmM9NjY9aW50IHJlZ2lzdGVyX25mX25hdF9icGYodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2JwZi5jLTY5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2JwZi5jOjcwOlxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsXFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmMtNzEtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5mX2JwZl9uYXRfa2Z1bmNfc2V0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2JwZi5jLTc0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2JwZi5jOjc1OlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLFxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2JwZi5jLTc2LVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bmZfYnBmX25hdF9rZnVuY19zZXQpO1xcbi0tXFxubmV0L3NjaGVkL2JwZl9xZGlzYy5jPTQ2MD1zdGF0aWMgaW50IF9faW5pdCBicGZfcWRpc2Nfa2Z1bmNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3NjaGVkL2JwZl9xZGlzYy5jLTQ2OS1cXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmM6NDcwOlxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2YnBmX3FkaXNjX2tmdW5jX3NldCk7XFxubmV0L3NjaGVkL2JwZl9xZGlzYy5jLTQ3MS1cXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKHNrYl9rZnVuY19kdG9ycyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2JwZi5jPTEwNj1pbnQgX19pbml0IHJlZ2lzdGVyX3hmcm1faW50ZXJmYWNlX2JwZih2b2lkKVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2JwZi5jLTEwNy17XFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfYnBmLmM6MTA4OlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLFxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2JwZi5jLTEwOS1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnhmcm1faW50ZXJmYWNlX2tmdW5jX3NldCk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlX2JwZi5jPTEzMD1pbnQgX19pbml0IHJlZ2lzdGVyX3hmcm1fc3RhdGVfYnBmKHZvaWQpXFxubmV0L3hmcm0veGZybV9zdGF0ZV9icGYuYy0xMzEte1xcbm5ldC94ZnJtL3hmcm1fc3RhdGVfYnBmLmM6MTMyOlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLFxcbm5ldC94ZnJtL3hmcm1fc3RhdGVfYnBmLmMtMTMzLVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2eGZybV9zdGF0ZV94ZHBfa2Z1bmNfc2V0KTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3guYz0yNT1zdGF0aWMgaW50IF9faW5pdCBicGZfdGVzdF9tb2RvcmRlcl94X2luaXQodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdF9tb2RvcmRlcl94LmMtMjYte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3guYzoyNzpcXHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdF9tb2RvcmRlcl94LmMtMjgtXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZicGZfdGVzdF9tb2RvcmRlcl94X3NldCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdF9tb2RvcmRlcl95LmM9MjU9c3RhdGljIGludCBfX2luaXQgYnBmX3Rlc3RfbW9kb3JkZXJfeV9pbml0KHZvaWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3RfbW9kb3JkZXJfeS5jLTI2LXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdF9tb2RvcmRlcl95LmM6Mjc6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3RfbW9kb3JkZXJfeS5jLTI4LVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2YnBmX3Rlc3RfbW9kb3JkZXJfeV9zZXQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYz0yMTMwPXN0YXRpYyBpbnQgYnBmX3Rlc3Rtb2RfaW5pdCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYy0yMTQwLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6MjE0MTpcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVU5TUEVDLCBcXHUwMDI2YnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX3NldCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYzoyMTQyOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjIxNDM6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjIxNDQ6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLCBcXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjIxNDU6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jLTIxNDYtXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9mbW9kcmV0X2lkX3NldChcXHUwMDI2YnBmX3Rlc3Rtb2RfdHJhbXBvbGluZV9jb3VudF9mbW9kcmV0X3NldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQyOjA2Ljc2Mjc1NDc4OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDAwOTAzMjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIGZvciBDb25kaXRpb25hbCBDb21waWxhdGlvbiBpbiB0aGUgTmV0d29yayBGaWx0ZXIgQ29kZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBJIG5lZWQgdG8gemVybyBpbiBvbiBob3cgdGhlc2UgYGluaXRfc3Vic3lzdGVtYCBhbmQgYGJwZl9zb2NrX2Rlc3Ryb3lgIGZ1bmN0aW9ucyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIG5ldHdvcmsgZmlsdGVyIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgd2hldGhlciBvciBub3QgdGhlc2UgY2FsbHMgYXJlIHdyYXBwZWQgaW4gYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBsaWtlIGAjaWZkZWZgIGJsb2Nrcy4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgYW5kIGl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaWYgZGlmZmVyZW50IGZlYXR1cmVzIG9yIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGFyZSBhZmZlY3RpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZXNlIGZ1bmN0aW9ucy4gU28sIGxldCdzIHN0YXJ0IGF0IGxpbmUgMTI4NTAgb2YgYG5ldC9jb3JlL2ZpbHRlci5jYCBhbmQgd29yayBteSB3YXkgdGhyb3VnaCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkncmUgaGFuZGxlZCBkaWZmZXJlbnRseSBiYXNlZCBvbiBmbGFncyBvciBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4MTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjowOC43NjM2NjE4MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzk1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI4NTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjg1MDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF94ZHAgPSB7XFxuMTI4NTE6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuMTI4NTI6XFx0XFx0LnNldCA9IFxcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X3hkcCxcXG4xMjg1MzpcXHR9O1xcbjEyODU0OlxcdFxcbjEyODU1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X3NvY2tfYWRkciA9IHtcXG4xMjg1NjpcXHRcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4xMjg1NzpcXHRcXHQuc2V0ID0gXFx1MDAyNmJwZl9rZnVuY19jaGVja19zZXRfc29ja19hZGRyLFxcbjEyODU4OlxcdH07XFxuMTI4NTk6XFx0XFxuMTI4NjA6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfdGNwX3JlcXNrID0ge1xcbjEyODYxOlxcdFxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbjEyODYyOlxcdFxcdC5zZXQgPSBcXHUwMDI2YnBmX2tmdW5jX2NoZWNrX3NldF90Y3BfcmVxc2ssXFxuMTI4NjM6XFx0fTtcXG4xMjg2NDpcXHRcXG4xMjg2NTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9zb2NrX29wcyA9IHtcXG4xMjg2NjpcXHRcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4xMjg2NzpcXHRcXHQuc2V0ID0gXFx1MDAyNmJwZl9rZnVuY19jaGVja19zZXRfc29ja19vcHMsXFxuMTI4Njg6XFx0fTtcXG4xMjg2OTpcXHRcXG4xMjg3MDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9pY21wX3NlbmQgPSB7XFxuMTI4NzE6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuMTI4NzI6XFx0XFx0LnNldCA9IFxcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZCxcXG4xMjg3MzpcXHR9O1xcbjEyODc0OlxcdFxcbjEyODc1OlxcdHN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXFxuMTI4NzY6XFx0e1xcbjEyODc3OlxcdFxcdGludCByZXQ7XFxuMTI4Nzg6XFx0XFxuMTI4Nzk6XFx0XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjg4MDpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjg4MTpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NLX1NLQiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjg4MjpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxuMTI4ODM6XFx0XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbjEyODg0OlxcdFxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX09VVCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjg4NTpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9JTiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjg4NjpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbjEyODg3OlxcdFxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjg4ODpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX05FVEZJTFRFUiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjg4OTpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxuMTI4OTA6XFx0XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYl9tZXRhKTtcXG4xMjg5MTpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiX21ldGEpO1xcbjEyODkyOlxcdFxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcXHUwMDI2YnBmX2tmdW5jX3NldF94ZHApO1xcbjEyODkzOlxcdFxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUixcXG4xMjg5NDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19hZGRyKTtcXG4xMjg5NTpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfdGNwX3JlcXNrKTtcXG4xMjg5NjpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7XFxuMTI4OTc6XFx0XFx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU09DS19PUFMsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NvY2tfb3BzKTtcXG4xMjg5ODpcXHR9XFxuMTI4OTk6XFx0bGF0ZV9pbml0Y2FsbChicGZfa2Z1bmNfaW5pdCk7XFxuMTI5MDA6XFx0XFxuMTI5MDE6XFx0X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbjEyOTAyOlxcdFxcbjEyOTAzOlxcdC8qIGJwZl9zb2NrX2Rlc3Ryb3k6IERlc3Ryb3kgdGhlIGdpdmVuIHNvY2tldCB3aXRoIEVDT05OQUJPUlRFRCBlcnJvciBjb2RlLlxcbjEyOTA0OlxcdCAqXFxuMTI5MDU6XFx0ICogVGhlIGZ1bmN0aW9uIGV4cGVjdHMgYSBub24tTlVMTCBwb2ludGVyIHRvIGEgc29ja2V0LCBhbmQgaW52b2tlcyB0aGVcXG4xMjkwNjpcXHQgKiBwcm90b2NvbCBzcGVjaWZpYyBzb2NrZXQgZGVzdHJveSBoYW5kbGVycy5cXG4xMjkwNzpcXHQgKlxcbjEyOTA4OlxcdCAqIFRoZSBoZWxwZXIgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gQlBGIGNvbnRleHRzIHRoYXQgaGF2ZSBhY3F1aXJlZCB0aGUgc29ja2V0XFxuMTI5MDk6XFx0ICogbG9ja3MuXFxuMTI5MTA6XFx0ICpcXG4xMjkxMTpcXHQgKiBQYXJhbWV0ZXJzOlxcbjEyOTEyOlxcdCAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWRcXG4xMjkxMzpcXHQgKlxcbjEyOTE0OlxcdCAqIFJldHVybjpcXG4xMjkxNTpcXHQgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBvciB3aGF0ZXZlciB0aGUgcHJvdG9jb2wgc3BlY2lmaWNcXG4xMjkxNjpcXHQgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cXG4xMjkxNzpcXHQgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxcbjEyOTE4OlxcdCAqIDAgb3RoZXJ3aXNlXFxuMTI5MTk6XFx0ICovXFxuMTI5MjA6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxcbjEyOTIxOlxcdHtcXG4xMjkyMjpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilzb2NrO1xcbjEyOTIzOlxcdFxcbjEyOTI0OlxcdFxcdC8qIFRoZSBsb2NraW5nIHNlbWFudGljcyB0aGF0IGFsbG93IGZvciBzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgdGhlXFxuMTI5MjU6XFx0XFx0ICogZGVzdHJveSBoYW5kbGVycyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIFRDUCBhbmQgVURQLlxcbjEyOTI2OlxcdFxcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcXG4xMjkyNzpcXHRcXHQgKiBwcmlvciB0byBpbnZva2luZyB0aGlzIGtmdW5jLlxcbjEyOTI4OlxcdFxcdCAqL1xcbjEyOTI5OlxcdFxcdGlmICghc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveSlcXG4xMjkzMDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTI5MzE6XFx0XFxuMTI5MzI6XFx0XFx0aWYgKHNrX2Z1bGxzb2NrKHNrKSBcXHUwMDI2XFx1MDAyNlxcbjEyOTMzOlxcdFxcdCAgICBzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjZcXG4xMjkzNDpcXHRcXHQgICAgc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxcbjEyOTM1OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMjkzNjpcXHRcXG4xMjkzNzpcXHRcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG4xMjkzODpcXHR9XFxuMTI5Mzk6XFx0XFxuMTI5NDA6XFx0X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG4xMjk0MTpcXHRcXG4xMjk0MjpcXHRCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcXG4xMjk0MzpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlcXG4xMjk0NDpcXHRCVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXFxuMTI5NDU6XFx0XFxuMTI5NDY6XFx0c3RhdGljIGludCB0cmFjaW5nX2l0ZXJfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbjEyOTQ3OlxcdHtcXG4xMjk0ODpcXHRcXHRpZiAoYnRmX2lkX3NldDhfY29udGFpbnMoXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcywga2Z1bmNfaWQpIFxcdTAwMjZcXHUwMDI2XFxuMTI5NDk6XFx0XFx0ICAgIHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9JVEVSKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjowOC43NjQwNDI4OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjUzNjkzMDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQlBGIFNvY2sgRGVzdHJ1Y3Rpb24gTWVjaGFuaXNtKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZvciBgYnBmX3NvY2tfZGVzdHJveWAuIEl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgYXZhaWxhYmlsaXR5IGluIHRoZSBrZXJuZWwsIHBhcnRpY3VsYXJseSB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JraW5nIGFuZCBCUEYgc3lzY2FsbHMuIEknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgd2hldGhlciB0aGUgZW50aXJlIGBuZXQvY29yZS9maWx0ZXIuY2AgZmlsZSBpcyBnYXRlZCBiZWhpbmQgc29tZSBjb25kaXRpb25hbCBvciBpZiBgYnBmX3NvY2tfZGVzdHJveWAgaXMgKmFsd2F5cyogYnVpbHQgaWYgYE5FVGAgYW5kIGBCUEZfU1lTQ0FMTGAgYXJlIGJvdGggZW5hYmxlZC4gTXkgaW5zdGluY3QgaXMgdG8gZXhhbWluZSB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYCBmb3IgdGhlIG1vc3QgZGVmaW5pdGl2ZSBhbnN3ZXIuIFRoYXQgc2hvdWxkIGhhdmUgdGhlIGJ1aWxkIHJ1bGVzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgcmVsZXZhbnQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCB3aWxsIGlsbHVtaW5hdGUgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIHRoYXQgZnVuY3Rpb24uIEZyb20gdGhlcmUgSSdsbCBiZSBhYmxlIHRvIHRlbGwgaWYgaXQncyBhbHdheXMgaW5jbHVkZWQgb3Igbm90LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM2OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6MTEuNDE3NzM5ODY0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA3NDU1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWx0ZXJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcXHRcXHQgICAgICs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlxcdFxcdFxcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cXHRcXHRcXHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6MTEuNDY1ODIyMjkxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxMTQ2NTk2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcywgZGlzdGlsbGVkIGludG8gYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBhcyB5b3UgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkcyBzb21lb25lIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgaW5uZXIgd29ya2luZ3M6XG5cbioqQ2hlY2tpbmcgQlBGIGFuZCBCVEYgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBCUEZfU1lTQ0FMTGAgaXMgZGVmaW5lZCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gYERFQlVHX0lORk9fQlRGYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIGxvZ2ljYWwgcGxhY2VzIHRvIGxvb2sgYXJlIGBpbml0L0tjb25maWdgIOKAkyB0aGF0J3Mgd2hlcmUgYSBsb3Qgb2YgdGhlIGluaXRpYWwgZmVhdHVyZXMgYXJlIGRlY2xhcmVkIOKAkyBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AsIHNpbmNlIHdlJ3JlIHNwZWNpZmljYWxseSB0YWxraW5nIGFib3V0IEJQRi4gTGV0J3Mgc3RhcnQgdGhlcmUuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIGluZGVwZW5kZW50bHkgYW5kIGlmIHRoZSBgREVCVUdfSU5GT19CVEZgIGlzIGNvbmRpdGlvbmFsbHkgYWZmZWN0ZWQuXG5cblRoZW4sIHRvIGJlIGVmZmljaWVudCwgaW5zdGVhZCBvZiBtYW51YWxseSBzaWZ0aW5nIHRocm91Z2ggdGhlIGZpbGUsIEknbGwgcXVpY2tseSB1c2UgYGdyZXBgIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIGJvdGggYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgbGluZXMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBhbHNvIHRoZSBicm9hZGVyIGNvZGViYXNlIHRvIHNlZSB3aGF0IGRlcGVuZHMgb24gdGhlbSwgb3Igd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLiBUaGlzIHdpbGwgaG9wZWZ1bGx5IHByb3ZpZGUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlaXIgcmVsYXRpb25zaGlwIGFuZCBlbnN1cmUgdGhlIGRlc2lyZWQgY29uZmlndXJhdGlvbnMgYXJlIHNldC4gVGhpcyBpcyB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IHRvIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTc0MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQyOjE1LjU4MDQ4NzI3NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NjM4ODc3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjoxNy4xNjY4ODIxOTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njc2MDc2MDU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEJURiBhbmQgS2Z1bmNzKipcblxuT2theSwgc28gSSdtIHdvbmRlcmluZyBhYm91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYENPTkZJR19ERUJVR19JTkZPX0JURmAgYW5kIGtlcm5lbCBmdW5jdGlvbnMg4oCTIGFyZSB3ZSB0cnVseSByZWxpYW50IG9uIEJURiBpbmZvcm1hdGlvbiBmb3Iga2Z1bmMgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldGAgdG8gc2VlIGhvdyBpdCdzIGRlZmluZWQgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2J0Zi5oYC4gVW5kZXJzdGFuZGluZyB0aGF0IHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdpbGwgbGlrZWx5IHNoZWQgbGlnaHQgb24gdGhlIGRlcGVuZGVuY3ksIG9yIGxhY2sgdGhlcmVvZiwgb24gdGhlIGRlYnVnIEJURiBkYXRhLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZGl2ZSBpbnRvIHRoZSBjb2RlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjE3NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQyOjIzLjkyNzY0NTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvYnRmLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTg1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTg1OlxcdGludCBidGZfa2Z1bmNfY2hlY2tfZmxhZyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBrZnVuY19idGZfaWQsIHUzMiBmbGFnKTtcXG4gNTg2OlxcdGJvb2wgYnRmX2tmdW5jX2lzX2FsbG93ZWQoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIga2Z1bmNfYnRmX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbiA1ODc6XFx0dTMyICpidGZfa2Z1bmNfaXNfbW9kaWZ5X3JldHVybihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBrZnVuY19idGZfaWQsXFxuIDU4ODpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbiA1ODk6XFx0aW50IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcXG4gNTkwOlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0ICpzKTtcXG4gNTkxOlxcdGludCByZWdpc3Rlcl9idGZfZm1vZHJldF9pZF9zZXQoY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgKmtzZXQpO1xcbiA1OTI6XFx0czMyIGJ0Zl9maW5kX2R0b3Jfa2Z1bmMoc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkKTtcXG4gNTkzOlxcdGludCByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3MoY29uc3Qgc3RydWN0IGJ0Zl9pZF9kdG9yX2tmdW5jICpkdG9ycywgdTMyIGFkZF9jbnQsXFxuIDU5NDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbW9kdWxlICpvd25lcik7XFxuIDU5NTpcXHRzdHJ1Y3QgYnRmX3N0cnVjdF9tZXRhICpidGZfZmluZF9zdHJ1Y3RfbWV0YShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfaWQpO1xcbiA1OTY6XFx0Ym9vbCBidGZfaXNfcHJvamVjdGlvbl9vZihjb25zdCBjaGFyICpwbmFtZSwgY29uc3QgY2hhciAqdG5hbWUpO1xcbiA1OTc6XFx0Ym9vbCBidGZfaXNfcHJvZ19jdHhfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuIDU5ODpcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXFxuIDU5OTpcXHRcXHRcXHRcXHQgICBpbnQgYXJnKTtcXG4gNjAwOlxcdGludCBnZXRfa2Vybl9jdHhfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csIGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUpO1xcbiA2MDE6XFx0Ym9vbCBidGZfdHlwZXNfYXJlX3NhbWUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmMSwgdTMyIGlkMSxcXG4gNjAyOlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBidGYgKmJ0ZjIsIHUzMiBpZDIpO1xcbiA2MDM6XFx0aW50IGJ0Zl9jaGVja19pdGVyX2FyZyhzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuYywgaW50IGFyZ19pZHgpO1xcbiA2MDQ6XFx0XFxuIDYwNTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgYnRmX3R5cGVfaXNfc3RydWN0X3B0cihzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdClcXG4gNjA2OlxcdHtcXG4gNjA3OlxcdFxcdGlmICghYnRmX3R5cGVfaXNfcHRyKHQpKVxcbiA2MDg6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA2MDk6XFx0XFxuIDYxMDpcXHRcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVxcdTAwM2V0eXBlLCBOVUxMKTtcXG4gNjExOlxcdFxcbiA2MTI6XFx0XFx0cmV0dXJuIGJ0Zl90eXBlX2lzX3N0cnVjdCh0KTtcXG4gNjEzOlxcdH1cXG4gNjE0OlxcdCNlbHNlXFxuIDYxNTpcXHRzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYnRmX3R5cGVfYnlfaWQoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbiA2MTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHUzMiB0eXBlX2lkKVxcbiA2MTc6XFx0e1xcbiA2MTg6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDYxOTpcXHR9XFxuIDYyMDpcXHRcXG4gNjIxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBidGZfc2V0X2Jhc2VfYnRmKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0ZiAqYmFzZV9idGYpXFxuIDYyMjpcXHR7XFxuIDYyMzpcXHR9XFxuIDYyNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6MjMuOTI3ODMzNzZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEzMzE2Njc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBCVEYgaW4gYGluY2x1ZGUvbGludXgvYnRmLmhgKipcblxuT2theSwgSSdtIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgQlRGIHN0dWZmIGJldHRlci4gU3BlY2lmaWNhbGx5LCB0aGVyZSdzIHNvbWV0aGluZyBpbnRlcmVzdGluZyBhcm91bmQgbGluZSA1ODUgaW4gdGhlIGBpbmNsdWRlL2xpbnV4L2J0Zi5oYCBmaWxlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB3aGF0J3MgZGVmaW5lZCBpbiB0aGUgYGlmZGVmYCBibG9jayBpbW1lZGlhdGVseSAqYWJvdmUqIHRoYXQgbGluZS4gSSdtIGFzc3VtaW5nIGl0IHJlbGF0ZXMgdG8gYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBmZWF0dXJlIG9yIHBsYXRmb3JtLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbWFnaWMgaGFwcGVucywgYW5kIHVuZGVyc3RhbmRpbmcgdGhhdCBsb2dpYyB3aWxsIGdpdmUgbWUgc29tZSBjb250ZXh0IGJlZm9yZSBJIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUgY29kZSBpbiB0aGUgYXJlYSBvZiBpbnRlcmVzdCwgd2hpY2ggaXMgbGlrZWx5IGRlcGVuZGVudCBvbiB0aGF0IGNvbmRpdGlvbmFsIGxvZ2ljLiBJIGFudGljaXBhdGUgdGhhdCB0aGUgYCNpZmRlZmAgd2lsbCBsaWtlbHkgY29uZGl0aW9uIGluY2x1c2lvbiBvZiBvdGhlciByZWxldmFudCBoZWFkZXJzLCBkZWNsYXJhdGlvbnMsIG9yIG1heWJlIGV2ZW4gZnVuY3Rpb24gZGVmaW5pdGlvbnMgdGhhdCBJIG5lZWQgZm9yIGZ1bGwgY29tcHJlaGVuc2lvbiBvZiB0aGUgY29kZSdzIGJlaGF2aW9yLiBUaW1lIHRvIG9wZW4gdGhlIGZpbGUgYW5kIHRha2UgYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzMxNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6MjYuMDYxMDAzOTkzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvYnRmLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTUwOlxcdGVudW0gYnRmX2ZpZWxkX2l0ZXJfa2luZCB7XFxuIDU1MTpcXHRcXHRCVEZfRklFTERfSVRFUl9JRFMsXFxuIDU1MjpcXHRcXHRCVEZfRklFTERfSVRFUl9TVFJTLFxcbiA1NTM6XFx0fTtcXG4gNTU0OlxcdFxcbiA1NTU6XFx0c3RydWN0IGJ0Zl9maWVsZF9kZXNjIHtcXG4gNTU2OlxcdFxcdC8qIG9uY2UtcGVyLXR5cGUgb2Zmc2V0cyAqL1xcbiA1NTc6XFx0XFx0aW50IHRfb2ZmX2NudCwgdF9vZmZzWzJdO1xcbiA1NTg6XFx0XFx0LyogbWVtYmVyIHN0cnVjdCBzaXplLCBvciB6ZXJvLCBpZiBubyBtZW1iZXJzICovXFxuIDU1OTpcXHRcXHRpbnQgbV9zejtcXG4gNTYwOlxcdFxcdC8qIHJlcGVhdGVkIHBlci1tZW1iZXIgb2Zmc2V0cyAqL1xcbiA1NjE6XFx0XFx0aW50IG1fb2ZmX2NudCwgbV9vZmZzWzFdO1xcbiA1NjI6XFx0fTtcXG4gNTYzOlxcdFxcbiA1NjQ6XFx0c3RydWN0IGJ0Zl9maWVsZF9pdGVyIHtcXG4gNTY1OlxcdFxcdHN0cnVjdCBidGZfZmllbGRfZGVzYyBkZXNjO1xcbiA1NjY6XFx0XFx0dm9pZCAqcDtcXG4gNTY3OlxcdFxcdGludCBtX2lkeDtcXG4gNTY4OlxcdFxcdGludCBvZmZfaWR4O1xcbiA1Njk6XFx0XFx0aW50IHZsZW47XFxuIDU3MDpcXHR9O1xcbiA1NzE6XFx0XFxuIDU3MjpcXHQjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxuIDU3MzpcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmJ0Zl90eXBlX2J5X2lkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIHR5cGVfaWQpO1xcbiA1NzQ6XFx0dm9pZCBidGZfc2V0X2Jhc2VfYnRmKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0ZiAqYmFzZV9idGYpO1xcbiA1NzU6XFx0aW50IGJ0Zl9yZWxvY2F0ZShzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGYgKmJhc2VfYnRmLCBfX3UzMiAqKm1hcF9pZHMpO1xcbiA1NzY6XFx0aW50IGJ0Zl9maWVsZF9pdGVyX2luaXQoc3RydWN0IGJ0Zl9maWVsZF9pdGVyICppdCwgc3RydWN0IGJ0Zl90eXBlICp0LFxcbiA1Nzc6XFx0XFx0XFx0XFx0ZW51bSBidGZfZmllbGRfaXRlcl9raW5kIGl0ZXJfa2luZCk7XFxuIDU3ODpcXHRfX3UzMiAqYnRmX2ZpZWxkX2l0ZXJfbmV4dChzdHJ1Y3QgYnRmX2ZpZWxkX2l0ZXIgKml0KTtcXG4gNTc5OlxcdFxcbiA1ODA6XFx0Y29uc3QgY2hhciAqYnRmX25hbWVfYnlfb2Zmc2V0KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIG9mZnNldCk7XFxuIDU4MTpcXHRjb25zdCBjaGFyICpidGZfc3RyX2J5X29mZnNldChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBvZmZzZXQpO1xcbiA1ODI6XFx0c3RydWN0IGJ0ZiAqYnRmX3BhcnNlX3ZtbGludXgodm9pZCk7XFxuIDU4MzpcXHRzdHJ1Y3QgYnRmICpicGZfcHJvZ19nZXRfdGFyZ2V0X2J0Zihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbiA1ODQ6XFx0dTMyICpidGZfa2Z1bmNfZmxhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIga2Z1bmNfYnRmX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbiA1ODU6XFx0aW50IGJ0Zl9rZnVuY19jaGVja19mbGFnKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGtmdW5jX2J0Zl9pZCwgdTMyIGZsYWcpO1xcbiA1ODY6XFx0Ym9vbCBidGZfa2Z1bmNfaXNfYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBrZnVuY19idGZfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuIDU4NzpcXHR1MzIgKmJ0Zl9rZnVuY19pc19tb2RpZnlfcmV0dXJuKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGtmdW5jX2J0Zl9pZCxcXG4gNTg4OlxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuIDU4OTpcXHRpbnQgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjoyNi4wNjEwODQ1NDNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0NjE1MzczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBCUEYgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUgZm9yIEl0ZXJhdG9ycyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZm9jdXNpbmcgb24gZW5hYmxpbmcgQlBGIGl0ZXJhdG9ycywgcGFydGljdWxhcmx5IHRob3NlIHRvdWNoaW5nIG9uIFRDUC4gSSBrbm93IHRoYXQgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfTkVUYCwgYW5kIGBDT05GSUdfREVCVUdfSU5GT19CVEZgIGFyZSBkZWZpbml0ZWx5IGluIHBsYXkg4oCTIHRob3NlIGFyZSB0aGUgZm91bmRhdGlvbi4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIGNydWNpYWwgY29uZmlndXJhdGlvbnMgc3BlY2lmaWMgdG8gYEJQRl9UUkFDRV9JVEVSYCBvciB0aG9zZSByZWxhdGVkIHRvIHRoZSBgaXRlci90Y3BgIGZ1bmN0aW9uYWxpdHkuIFNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgc2VhcmNoIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIGBicGZfaXRlcl90Y3BgIG9yIGFueSBvdGhlciB1c2Ugb2YgaXRlcmF0b3JzIGluIHRoZSBCUEYgd29ybGQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDUwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjoyOC4zMDcyNDIwODdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTUzMTMwOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2l0ZXJfcmVnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0PTMwMD1maWxlLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvYnBmX2l0ZXJhdG9ycy5yc3QtMzAzLVxcbkRvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0OjMwNDogIHN0cnVjdCBicGZfaXRlcl9yZWcge1xcbkRvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0LTMwNS0gICAgICAgICAgICBjb25zdCBjaGFyICp0YXJnZXQ7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9icGZfaXRlcmF0b3JzLnJzdC0zMTYtXFxuRG9jdW1lbnRhdGlvbi9icGYvYnBmX2l0ZXJhdG9ycy5yc3Q6MzE3OkFmdGVyIGZpbGxpbmcgdGhlIGRhdGEgc3RydWN0dXJlIGZpZWxkcywgY2FsbCBgYGJwZl9pdGVyX3JlZ190YXJnZXQoKWBgIHRvXFxuRG9jdW1lbnRhdGlvbi9icGYvYnBmX2l0ZXJhdG9ycy5yc3QtMzE4LXJlZ2lzdGVyIHRoZSBpdGVyYXRvciB0byB0aGUgbWFpbiBCUEYgaXRlcmF0b3Igc3Vic3lzdGVtLlxcbkRvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0LTMxOS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9icGZfaXRlcmF0b3JzLnJzdDozMjA6VGhlIGZvbGxvd2luZyBpcyB0aGUgYnJlYWtkb3duIGZvciBlYWNoIGZpZWxkIGluIHN0cnVjdCBgYGJwZl9pdGVyX3JlZ2BgLlxcbkRvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0LTMyMS1cXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9Mjk4MD1lbnVtIGJwZl9pdGVyX2ZlYXR1cmUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0yOTg0LSNkZWZpbmUgQlBGX0lURVJfQ1RYX0FSR19NQVggMlxcbmluY2x1ZGUvbGludXgvYnBmLmg6Mjk4NTpzdHJ1Y3QgYnBmX2l0ZXJfcmVnIHtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI5ODYtXFx0Y29uc3QgY2hhciAqdGFyZ2V0O1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0zMDA0PXN0cnVjdCBicGZfaXRlcl9fYnBmX21hcF9lbGVtIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzAxMC1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjMwMTE6aW50IGJwZl9pdGVyX3JlZ190YXJnZXQoY29uc3Qgc3RydWN0IGJwZl9pdGVyX3JlZyAqcmVnX2luZm8pO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6MzAxMjp2b2lkIGJwZl9pdGVyX3VucmVnX3RhcmdldChjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfcmVnICpyZWdfaW5mbyk7XFxuaW5jbHVkZS9saW51eC9icGYuaC0zMDEzLWludCBicGZfaXRlcl9wcm9nX3N1cHBvcnRlZChzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbi0tXFxua2VybmVsL2JwZi9icGZfaXRlci5jPTEwPXN0cnVjdCBicGZfaXRlcl90YXJnZXRfaW5mbyB7XFxua2VybmVsL2JwZi9icGZfaXRlci5jLTExLVxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6MTI6XFx0Y29uc3Qgc3RydWN0IGJwZl9pdGVyX3JlZyAqcmVnX2luZm87XFxua2VybmVsL2JwZi9icGZfaXRlci5jLTEzLVxcdHUzMiBidGZfaWQ7XFx0LyogY2FjaGVkIHZhbHVlICovXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9MjgzPWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnBmX2l0ZXJfZm9wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy0yOTEtICogYSBjb25zdCBzdGF0aWMgdmFyaWFibGUgYW5kIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0b1xcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzoyOTI6ICogYnBmX2l0ZXJfcmVnX3RhcmdldCgpLlxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy0yOTMtICovXFxua2VybmVsL2JwZi9icGZfaXRlci5jOjI5NDppbnQgYnBmX2l0ZXJfcmVnX3RhcmdldChjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfcmVnICpyZWdfaW5mbylcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMjk1LXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy0zMTEtXFxua2VybmVsL2JwZi9icGZfaXRlci5jOjMxMjp2b2lkIGJwZl9pdGVyX3VucmVnX3RhcmdldChjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfcmVnICpyZWdfaW5mbylcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMzEzLXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYz0zNzA9YnBmX2l0ZXJfZ2V0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMzc3LVxcdFxcdGlmICh0aW5mby1cXHUwMDNlYnRmX2lkID09IHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXR0YWNoX2J0Zl9pZCkge1xcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzozNzg6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9pdGVyX3JlZyAqcmVnX2luZm87XFxua2VybmVsL2JwZi9icGZfaXRlci5jLTM3OS1cXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYz0yODQ9REVGSU5FX0JQRl9JVEVSX0ZVTkMoY2dyb3VwLCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0yODYtXFxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jOjI4NzpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfY2dyb3VwX3JlZ19pbmZvID0ge1xcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0yODgtXFx0LnRhcmdldFxcdFxcdFxcdD0gXFxcImNncm91cFxcXCIsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM9MzAyPXN0YXRpYyBpbnQgX19pbml0IGJwZl9jZ3JvdXBfaXRlcl9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMzA0LVxcdGJwZl9jZ3JvdXBfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9IGJwZl9jZ3JvdXBfYnRmX2lkWzBdO1xcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzozMDU6XFx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNmJwZl9jZ3JvdXBfcmVnX2luZm8pO1xcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0zMDYtfVxcbi0tXFxua2VybmVsL2JwZi9kbWFidWZfaXRlci5jPTExNj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGRtYWJ1Zl9pdGVyX3NlcV9pbmZvID0ge1xcbi0tXFxua2VybmVsL2JwZi9kbWFidWZfaXRlci5jLTEyMi1cXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmM6MTIzOnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGJwZl9kbWFidWZfcmVnX2luZm8gPSB7XFxua2VybmVsL2JwZi9kbWFidWZfaXRlci5jLTEyNC1cXHQudGFyZ2V0XFx0XFx0XFx0PSBcXFwiZG1hYnVmXFxcIixcXG4tLVxcbmtlcm5lbC9icGYvZG1hYnVmX2l0ZXIuYz0xMzg9c3RhdGljIGludCBfX2luaXQgZG1hYnVmX2l0ZXJfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL2JwZi9kbWFidWZfaXRlci5jLTE0MC1cXHRicGZfZG1hYnVmX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSBicGZfZG1hYnVmX2J0Zl9pZFswXTtcXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmM6MTQxOlxcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFxcdTAwMjZicGZfZG1hYnVmX3JlZ19pbmZvKTtcXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmMtMTQyLX1cXG4tLVxcbmtlcm5lbC9icGYva21lbV9jYWNoZV9pdGVyLmM9MjE3PURFRklORV9CUEZfSVRFUl9GVU5DKGttZW1fY2FjaGUsIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxcbi0tXFxua2VybmVsL2JwZi9rbWVtX2NhY2hlX2l0ZXIuYy0yMTktXFxua2VybmVsL2JwZi9rbWVtX2NhY2hlX2l0ZXIuYzoyMjA6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX2ttZW1fY2FjaGVfcmVnX2luZm8gPSB7XFxua2VybmVsL2JwZi9rbWVtX2NhY2hlX2l0ZXIuYy0yMjEtXFx0LnRhcmdldFxcdFxcdFxcdD0gXFxcImttZW1fY2FjaGVcXFwiLFxcbi0tXFxua2VybmVsL2JwZi9rbWVtX2NhY2hlX2l0ZXIuYz0yMzI9c3RhdGljIGludCBfX2luaXQgYnBmX2ttZW1fY2FjaGVfaXRlcl9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2ttZW1fY2FjaGVfaXRlci5jLTIzNC1cXHRicGZfa21lbV9jYWNoZV9yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID0gYnBmX2ttZW1fY2FjaGVfYnRmX2lkWzBdO1xcbmtlcm5lbC9icGYva21lbV9jYWNoZV9pdGVyLmM6MjM1OlxcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFxcdTAwMjZicGZfa21lbV9jYWNoZV9yZWdfaW5mbyk7XFxua2VybmVsL2JwZi9rbWVtX2NhY2hlX2l0ZXIuYy0yMzYtfVxcbi0tXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYz04Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGJwZl9saW5rX3NlcV9pbmZvID0ge1xcbi0tXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYy04OS1cXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jOjkwOnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGJwZl9saW5rX3JlZ19pbmZvID0ge1xcbmtlcm5lbC9icGYvbGlua19pdGVyLmMtOTEtXFx0LnRhcmdldFxcdFxcdFxcdD0gXFxcImJwZl9saW5rXFxcIixcXG4tLVxcbmtlcm5lbC9icGYvbGlua19pdGVyLmM9MTAwPXN0YXRpYyBpbnQgX19pbml0IGJwZl9saW5rX2l0ZXJfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYy0xMDItXFx0YnBmX2xpbmtfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9ICpidGZfYnBmX2xpbmtfaWQ7XFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYzoxMDM6XFx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNmJwZl9saW5rX3JlZ19pbmZvKTtcXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTEwNC19XFxuLS1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM9ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBicGZfbWFwX3NlcV9pbmZvID0ge1xcbi0tXFxua2VybmVsL2JwZi9tYXBfaXRlci5jLTg5LVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYzo5MDpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfbWFwX3JlZ19pbmZvID0ge1xcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy05MS1cXHQudGFyZ2V0XFx0XFx0XFx0PSBcXFwiYnBmX21hcFxcXCIsXFxuLS1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM9MTY5PURFRklORV9CUEZfSVRFUl9GVU5DKGJwZl9tYXBfZWxlbSwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXFxuLS1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMTcxLVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYzoxNzI6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX21hcF9lbGVtX3JlZ19pbmZvID0ge1xcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xNzMtXFx0LnRhcmdldFxcdFxcdFxcdD0gXFxcImJwZl9tYXBfZWxlbVxcXCIsXFxuLS1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM9MTg3PXN0YXRpYyBpbnQgX19pbml0IGJwZl9tYXBfaXRlcl9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMTkxLVxcdGJwZl9tYXBfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9ICpidGZfYnBmX21hcF9pZDtcXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM6MTkyOlxcdHJldCA9IGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNmJwZl9tYXBfcmVnX2luZm8pO1xcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xOTMtXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xOTUtXFxua2VybmVsL2JwZi9tYXBfaXRlci5jOjE5NjpcXHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcXHUwMDI2YnBmX21hcF9lbGVtX3JlZ19pbmZvKTtcXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMTk3LX1cXG4tLVxcbmtlcm5lbC9icGYvcHJvZ19pdGVyLmM9ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBicGZfcHJvZ19zZXFfaW5mbyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvcHJvZ19pdGVyLmMtODktXFxua2VybmVsL2JwZi9wcm9nX2l0ZXIuYzo5MDpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfcHJvZ19yZWdfaW5mbyA9IHtcXG5rZXJuZWwvYnBmL3Byb2dfaXRlci5jLTkxLVxcdC50YXJnZXRcXHRcXHRcXHQ9IFxcXCJicGZfcHJvZ1xcXCIsXFxuLS1cXG5rZXJuZWwvYnBmL3Byb2dfaXRlci5jPTEwMD1zdGF0aWMgaW50IF9faW5pdCBicGZfcHJvZ19pdGVyX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9icGYvcHJvZ19pdGVyLmMtMTAyLVxcdGJwZl9wcm9nX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSAqYnRmX2JwZl9wcm9nX2lkO1xcbmtlcm5lbC9icGYvcHJvZ19pdGVyLmM6MTAzOlxcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFxcdTAwMjZicGZfcHJvZ19yZWdfaW5mbyk7XFxua2VybmVsL2JwZi9wcm9nX2l0ZXIuYy0xMDQtfVxcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz02ODQ9c3RhdGljIHZvaWQgYnBmX2l0ZXJfdGFza19zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eCwgc3RydWN0IHNlcV9maWxlICpzZXEpXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTY5Mi1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjY5MzpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyB0YXNrX3JlZ19pbmZvID0ge1xcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtNjk0LVxcdC50YXJnZXRcXHRcXHRcXHQ9IFxcXCJ0YXNrXFxcIixcXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM9NzA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gdGFza19maWxlX3NlcV9pbmZvID0ge1xcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy03MTMtXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo3MTQ6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgdGFza19maWxlX3JlZ19pbmZvID0ge1xcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtNzE1LVxcdC50YXJnZXRcXHRcXHRcXHQ9IFxcXCJ0YXNrX2ZpbGVcXFwiLFxcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz03MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyB0YXNrX3ZtYV9zZXFfaW5mbyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtNzM2LVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6NzM3OnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIHRhc2tfdm1hX3JlZ19pbmZvID0ge1xcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtNzM4LVxcdC50YXJnZXRcXHRcXHRcXHQ9IFxcXCJ0YXNrX3ZtYVxcXCIsXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jPTEyMDI9c3RhdGljIGludCBfX2luaXQgdGFza19pdGVyX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTIxMi1cXHR0YXNrX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSBidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9UQVNLXTtcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjEyMTM6XFx0cmV0ID0gYnBmX2l0ZXJfcmVnX3RhcmdldChcXHUwMDI2dGFza19yZWdfaW5mbyk7XFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMjE0LVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEyMTgtXFx0dGFza19maWxlX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1sxXS5idGZfaWQgPSBidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9GSUxFXTtcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjEyMTk6XFx0cmV0ID0gIGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNnRhc2tfZmlsZV9yZWdfaW5mbyk7XFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMjIwLVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEyMjQtXFx0dGFza192bWFfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzFdLmJ0Zl9pZCA9IGJ0Zl90cmFjaW5nX2lkc1tCVEZfVFJBQ0lOR19UWVBFX1ZNQV07XFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzoxMjI1OlxcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFxcdTAwMjZ0YXNrX3ZtYV9yZWdfaW5mbyk7XFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMjI2LX1cXG4tLVxcbmtlcm5lbC9rYWxsc3ltcy5jPTg1ND1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGtzeW1faXRlcl9zZXFfaW5mbyA9IHtcXG4tLVxcbmtlcm5lbC9rYWxsc3ltcy5jLTg2MC1cXG5rZXJuZWwva2FsbHN5bXMuYzo4NjE6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcga3N5bV9pdGVyX3JlZ19pbmZvID0ge1xcbmtlcm5lbC9rYWxsc3ltcy5jLTg2Mi1cXHQudGFyZ2V0ICAgICAgICAgICAgICAgICA9IFxcXCJrc3ltXFxcIixcXG4tLVxcbmtlcm5lbC9rYWxsc3ltcy5jPTg3ND1zdGF0aWMgaW50IF9faW5pdCBicGZfa3N5bV9pdGVyX3JlZ2lzdGVyKHZvaWQpXFxuLS1cXG5rZXJuZWwva2FsbHN5bXMuYy04NzYtXFx0a3N5bV9pdGVyX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSAqYnRmX2tzeW1faXRlcl9pZDtcXG5rZXJuZWwva2FsbHN5bXMuYzo4Nzc6XFx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNmtzeW1faXRlcl9yZWdfaW5mbyk7XFxua2VybmVsL2thbGxzeW1zLmMtODc4LX1cXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gaXRlcl9zZXFfaW5mbyA9IHtcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODk3LVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODk4OnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mbyA9IHtcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg5OS1cXHQudGFyZ2V0XFx0XFx0XFx0PSBcXFwiYnBmX3NrX3N0b3JhZ2VfbWFwXFxcIixcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9OTE0PXN0YXRpYyBpbnQgX19pbml0IGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2luaXQodm9pZClcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE3LVxcdFxcdGJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tdO1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6OTE4OlxcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFxcdTAwMjZicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8pO1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE5LX1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTk2Nj1zdGF0aWMgdm9pZCBzb2NrX21hcF9pdGVyX2RldGFjaF90YXJnZXQoc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5NzAtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxOTcxOnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIHNvY2tfbWFwX2l0ZXJfcmVnID0ge1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTk3Mi1cXHQudGFyZ2V0XFx0XFx0XFx0PSBcXFwic29ja21hcFxcXCIsXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTE5ODY9c3RhdGljIGludCBfX2luaXQgYnBmX3NvY2ttYXBfaXRlcl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5ODktXFx0XFx0YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS107XFxubmV0L2NvcmUvc29ja19tYXAuYzoxOTkwOlxcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFxcdTAwMjZzb2NrX21hcF9pdGVyX3JlZyk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTkxLX1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzYxNj1icGZfaXRlcl90Y3BfZ2V0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjI4LVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzYyOTpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyB0Y3BfcmVnX2luZm8gPSB7XFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjMwLVxcdC50YXJnZXRcXHRcXHRcXHQ9IFxcXCJ0Y3BcXFwiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjM5LVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzY0MDpzdGF0aWMgdm9pZCBfX2luaXQgYnBmX2l0ZXJfcmVnaXN0ZXIodm9pZClcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM2NDEte1xcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzY0Mi1cXHR0Y3BfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9IGJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tfQ09NTU9OXTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjM2NDM6XFx0aWYgKGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNnRjcF9yZWdfaW5mbykpXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjQ0LVxcdFxcdHByX3dhcm4oXFxcIldhcm5pbmc6IGNvdWxkIG5vdCByZWdpc3RlciBicGYgaXRlcmF0b3IgdGNwXFxcXG5cXFwiKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzY0OT12b2lkIF9faW5pdCB0Y3BfdjRfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjc0LSNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjM2NzU6XFx0YnBmX2l0ZXJfcmVnaXN0ZXIoKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM2NzYtI2VuZGlmXFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zODgyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gdWRwX3NlcV9pbmZvID0ge1xcbi0tXFxubmV0L2lwdjQvdWRwLmMtMzg4OC1cXG5uZXQvaXB2NC91ZHAuYzozODg5OnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIHVkcF9yZWdfaW5mbyA9IHtcXG5uZXQvaXB2NC91ZHAuYy0zODkwLVxcdC50YXJnZXRcXHRcXHRcXHQ9IFxcXCJ1ZHBcXFwiLFxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMzg5OC1cXG5uZXQvaXB2NC91ZHAuYzozODk5OnN0YXRpYyB2b2lkIF9faW5pdCBicGZfaXRlcl9yZWdpc3Rlcih2b2lkKVxcbm5ldC9pcHY0L3VkcC5jLTM5MDAte1xcbm5ldC9pcHY0L3VkcC5jLTM5MDEtXFx0dWRwX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSBidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9VRFBdO1xcbm5ldC9pcHY0L3VkcC5jOjM5MDI6XFx0aWYgKGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNnVkcF9yZWdfaW5mbykpXFxubmV0L2lwdjQvdWRwLmMtMzkwMy1cXHRcXHRwcl93YXJuKFxcXCJXYXJuaW5nOiBjb3VsZCBub3QgcmVnaXN0ZXIgYnBmIGl0ZXJhdG9yIHVkcFxcXFxuXFxcIik7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zOTA3PXZvaWQgX19pbml0IHVkcF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0zOTIxLSNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcXG5uZXQvaXB2NC91ZHAuYzozOTIyOlxcdGJwZl9pdGVyX3JlZ2lzdGVyKCk7XFxubmV0L2lwdjQvdWRwLmMtMzkyMy0jZW5kaWZcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9Njg5Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGlwdjZfcm91dGVfc2VxX2luZm8gPSB7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTY4OTgtXFxubmV0L2lwdjYvcm91dGUuYzo2ODk5OnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGlwdjZfcm91dGVfcmVnX2luZm8gPSB7XFxubmV0L2lwdjYvcm91dGUuYy02OTAwLVxcdC50YXJnZXRcXHRcXHRcXHQ9IFxcXCJpcHY2X3JvdXRlXFxcIixcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNjkwOC1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjY5MDk6c3RhdGljIGludCBfX2luaXQgYnBmX2l0ZXJfcmVnaXN0ZXIodm9pZClcXG5uZXQvaXB2Ni9yb3V0ZS5jLTY5MTAte1xcbm5ldC9pcHY2L3JvdXRlLmMtNjkxMS1cXHRpcHY2X3JvdXRlX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSAqYnRmX2ZpYjZfaW5mb19pZDtcXG5uZXQvaXB2Ni9yb3V0ZS5jOjY5MTI6XFx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNmlwdjZfcm91dGVfcmVnX2luZm8pO1xcbm5ldC9pcHY2L3JvdXRlLmMtNjkxMy19XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTY5MzA9aW50IF9faW5pdCBpcDZfcm91dGVfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy02OTgwLSNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcXG5uZXQvaXB2Ni9yb3V0ZS5jOjY5ODE6XFx0cmV0ID0gYnBmX2l0ZXJfcmVnaXN0ZXIoKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTY5ODItXFx0aWYgKHJldClcXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz0yODk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gbmV0bGlua19zZXFfaW5mbyA9IHtcXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yOTAxLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoyOTAyOnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIG5ldGxpbmtfcmVnX2luZm8gPSB7XFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTI5MDMtXFx0LnRhcmdldFxcdFxcdFxcdD0gXFxcIm5ldGxpbmtcXFwiLFxcbi0tXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTI5MTEtXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjI5MTI6c3RhdGljIGludCBfX2luaXQgYnBmX2l0ZXJfcmVnaXN0ZXIodm9pZClcXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMjkxMy17XFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTI5MTQtXFx0bmV0bGlua19yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID0gKmJ0Zl9uZXRsaW5rX3NvY2tfaWQ7XFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjI5MTU6XFx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNm5ldGxpbmtfcmVnX2luZm8pO1xcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yOTE2LX1cXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz0yOTE5PXN0YXRpYyBpbnQgX19pbml0IG5ldGxpbmtfcHJvdG9faW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTI5MjctI2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoyOTI4OlxcdGVyciA9IGJwZl9pdGVyX3JlZ2lzdGVyKCk7XFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTI5MjktXFx0aWYgKGVycilcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0zOTA4PWJwZl9pdGVyX3VuaXhfZ2V0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLFxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTM5MjAtXFxubmV0L3VuaXgvYWZfdW5peC5jOjM5MjE6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgdW5peF9yZWdfaW5mbyA9IHtcXG5uZXQvdW5peC9hZl91bml4LmMtMzkyMi1cXHQudGFyZ2V0XFx0XFx0XFx0PSBcXFwidW5peFxcXCIsXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMzkzMS1cXG5uZXQvdW5peC9hZl91bml4LmM6MzkzMjpzdGF0aWMgdm9pZCBfX2luaXQgYnBmX2l0ZXJfcmVnaXN0ZXIodm9pZClcXG5uZXQvdW5peC9hZl91bml4LmMtMzkzMy17XFxubmV0L3VuaXgvYWZfdW5peC5jLTM5MzQtXFx0dW5peF9yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID0gYnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfVU5JWF07XFxubmV0L3VuaXgvYWZfdW5peC5jOjM5MzU6XFx0aWYgKGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNnVuaXhfcmVnX2luZm8pKVxcbm5ldC91bml4L2FmX3VuaXguYy0zOTM2LVxcdFxcdHByX3dhcm4oXFxcIldhcm5pbmc6IGNvdWxkIG5vdCByZWdpc3RlciBicGYgaXRlcmF0b3IgdW5peFxcXFxuXFxcIik7XFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9Mzk0MD1zdGF0aWMgaW50IF9faW5pdCBhZl91bml4X2luaXQodm9pZClcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zOTY4LSNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcXG5uZXQvdW5peC9hZl91bml4LmM6Mzk2OTpcXHRicGZfaXRlcl9yZWdpc3RlcigpO1xcbm5ldC91bml4L2FmX3VuaXguYy0zOTcwLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjoyOS45NjI1NjM5MTVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY1NTM1ODM2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQYXRjaCBmb3IgRnV6emluZyBQcmlvcml0aXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgaW1wYWN0cyB0aGUgaW50ZXJhY3Rpb24gb2YgQlBGIHdpdGggbmV0d29yayBzb2NrZXRzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYEJQRl9TWVNDQUxMYCwgYE5FVGAsIGFuZCBgSU5FVGAgZnVuY3Rpb25hbGl0aWVzLiBNeSBpbml0aWFsIGNoZWNrIHdpdGggYEZvY3VzU3ltYm9sc2AgemVyb2VkIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIG1vZGlmaWVkOiBgYnBmX3NvY2tfZGVzdHJveWAgYW5kIHRoZSByZWxhdGVkIGB0Y3BfYWJvcnRgLiBUaGUgZGlyZWN0IGNhbGwgdG8gYHRjcF9hYm9ydGAgZnJvbSBgc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3lgIHdoZW4gYGJwZl9zb2NrX2Rlc3Ryb3lgIGlzIGludm9rZWQgZm9yIFRDUCBjb25uZWN0aW9ucywgaW5jbHVkaW5nIHRob3NlIGluIHRoZSB0aW1ld2FpdC9zeW5fcmVjdiBzdGF0ZXMsIGlzIGNyaXRpY2FsLiBXZSBhbHNvIGhhdmUgdG8gY29uc2lkZXIgYGluZXRfdHdza19kZXNjaGVkdWxlX3B1dGAgb3IgYGluZXRfY3NrX3JlcXNrX3F1ZXVlX2Ryb3BgLCB0aG91Z2ggYHRjcF9hYm9ydGAgaXMgdGhlIHByaW1hcnkgdGFyZ2V0LlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IGBicGZfc29ja19kZXN0cm95YCBpcyBpbmRlZWQgYSBkaXN0aW5jdCwgbm9uLWlubGluZWQga2Z1bmMgd2l0aGluIGB2bWxpbnV4YCwgZXhwb3J0ZWQgdmlhIEJURiwgc28gd2UgY2FuIGFkZHJlc3MgaXQgc3BlY2lmaWNhbGx5LiBBIHJldmlldyBvZiB0aGUgcGF0Y2ggaW5kaWNhdGVzIHRoYXQgdGhlIGNoYW5nZSBlbmNvbXBhc3NlcyBtb2RpZmljYXRpb25zIHRvIGBuZXQvY29yZS9maWx0ZXIuY2AgKHNwZWNpZmljYWxseSBgYnBmX3NvY2tfZGVzdHJveWApIGFuZCB0aGUgc2VsZnRlc3RzIGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvLi4uYCBkaXJlY3RvcnkuXG5cbk5vdywgbGV0J3MgY29uZmlndXJlIHRoZSBmdXp6aW5nIHJ1bi4gV2UncmUgc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAg4oCTIGFic29sdXRlbHkuIFRoZSAqcmVhc29uaW5nKiBpcyBjbGVhcjogdGhpcyBwYXRjaCBhbGxvd3MgdGhlIGRlc3RydWN0aW9uIG9mIG5vbi1mdWxseSBlc3RhYmxpc2hlZCBzb2NrZXRzLCBsaWtlIFRDUCB0aW1ld2FpdCBvciByZXF1ZXN0IHNvY2tldHMsIHRocm91Z2ggQlBGIGl0ZXJhdG9ycywgYWNoaWV2ZWQgYnkgY2hlY2tpbmcgYHNrX2Z1bGxzb2NrKClgIGJlZm9yZSBwcm90b2NvbCB2ZXJpZmljYXRpb24uIE15IGBGb2N1c1N5bWJvbHNgIGxpc3QgaXM6IGBbXCJicGZfc29ja19kZXN0cm95XCIsIFwidGNwX2Fib3J0XCJdYC4gVGhlIHJlcXVpcmVkIGBFbmFibGVDb25maWdzYCBhcmU6IGBbXCJCUEZfU1lTQ0FMTFwiLCBcIk5FVFwiLCBcIklORVRcIiwgXCJERUJVR19JTkZPX0JURlwiXWAuIEZpbmFsbHksIEkgY29uZmlybWVkIHRoZXJlIGFyZSBubyBgQ09ORklHX2AgcHJlZml4ZXMuIEV2ZXJ5dGhpbmcgbG9va3Mgc29saWQuIEkgYW0gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA1NSwiT3V0cHV0VG9rZW5zIjoxNjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6MzUuNjE3OTI3NTQ3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI4MzY1NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NvY2tfZGVzdHJveVwiLFxuICAgIFwidGNwX2Fib3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlYWNoYWJsZSBCUEYga2Z1bmMgYGJwZl9zb2NrX2Rlc3Ryb3lgIHRvIHN1cHBvcnQgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIGFuZCByZXF1ZXN0IHNvY2tldHMpIGJ5IG9ubHkgY2hlY2tpbmcgdGhlIHByb3RvY29sIG9uIGZ1bGwgc29ja2V0cyAoYHNrX2Z1bGxzb2NrYCkuIFRoaXMgYWxsb3dzIEJQRiBpdGVyYXRvciBwcm9ncmFtcyB0byBpbnZva2Ugc29ja2V0IGRlc3RydWN0aW9uIChgZGlhZ19kZXN0cm95YCAvIGB0Y3BfYWJvcnRgKSBvbiB0aW1ld2FpdCBzb2NrZXRzIGFuZCBzeW4tcmVjdiByZXF1ZXN0cywgd2hpY2ggY2FuIHVuY292ZXIgcmFjZSBjb25kaXRpb25zIG9yIHN0YXRlLWhhbmRsaW5nIGlzc3VlcyBkdXJpbmcgc29ja2V0IHRlYXJkb3duLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NvY2tfZGVzdHJveVwiLFxuICAgIFwidGNwX2Fib3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlYWNoYWJsZSBCUEYga2Z1bmMgYGJwZl9zb2NrX2Rlc3Ryb3lgIHRvIHN1cHBvcnQgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIGFuZCByZXF1ZXN0IHNvY2tldHMpIGJ5IG9ubHkgY2hlY2tpbmcgdGhlIHByb3RvY29sIG9uIGZ1bGwgc29ja2V0cyAoYHNrX2Z1bGxzb2NrYCkuIFRoaXMgYWxsb3dzIEJQRiBpdGVyYXRvciBwcm9ncmFtcyB0byBpbnZva2Ugc29ja2V0IGRlc3RydWN0aW9uIChgZGlhZ19kZXN0cm95YCAvIGB0Y3BfYWJvcnRgKSBvbiB0aW1ld2FpdCBzb2NrZXRzIGFuZCBzeW4tcmVjdiByZXF1ZXN0cywgd2hpY2ggY2FuIHVuY292ZXIgcmFjZSBjb25kaXRpb25zIG9yIHN0YXRlLWhhbmRsaW5nIGlzc3VlcyBkdXJpbmcgc29ja2V0IHRlYXJkb3duLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjozNS43MDA3NzU1MDFaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDIwNzM4MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6MzUuNzAxMzU3MDQxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDYwMjAxNTE5MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYga2Z1bmMgYGJwZl9zb2NrX2Rlc3Ryb3koKWAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBzdXBwb3J0IG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBzb2NrZXRzKSBieSBjaGVja2luZyBgc2tfZnVsbHNvY2soc2spYCBiZWZvcmUgaW5zcGVjdGluZyBgc2stXFx1MDAzZXNrX3Byb3RvY29sYCwgYW5kIGludm9rZXMgYHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRClgLiBUaGUgYWNjb21wYW55aW5nIGNoYW5nZXMgYXJlIEJQRiBzZWxmdGVzdHMuXFxuXFxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlcnNwYWNlICh2aWEgY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCwgZXRjLiksIGFuZCBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLlxcbi0gVGhlIHBvdGVudGlhbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggc29ja2V0IGRlc3RydWN0aW9uIChlLmcuLCBzb2NrZXQgbGlmZWN5Y2xlL3JlZmNvdW50aW5nIHJhY2VzLCBsb2NraW5nIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBkZXJlZmVyZW5jZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzLlxcbi0gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZWU0ODc0MzVkMTYxZTY4ZTdkOWZkYTcxN2YzNTQ0NDAwYmNlZDhiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxODo0MToyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDYxOTQwZTc1MzU1MjMuLmE0MWNjNjBhNDAxYTUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC0xMjkxMiw4ICsxMjkxMiw5IEBAIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbiAgKiBAc29jazogUG9pbnRlciB0byBzb2NrZXQgdG8gYmUgZGVzdHJveWVkXG4gICpcbiAgKiBSZXR1cm46XG4tICogT24gZXJyb3IsIG1heSByZXR1cm4gRVBST1RPTk9TVVBQT1JULCBFSU5WQUwuXG4tICogRVBST1RPTk9TVVBQT1JUIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuKyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIG9yIHdoYXRldmVyIHRoZSBwcm90b2NvbCBzcGVjaWZpY1xuKyAqIGRlc3Ryb3kgaGFuZGxlciByZXR1cm5zLlxuKyAqIEVPUE5PVFNVUFAgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuXG4gICogMCBvdGhlcndpc2VcbiAgKi9cbiBfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spXG5AQCAtMTI5MjUsOCArMTI5MjYsMTIgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuIFx0ICogU3VwcG9ydGluZyBwcm90b2NvbHMgd2lsbCBuZWVkIHRvIGFjcXVpcmUgc29jayBsb2NrIGluIHRoZSBCUEYgY29udGV4dFxuIFx0ICogcHJpb3IgdG8gaW52b2tpbmcgdGhpcyBrZnVuYy5cbiBcdCAqL1xuLVx0aWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSB8fCAoc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdCAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKSlcbitcdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGlmIChza19mdWxsc29jayhzaykgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdHJldHVybiBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG5pbmRleCA5YzExOTM4ZmU1OTdkLi5iOTBmYWI3MDczMzg2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG5AQCAtMTEwLDYgKzExMCw3NCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3RjcF9zZXJ2ZXIoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuIFx0XHRjbG9zZShzZXJ2KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGVzdF90Y3BfdGltZXdhaXQoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuK3tcbitcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIGFjY2VwdF9zZXJ2ID0gLTEsIG47XG4rXHRzdHJ1Y3QgdGltZXZhbCB0diA9IHt9O1xuK1x0Y2hhciBidWZbMV07XG4rXG4rXHRzZXJ2ID0gc3RhcnRfc2VydmVyKEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgTlVMTCwgMCwgMCk7XG4rXHRpZiAoIUFTU0VSVF9HRShzZXJ2LCAwLCBcInN0YXJ0X3NlcnZlclwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0Y2xpZW4gPSBjb25uZWN0X3RvX2ZkKHNlcnYsIDApO1xuK1x0aWYgKCFBU1NFUlRfR0UoY2xpZW4sIDAsIFwiY29ubmVjdF90b19mZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0YWNjZXB0X3NlcnYgPSBhY2NlcHQoc2VydiwgTlVMTCwgTlVMTCk7XG4rXHRpZiAoIUFTU0VSVF9HRShhY2NlcHRfc2VydiwgMCwgXCJzZXJ2IGFjY2VwdFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LypcbitcdCAqIEFjdGl2ZSBjbG9zZSBmcm9tIHRoZSBjbGllbnQsIHRoZW4gY2xvc2UgdGhlIHNlcnZlciBzaWRlLiBPbmNlXG4rXHQgKiByZWN2KCkgc2VlcyBFT0YgdGhlIHNlcnZlciBGSU4gaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCB0aGUgY2xpZW50XG4rXHQgKiBzb2NrIGlzIGluIFRJTUVfV0FJVC4gQmxvY2sgd2l0aG91dCB0aW1lb3V0IHNvIGEgbG9hZGVkIENJIGJveFxuK1x0ICogY2FuJ3QgcmFjZSB1cy5cbitcdCAqL1xuK1x0aWYgKCFBU1NFUlRfT0soc2V0c29ja29wdChjbGllbiwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFx1MDAyNnR2LFxuK1x0XHRcdFx0ICBzaXplb2YodHYpKSwgXCJjbGVhciByY3Z0aW1lb1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aWYgKCFBU1NFUlRfT0soc2h1dGRvd24oY2xpZW4sIFNIVVRfV1IpLCBcImNsaWVudCBzaHV0ZG93blwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LypcbitcdCAqIE1ha2Ugc3VyZSB0aGUgc2VydmVyIGhhcyBzZWVuIHRoZSBjbGllbnQgRklOIGJlZm9yZSBpdCBjbG9zZXMsXG4rXHQgKiBzbyB0aGUgdHdvIEZJTnMgbmV2ZXIgY3Jvc3MuXG4rXHQgKi9cbitcdG4gPSByZWN2KGFjY2VwdF9zZXJ2LCBidWYsIHNpemVvZihidWYpLCAwKTtcbitcdGlmICghQVNTRVJUX0VRKG4sIDAsIFwic2VydmVyIHJlY3YgRU9GXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRjbG9zZShhY2NlcHRfc2Vydik7XG4rXHRhY2NlcHRfc2VydiA9IC0xO1xuK1xuK1x0LyogYmxvY2sgdW50aWwgcmV0dXJuIEVPRiAqL1xuK1x0biA9IHJlY3YoY2xpZW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuK1x0aWYgKCFBU1NFUlRfRVEobiwgMCwgXCJjbGllbnQgcmVjdiBFT0ZcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgdGhlIHRpbWV3YWl0IGNsaWVudCBzb2NrLiAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQgPSAwO1xuK1x0c3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtXHUwMDNlcHJvZ3MuaXRlcl90Y3A2X3RpbWV3YWl0KTtcbitcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kLCAxLCBcInRpbWV3YWl0IHNvY2sgZm91bmRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdEFTU0VSVF9PSyhza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19kZXN0cm95X2VyciwgXCJkZXN0cm95IHRpbWV3YWl0IHNvY2tcIik7XG4rXG4rXHQvKiBUaGUgZGVzdHJveWVkIHRpbWV3YWl0IHNvY2sgbXVzdCBiZSBnb25lLiAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQgPSAwO1xuK1x0c3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtXHUwMDNlcHJvZ3MuaXRlcl90Y3A2X3RpbWV3YWl0KTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19mb3VuZCwgMCwgXCJ0aW1ld2FpdCBzb2NrIGRlc3Ryb3llZFwiKTtcbitcbitjbGVhbnVwOlxuK1x0aWYgKGNsaWVuICE9IC0xKVxuK1x0XHRjbG9zZShjbGllbik7XG4rXHRpZiAoYWNjZXB0X3NlcnYgIT0gLTEpXG4rXHRcdGNsb3NlKGFjY2VwdF9zZXJ2KTtcbitcdGlmIChzZXJ2ICE9IC0xKVxuK1x0XHRjbG9zZShzZXJ2KTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGVzdF91ZHBfY2xpZW50KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbiB7XG4gXHRpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBuID0gMDtcbkBAIC0yMDQsMTEgKzI3MiwxMiBAQCB2b2lkIHRlc3Rfc29ja19kZXN0cm95KHZvaWQpXG4gXHRcdHRlc3RfdGNwX2NsaWVudChza2VsKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidGNwX3NlcnZlclwiKSlcbiBcdFx0dGVzdF90Y3Bfc2VydmVyKHNrZWwpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ0Y3BfdGltZXdhaXRcIikpXG4rXHRcdHRlc3RfdGNwX3RpbWV3YWl0KHNrZWwpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ1ZHBfY2xpZW50XCIpKVxuIFx0XHR0ZXN0X3VkcF9jbGllbnQoc2tlbCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInVkcF9zZXJ2ZXJcIikpXG4gXHRcdHRlc3RfdWRwX3NlcnZlcihza2VsKTtcbi1cbiBcdFJVTl9URVNUUyhzb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsKTtcbiBcbiBjbGVhbnVwOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbmluZGV4IDllMGJmN2E1NGNlYzkuLjBhODg4NzU0MzIxOGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbkBAIC03LDYgKzcsOCBAQFxuICNpbmNsdWRlIFwiYnBmX3RyYWNpbmdfbmV0LmhcIlxuIFxuIF9fYmUxNiBzZXJ2X3BvcnQgPSAwO1xuK2ludCB0d19mb3VuZCA9IDA7XG4raW50IHR3X2Rlc3Ryb3lfZXJyID0gMDtcbiBcbiBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNrKSBfX2tzeW07XG4gXG5AQCAtMTAwLDYgKzEwMiwzNCBAQCBpbnQgaXRlcl90Y3A2X3NlcnZlcihzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcIml0ZXIvdGNwXCIpXG4raW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuK3tcbitcdHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tfY29tbW9uID0gY3R4LVx1MDAzZXNrX2NvbW1vbjtcbitcdF9fdTY0ICp2YWw7XG4rXHRpbnQga2V5ID0gMDtcbitcbitcdGlmICghc2tfY29tbW9uKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChza19jb21tb24tXHUwMDNlc2tjX2ZhbWlseSAhPSBBRl9JTkVUNilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIWJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2soc2tfY29tbW9uKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRjcF9jb25uX3NvY2tldHMsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXHQvKiBUaGUgdGltZXdhaXQgc29jayBpbmhlcml0cyB0aGUgY29va2llIG9mIHRoZSBjbG9zZWQgY2xpZW50IHNvY2suICovXG4rXHRpZiAoYnBmX2dldF9zb2NrZXRfY29va2llKHNrX2NvbW1vbikgIT0gKnZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR0d19mb3VuZCsrO1xuK1x0dHdfZGVzdHJveV9lcnIgPSBicGZfc29ja19kZXN0cm95KHNrX2NvbW1vbik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4gXG4gU0VDKFwiaXRlci91ZHBcIilcbiBpbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6MzUuNzAxMzY3ODIxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkzMjQzNzA1MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFuYWx5c2lzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIGtlcm5lbCBwYXRjaCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0J3MgZGlnIGluLiBJIHNlZSB0aGV5J3ZlIG1vZGlmaWVkIHRoZSBgYnBmX3NvY2tfZGVzdHJveWAgZnVuY3Rpb24uIFRoZSBjb2RlJ3MgYmVlbiBzaW1wbGlmaWVkIGEgYml0LCBidXQgdGhlcmUncyBhIG5ldyBjaGVjayB1c2luZyBgc2tfZnVsbHNvY2soc2spYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgc2tfZnVsbHNvY2tgIGFjdHVhbGx5ICpkb2VzKiBhbmQsIGltcG9ydGFudGx5LCB0aGUgY29udGV4dHMgaW4gd2hpY2ggYGJwZl9zb2NrX2Rlc3Ryb3lgIGlzIGNhbGxlZCBhbmQgaG93IHRoZSBuZXcgY2hlY2sgaW50ZXJhY3RzIHdpdGggZGlmZmVyZW50IHNvY2tldCB0eXBlcy4gSSdtIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCBUQ1AgYW5kIFVEUCwgYXMgdGhlIGNvbW1lbnQgbWVudGlvbnMgcHJvdG9jb2wtc3BlY2lmaWMgbG9ja2luZyBzZW1hbnRpY3MuIFRoZSByZW1vdmVkIGNvbmRpdGlvbiBhbmQgYWRkZWQgY29uZGl0aW9uIGNvdWxkIGNoYW5nZSBiZWhhdmlvciBmb3Igc29tZSBwcm90b2NvbHMuXG5cbkknbSBnb2luZyB0byBxdWlja2x5IHNlYXJjaCBmb3IgdGhlIGRlZmluaXRpb24gb2YgYGJwZl9zb2NrX2Rlc3Ryb3lgLCBgc2tfZnVsbHNvY2tgLCBhbmQgYGRpYWdfZGVzdHJveWAgdXNpbmcgYGdyZXBwZXJgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGJlaGF2ZSBpbiB0aGUgcHJlc2VuY2Ugb2YgVENQIHRpbWV3YWl0IHNvY2tldHMsIG9yIGFueSBvdGhlciBraW5kIG9mIFwibm9uLWZ1bGxzb2NrXCIgc2NlbmFyaW9zLiBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIG1pZ2h0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBzYWZldHkgaXNzdWVzLCBlc3BlY2lhbGx5IHdpdGggdGhvc2UgZGVsaWNhdGUsIG9mdGVuIHRyYW5zaWVudCwgc3RhdGVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgc2hvdWxkIGFsbG93IG1lIHRvIG1ha2UgYW4gaW5mb3JtZWQgZGVjaXNpb24gYXMgdG8gd2hldGhlciBhIHNwZWNpYWxpemVkIGZ1enppbmcgY2FtcGFpZ24gaXMgbmVlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDc5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6NDUuMDI1NzQzNjIyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM4MTI4MzE5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgc2tfZnVsbHNvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQyOjQ2LjY2Mzg4Mzc2MVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTkyNjk5MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYHNrX2Z1bGxzb2NrYCBpbiBgaW5jbHVkZS9uZXQvc29jay5oYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgc2tfZnVsbHNvY2tgIGlzIGJlaW5nIHVzZWQuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBkZWZpbml0aW9uLCB3aGljaCBsaWtlbHkgbGl2ZXMgaW4gYGluY2x1ZGUvbmV0L3NvY2suaGAuIEknbSBob3BpbmcgaXQncyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIHN0cnVjdHVyZSBvciBtYWNybywgYW5kIHRoZSBoZWFkZXIgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBjb250ZXh0LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGBzb2NrYCBzdHJ1Y3R1cmUgaXRzZWxmLCBhbnkgYXNzb2NpYXRlZCBmbGFncyBvciBzdGF0ZXMsIGFuZCBob3cgaXQgcmVsYXRlcyB0byBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIGRhdGEgZmxvdywgYW5kIHNvY2tldCBsaWZlY3ljbGUgaW4gZ2VuZXJhbC4gSXQgd2lsbCBhbHNvIGJlIHVzZWZ1bCB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciB2YXJpYWJsZSwgYHNrX2Z1bGxzb2NrYCBoYXMgYmVlbiB1c2VkLCBzbyBJIGFtIGdvaW5nIHRvIG5lZWQgdG8gZG8gc29tZSBjb2RlIHNlYXJjaGVzIGJhc2VkIG9uIHRoaXMgaW5mb3JtYXRpb24uIExldCdzIHN0YXJ0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3OTIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0Mjo0OC44NTY1ODY1MloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5Mzg2MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tfZnVsbHNvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvc29jay5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3NvY2suaD0zMDE2PXNrYl9za19pc19wcmVmZXRjaGVkKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmgtMzAyNy0gKi9cXG5pbmNsdWRlL25ldC9zb2NrLmg6MzAyODpzdGF0aWMgaW5saW5lIGJvb2wgc2tfZnVsbHNvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbmluY2x1ZGUvbmV0L3NvY2suaC0zMDI5LXtcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0zMDM0PXNrX2lzX3JlZmNvdW50ZWQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTMwMzYtXFx0LyogT25seSBmdWxsIHNvY2tldHMgaGF2ZSBzay1cXHUwMDNlc2tfZmxhZ3MuICovXFxuaW5jbHVkZS9uZXQvc29jay5oOjMwMzc6XFx0cmV0dXJuICFza19mdWxsc29jayhzaykgfHwgIXNvY2tfZmxhZyhzaywgU09DS19SQ1VfRlJFRSk7XFxuaW5jbHVkZS9uZXQvc29jay5oLTMwMzgtfVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTMwNDE9c2tfcmVxdWVzdHNfd2lmaV9zdGF0dXMoc3RydWN0IHNvY2sgKnNrKVxcbmluY2x1ZGUvbmV0L3NvY2suaC0zMDQyLXtcXG5pbmNsdWRlL25ldC9zb2NrLmg6MzA0MzpcXHRyZXR1cm4gc2sgXFx1MDAyNlxcdTAwMjYgc2tfZnVsbHNvY2soc2spIFxcdTAwMjZcXHUwMDI2IHNvY2tfZmxhZyhzaywgU09DS19XSUZJX1NUQVRVUyk7XFxuaW5jbHVkZS9uZXQvc29jay5oLTMwNDQtfVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTMxMTY9c3RhdGljIGlubGluZSB2b2lkIHNrX3BhY2luZ19zaGlmdF91cGRhdGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxcbmluY2x1ZGUvbmV0L3NvY2suaC0zMTE3LXtcXG5pbmNsdWRlL25ldC9zb2NrLmg6MzExODpcXHRpZiAoIXNrIHx8ICFza19mdWxsc29jayhzaykgfHwgUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19wYWNpbmdfc2hpZnQpID09IHZhbClcXG5pbmNsdWRlL25ldC9zb2NrLmgtMzExOS1cXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQyOjQ4LjkwNTUzMTgzNloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTg0MTA2MzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBzb2NrLmhgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgbmV0d29yayBzb2NrZXQgYmVoYXZpb3IuIExldCdzIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbmV0L3NvY2suaGAuIEknbSBnb2luZyB0byBzdGFydCBhcm91bmQgbGluZSAzMDI4LiBIb3BlZnVsbHksIHRoYXQncyB3aGVyZSB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgYXJlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBhdCBhIGdyYW51bGFyIGxldmVsLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0Mjo1MC40ODk2NDAzNzlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L3NvY2suaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzMDIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMDIwOlxcdCNlbHNlXFxuMzAyMTpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMzAyMjpcXHQjZW5kaWYgLyogQ09ORklHX0lORVQgKi9cXG4zMDIzOlxcdH1cXG4zMDI0OlxcdFxcbjMwMjU6XFx0LyogVGhpcyBoZWxwZXIgY2hlY2tzIGlmIGEgc29ja2V0IGlzIGEgZnVsbCBzb2NrZXQsXFxuMzAyNjpcXHQgKiBpZSBfbm90XyBhIHRpbWV3YWl0IG9yIHJlcXVlc3Qgc29ja2V0LlxcbjMwMjc6XFx0ICovXFxuMzAyODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgc2tfZnVsbHNvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbjMwMjk6XFx0e1xcbjMwMzA6XFx0XFx0cmV0dXJuICgxIFxcdTAwM2NcXHUwMDNjIHNrLVxcdTAwM2Vza19zdGF0ZSkgXFx1MDAyNiB+KFRDUEZfVElNRV9XQUlUIHwgVENQRl9ORVdfU1lOX1JFQ1YpO1xcbjMwMzE6XFx0fVxcbjMwMzI6XFx0XFxuMzAzMzpcXHRzdGF0aWMgaW5saW5lIGJvb2xcXG4zMDM0OlxcdHNrX2lzX3JlZmNvdW50ZWQoc3RydWN0IHNvY2sgKnNrKVxcbjMwMzU6XFx0e1xcbjMwMzY6XFx0XFx0LyogT25seSBmdWxsIHNvY2tldHMgaGF2ZSBzay1cXHUwMDNlc2tfZmxhZ3MuICovXFxuMzAzNzpcXHRcXHRyZXR1cm4gIXNrX2Z1bGxzb2NrKHNrKSB8fCAhc29ja19mbGFnKHNrLCBTT0NLX1JDVV9GUkVFKTtcXG4zMDM4OlxcdH1cXG4zMDM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0Mjo1MC40ODk3ODEzOTlaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM0MjI5NjU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWx2aW5nIGludG8gU29ja2V0IFN0cnVjdHVyZXMgYW5kIERlc3RydWN0aW9uIE1lY2hhbmlzbXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBgYnBmX3NvY2tfZGVzdHJveWAgZnVuY3Rpb24gd2FzIGNoZWNraW5nIGBzay1cdTAwM2Vza19wcm90b2NvbGAsIGV2ZW4gdGhvdWdoIGl0IHNlZW1zIGxpa2UgdGhhdCBmaWVsZCBtaWdodCBub3QgYWx3YXlzIGJlIHJlbGlhYmxlIG9yIGV2ZW4gdmFsaWQgaW4gc29ja2V0cyB0aGF0IGFyZSBpbiB0aGUgYFRJTUVfV0FJVGAgb3IgYFJFUVVFU1RgIHN0YXRlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgc3RydWN0dXJlcyB0aGVtc2VsdmVzLCBwYXJ0aWN1bGFybHkgYHN0cnVjdCBzb2NrX2NvbW1vbmAsIGBzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrYCwgYW5kIGBzdHJ1Y3QgdGNwX3RpbWV3YWl0X3NvY2tgLiBTZWVpbmcgaG93IHRoZXNlIGFyZSBkZWZpbmVkIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgc29ja2V0IChgc2tgKSB3aWxsIGxpa2VseSBzaGVkIGxpZ2h0IG9uIHRoZSBpc3N1ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGVzZSBzb2NrZXRzIGFuZCB3aGVyZSBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIGZpdHMgaW4uXG5cbkZvbGxvd2luZyB0aGF0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcGF0aCB0aGUgc29ja2V0IHRha2VzIHRvIGJlIGRlc3Ryb3llZC4gVGhlcmVmb3JlLCBJIHdpbGwgc2VhcmNoIGZvciB0aGUgZnVuY3Rpb24gYGRpYWdfZGVzdHJveWAgYWNyb3NzIHRoZSBgbmV0L2AgZGlyZWN0b3J5IGFuZCBmdW5jdGlvbnMgc3VjaCBhcyBgdGNwX3R3c2tfZGlhZ19kZXN0cm95YCBvciBgdGNwX2RpYWdfZGVzdHJveWAgdG8gZ2V0IGEgc2Vuc2Ugb2YgdGhlIGRlc3RydWN0aW9uIHByb2Nlc3MuIEhvcGVmdWxseSwgdGhpcyB3aWxsIHRlbGwgbWUgd2hhdCB0aGUgZGVzdHJ1Y3Rpb24gcm91dGluZXMgZGVwZW5kIG9uLiBJdCBzaG91bGQgc2hvdyBpZiB0aGUgcHJvdG9jb2wgaXMgbmVlZGVkIG9yIG5vdC4gSSdtIGhvcGluZyB0byBwaW5wb2ludCB0aGUgZXhhY3QgbW9tZW50IG9yIGNvbnRleHQgd2hlcmUgdGhlIHByb3RvY29sIG1pZ2h0IGJlY29tZSB1bmF2YWlsYWJsZSBvciB1bmRlZmluZWQsIGFuZCB0aHVzLCB3aHkgdGhhdCBjaGVjayBpbiBgYnBmX3NvY2tfZGVzdHJveWAgbWlnaHQgaGF2ZSBjYXVzZWQgcHJvYmxlbXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiB3aGV0aGVyIHRoZSBjaGVjayB3YXMgbmVjZXNzYXJ5LCBhbmQgaG93IHdlIGNvdWxkIGhhbmRsZSB0aGUgc29ja2V0J3Mgc3RhdGVzIG1vcmUgcm9idXN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MzcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0Mjo1My44MzIwODAxNTJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxOTY5OTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpYWdfZGVzdHJveVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyOTIwPV9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTI4LVxcdCAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTI5OlxcdGlmICghc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkzMC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkzNi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjkzNzpcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkzOC19XFxuLS1cXG5uZXQvY29yZS9zb2NrX2RpYWcuYz0xNDM9c3RhdGljIHZvaWQgc29ja19kaWFnX2Jyb2FkY2FzdF9kZXN0cm95X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2NvcmUvc29ja19kaWFnLmMtMTQ5LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxubmV0L2NvcmUvc29ja19kaWFnLmM6MTUwOlxcdGNvbnN0IGVudW0gc2tuZXRsaW5rX2dyb3VwcyBncm91cCA9IHNvY2tfZGlhZ19kZXN0cm95X2dyb3VwKHNrKTtcXG5uZXQvY29yZS9zb2NrX2RpYWcuYy0xNTEtXFx0aW50IGVyciA9IC0xO1xcbi0tXFxubmV0L2NvcmUvc29ja19kaWFnLmM9Mjk1PXN0YXRpYyBpbnQgc29ja19kaWFnX2JpbmQoc3RydWN0IG5ldCAqbmV0LCBpbnQgZ3JvdXApXFxuLS1cXG5uZXQvY29yZS9zb2NrX2RpYWcuYy0zMTEtXFxubmV0L2NvcmUvc29ja19kaWFnLmM6MzEyOmludCBzb2NrX2RpYWdfZGVzdHJveShzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXFxubmV0L2NvcmUvc29ja19kaWFnLmMtMzEzLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTMxNi1cXG5uZXQvY29yZS9zb2NrX2RpYWcuYzozMTc6XFx0aWYgKCFzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlZGlhZ19kZXN0cm95KVxcbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTMxOC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxubmV0L2NvcmUvc29ja19kaWFnLmMtMzE5LVxcbm5ldC9jb3JlL3NvY2tfZGlhZy5jOjMyMDpcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgZXJyKTtcXG5uZXQvY29yZS9zb2NrX2RpYWcuYy0zMjEtfVxcbm5ldC9jb3JlL3NvY2tfZGlhZy5jOjMyMjpFWFBPUlRfU1lNQk9MX0dQTChzb2NrX2RpYWdfZGVzdHJveSk7XFxubmV0L2NvcmUvc29ja19kaWFnLmMtMzIzLVxcbi0tXFxubmV0L2lwdjQvcmF3LmM9OTQ4PXN0cnVjdCBwcm90byByYXdfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3Jhdy5jLTk3Mi0jZW5kaWZcXG5uZXQvaXB2NC9yYXcuYzo5NzM6XFx0LmRpYWdfZGVzdHJveVxcdCAgID0gcmF3X2Fib3J0LFxcbm5ldC9pcHY0L3Jhdy5jLTk3NC19O1xcbi0tXFxubmV0L2lwdjQvcmF3X2RpYWcuYz0xODc9c3RhdGljIHZvaWQgcmF3X2RpYWdfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqcixcXG4tLVxcbm5ldC9pcHY0L3Jhd19kaWFnLmMtMTk0LSNpZmRlZiBDT05GSUdfSU5FVF9ESUFHX0RFU1RST1lcXG5uZXQvaXB2NC9yYXdfZGlhZy5jOjE5NTpzdGF0aWMgaW50IHJhd19kaWFnX2Rlc3Ryb3koc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG5uZXQvaXB2NC9yYXdfZGlhZy5jLTE5Ni1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnIpXFxuLS1cXG5uZXQvaXB2NC9yYXdfZGlhZy5jLTIwNC1cXHRcXHRyZXR1cm4gUFRSX0VSUihzayk7XFxubmV0L2lwdjQvcmF3X2RpYWcuYzoyMDU6XFx0ZXJyID0gc29ja19kaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XFxubmV0L2lwdjQvcmF3X2RpYWcuYy0yMDYtXFx0c29ja19wdXQoc2spO1xcbi0tXFxubmV0L2lwdjQvcmF3X2RpYWcuYz0yMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciByYXdfZGlhZ19oYW5kbGVyID0ge1xcbi0tXFxubmV0L2lwdjQvcmF3X2RpYWcuYy0yMTgtI2lmZGVmIENPTkZJR19JTkVUX0RJQUdfREVTVFJPWVxcbm5ldC9pcHY0L3Jhd19kaWFnLmM6MjE5OlxcdC5kZXN0cm95XFx0XFx0PSByYXdfZGlhZ19kZXN0cm95LFxcbm5ldC9pcHY0L3Jhd19kaWFnLmMtMjIwLSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvdGNwX2RpYWcuYz02MDQ9c3RhdGljIGludCB0Y3BfZGlhZ19kdW1wX29uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY0MS0jaWZkZWYgQ09ORklHX0lORVRfRElBR19ERVNUUk9ZXFxubmV0L2lwdjQvdGNwX2RpYWcuYzo2NDI6c3RhdGljIGludCB0Y3BfZGlhZ19kZXN0cm95KHN0cnVjdCBza19idWZmICppbl9za2IsXFxubmV0L2lwdjQvdGNwX2RpYWcuYy02NDMtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyICpyZXEpXFxuLS1cXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY1Mi1cXG5uZXQvaXB2NC90Y3BfZGlhZy5jOjY1MzpcXHRlcnIgPSBzb2NrX2RpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY1NC1cXG4tLVxcbm5ldC9pcHY0L3RjcF9kaWFnLmM9NjYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgdGNwX2RpYWdfaGFuZGxlciA9IHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9kaWFnLmMtNjY5LSNpZmRlZiBDT05GSUdfSU5FVF9ESUFHX0RFU1RST1lcXG5uZXQvaXB2NC90Y3BfZGlhZy5jOjY3MDpcXHQuZGVzdHJveVxcdFxcdD0gdGNwX2RpYWdfZGVzdHJveSxcXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY3MS0jZW5kaWZcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzM0Nz1zdHJ1Y3QgcHJvdG8gdGNwX3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzOTUtXFx0Lm5vX2F1dG9iaW5kXFx0XFx0PSB0cnVlLFxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzM5NjpcXHQuZGlhZ19kZXN0cm95XFx0XFx0PSB0Y3BfYWJvcnQsXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzk3LX07XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zMTQzPXN0cnVjdCBwcm90byB1ZHBfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTMxNzMtXFx0Lm9ial9zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IHVkcF9zb2NrKSxcXG5uZXQvaXB2NC91ZHAuYzozMTc0OlxcdC5kaWFnX2Rlc3Ryb3lcXHRcXHQ9IHVkcF9hYm9ydCxcXG5uZXQvaXB2NC91ZHAuYy0zMTc1LX07XFxuLS1cXG5uZXQvaXB2NC91ZHBfZGlhZy5jPTE0ND1zdGF0aWMgdm9pZCB1ZHBfZGlhZ19nZXRfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2RpYWdfbXNnICpyLFxcbi0tXFxubmV0L2lwdjQvdWRwX2RpYWcuYy0xNTEtI2lmZGVmIENPTkZJR19JTkVUX0RJQUdfREVTVFJPWVxcbm5ldC9pcHY0L3VkcF9kaWFnLmM6MTUyOnN0YXRpYyBpbnQgdWRwX2RpYWdfZGVzdHJveShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbm5ldC9pcHY0L3VkcF9kaWFnLmMtMTUzLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxKVxcbi0tXFxubmV0L2lwdjQvdWRwX2RpYWcuYy0yMDAtXFxubmV0L2lwdjQvdWRwX2RpYWcuYzoyMDE6XFx0ZXJyID0gc29ja19kaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XFxubmV0L2lwdjQvdWRwX2RpYWcuYy0yMDItXFxuLS1cXG5uZXQvaXB2NC91ZHBfZGlhZy5jPTIwOT1zdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyIHVkcF9kaWFnX2hhbmRsZXIgPSB7XFxuLS1cXG5uZXQvaXB2NC91ZHBfZGlhZy5jLTIxNi0jaWZkZWYgQ09ORklHX0lORVRfRElBR19ERVNUUk9ZXFxubmV0L2lwdjQvdWRwX2RpYWcuYzoyMTc6XFx0LmRlc3Ryb3lcXHQgPSB1ZHBfZGlhZ19kZXN0cm95LFxcbm5ldC9pcHY0L3VkcF9kaWFnLmMtMjE4LSNlbmRpZlxcbi0tXFxubmV0L2lwdjYvcmF3LmM9MTIwNz1zdHJ1Y3QgcHJvdG8gcmF3djZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jLTEyMzEtI2VuZGlmXFxubmV0L2lwdjYvcmF3LmM6MTIzMjpcXHQuZGlhZ19kZXN0cm95XFx0ICAgPSByYXdfYWJvcnQsXFxubmV0L2lwdjYvcmF3LmMtMTIzMy19O1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMjc2PXN0cnVjdCBwcm90byB0Y3B2Nl9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzI1LVxcdC5ub19hdXRvYmluZFxcdFxcdD0gdHJ1ZSxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIzMjY6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdGNwX2Fib3J0LFxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMyNy19O1xcbi0tXFxubmV0L2lwdjYvdWRwLmM9MTkwOD1zdHJ1Y3QgcHJvdG8gdWRwdjZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTE5NDAtXFx0LmlwdjZfcGluZm9fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVkcDZfc29jaywgaW5ldDYpLFxcbm5ldC9pcHY2L3VkcC5jOjE5NDE6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdWRwX2Fib3J0LFxcbm5ldC9pcHY2L3VkcC5jLTE5NDItfTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE0Nj12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X2luaXQodm9pZClcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE2Ni1cXHR0Y3BfcHJvdF9vdmVycmlkZS5yZWxlYXNlX2NiID0gdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGU7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoyMTY3OlxcdHRjcF9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjgtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTgwPXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfdjZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMjEzLVxcdHRjcHY2X3Byb3Rfb3ZlcnJpZGUucmVsZWFzZV9jYiA9IHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjIxNDpcXHR0Y3B2Nl9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTUtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0Mjo1My45MDQwNTY4NTdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUxOTA2MTUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgU29ja2V0IFN0cnVjdHVyZXMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgc29ja2V0IGRhdGEgc3RydWN0dXJlcyBhZ2FpbiwgYW5kIHRoZSBzcGVjaWZpYyByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlbSBhcmUsIGFzIGFsd2F5cywgdGhlIGtleS4gTGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IGBzdHJ1Y3Qgc29ja19jb21tb25gLCBgc3RydWN0IHNvY2tgLCBhbmQgYHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2tgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0byBwdWxsIHVwIHRoZSBtZW1vcnkgbWFwcyBhbmQgbGlrZWx5IHRoZSBpbmhlcml0YW5jZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlbS4gV2hlcmUgZG9lcyBlYWNoIG9uZSBjb21lIGluIHRvIHBsYXk/IFdoYXQgY29yZSBmZWF0dXJlcyBhcmUgZWFjaCByZXNwb25zaWJsZSBmb3I/XG5cbkkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgZm91bmRhdGlvbiwgc28gdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgYHN0cnVjdCBzb2NrX2NvbW1vbmAuIEknbGwgd2FudCB0byByZXZpZXcgdGhlIGJhc2ljIGVsZW1lbnRzIHRoYXQgYXJlIGNvbW1vbiBhY3Jvc3Mgc29ja2V0IHR5cGVzLiBMZXQncyBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgYXQgdGhlIGxvdyBsZXZlbC4gR290dGEgcmVmcmVzaCB0aGUgbWVtb3J5IG9mIHdoYXQncyBmdW5kYW1lbnRhbCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6NTYuNDIzMTIxODIxWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY4NzY0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgc29ja19jb21tb24gXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvc29jay5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3NvY2suaD0xMDg9dHlwZWRlZiBfX3U2NCBfX2JpdHdpc2UgX19hZGRycGFpcjtcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaC0xNTUtICovXFxuaW5jbHVkZS9uZXQvc29jay5oOjE1NjpzdHJ1Y3Qgc29ja19jb21tb24ge1xcbmluY2x1ZGUvbmV0L3NvY2suaC0xNTctXFx0dW5pb24ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0Mjo1Ni40Njk4MjA5MDhaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI3OTQ2MDQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgc3RydWN0IHNvY2tfY29tbW9uYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBkaWcgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgSSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZSB0aGF0IHVuZGVycGlucyBzb2NrZXQgb3BlcmF0aW9ucyBpbiB0aGUgTGludXgga2VybmVsLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiBgc3RydWN0IHNvY2tfY29tbW9uYCB3aXRoaW4gYGluY2x1ZGUvbmV0L3NvY2suaGAuIEkndmUgcHJvYmFibHkgbG9va2VkIGF0IHRoaXMgYSB0aG91c2FuZCB0aW1lcywgYnV0IGV2ZXJ5IHRpbWUgSSByZXZpZXcgaXQgSSBmaW5kIHNvbWV0aGluZyBuZXcgb3IgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgZml0cyBpbnRvIHRoZSB3aG9sZS4gSeKAmW0gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIHN0cnVjdHVyZSB0aWVzIGludG8gdGhlIHZhcmlvdXMgc29ja2V0IHN0YXRlcyBhbmQgbGlmZWN5Y2xlIGV2ZW50cy4gSG9wZWZ1bGx5LCBpdCdzIGFsbCBpbiB0aGUgaGVhZGVyLCBvciB0aGUgcmVsYXRlZCBzb3VyY2UgZmlsZXMuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBzb2NrZXQgcXVldWluZyBpcyBtYW5hZ2VkIGluIHJlbGF0aW9uIHRvIFJYL1RYIHBhdGhzLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgaW1wYWN0IG9mIHZhcmlvdXMgc29ja2V0IG9wdGlvbnMgYW5kIGZsYWdzLiBJJ20gYW50aWNpcGF0aW5nIGZpbmRpbmcgcG9pbnRlcnMgdG8gcXVldWVzLCBmbGFncyBpbmRpY2F0aW5nIHN0YXRlIChsaWtlIGBUQ1BfRVNUQUJMSVNIRURgIG9yIGBTT0NLX0RFQURgKSwgYW5kIHBvc3NpYmx5IGZpZWxkcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLiBJdCdzIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIGNoZWNrIGZvciBhbnkgbnVhbmNlcyBvciBjaGFuZ2VzIHNpbmNlIG15IGxhc3QgZGVlcCBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDc2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6NTguNzQ5MjgzODg5WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9zb2NrLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTU2LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTU2OlxcdHN0cnVjdCBzb2NrX2NvbW1vbiB7XFxuIDE1NzpcXHRcXHR1bmlvbiB7XFxuIDE1ODpcXHRcXHRcXHRfX2FkZHJwYWlyXFx0c2tjX2FkZHJwYWlyO1xcbiAxNTk6XFx0XFx0XFx0c3RydWN0IHtcXG4gMTYwOlxcdFxcdFxcdFxcdF9fYmUzMlxcdHNrY19kYWRkcjtcXG4gMTYxOlxcdFxcdFxcdFxcdF9fYmUzMlxcdHNrY19yY3Zfc2FkZHI7XFxuIDE2MjpcXHRcXHRcXHR9O1xcbiAxNjM6XFx0XFx0fTtcXG4gMTY0OlxcdFxcdHVuaW9uICB7XFxuIDE2NTpcXHRcXHRcXHR1bnNpZ25lZCBpbnRcXHRza2NfaGFzaDtcXG4gMTY2OlxcdFxcdFxcdF9fdTE2XFx0XFx0c2tjX3UxNmhhc2hlc1syXTtcXG4gMTY3OlxcdFxcdH07XFxuIDE2ODpcXHRcXHQvKiBza2NfZHBvcnQgXFx1MDAyNlxcdTAwMjYgc2tjX251bSBtdXN0IGJlIGdyb3VwZWQgYXMgd2VsbCAqL1xcbiAxNjk6XFx0XFx0dW5pb24ge1xcbiAxNzA6XFx0XFx0XFx0X19wb3J0cGFpclxcdHNrY19wb3J0cGFpcjtcXG4gMTcxOlxcdFxcdFxcdHN0cnVjdCB7XFxuIDE3MjpcXHRcXHRcXHRcXHRfX2JlMTZcXHRza2NfZHBvcnQ7XFxuIDE3MzpcXHRcXHRcXHRcXHRfX3UxNlxcdHNrY19udW07XFxuIDE3NDpcXHRcXHRcXHR9O1xcbiAxNzU6XFx0XFx0fTtcXG4gMTc2OlxcdFxcbiAxNzc6XFx0XFx0dW5zaWduZWQgc2hvcnRcXHRcXHRza2NfZmFtaWx5O1xcbiAxNzg6XFx0XFx0dm9sYXRpbGUgdW5zaWduZWQgY2hhclxcdHNrY19zdGF0ZTtcXG4gMTc5OlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHRza2NfcmV1c2U6NDtcXG4gMTgwOlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHRza2NfcmV1c2Vwb3J0OjE7XFxuIDE4MTpcXHRcXHR1bnNpZ25lZCBjaGFyXFx0XFx0c2tjX2lwdjZvbmx5OjE7XFxuIDE4MjpcXHRcXHR1bnNpZ25lZCBjaGFyXFx0XFx0c2tjX25ldF9yZWZjbnQ6MTtcXG4gMTgzOlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHRza2NfYnlwYXNzX3Byb3RfbWVtOjE7XFxuIDE4NDpcXHRcXHRpbnRcXHRcXHRcXHRza2NfYm91bmRfZGV2X2lmO1xcbiAxODU6XFx0XFx0dW5pb24ge1xcbiAxODY6XFx0XFx0XFx0c3RydWN0IGhsaXN0X25vZGVcXHRza2NfYmluZF9ub2RlO1xcbiAxODc6XFx0XFx0XFx0c3RydWN0IGhsaXN0X25vZGVcXHRza2NfcG9ydGFkZHJfbm9kZTtcXG4gMTg4OlxcdFxcdH07XFxuIDE4OTpcXHRcXHRzdHJ1Y3QgcHJvdG9cXHRcXHQqc2tjX3Byb3Q7XFxuIDE5MDpcXHRcXHRwb3NzaWJsZV9uZXRfdFxcdFxcdHNrY19uZXQ7XFxuIDE5MTpcXHRcXG4gMTkyOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiAxOTM6XFx0XFx0c3RydWN0IGluNl9hZGRyXFx0XFx0c2tjX3Y2X2RhZGRyO1xcbiAxOTQ6XFx0XFx0c3RydWN0IGluNl9hZGRyXFx0XFx0c2tjX3Y2X3Jjdl9zYWRkcjtcXG4gMTk1OlxcdCNlbmRpZlxcbiAxOTY6XFx0XFxuIDE5NzpcXHRcXHRhdG9taWM2NF90XFx0XFx0c2tjX2Nvb2tpZTtcXG4gMTk4OlxcdFxcbiAxOTk6XFx0XFx0LyogZm9sbG93aW5nIGZpZWxkcyBhcmUgcGFkZGluZyB0byBmb3JjZVxcbiAyMDA6XFx0XFx0ICogb2Zmc2V0KHN0cnVjdCBzb2NrLCBza19yZWZjbnQpID09IDEyOCBvbiA2NGJpdCBhcmNoZXNcXG4gMjAxOlxcdFxcdCAqIGFzc3VtaW5nIElQVjYgaXMgZW5hYmxlZC4gV2UgdXNlIHRoaXMgcGFkZGluZyBkaWZmZXJlbnRseVxcbiAyMDI6XFx0XFx0ICogZm9yIGRpZmZlcmVudCBraW5kIG9mICdzb2NrZXRzJ1xcbiAyMDM6XFx0XFx0ICovXFxuIDIwNDpcXHRcXHR1bmlvbiB7XFxuIDIwNTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nXFx0c2tjX2ZsYWdzO1xcbiAyMDY6XFx0XFx0XFx0c3RydWN0IHNvY2tcXHQqc2tjX2xpc3RlbmVyOyAvKiByZXF1ZXN0X3NvY2sgKi9cXG4gMjA3OlxcdFxcdFxcdHN0cnVjdCBpbmV0X3RpbWV3YWl0X2RlYXRoX3JvdyAqc2tjX3R3X2RyOyAvKiBpbmV0X3RpbWV3YWl0X3NvY2sgKi9cXG4gMjA4OlxcdFxcdH07XFxuIDIwOTpcXHRcXHQvKlxcbiAyMTA6XFx0XFx0ICogZmllbGRzIGJldHdlZW4gZG9udGNvcHlfYmVnaW4vZG9udGNvcHlfZW5kXFxuIDIxMTpcXHRcXHQgKiBhcmUgbm90IGNvcGllZCBpbiBzb2NrX2NvcHkoKVxcbiAyMTI6XFx0XFx0ICovXFxuIDIxMzpcXHRcXHQvKiBwcml2YXRlOiAqL1xcbiAyMTQ6XFx0XFx0aW50XFx0XFx0XFx0c2tjX2RvbnRjb3B5X2JlZ2luWzBdO1xcbiAyMTU6XFx0XFx0LyogcHVibGljOiAqL1xcbiAyMTY6XFx0XFx0dW5pb24ge1xcbiAyMTc6XFx0XFx0XFx0c3RydWN0IGhsaXN0X25vZGVcXHRza2Nfbm9kZTtcXG4gMjE4OlxcdFxcdFxcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlIHNrY19udWxsc19ub2RlO1xcbiAyMTk6XFx0XFx0fTtcXG4gMjIwOlxcdFxcdHVuc2lnbmVkIHNob3J0XFx0XFx0c2tjX3R4X3F1ZXVlX21hcHBpbmc7XFxuIDIyMTpcXHQjaWZkZWYgQ09ORklHX1NPQ0tfUlhfUVVFVUVfTUFQUElOR1xcbiAyMjI6XFx0XFx0dW5zaWduZWQgc2hvcnRcXHRcXHRza2NfcnhfcXVldWVfbWFwcGluZztcXG4gMjIzOlxcdCNlbmRpZlxcbiAyMjQ6XFx0XFx0dW5pb24ge1xcbiAyMjU6XFx0XFx0XFx0aW50XFx0XFx0c2tjX2luY29taW5nX2NwdTtcXG4gMjI2OlxcdFxcdFxcdHUzMlxcdFxcdHNrY19yY3Zfd25kO1xcbiAyMjc6XFx0XFx0XFx0dTMyXFx0XFx0c2tjX3R3X3Jjdl9ueHQ7IC8qIHN0cnVjdCB0Y3BfdGltZXdhaXRfc29jayAgKi9cXG4gMjI4OlxcdFxcdH07XFxuIDIyOTpcXHRcXG4gMjMwOlxcdFxcdHJlZmNvdW50X3RcXHRcXHRza2NfcmVmY250O1xcbiAyMzE6XFx0XFx0LyogcHJpdmF0ZTogKi9cXG4gMjMyOlxcdFxcdGludCAgICAgICAgICAgICAgICAgICAgIHNrY19kb250Y29weV9lbmRbMF07XFxuIDIzMzpcXHRcXHR1bmlvbiB7XFxuIDIzNDpcXHRcXHRcXHR1MzJcXHRcXHRza2NfcnhoYXNoO1xcbiAyMzU6XFx0XFx0XFx0dTMyXFx0XFx0c2tjX3dpbmRvd19jbGFtcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6NTguNzQ5NDQwOTQ5WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNzExMzM2NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBOZXR3b3JrIFNvY2tldCBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpc3NlY3QgYHN0cnVjdCBzb2NrYC4gTGV0J3Mgc2VlLi4uIEkgc2VlbSB0byByZWNhbGwgdGhhdCBzb21ld2hlcmUgaW4gaGVyZSwgYHNrX3Byb3RvY29sYCBpcyBkZWZpbmVkLiBJIHRoaW5rIGl0J3MgcGFydCBvZiB0aGUgY29tbW9uIHNvY2tldCBkYXRhLCBtYXliZSBkZWZpbmVkIHVzaW5nIGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBgI2RlZmluZSBza19wcm90b2NvbCBfX3NrX2NvbW1vbi5za2NfcHJvdG9jb2xgLi4uIG9yIHdhcyBpdCBhIHNsaWdodGx5IGRpZmZlcmVudCBuYW1pbmcgY29udmVudGlvbj8gRWl0aGVyIHdheSwgSSBuZWVkIHRvIGNvbmZpcm0gd2hlcmUgYHNrX3Byb3RvY29sYCBhY3R1YWxseSBsaXZlcyB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmUuIFRoYXQncyB0aGUga2V5OiB1bmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgbWVtYmVycy4gVGltZSB0byB0cmFjZSB3aGVyZSBleGFjdGx5IGl0J3MgZGVjbGFyZWQgYW5kIGhvdyBpdCBpcyB1c2VkLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpdCdzIGxvY2F0ZWQgdG8gY29udGludWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTkzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MzowMC44MjA1NzgzOTZaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODcwNjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Byb3RvY29sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L3NvY2suaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9zb2NrLmg9MjQyPXN0cnVjdCBza19maWx0ZXI7XFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmgtMzAxLSAgKlxcdEBza190eXBlOiBzb2NrZXQgdHlwZSAoJVNPQ0tfU1RSRUFNLCBldGMpXFxuaW5jbHVkZS9uZXQvc29jay5oOjMwMjogICpcXHRAc2tfcHJvdG9jb2w6IHdoaWNoIHByb3RvY29sIHRoaXMgc29ja2V0IGJlbG9uZ3MgaW4gdGhpcyBuZXR3b3JrIGZhbWlseVxcbmluY2x1ZGUvbmV0L3NvY2suaC0zMDMtICAqXFx0QHNrX3BlZXJfbG9jazogbG9jayBwcm90ZWN0aW5nIEBza19wZWVyX3BpZCBhbmQgQHNrX3BlZXJfY3JlZFxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTM2NT1zdHJ1Y3Qgc29jayB7XFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmgtNTExLVxcdGt1aWRfdFxcdFxcdFxcdHNrX3VpZDtcXG5pbmNsdWRlL25ldC9zb2NrLmg6NTEyOlxcdHUxNlxcdFxcdFxcdHNrX3Byb3RvY29sO1xcbmluY2x1ZGUvbmV0L3NvY2suaC01MTMtXFx0dTE2XFx0XFx0XFx0c2tfdHlwZTtcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0yOTY1PXN0YXRpYyBpbmxpbmUgYm9vbCBza19pc190Y3AoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTI5NjgtXFx0ICAgICAgIHNrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNIFxcdTAwMjZcXHUwMDI2XFxuaW5jbHVkZS9uZXQvc29jay5oOjI5Njk6XFx0ICAgICAgIHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUDtcXG5pbmNsdWRlL25ldC9zb2NrLmgtMjk3MC19XFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmg9Mjk3Mj1zdGF0aWMgaW5saW5lIGJvb2wgc2tfaXNfdWRwKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaC0yOTc1LVxcdCAgICAgICBzay1cXHUwMDNlc2tfdHlwZSA9PSBTT0NLX0RHUkFNIFxcdTAwMjZcXHUwMDI2XFxuaW5jbHVkZS9uZXQvc29jay5oOjI5NzY6XFx0ICAgICAgIHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1VEUDtcXG5pbmNsdWRlL25ldC9zb2NrLmgtMjk3Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQzOjAwLjg2NzQ1NDE4M1oiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjU0NjU0MTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgYnBmX3NvY2tfZGVzdHJveWAgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4uLiBUaGUgYHNrX3Byb3RvY29sYCBmaWVsZCBpcyBsb2NhdGVkIHdpdGhpbiB0aGUgYHN0cnVjdCBzb2NrYCBzdHJ1Y3R1cmUsIGFuZCBpdCBhcHBlYXJzICphZnRlciogdGhlIGBzdHJ1Y3Qgc29ja19jb21tb25gIHBvcnRpb24gb2YgdGhhdCBzdHJ1Y3R1cmUuIEJ1dCwgaW1wb3J0YW50bHksIGBzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrYCAqZG9lc24ndCogY29udGFpbiBhIGZ1bGwgYHN0cnVjdCBzb2NrYCEgSXQgb25seSBjb250YWlucyBhIGBzdHJ1Y3Qgc29ja19jb21tb25gLiBSaWdodCwgc28gaWYgYGJwZl9zb2NrX2Rlc3Ryb3lgIGdldHMgaGFuZGVkIGEgYHN0cnVjdCBzb2NrX2NvbW1vbiAqc29ja2AsIHdoaWNoLCBpbiBzb21lIGNhc2VzLCBjb3VsZCBhY3R1YWxseSBiZSBhIGBzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICpgIGNvbWluZyBmcm9tIGEgQlBGIGl0ZXJhdG9yLCBhbmQgdGhlbiBpdCBjYXN0cyB0aGF0IHRvIGEgYHN0cnVjdCBzb2NrICpgLi4uIHRoYXQncyBhIHByb2JsZW0uXG5cbkJhc2ljYWxseSwgKmJlZm9yZSosIHdoZW4gdGhlIGNvZGUgdHJpZWQgdG8gcmVhZCBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIGluIHRoZSBgYnBmX3NvY2tfZGVzdHJveWAgZnVuY3Rpb24sIGl0IHdhcyBlZmZlY3RpdmVseSByZWFkaW5nIG1lbW9yeSAqYmV5b25kKiB0aGUgYm91bmRzIG9mIHRoZSBgaW5ldF90aW1ld2FpdF9zb2NrYCBzdHJ1Y3R1cmUuIElmIHRoZSBgaW5ldF90aW1ld2FpdF9zb2NrYCBzdHJ1Y3R1cmUgaXMgc21hbGxlciB0aGFuIGBzdHJ1Y3Qgc29ja2AsIHdlIHdlcmUgcmVhZGluZyBnYXJiYWdlIVxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBzaXplcy4uLiBZZWFoLCBgc3RydWN0IHNvY2tgIGlzIGRlZmluaXRlbHkgKm11Y2gqIGxhcmdlciB0aGFuIGBzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrYC4gIEdvdCBpdC5cblxuQWxyaWdodCwgd2hhdCBhYm91dCB0aGF0IGBza19mdWxsc29jayhzaylgIGNhbGw/IFRoYXQgY2hlY2tzIHRoZSBgc2stXHUwMDNlc2tfc3RhdGVgLiBPa2F5LCBidXQgd2hlcmUgaXMgYHNrX3N0YXRlYD8gQWgsIGl0J3MgaW5zaWRlIGBzdHJ1Y3Qgc29ja19jb21tb25gIGFzIGBza2Nfc3RhdGVgLiBQZXJmZWN0LiBTbyB3ZSBkbyBub3QgaGF2ZSBhbiBpc3N1ZSB3aXRoIGBza19mdWxsc29ja2AuXG5cbk5vdyBsZXQncyBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBjaGFuZ2UgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBmb3IgYGJwZl9zb2NrX2Rlc3Ryb3lgOlxuXG5gYGBjXG5fX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spXG57XG5cdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKXNvY2s7XG5cblx0LyogVGhlIGxvY2tpbmcgc2VtYW50aWNzIHRoYXQgYWxsb3cgZm9yIGNvbmN1cnJlbnQgc29jayBkZXN0cm95IGFyZVxuXHQgKiBzcGVjaWZpYyB0byBlYWNoIHByb3RvY29sLCBzbyBvbmx5IGFsbG93IHRoZSBzdXBwb3J0ZWQgcHJvdG9jb2xzLlxuXHQgKiBTdXBwb3J0aW5nIHByb3RvY29scyB3aWxsIG5lZWQgdG8gYWNxdWlyZSBzb2NrIGxvY2sgaW4gdGhlIEJQRiBjb250ZXh0XG5cdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXG5cdCAqL1xuXHRpZiAoIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KVxuXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcblxuXHRpZiAoc2tfZnVsbHNvY2soc2spIFx1MDAyNlx1MDAyNlxuXHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG5cdCAgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcblx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5cblx0cmV0dXJuIHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KHNrLCBFQ09OTkFCT1JURUQpO1xufVxuYGBgXG5cbk9rYXksIHNvIHRoZSB2dWxuZXJhYmlsaXR5IGlzIHRoZSBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIGFjY2Vzcy4gTm93IGxldCdzIHNlZSB3aGF0IGBzay1cdTAwM2Vza19wcm90YCBhY3R1YWxseSAqaXMqIHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIGEgdGltZXdhaXQgc29ja2V0IG9yIGEgcmVxdWVzdCBzb2NrZXQuIFdlIG5lZWQgdG8gY2hlY2sgd2hlcmUgYGRpYWdfZGVzdHJveWAgZ2V0cyBjYWxsZWQgZm9yIHRoZXNlIHR5cGVzLiBPa2F5LCBzbyBJIHNob3VsZCBzZWFyY2ggZm9yIGB0d3NrYCBhbmQgYGRpYWdfZGVzdHJveWAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLiBJIGFtIG5vdCBzZWVpbmcgYGRpYWdfZGVzdHJveWAgZGlyZWN0bHkuIExldCdzIGxvb2sgZm9yIGB0Y3BfdHdza19kaWFnX2Rlc3Ryb3lgLCBgdGNwX3R3c2tfZGVzY2hlZHVsZV9yZXRyeWAsIGB0Y3BfYWJvcnRgLCBvciBgaW5ldF90d3NrX2Rlc2NoZWR1bGVfcHV0YC4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjU4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQzOjA2LjEyMjExMTg0NVoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM0NTIyMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2Fib3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM9NjI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xMjc5LVxcdHtcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzoxMjgwOlxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInRjcF9hYm9ydF9vbl9vdmVyZmxvd1xcXCIsXFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTI4MTpcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LmlwdjQuc3lzY3RsX3RjcF9hYm9ydF9vbl9vdmVyZmxvdyxcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xMjgyLVxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZih1OCksXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz01MDg5PXZvaWQgdGNwX2RvbmUoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNTExNC1cXG5uZXQvaXB2NC90Y3AuYzo1MTE1OmludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxcbm5ldC9pcHY0L3RjcC5jLTUxMTYte1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtNTE2Ny19XFxubmV0L2lwdjQvdGNwLmM6NTE2ODpFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYWJvcnQpO1xcbm5ldC9pcHY0L3RjcC5jLTUxNjktXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTMzNDc9c3RydWN0IHByb3RvIHRjcF9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzk1LVxcdC5ub19hdXRvYmluZFxcdFxcdD0gdHJ1ZSxcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjMzOTY6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdGNwX2Fib3J0LFxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM5Ny19O1xcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTY4Nz1zdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtOTU4LVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo5NTk6XFx0aWYgKCFSRUFEX09OQ0Uoc29ja19uZXQoc2spLVxcdTAwM2VpcHY0LnN5c2N0bF90Y3BfYWJvcnRfb25fb3ZlcmZsb3cpKSB7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk2MC1cXHRcXHRpbmV0X3JzayhyZXEpLVxcdTAwM2VhY2tlZCA9IDE7XFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTIyNzY9c3RydWN0IHByb3RvIHRjcHY2X3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIzMjUtXFx0Lm5vX2F1dG9iaW5kXFx0XFx0PSB0cnVlLFxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MjMyNjpcXHQuZGlhZ19kZXN0cm95XFx0XFx0PSB0Y3BfYWJvcnQsXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzI3LX07XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIwOTY9c3RhdGljIHZvaWQgdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGUoc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjExMS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIxMTI6c3RhdGljIGludCB0Y3BfYWJvcnRfb3ZlcnJpZGUoc3RydWN0IHNvY2sgKnNzaywgaW50IGVycilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxMTMte1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTE5LVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjEyMDpcXHRyZXR1cm4gdGNwX2Fib3J0KHNzaywgZXJyKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxMjEtfVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTQ2PXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTY2LVxcdHRjcF9wcm90X292ZXJyaWRlLnJlbGVhc2VfY2IgPSB0Y3BfcmVsZWFzZV9jYl9vdmVycmlkZTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIxNjc6XFx0dGNwX3Byb3Rfb3ZlcnJpZGUuZGlhZ19kZXN0cm95ID0gdGNwX2Fib3J0X292ZXJyaWRlO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE2OC0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIxODA9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd192Nl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTMtXFx0dGNwdjZfcHJvdF9vdmVycmlkZS5yZWxlYXNlX2NiID0gdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGU7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoyMjE0OlxcdHRjcHY2X3Byb3Rfb3ZlcnJpZGUuZGlhZ19kZXN0cm95ID0gdGNwX2Fib3J0X292ZXJyaWRlO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjIxNS0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTMyOD1pbnQgc21jX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzQzLVxcdGlmIChzbWMtXFx1MDAzZWNvbm5lY3Rfbm9uYmxvY2sgXFx1MDAyNlxcdTAwMjYgb2xkX3N0YXRlID09IFNNQ19JTklUKVxcbm5ldC9zbWMvYWZfc21jLmM6MzQ0OlxcdFxcdHRjcF9hYm9ydChzbWMtXFx1MDAzZWNsY3NvY2stXFx1MDAzZXNrLCBFQ09OTkFCT1JURUQpO1xcbm5ldC9zbWMvYWZfc21jLmMtMzQ1LVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYz0xMjg9dm9pZCBzbWNfY2xvc2VfYWN0aXZlX2Fib3J0KHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYy0xMzUtXFx0XFx0aWYgKHNtYy1cXHUwMDNlY2xjc29jayBcXHUwMDI2XFx1MDAyNiBzbWMtXFx1MDAzZWNsY3NvY2stXFx1MDAzZXNrKVxcbm5ldC9zbWMvc21jX2Nsb3NlLmM6MTM2OlxcdFxcdFxcdHRjcF9hYm9ydChzbWMtXFx1MDAzZWNsY3NvY2stXFx1MDAzZXNrLCBFQ09OTkFCT1JURUQpO1xcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTM3LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDM6MDYuMTk1NTY5ODNaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQxMDg4NzA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgYHRjcF9hYm9ydGAgZnVuY3Rpb246XG5cbioqRGl2aW5nIGludG8gYHRjcF9hYm9ydGAqKlxuXG5Pa2F5LCBsZXQncyBnZXQgaW50byB0aGUgZ3V0cyBvZiBgbmV0L2lwdjQvdGNwLmNgIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgYHRjcF9hYm9ydGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBUQ1AgY29ubmVjdGlvbnMgYXJlIGdyYWNlZnVsbHkgKG9yLCBsZXNzIGdyYWNlZnVsbHksIGRlcGVuZGluZyBvbiB0aGUgc2l0dWF0aW9uKSB0b3JuIGRvd24gd2hlbiBzb21ldGhpbmcgZ29lcyB3cm9uZyBhdCB0aGUga2VybmVsIGxldmVsLiBSaWdodCBhd2F5LCBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgY3JpdGljYWwgZm9yIGhhbmRsaW5nIGEgdmFyaWV0eSBvZiBlcnJvciBzY2VuYXJpb3Mg4oCTIHRoaW5ncyBsaWtlIHVucmVjb3ZlcmFibGUgY29uZ2VzdGlvbiwgUlNUIHNlZ21lbnRzIGJlaW5nIHJlY2VpdmVkIHdoZW4gd2Ugd2VyZW4ndCBleHBlY3RpbmcgdGhlbSwgb3IgcGVyaGFwcyBpbnRlcm5hbCBrZXJuZWwgaW5jb25zaXN0ZW5jaWVzLlxuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHN0YXRlIHRyYW5zaXRpb25zLiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGluZmx1ZW5jZSB0aGUgVENQIHN0YXRlIG1hY2hpbmU/IERvZXMgaXQgYWx3YXlzIHRyaWdnZXIgYSBoYXJkIHJlc2V0PyBPciBhcmUgdGhlcmUgbW9yZSBudWFuY2VkIGFwcHJvYWNoZXMgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gc3RhdGU/IEkgaW1hZ2luZSB0aGVyZSBhcmUgZGlmZmVyZW50IGNvZGVwYXRocyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgY29ubmVjdGlvbiBpcyBFU1RBQkxJU0hFRCwgTElTVEVOLCBvciBpbiBzb21lIG90aGVyIGludGVyaW0gc3RhdGUuIEhhbmRsaW5nIGEgRklOX1dBSVQgc3RhdGUgZGlmZmVyZW50bHkgdGhhbiBhIFNZTl9TRU5UIHN0YXRlIGlzIGdvaW5nIHRvIGJlIGtleSwgYW5kIEnigJlsbCBiZSB3YXRjaGluZyBmb3IgdGhvc2Ugc3BlY2lmaWMgbG9naWMgYnJhbmNoZXMuXG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBUQ1Agc3RhY2suIEhvdyBkb2VzIGl0IHNpZ25hbCB0aGUgYXBwbGljYXRpb24gbGF5ZXIgYWJvdXQgdGhlIGNvbm5lY3Rpb24ncyBkZW1pc2U/IERvZXMgaXQgc2VuZCBhbiBlcnJvciBjb2RlIGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uIG9yIGlzIHRoZSBzb2NrZXQgc2ltcGx5IGNsb3NlZD8gQW5kIHdoYXQgYWJvdXQgcmVzb3VyY2UgY2xlYW51cD8gRG9lcyBpdCBoYW5kbGUgcmVsZWFzaW5nIGFueSBhbGxvY2F0ZWQgYnVmZmVycywgdGltZXJzLCBvciBvdGhlciBjb25uZWN0aW9uLXNwZWNpZmljIGRhdGEgc3RydWN0dXJlcz8gQSBtZW1vcnkgbGVhayBoZXJlIGlzIHVuYWNjZXB0YWJsZS4gVGhlIGxldmVsIG9mIGRldGFpbCBhbmQgY2FyZSBpbiB0aGVzZSBhcmVhcyB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgdmlldyBvZiB0aGUgcXVhbGl0eSBvZiB0aGUgc3RhY2ssIGFuZCBob3cgcm9idXN0IGl0IGlzLlxuXG5UaGUgdXNlIG9mIGxvY2tzIGlzIGFsc28gYSBjb25jZXJuLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBwcm90ZWN0cyBhbmQgdGhlIHBvdGVudGlhbCBmb3IgYW55IHJhY2UgY29uZGl0aW9ucy4gQSBmdW5jdGlvbiBsaWtlIHRoaXMgaXMgZ29pbmcgdG8gYmUgY3JpdGljYWwgZm9yIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5LCBhbmQgSSB3YW50IHRvIHNlZSBob3cgdGhhdCdzIGhhbmRsZWQuIEZpbmFsbHksIEknbSBob3BpbmcgdG8gc2VlIHdlbGwtY29tbWVudGVkIGNvZGUsIGFzIGl0J3MgaW1wZXJhdGl2ZSB0aGF0IEkgZ2FpbiBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGZ1bmN0aW9uJ3MgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk5MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQzOjA5LjYwNjQ2MTY2N1oiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY3MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTExNSxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTExNTpcXHRpbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcXG41MTE2OlxcdHtcXG41MTE3OlxcdFxcdGludCBzdGF0ZSA9IGluZXRfc2tfc3RhdGVfbG9hZChzayk7XFxuNTExODpcXHRcXG41MTE5OlxcdFxcdGlmIChzdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKSB7XFxuNTEyMDpcXHRcXHRcXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEgPSBpbmV0X3JlcXNrKHNrKTtcXG41MTIxOlxcdFxcbjUxMjI6XFx0XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbjUxMjM6XFx0XFx0XFx0aW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChyZXEtXFx1MDAzZXJza19saXN0ZW5lciwgcmVxKTtcXG41MTI0OlxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbjUxMjU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTEyNjpcXHRcXHR9XFxuNTEyNzpcXHRcXHRpZiAoc3RhdGUgPT0gVENQX1RJTUVfV0FJVCkge1xcbjUxMjg6XFx0XFx0XFx0c3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBpbmV0X3R3c2soc2spO1xcbjUxMjk6XFx0XFxuNTEzMDpcXHRcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNnR3LVxcdTAwM2V0d19yZWZjbnQpO1xcbjUxMzE6XFx0XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbjUxMzI6XFx0XFx0XFx0aW5ldF90d3NrX2Rlc2NoZWR1bGVfcHV0KHR3KTtcXG41MTMzOlxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbjUxMzQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTEzNTpcXHRcXHR9XFxuNTEzNjpcXHRcXG41MTM3OlxcdFxcdC8qIEJQRiBjb250ZXh0IGVuc3VyZXMgc29jayBsb2NraW5nLiAqL1xcbjUxMzg6XFx0XFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXFxuNTEzOTpcXHRcXHRcXHQvKiBEb24ndCByYWNlIHdpdGggdXNlcnNwYWNlIHNvY2tldCBjbG9zZXMgc3VjaCBhcyB0Y3BfY2xvc2UuICovXFxuNTE0MDpcXHRcXHRcXHRsb2NrX3NvY2soc2spO1xcbjUxNDE6XFx0XFxuNTE0MjpcXHRcXHQvKiBBdm9pZCBjbG9zaW5nIHRoZSBzYW1lIHNvY2tldCB0d2ljZS4gKi9cXG41MTQzOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XFxuNTE0NDpcXHRcXHRcXHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcXG41MTQ1OlxcdFxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuNTE0NjpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG41MTQ3OlxcdFxcdH1cXG41MTQ4OlxcdFxcbjUxNDk6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOKSB7XFxuNTE1MDpcXHRcXHRcXHR0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xcbjUxNTE6XFx0XFx0XFx0aW5ldF9jc2tfbGlzdGVuX3N0b3Aoc2spO1xcbjUxNTI6XFx0XFx0fVxcbjUxNTM6XFx0XFxuNTE1NDpcXHRcXHQvKiBEb24ndCByYWNlIHdpdGggQkggc29ja2V0IGNsb3NlcyBzdWNoIGFzIGluZXRfY3NrX2xpc3Rlbl9zdG9wLiAqL1xcbjUxNTU6XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbjUxNTY6XFx0XFx0YmhfbG9ja19zb2NrKHNrKTtcXG41MTU3OlxcdFxcbjUxNTg6XFx0XFx0aWYgKHRjcF9uZWVkX3Jlc2V0KHNrLVxcdTAwM2Vza19zdGF0ZSkpXFxuNTE1OTpcXHRcXHRcXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTtcXG41MTYwOlxcdFxcdHRjcF9kb25lX3dpdGhfZXJyb3Ioc2ssIGVycik7XFxuNTE2MTpcXHRcXG41MTYyOlxcdFxcdGJoX3VubG9ja19zb2NrKHNrKTtcXG41MTYzOlxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbjUxNjQ6XFx0XFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXFxuNTE2NTpcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjUxNjY6XFx0XFx0cmV0dXJuIDA7XFxuNTE2NzpcXHR9XFxuNTE2ODpcXHRFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYWJvcnQpO1xcbjUxNjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQzOjA5LjYwNjY3MDU4N1oiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjExNDgxNDMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBSZWFzb25pbmcgZm9yIFRDUCBUaW1lLVdhaXQgU29ja2V0IERlc3RydWN0aW9uIGluIEJQRioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHJlcXVpcmVzIEtNU0FOIG9yIGlmIEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1Z2dlcnMgYXJlIHN1ZmZpY2llbnQuIFRoZSBjb3JlIGNoYW5nZSBmb2N1c2VzIG9uIHNhZmVseSBkZXN0cm95aW5nIFRDUCBUSU1FX1dBSVQgc29ja2V0cyBhbmQgc2ltaWxhciBcIm1pbmktc29ja2V0c1wiIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQgdmlhIGBicGZfc29ja19kZXN0cm95YC4gU3BlY2lmaWNhbGx5LCBpdCBhZGRyZXNzZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgd2hlbiBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIHdhcyBhY2Nlc3NlZCBvbiB0aGVzZSBub24tZnVsbCBzb2NrZXRzLCB3aGljaCB1c2UgYGluZXRfdGltZXdhaXRfc29ja2AgaW5zdGVhZCBvZiBgc3RydWN0IHNvY2tgLlxuXG5Jbml0aWFsbHksIGB0Y3BfYWJvcnRgIHdhcyB1c2VkIHRvIGhhbmRsZSB0aGUgY2xlYW51cCBhbmQgaXQgdG91Y2hlZCB0aGVzZSB0aW1lLXdhaXQgc29ja2V0cy4gTm93LCB0aGlzIHBhdGNoIG5vdyBjaGVja3MgYHNrX2Z1bGxzb2NrKHNrKWAgKmJlZm9yZSogYWNjZXNzaW5nIGBzay1cdTAwM2Vza19wcm90b2NvbGAuIElmIGl0ICppcyogYSBmdWxsIHNvY2tldCwgaXQgcHJvY2VlZHMgd2l0aCB0aGUgcHJvdG9jb2wgY2hlY2suIElmIGl0J3MgKm5vdCogZnVsbCAobGlrZSBhIGBUSU1FX1dBSVRgIHNvY2tldCksIGl0IGludm9rZXMgYHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95YCAod2hpY2ggaXMgYHRjcF9hYm9ydGAgaGVyZSkgdG8gY2xlYW5seSBoYW5kbGUgZGVzdHJ1Y3Rpb24sIGVuc3VyaW5nIHdlIGF2b2lkIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQgaXNzdWUuIFdlJ3JlIGFsc28gYWRkaW5nIHNlbGZ0ZXN0cyB0byB2ZXJpZnkgdGhpcyBiZWhhdmlvci5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgS01TQU4tc3BlY2lmaWMgcmlza3M/IExldCdzIGdvIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhOlxuXG4qICAgKipVc2VyLXNwYWNlIGNvcGllcy9sZWFrcz8qKiBOb3BlLiBObyBuZXcga2VybmVsIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZS4gVGhlcmUncyBubyBkYXRhIGNvcHlpbmcgdXNpbmcgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIGV0Yy5cbiogICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzL2NvbmRpdGlvbmFsIGxvZ2ljPyoqIEFic29sdXRlbHkgbm90LiBUaGUgY29kZSBpcyAqcHJldmVudGluZyogYW4gb3V0LW9mLWJvdW5kcyByZWFkIGFuZCBub3QgYWRkaW5nIGFueSBsb2dpYyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBXZSBhcmUgYWRkaW5nIGEgY2hlY2sgdG8gZW5zdXJlIHdlIG9ubHkgYWNjZXNzIHRoZSBmdWxsIHNvY2tldC5cbiogICAqKkNvbXBsZXggYWxsb2NhdGlvbnM/KiogTm8gbmV3IGFsbG9jYXRpb25zIHRoYXQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyZSBwcmVzZW50LlxuKiAgICoqQm91bmRzIGNoZWNrcy9sZW5ndGggaXNzdWVzPyoqIFRoZSBtYWluIGNoYW5nZSAqaXMqIGEgYm91bmRzIGNoZWNrLCBidXQgaXQncyAqc3RyZW5ndGhlbmluZyogdGhlIGJvdW5kcyBjaGVja2luZy4gVGhlIGNoZWNrIGVuc3VyZXMgd2UncmUgKm5vdCogYWNjZXNzaW5nIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBwcm90ZWN0cyBgc2stXHUwMDNlc2tfcHJvdG9jb2xgLlxuXG5JbiBmYWN0LCB0aGlzIHBhdGNoIGlzICpwcmV2ZW50aW5nKiB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIHByZXZpb3VzIGNvZGUgd2FzIGFjY2Vzc2luZyBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIG9uIHdoYXQgd2VyZSBlc3NlbnRpYWxseSwgc21hbGxlciBgc29ja19jb21tb25gIHN0cnVjdHVyZXMuIFRoZSBuZXcgbG9naWMgaXMgZGVzaWduZWQgdG8gKmF2b2lkKiB0aGF0LlxuXG5UaGUgYnVncyBwb3RlbnRpYWxseSBpbnRyb2R1Y2VkIGFyZSBvZiB0aGUgdHlwZSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dlcnMgYXJlIGJ1aWx0IHRvIGZpbmQuIEZvciBleGFtcGxlLCBpZiB0aGVyZSB3ZXJlIGlzc3VlcyB3aXRoIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcsIHVzZS1hZnRlci1mcmVlLCBvciBpZiBgZGlhZ19kZXN0cm95YCB3YXMgaW5jb3JyZWN0bHkgY2FsbGVkLCB0aGVzZSB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCB3aGljaCBhcmUgYWxsIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgbG9ja2RlcC5cblxuVGhlcmVmb3JlLCB0aGUgcmVhc29uaW5nIGlzIGFzIGZvbGxvd3M6XG5cbiogICAqKktBU0FOIC8gU3RhbmRhcmQgRGV0ZWN0b3JzOioqIFRoZSBwYXRjaCBtYWlubHkgYWRkcmVzc2VzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBzb2NrZXQgbGlmZWN5Y2xlIGlzc3VlcyByZWxhdGVkIHRvIHRoZXNlIG5vbi1mdWxsIHNvY2tldHMuIFRoZXNlIHJpc2tzIGFyZSByZWxhdGVkIHRvIHJlZmNvdW50aW5nLCBzb2NrZXQgbGlmZWN5Y2xlL2xvY2tpbmcgKGhhbmRsZWQgYnkgYGluZXRfdHdza19kZXNjaGVkdWxlX3B1dGApLCB1c2UtYWZ0ZXItZnJlZSwgYW5kIGludmFsaWQgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy5cbiogICAqKktNU0FOOioqIFRoZSBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBtZW1vcnkgY29waWVzIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGFsbG9jYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLiBBY3R1YWxseSwgdGhlIHBhdGNoICpwcmV2ZW50cyogYW4gb3V0LW9mLWJvdW5kcyByZWFkaW5nIG9mIGBza19wcm90b2NvbGAgb24gbWluaS1zb2NrZXRzLCBzbyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIEtNU0FOLlxuXG5TbywgYE5lZWRzS01TQU4gPSBmYWxzZWAuIFdlIGNhbiBzYWZlbHkgbWFyayB0aGlzIGFzIG5vdCBuZWVkaW5nIEtNU0FOIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzA2LCJPdXRwdXRUb2tlbnMiOjI1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MzoyMS43MjE0ODgxNDNaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYga2Z1bmMgYGJwZl9zb2NrX2Rlc3Ryb3koKWAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBzdXBwb3J0IG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBzb2NrZXRzKSBieSBjaGVja2luZyBgc2tfZnVsbHNvY2soc2spYCBiZWZvcmUgaW5zcGVjdGluZyBgc2stXFx1MDAzZXNrX3Byb3RvY29sYCwgYW5kIGludm9rZXMgYHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRClgLiBUaGUgYWNjb21wYW55aW5nIGNoYW5nZXMgYXJlIEJQRiBzZWxmdGVzdHMuXFxuXFxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlcnNwYWNlICh2aWEgY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCwgZXRjLiksIGFuZCBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLlxcbi0gVGhlIHBvdGVudGlhbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggc29ja2V0IGRlc3RydWN0aW9uIChlLmcuLCBzb2NrZXQgbGlmZWN5Y2xlL3JlZmNvdW50aW5nIHJhY2VzLCBsb2NraW5nIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBkZXJlZmVyZW5jZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzLlxcbi0gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGtmdW5jIGBicGZfc29ja19kZXN0cm95KClgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gc3VwcG9ydCBub24tZnVsbCBzb2NrZXRzIChzdWNoIGFzIFRDUCBUSU1FX1dBSVQgc29ja2V0cykgYnkgY2hlY2tpbmcgYHNrX2Z1bGxzb2NrKHNrKWAgYmVmb3JlIGluc3BlY3RpbmcgYHNrLVxcdTAwM2Vza19wcm90b2NvbGAsIGFuZCBpbnZva2VzIGBzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlZGlhZ19kZXN0cm95KHNrLCBFQ09OTkFCT1JURUQpYC4gVGhlIGFjY29tcGFueWluZyBjaGFuZ2VzIGFyZSBCUEYgc2VsZnRlc3RzLlxcblxcbktNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXJzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGwsIGV0Yy4pLCBhbmQgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cXG4tIFRoZSBwb3RlbnRpYWwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHNvY2tldCBkZXN0cnVjdGlvbiAoZS5nLiwgc29ja2V0IGxpZmVjeWNsZS9yZWZjb3VudGluZyByYWNlcywgbG9ja2luZyBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgZGVyZWZlcmVuY2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycy5cXG4tIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowtwpkb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 18:24:24 +0000 UTC FinishedAt: 2026-09-05 18:43:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "9eab111e765729e93087ff86a2ec9b2ae42d0fa5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET", "INET", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "9eab111e765729e93087ff86a2ec9b2ae42d0fa5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET", "INET", "DEBUG_INFO_BTF" ], "series_id": "155af2d4-4256-4f64-b299-b1d7508b6d0d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_sock_destroy", "tcp_abort" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NvY2tfZGVzdHJveSYjMzQ7LAogICAgJiMzNDt0Y3BfYWJvcnQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGtmdW5jIGBicGZfc29ja19kZXN0cm95KClgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gc3VwcG9ydCBub24tZnVsbCBzb2NrZXRzIChzdWNoIGFzIFRDUCBUSU1FX1dBSVQgc29ja2V0cykgYnkgY2hlY2tpbmcgYHNrX2Z1bGxzb2NrKHNrKWAgYmVmb3JlIGluc3BlY3RpbmcgYHNrLVx1MDAzZXNrX3Byb3RvY29sYCwgYW5kIGludm9rZXMgYHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KHNrLCBFQ09OTkFCT1JURUQpYC4gVGhlIGFjY29tcGFueWluZyBjaGFuZ2VzIGFyZSBCUEYgc2VsZnRlc3RzLlxuXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXJzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGwsIGV0Yy4pLCBhbmQgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cbi0gVGhlIHBvdGVudGlhbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggc29ja2V0IGRlc3RydWN0aW9uIChlLmcuLCBzb2NrZXQgbGlmZWN5Y2xlL3JlZmNvdW50aW5nIHJhY2VzLCBsb2NraW5nIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBkZXJlZmVyZW5jZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzLlxuLSBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVhY2hhYmxlIEJQRiBrZnVuYyBgYnBmX3NvY2tfZGVzdHJveWAgdG8gc3VwcG9ydCBub24tZnVsbCBzb2NrZXRzIChzdWNoIGFzIFRDUCBUSU1FX1dBSVQgYW5kIHJlcXVlc3Qgc29ja2V0cykgYnkgb25seSBjaGVja2luZyB0aGUgcHJvdG9jb2wgb24gZnVsbCBzb2NrZXRzIChgc2tfZnVsbHNvY2tgKS4gVGhpcyBhbGxvd3MgQlBGIGl0ZXJhdG9yIHByb2dyYW1zIHRvIGludm9rZSBzb2NrZXQgZGVzdHJ1Y3Rpb24gKGBkaWFnX2Rlc3Ryb3lgIC8gYHRjcF9hYm9ydGApIG9uIHRpbWV3YWl0IHNvY2tldHMgYW5kIHN5bi1yZWN2IHJlcXVlc3RzLCB3aGljaCBjYW4gdW5jb3ZlciByYWNlIGNvbmRpdGlvbnMgb3Igc3RhdGUtaGFuZGxpbmcgaXNzdWVzIGR1cmluZyBzb2NrZXQgdGVhcmRvd24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3ZWU0ODc0MzVkMTYxZTY4ZTdkOWZkYTcxN2YzNTQ0NDAwYmNlZDhiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxODo0MToyMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCA2MTk0MGU3NTM1NTIzLi5hNDFjYzYwYTQwMWE1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtMTI5MTIsOCAmIzQzOzEyOTEyLDkgQEAgX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuICAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWRcbiAgKlxuICAqIFJldHVybjpcbi0gKiBPbiBlcnJvciwgbWF5IHJldHVybiBFUFJPVE9OT1NVUFBPUlQsIEVJTlZBTC5cbi0gKiBFUFJPVE9OT1NVUFBPUlQgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuXG4mIzQzOyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIG9yIHdoYXRldmVyIHRoZSBwcm90b2NvbCBzcGVjaWZpY1xuJiM0MzsgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cbiYjNDM7ICogRU9QTk9UU1VQUCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC5cbiAgKiAwIG90aGVyd2lzZVxuICAqL1xuIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcbkBAIC0xMjkyNSw4ICYjNDM7MTI5MjYsMTIgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuIFx0ICogU3VwcG9ydGluZyBwcm90b2NvbHMgd2lsbCBuZWVkIHRvIGFjcXVpcmUgc29jayBsb2NrIGluIHRoZSBCUEYgY29udGV4dFxuIFx0ICogcHJpb3IgdG8gaW52b2tpbmcgdGhpcyBrZnVuYy5cbiBcdCAqL1xuLVx0aWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSB8fCAoc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdCAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKSlcbiYjNDM7XHRpZiAoIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRpZiAoc2tfZnVsbHNvY2soc2spIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdHJldHVybiBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG5pbmRleCA5YzExOTM4ZmU1OTdkLi5iOTBmYWI3MDczMzg2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG5AQCAtMTEwLDYgJiM0MzsxMTAsNzQgQEAgc3RhdGljIHZvaWQgdGVzdF90Y3Bfc2VydmVyKHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbiBcdFx0Y2xvc2Uoc2Vydik7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3RjcF90aW1ld2FpdChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBhY2NlcHRfc2VydiA9IC0xLCBuO1xuJiM0MztcdHN0cnVjdCB0aW1ldmFsIHR2ID0ge307XG4mIzQzO1x0Y2hhciBidWZbMV07XG4mIzQzO1xuJiM0MztcdHNlcnYgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBOVUxMLCAwLCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShzZXJ2LCAwLCBcJiMzNDtzdGFydF9zZXJ2ZXJcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRjbGllbiA9IGNvbm5lY3RfdG9fZmQoc2VydiwgMCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoY2xpZW4sIDAsIFwmIzM0O2Nvbm5lY3RfdG9fZmRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRhY2NlcHRfc2VydiA9IGFjY2VwdChzZXJ2LCBOVUxMLCBOVUxMKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShhY2NlcHRfc2VydiwgMCwgXCYjMzQ7c2VydiBhY2NlcHRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFjdGl2ZSBjbG9zZSBmcm9tIHRoZSBjbGllbnQsIHRoZW4gY2xvc2UgdGhlIHNlcnZlciBzaWRlLiBPbmNlXG4mIzQzO1x0ICogcmVjdigpIHNlZXMgRU9GIHRoZSBzZXJ2ZXIgRklOIGhhcyBiZWVuIHByb2Nlc3NlZCBhbmQgdGhlIGNsaWVudFxuJiM0MztcdCAqIHNvY2sgaXMgaW4gVElNRV9XQUlULiBCbG9jayB3aXRob3V0IHRpbWVvdXQgc28gYSBsb2FkZWQgQ0kgYm94XG4mIzQzO1x0ICogY2FuJiMzOTt0IHJhY2UgdXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soc2V0c29ja29wdChjbGllbiwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFx1MDAyNnR2LFxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHR2KSksIFwmIzM0O2NsZWFyIHJjdnRpbWVvXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhzaHV0ZG93bihjbGllbiwgU0hVVF9XUiksIFwmIzM0O2NsaWVudCBzaHV0ZG93blwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTWFrZSBzdXJlIHRoZSBzZXJ2ZXIgaGFzIHNlZW4gdGhlIGNsaWVudCBGSU4gYmVmb3JlIGl0IGNsb3NlcyxcbiYjNDM7XHQgKiBzbyB0aGUgdHdvIEZJTnMgbmV2ZXIgY3Jvc3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0biA9IHJlY3YoYWNjZXB0X3NlcnYsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKG4sIDAsIFwmIzM0O3NlcnZlciByZWN2IEVPRlwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGNsb3NlKGFjY2VwdF9zZXJ2KTtcbiYjNDM7XHRhY2NlcHRfc2VydiA9IC0xO1xuJiM0MztcbiYjNDM7XHQvKiBibG9jayB1bnRpbCByZXR1cm4gRU9GICovXG4mIzQzO1x0biA9IHJlY3YoY2xpZW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKG4sIDAsIFwmIzM0O2NsaWVudCByZWN2IEVPRlwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgdGhlIHRpbWV3YWl0IGNsaWVudCBzb2NrLiAqL1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kID0gMDtcbiYjNDM7XHRzdGFydF9pdGVyX3NvY2tldHMoc2tlbC1cdTAwM2Vwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kLCAxLCBcJiMzNDt0aW1ld2FpdCBzb2NrIGZvdW5kXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX09LKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2Rlc3Ryb3lfZXJyLCBcJiMzNDtkZXN0cm95IHRpbWV3YWl0IHNvY2tcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgZGVzdHJveWVkIHRpbWV3YWl0IHNvY2sgbXVzdCBiZSBnb25lLiAqL1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kID0gMDtcbiYjNDM7XHRzdGFydF9pdGVyX3NvY2tldHMoc2tlbC1cdTAwM2Vwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19mb3VuZCwgMCwgXCYjMzQ7dGltZXdhaXQgc29jayBkZXN0cm95ZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7Y2xlYW51cDpcbiYjNDM7XHRpZiAoY2xpZW4gIT0gLTEpXG4mIzQzO1x0XHRjbG9zZShjbGllbik7XG4mIzQzO1x0aWYgKGFjY2VwdF9zZXJ2ICE9IC0xKVxuJiM0MztcdFx0Y2xvc2UoYWNjZXB0X3NlcnYpO1xuJiM0MztcdGlmIChzZXJ2ICE9IC0xKVxuJiM0MztcdFx0Y2xvc2Uoc2Vydik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdGVzdF91ZHBfY2xpZW50KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbiB7XG4gXHRpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBuID0gMDtcbkBAIC0yMDQsMTEgJiM0MzsyNzIsMTIgQEAgdm9pZCB0ZXN0X3NvY2tfZGVzdHJveSh2b2lkKVxuIFx0XHR0ZXN0X3RjcF9jbGllbnQoc2tlbCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDt0Y3Bfc2VydmVyXCYjMzQ7KSlcbiBcdFx0dGVzdF90Y3Bfc2VydmVyKHNrZWwpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3RjcF90aW1ld2FpdFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X3RjcF90aW1ld2FpdChza2VsKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3VkcF9jbGllbnRcJiMzNDspKVxuIFx0XHR0ZXN0X3VkcF9jbGllbnQoc2tlbCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDt1ZHBfc2VydmVyXCYjMzQ7KSlcbiBcdFx0dGVzdF91ZHBfc2VydmVyKHNrZWwpO1xuLVxuIFx0UlVOX1RFU1RTKHNvY2tfZGVzdHJveV9wcm9nX2ZhaWwpO1xuIFxuIGNsZWFudXA6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xuaW5kZXggOWUwYmY3YTU0Y2VjOS4uMGE4ODg3NTQzMjE4YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xuQEAgLTcsNiAmIzQzOzcsOCBAQFxuICNpbmNsdWRlIFwmIzM0O2JwZl90cmFjaW5nX25ldC5oXCYjMzQ7XG4gXG4gX19iZTE2IHNlcnZfcG9ydCA9IDA7XG4mIzQzO2ludCB0d19mb3VuZCA9IDA7XG4mIzQzO2ludCB0d19kZXN0cm95X2VyciA9IDA7XG4gXG4gaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzaykgX19rc3ltO1xuIFxuQEAgLTEwMCw2ICYjNDM7MTAyLDM0IEBAIGludCBpdGVyX3RjcDZfc2VydmVyKHN0cnVjdCBicGZfaXRlcl9fdGNwICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDtpdGVyL3RjcFwmIzM0OylcbiYjNDM7aW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNvY2tfY29tbW9uICpza19jb21tb24gPSBjdHgtXHUwMDNlc2tfY29tbW9uO1xuJiM0MztcdF9fdTY0ICp2YWw7XG4mIzQzO1x0aW50IGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghc2tfY29tbW9uKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChza19jb21tb24tXHUwMDNlc2tjX2ZhbWlseSAhPSBBRl9JTkVUNilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2soc2tfY29tbW9uKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRjcF9jb25uX3NvY2tldHMsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHQvKiBUaGUgdGltZXdhaXQgc29jayBpbmhlcml0cyB0aGUgY29va2llIG9mIHRoZSBjbG9zZWQgY2xpZW50IHNvY2suICovXG4mIzQzO1x0aWYgKGJwZl9nZXRfc29ja2V0X2Nvb2tpZShza19jb21tb24pICE9ICp2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0dHdfZm91bmQmIzQzOyYjNDM7O1xuJiM0MztcdHR3X2Rlc3Ryb3lfZXJyID0gYnBmX3NvY2tfZGVzdHJveShza19jb21tb24pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuIFxuIFNFQyhcJiMzNDtpdGVyL3VkcFwmIzM0OylcbiBpbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NvY2tfZGVzdHJveSYjMzQ7LAogICAgJiMzNDt0Y3BfYWJvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlYWNoYWJsZSBCUEYga2Z1bmMgYGJwZl9zb2NrX2Rlc3Ryb3lgIHRvIHN1cHBvcnQgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIGFuZCByZXF1ZXN0IHNvY2tldHMpIGJ5IG9ubHkgY2hlY2tpbmcgdGhlIHByb3RvY29sIG9uIGZ1bGwgc29ja2V0cyAoYHNrX2Z1bGxzb2NrYCkuIFRoaXMgYWxsb3dzIEJQRiBpdGVyYXRvciBwcm9ncmFtcyB0byBpbnZva2Ugc29ja2V0IGRlc3RydWN0aW9uIChgZGlhZ19kZXN0cm95YCAvIGB0Y3BfYWJvcnRgKSBvbiB0aW1ld2FpdCBzb2NrZXRzIGFuZCBzeW4tcmVjdiByZXF1ZXN0cywgd2hpY2ggY2FuIHVuY292ZXIgcmFjZSBjb25kaXRpb25zIG9yIHN0YXRlLWhhbmRsaW5nIGlzc3VlcyBkdXJpbmcgc29ja2V0IHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2VlNDg3NDM1ZDE2MWU2OGU3ZDlmZGE3MTdmMzU0NDQwMGJjZWQ4YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTg6NDE6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDYxOTQwZTc1MzU1MjMuLmE0MWNjNjBhNDAxYTUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC0xMjkxMiw4ICYjNDM7MTI5MTIsOSBAQCBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7CiAgKiBAc29jazogUG9pbnRlciB0byBzb2NrZXQgdG8gYmUgZGVzdHJveWVkCiAgKgogICogUmV0dXJuOgotICogT24gZXJyb3IsIG1heSByZXR1cm4gRVBST1RPTk9TVVBQT1JULCBFSU5WQUwuCi0gKiBFUFJPVE9OT1NVUFBPUlQgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuCiYjNDM7ICogT24gZXJyb3IsIG1heSByZXR1cm4gRU9QTk9UU1VQUCwgb3Igd2hhdGV2ZXIgdGhlIHByb3RvY29sIHNwZWNpZmljCiYjNDM7ICogZGVzdHJveSBoYW5kbGVyIHJldHVybnMuCiYjNDM7ICogRU9QTk9UU1VQUCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC4KICAqIDAgb3RoZXJ3aXNlCiAgKi8KIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaykKQEAgLTEyOTI1LDggJiM0MzsxMjkyNiwxMiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spCiAJICogU3VwcG9ydGluZyBwcm90b2NvbHMgd2lsbCBuZWVkIHRvIGFjcXVpcmUgc29jayBsb2NrIGluIHRoZSBCUEYgY29udGV4dAogCSAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuCiAJICovCi0JaWYgKCFzay0mZ3Q7c2tfcHJvdC0mZ3Q7ZGlhZ19kZXN0cm95IHx8IChzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJmFtcDsmYW1wOwotCQkJCQkgICBzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApKQomIzQzOwlpZiAoIXNrLSZndDtza19wcm90LSZndDtkaWFnX2Rlc3Ryb3kpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmIChza19mdWxsc29jayhzaykgJmFtcDsmYW1wOwomIzQzOwkgICAgc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVENQICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJcmV0dXJuIHNrLSZndDtza19wcm90LSZndDtkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jCmluZGV4IDljMTE5MzhmZTU5N2QuLmI5MGZhYjcwNzMzODYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jCkBAIC0xMTAsNiAmIzQzOzExMCw3NCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3RjcF9zZXJ2ZXIoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKQogCQljbG9zZShzZXJ2KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRlc3RfdGNwX3RpbWV3YWl0KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbCkKJiM0Mzt7CiYjNDM7CWludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIGFjY2VwdF9zZXJ2ID0gLTEsIG47CiYjNDM7CXN0cnVjdCB0aW1ldmFsIHR2ID0ge307CiYjNDM7CWNoYXIgYnVmWzFdOwomIzQzOwomIzQzOwlzZXJ2ID0gc3RhcnRfc2VydmVyKEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgTlVMTCwgMCwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHNlcnYsIDAsICYjMzQ7c3RhcnRfc2VydmVyJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwljbGllbiA9IGNvbm5lY3RfdG9fZmQoc2VydiwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGNsaWVuLCAwLCAmIzM0O2Nvbm5lY3RfdG9fZmQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWFjY2VwdF9zZXJ2ID0gYWNjZXB0KHNlcnYsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShhY2NlcHRfc2VydiwgMCwgJiMzNDtzZXJ2IGFjY2VwdCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQWN0aXZlIGNsb3NlIGZyb20gdGhlIGNsaWVudCwgdGhlbiBjbG9zZSB0aGUgc2VydmVyIHNpZGUuIE9uY2UKJiM0MzsJICogcmVjdigpIHNlZXMgRU9GIHRoZSBzZXJ2ZXIgRklOIGhhcyBiZWVuIHByb2Nlc3NlZCBhbmQgdGhlIGNsaWVudAomIzQzOwkgKiBzb2NrIGlzIGluIFRJTUVfV0FJVC4gQmxvY2sgd2l0aG91dCB0aW1lb3V0IHNvIGEgbG9hZGVkIENJIGJveAomIzQzOwkgKiBjYW4mIzM5O3QgcmFjZSB1cy4KJiM0MzsJICovCiYjNDM7CWlmICghQVNTRVJUX09LKHNldHNvY2tvcHQoY2xpZW4sIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCAmYW1wO3R2LAomIzQzOwkJCQkgIHNpemVvZih0dikpLCAmIzM0O2NsZWFyIHJjdnRpbWVvJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhzaHV0ZG93bihjbGllbiwgU0hVVF9XUiksICYjMzQ7Y2xpZW50IHNodXRkb3duJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYWtlIHN1cmUgdGhlIHNlcnZlciBoYXMgc2VlbiB0aGUgY2xpZW50IEZJTiBiZWZvcmUgaXQgY2xvc2VzLAomIzQzOwkgKiBzbyB0aGUgdHdvIEZJTnMgbmV2ZXIgY3Jvc3MuCiYjNDM7CSAqLwomIzQzOwluID0gcmVjdihhY2NlcHRfc2VydiwgYnVmLCBzaXplb2YoYnVmKSwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKG4sIDAsICYjMzQ7c2VydmVyIHJlY3YgRU9GJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwljbG9zZShhY2NlcHRfc2Vydik7CiYjNDM7CWFjY2VwdF9zZXJ2ID0gLTE7CiYjNDM7CiYjNDM7CS8qIGJsb2NrIHVudGlsIHJldHVybiBFT0YgKi8KJiM0MzsJbiA9IHJlY3YoY2xpZW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOwomIzQzOwlpZiAoIUFTU0VSVF9FUShuLCAwLCAmIzM0O2NsaWVudCByZWN2IEVPRiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogUnVuIGl0ZXJhdG9yIHByb2dyYW0gdGhhdCBkZXN0cm95cyB0aGUgdGltZXdhaXQgY2xpZW50IHNvY2suICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQgPSAwOwomIzQzOwlzdGFydF9pdGVyX3NvY2tldHMoc2tlbC0mZ3Q7cHJvZ3MuaXRlcl90Y3A2X3RpbWV3YWl0KTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDt0d19mb3VuZCwgMSwgJiMzNDt0aW1ld2FpdCBzb2NrIGZvdW5kJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlBU1NFUlRfT0soc2tlbC0mZ3Q7YnNzLSZndDt0d19kZXN0cm95X2VyciwgJiMzNDtkZXN0cm95IHRpbWV3YWl0IHNvY2smIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFRoZSBkZXN0cm95ZWQgdGltZXdhaXQgc29jayBtdXN0IGJlIGdvbmUuICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQgPSAwOwomIzQzOwlzdGFydF9pdGVyX3NvY2tldHMoc2tlbC0mZ3Q7cHJvZ3MuaXRlcl90Y3A2X3RpbWV3YWl0KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQsIDAsICYjMzQ7dGltZXdhaXQgc29jayBkZXN0cm95ZWQmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGNsaWVuICE9IC0xKQomIzQzOwkJY2xvc2UoY2xpZW4pOwomIzQzOwlpZiAoYWNjZXB0X3NlcnYgIT0gLTEpCiYjNDM7CQljbG9zZShhY2NlcHRfc2Vydik7CiYjNDM7CWlmIChzZXJ2ICE9IC0xKQomIzQzOwkJY2xvc2Uoc2Vydik7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdGVzdF91ZHBfY2xpZW50KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbCkKIHsKIAlpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBuID0gMDsKQEAgLTIwNCwxMSAmIzQzOzI3MiwxMiBAQCB2b2lkIHRlc3Rfc29ja19kZXN0cm95KHZvaWQpCiAJCXRlc3RfdGNwX2NsaWVudChza2VsKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3RjcF9zZXJ2ZXImIzM0OykpCiAJCXRlc3RfdGNwX3NlcnZlcihza2VsKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt0Y3BfdGltZXdhaXQmIzM0OykpCiYjNDM7CQl0ZXN0X3RjcF90aW1ld2FpdChza2VsKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3VkcF9jbGllbnQmIzM0OykpCiAJCXRlc3RfdWRwX2NsaWVudChza2VsKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3VkcF9zZXJ2ZXImIzM0OykpCiAJCXRlc3RfdWRwX3NlcnZlcihza2VsKTsKLQogCVJVTl9URVNUUyhzb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsKTsKIAogY2xlYW51cDoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMKaW5kZXggOWUwYmY3YTU0Y2VjOS4uMGE4ODg3NTQzMjE4YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmMKQEAgLTcsNiAmIzQzOzcsOCBAQAogI2luY2x1ZGUgJiMzNDticGZfdHJhY2luZ19uZXQuaCYjMzQ7CiAKIF9fYmUxNiBzZXJ2X3BvcnQgPSAwOwomIzQzO2ludCB0d19mb3VuZCA9IDA7CiYjNDM7aW50IHR3X2Rlc3Ryb3lfZXJyID0gMDsKIAogaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzaykgX19rc3ltOwogCkBAIC0xMDAsNiAmIzQzOzEwMiwzNCBAQCBpbnQgaXRlcl90Y3A2X3NlcnZlcihzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7aXRlci90Y3AmIzM0OykKJiM0MztpbnQgaXRlcl90Y3A2X3RpbWV3YWl0KHN0cnVjdCBicGZfaXRlcl9fdGNwICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja19jb21tb24gKnNrX2NvbW1vbiA9IGN0eC0mZ3Q7c2tfY29tbW9uOwomIzQzOwlfX3U2NCAqdmFsOwomIzQzOwlpbnQga2V5ID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFza19jb21tb24pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHNrX2NvbW1vbi0mZ3Q7c2tjX2ZhbWlseSAhPSBBRl9JTkVUNikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoIWJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2soc2tfY29tbW9uKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7dGNwX2Nvbm5fc29ja2V0cywgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwkvKiBUaGUgdGltZXdhaXQgc29jayBpbmhlcml0cyB0aGUgY29va2llIG9mIHRoZSBjbG9zZWQgY2xpZW50IHNvY2suICovCiYjNDM7CWlmIChicGZfZ2V0X3NvY2tldF9jb29raWUoc2tfY29tbW9uKSAhPSAqdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXR3X2ZvdW5kJiM0MzsmIzQzOzsKJiM0MzsJdHdfZGVzdHJveV9lcnIgPSBicGZfc29ja19kZXN0cm95KHNrX2NvbW1vbik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KIAogU0VDKCYjMzQ7aXRlci91ZHAmIzM0OykKIGludCBpdGVyX3VkcDZfY2xpZW50KHN0cnVjdCBicGZfaXRlcl9fdWRwICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBicGZfc29ja19kZXN0cm95IENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGJwZl9zb2NrX2Rlc3Ryb3lgIGRpZmYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB0aGUgaW1wbGljYXRpb25zLiBSaWdodCBhd2F5LCBJIHNlZSB0aGUgbW9kaWZpY2F0aW9ucyB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290IHNvbWUgY29uZGl0aW9uYWwgbG9naWMgcmVsYXRlZCB0byBwcm90b2NvbCBoYW5kbGluZyBhbmQgc29ja2V0IGRlc3RydWN0aW9uLgoKU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBvcmlnaW5hbGx5IGhhZCBhIGNoZWNrIHRvIHNlZSBpZiB0aGUgc29ja2V0IHByb3RvY29sIHdhcyBuZWl0aGVyIFRDUCBub3IgVURQIGJlZm9yZSByZXR1cm5pbmcgYC1FT1BOT1RTVVBQYC4gVGhhdCBjaGVjayBoYXMgYmVlbiBtb2RpZmllZC4gTm93LCBpdCBhcHBlYXJzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgY2hlY2sgYHNrX2Z1bGxzb2NrKHNrKWAgaW50cm9kdWNlZCwgYW5kIHRoZSBwcm90b2NvbCBmaWx0ZXJpbmcgaXMgd2l0aGluIHRoYXQgbmV3IGNvbmRpdGlvbmFsLiBBbHNvLCBhIGAtRU9QTk9UU1VQUGAgaXMgcmV0dXJuZWQgaWYgYGRpYWdfZGVzdHJveWAgaXMgbm90IGRlZmluZWQuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVhc29uaW5nIGhlcmUuIFRoZSBjb21tZW50IHN1Z2dlc3RzIHRoYXQgc3VwcG9ydGluZyBwcm90b2NvbHMgbXVzdCBhY3F1aXJlIHRoZSBzb2NrIGxvY2sgYmVmb3JlIGNhbGxpbmcgdGhpcyBrZnVuYy4gU28gSSBoYXZlIHRvIHVuZGVyc3RhbmQgd2h5IHRoZSBhZGRlZCBjaGVjayBhbmQgdGhlIHByb3RvY29sIGZpbHRlcmluZyBpcyByZWxldmFudCB0byB0aGlzIGxvY2tpbmcgcmVxdWlyZW1lbnQuCgpUbyB0cnVseSBncmFzcCB0aGlzLCBJIG5lZWQgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBnbyBiZXlvbmQgdGhpcyBzbmlwcGV0LiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBzZWUgaG93IGBicGZfc29ja19kZXN0cm95YCBpcyBkZWZpbmVkLiBJJiMzOTtsbCBhbHNvIGNoZWNrIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBhbmQgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEEgcXVpY2sgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHdpbGwgZ2l2ZSBtZSB0aGF0IHN1cnJvdW5kaW5nIGNvZGUsIGRlcGVuZGVuY2llcywgYW5kIGNhbGwgc2l0ZXMuIEkgbmVlZCB0byBzZWUgd2hhdCBvdGhlciBjb2RlIHRoaXMgdG91Y2hlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI5MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI5MTA6XHQgKlxuMTI5MTE6XHQgKiBQYXJhbWV0ZXJzOlxuMTI5MTI6XHQgKiBAc29jazogUG9pbnRlciB0byBzb2NrZXQgdG8gYmUgZGVzdHJveWVkXG4xMjkxMzpcdCAqXG4xMjkxNDpcdCAqIFJldHVybjpcbjEyOTE1Olx0ICogT24gZXJyb3IsIG1heSByZXR1cm4gRU9QTk9UU1VQUCwgb3Igd2hhdGV2ZXIgdGhlIHByb3RvY29sIHNwZWNpZmljXG4xMjkxNjpcdCAqIGRlc3Ryb3kgaGFuZGxlciByZXR1cm5zLlxuMTI5MTc6XHQgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuMTI5MTg6XHQgKiAwIG90aGVyd2lzZVxuMTI5MTk6XHQgKi9cbjEyOTIwOlx0X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuMTI5MjE6XHR7XG4xMjkyMjpcdFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopc29jaztcbjEyOTIzOlx0XG4xMjkyNDpcdFx0LyogVGhlIGxvY2tpbmcgc2VtYW50aWNzIHRoYXQgYWxsb3cgZm9yIHN5bmNocm9ub3VzIGV4ZWN1dGlvbiBvZiB0aGVcbjEyOTI1Olx0XHQgKiBkZXN0cm95IGhhbmRsZXJzIGFyZSBvbmx5IHN1cHBvcnRlZCBmb3IgVENQIGFuZCBVRFAuXG4xMjkyNjpcdFx0ICogU3VwcG9ydGluZyBwcm90b2NvbHMgd2lsbCBuZWVkIHRvIGFjcXVpcmUgc29jayBsb2NrIGluIHRoZSBCUEYgY29udGV4dFxuMTI5Mjc6XHRcdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXG4xMjkyODpcdFx0ICovXG4xMjkyOTpcdFx0aWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSlcbjEyOTMwOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEyOTMxOlx0XG4xMjkzMjpcdFx0aWYgKHNrX2Z1bGxzb2NrKHNrKSBcdTAwMjZcdTAwMjZcbjEyOTMzOlx0XHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4xMjkzNDpcdFx0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxuMTI5MzU6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTI5MzY6XHRcbjEyOTM3Olx0XHRyZXR1cm4gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XG4xMjkzODpcdH1cbjEyOTM5Olx0XG4xMjk0MDpcdF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4xMjk0MTpcdFxuMTI5NDI6XHRCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcbjEyOTQzOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zb2NrX2Rlc3Ryb3kpXG4xMjk0NDpcdEJURl9LRlVOQ1NfRU5EKGJwZl9za19pdGVyX2tmdW5jX2lkcylcbjEyOTQ1Olx0XG4xMjk0NjpcdHN0YXRpYyBpbnQgdHJhY2luZ19pdGVyX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbjEyOTQ3Olx0e1xuMTI5NDg6XHRcdGlmIChidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19pZHMsIGtmdW5jX2lkKSBcdTAwMjZcdTAwMjZcbjEyOTQ5Olx0XHQgICAgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfSVRFUilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjA3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTb2NrZXQgRGVzdHJ1Y3Rpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZSBzbmlwcGV0IGFuZCBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24uIEkmIzM5O20gbG9va2luZyBhdCBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudCBoZXJlLCBzcGVjaWZpY2FsbHk6CgpgYGBjCmlmICghc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveSB8fCAoc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVENQICZhbXA7JmFtcDsKCQkJCSAgIHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkpCmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoaXMgbG9va3MgbGlrZSBzb21lIHNvcnQgb2Ygc29ja2V0IGNsZWFudXAgb3IgZGVzdHJ1Y3Rpb24gbG9naWMuIFByZXZpb3VzbHksIHRoZSBjb2RlIGNoZWNrcyBmb3IgYGRpYWdfZGVzdHJveWAsIGJ1dCBJIHNlZSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYzogYHNrLSZndDtza19wcm90b2NvbGAgaXMgb25seSByZWxpYWJsZSB3aGVuIGBza19mdWxsc29jayhzaylgIGlzIHRydWUuIElmIGBza2AgaXMgKm5vdCogYSAmIzM0O2Z1bGwgc29ja2V0LCYjMzQ7IG1lYW5pbmcgaXQmIzM5O3Mgc29tZXRoaW5nIGxpa2UgYSBgaW5ldF90aW1ld2FpdF9zb2NrYCBvciBhIGByZXF1ZXN0X3NvY2tgIChzb2NrZXRzIGRlcml2ZWQgZnJvbSBgc29ja19jb21tb25gKSwgdGhlbiBgc2stJmd0O3NrX3Byb3RvY29sYCBlaXRoZXIgZG9lc24mIzM5O3QgZXhpc3QgYXQgYWxsIG9yIGl0JiMzOTtzIGF0IGFuIG9mZnNldCB0aGF0JiMzOTtzIGludmFsaWQsIGFuZCBgc2tfZnVsbHNvY2tgIGlzIGZhbHNlLiBUaGlzIGlzIGEgY3J1Y2lhbCBkaXN0aW5jdGlvbi4KClNwZWNpZmljYWxseSwgd2l0aCB0aW1ld2FpdCBzb2NrZXRzLCBgc2tfZnVsbHNvY2soc2spYCBpcyBmYWxzZS4gU28sIG5vdywgSSBuZWVkIHRvIGtub3cgYWJvdXQgYGRpYWdfZGVzdHJveWAgZm9yIFRDUCB0aW1ld2FpdCBvciBub24tZnVsbHNvY2sgaW5zdGFuY2VzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGFuZCBob3cgaXQgaGFuZGxlcyB0aGVzZSBzb2NrZXQgdHlwZXMuIEkmIzM5O2xsIG5lZWQgdG8gZ3JlcCB0aHJvdWdoIHRoZSBjb2RlYmFzZSB0byB0cmFjZSB0aGUgdXNlIG9mIGBkaWFnX2Rlc3Ryb3lgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIGluIHRoZSBjYXNlIG9mIHRpbWV3YWl0IHNvY2tldHMgYW5kIHNvY2tldHMgdGhhdCBhcmUgbm90IGZ1bGwgc29ja2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC5kaWFnX2Rlc3Ryb3kmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvcmF3LmM9OTQ4PXN0cnVjdCBwcm90byByYXdfcHJvdCA9IHtcbi0tXG5uZXQvaXB2NC9yYXcuYy05NzItI2VuZGlmXG5uZXQvaXB2NC9yYXcuYzo5NzM6XHQuZGlhZ19kZXN0cm95XHQgICA9IHJhd19hYm9ydCxcbm5ldC9pcHY0L3Jhdy5jLTk3NC19O1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzM0Nz1zdHJ1Y3QgcHJvdG8gdGNwX3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzk1LVx0Lm5vX2F1dG9iaW5kXHRcdD0gdHJ1ZSxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzM5NjpcdC5kaWFnX2Rlc3Ryb3lcdFx0PSB0Y3BfYWJvcnQsXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzOTctfTtcbi0tXG5uZXQvaXB2NC91ZHAuYz0zMTQzPXN0cnVjdCBwcm90byB1ZHBfcHJvdCA9IHtcbi0tXG5uZXQvaXB2NC91ZHAuYy0zMTczLVx0Lm9ial9zaXplXHRcdD0gc2l6ZW9mKHN0cnVjdCB1ZHBfc29jayksXG5uZXQvaXB2NC91ZHAuYzozMTc0Olx0LmRpYWdfZGVzdHJveVx0XHQ9IHVkcF9hYm9ydCxcbm5ldC9pcHY0L3VkcC5jLTMxNzUtfTtcbi0tXG5uZXQvaXB2Ni9yYXcuYz0xMjA3PXN0cnVjdCBwcm90byByYXd2Nl9wcm90ID0ge1xuLS1cbm5ldC9pcHY2L3Jhdy5jLTEyMzEtI2VuZGlmXG5uZXQvaXB2Ni9yYXcuYzoxMjMyOlx0LmRpYWdfZGVzdHJveVx0ICAgPSByYXdfYWJvcnQsXG5uZXQvaXB2Ni9yYXcuYy0xMjMzLX07XG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMjc2PXN0cnVjdCBwcm90byB0Y3B2Nl9wcm90ID0ge1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMyNS1cdC5ub19hdXRvYmluZFx0XHQ9IHRydWUsXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIzMjY6XHQuZGlhZ19kZXN0cm95XHRcdD0gdGNwX2Fib3J0LFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzI3LX07XG4tLVxubmV0L2lwdjYvdWRwLmM9MTkwOD1zdHJ1Y3QgcHJvdG8gdWRwdjZfcHJvdCA9IHtcbi0tXG5uZXQvaXB2Ni91ZHAuYy0xOTQwLVx0LmlwdjZfcGluZm9fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVkcDZfc29jaywgaW5ldDYpLFxubmV0L2lwdjYvdWRwLmM6MTk0MTpcdC5kaWFnX2Rlc3Ryb3lcdFx0PSB1ZHBfYWJvcnQsXG5uZXQvaXB2Ni91ZHAuYy0xOTQyLX07XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTQ2PXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfaW5pdCh2b2lkKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE2Ni1cdHRjcF9wcm90X292ZXJyaWRlLnJlbGVhc2VfY2IgPSB0Y3BfcmVsZWFzZV9jYl9vdmVycmlkZTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjE2NzpcdHRjcF9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE2OC0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTgwPXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfdjZfaW5pdCh2b2lkKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjIxMy1cdHRjcHY2X3Byb3Rfb3ZlcnJpZGUucmVsZWFzZV9jYiA9IHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlO1xubmV0L21wdGNwL3N1YmZsb3cuYzoyMjE0Olx0dGNwdjZfcHJvdF9vdmVycmlkZS5kaWFnX2Rlc3Ryb3kgPSB0Y3BfYWJvcnRfb3ZlcnJpZGU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTUtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NTUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB0Y3BfYWJvcnRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBUQ1AvSVAgcGljdHVyZSwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBbbWVudGlvbiBzb21ldGhpbmcgc3BlY2lmaWMgdG8geW91ciBmaWVsZCwgZS5nLiwgJiMzNDt0aGUgYXBwbGljYXRpb24tbGV2ZWwgaW1wbGljYXRpb25zIGZvciBoaWdoLXRocm91Z2hwdXQgZGF0YSB0cmFuc2ZlciwmIzM0OyBvciAmIzM0O3RoZSBwb3RlbnRpYWwgZm9yIGFidXNlIGluIEREb1MgYXR0YWNrcyYjMzQ7XS4gIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgZXJyb3IgaGFuZGxpbmcg4oCTIHdoYXQgc3BlY2lmaWMgc2l0dWF0aW9ucyB0cmlnZ2VyIHRoaXMgYWJvcnQ/IElzIGl0IGluaXRpYXRlZCBieSB0aGUgbG9jYWwgaG9zdCwgdGhlIHJlbW90ZSBob3N0LCBvciBwZXJoYXBzIGEgdGltZW91dD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIGNvbmRpdGlvbnMuCgoqKk15IEFuYWx5c2lzIG9mIGB0Y3BfYWJvcnRgKioKCkkgaGF2ZSB0byBjb25zaWRlciB0aGUgaW1tZWRpYXRlIGltcGFjdCBvbiB0aGUgY29ubmVjdGlvbiwgb2YgY291cnNlLiBEb2VzIGl0IGdyYWNlZnVsbHkgc2h1dCBkb3duIHRoZSBjb25uZWN0aW9uLCBhdHRlbXB0IHNvbWUgc29ydCBvZiBub3RpZmljYXRpb24sIG9yIHNpbXBseSBzbGFtIHRoZSBkb29yPyAgVGhlIGxldmVsIG9mIGRldGFpbCByZXF1aXJlZCBmb3IgdGhlIHJlc3BvbnNlIGlzIGNydWNpYWwsIGFzIHRoaXMgZGljdGF0ZXMgcmVjb3Zlcnkgc3RyYXRlZ3ksIHNvIEkgbmVlZCB0byBrbm93IGhvdyBpdCBpbmZvcm1zIHRoZSBhcHBsaWNhdGlvbi4gQXJlIHRoZXJlIGFueSByZXNvdXJjZSBjbGVhbnVwIHJvdXRpbmVzIGluIHRoaXMgYWJvcnQgcHJvY2Vzcz8gIEl0JiMzOTtzIGNyaXRpY2FsIHRvIGF2b2lkIHJlc291cmNlIGxlYWtzLiBBbHNvLCB3aGF0IGlzIHRoZSBpbXBhY3Qgb24gdGhlIHJlY2VpdmluZyBlbmQ/CgpGdXJ0aGVybW9yZSwgSSBoYXZlIHRvIG1lbnRhbGx5IG1vZGVsIGhvdyB0aGlzIHdvcmtzIHdpdGggZXhpc3RpbmcgY29kZWJhc2VzLiBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IGhvdyBpdCBiZWhhdmVzIGluIHByYWN0aWNlLiBDb3VsZCB0aGlzIGhhdmUgcG90ZW50aWFsIHByb2JsZW1zPyBEb2VzIHRoaXMgaW50cm9kdWNlIGxhdGVuY3k/IElzIGl0IGVmZmljaWVudCwgb3IgY2FuIHdlIHJlZmFjdG9yIGZvciBiZXR0ZXIgZWZmaWNpZW5jeT8gSXMgdGhlcmUgYW55IGNoYW5jZSBvZiBkYXRhIGNvcnJ1cHRpb24gb3IgbG9zdCBkYXRhPyBIb3cgZG9lcyB0aGlzIHdvcmsgd2l0aCBvdGhlciBmdW5jdGlvbnM/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHRjcF9hYm9ydFxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD0xNzA0PXZvaWQgdGNwX2RvbmUoc3RydWN0IHNvY2sgKnNrKTtcbmluY2x1ZGUvbmV0L3RjcC5oOjE3MDU6aW50IHRjcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpO1xuaW5jbHVkZS9uZXQvdGNwLmgtMTcwNi1cbi0tXG5uZXQvaXB2NC90Y3AuYz01MDg5PXZvaWQgdGNwX2RvbmUoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTUxMTQtXG5uZXQvaXB2NC90Y3AuYzo1MTE1OmludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxubmV0L2lwdjQvdGNwLmMtNTExNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEzNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgVENQIFN0YWNrKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGJlaGF2aW9yIGluIHRoZSBMaW51eCBUQ1AgaW1wbGVtZW50YXRpb24sIHNvIGxldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBuZXQvaXB2NC90Y3AuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1MTE1LiBJIGtub3cgdGhpcyBhcmVhIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSB0b3BpYyBJJiMzOTttIGludmVzdGlnYXRpbmcsIGJ1dCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIGRvbmUuIEZyb20gaGVyZSBJIGNhbiBleHRyYXBvbGF0ZSB3aGF0JiMzOTtzIGNhdXNpbmcgdGhlIHByb2JsZW0uIEkmIzM5O2xsIG5lZWQgdG8gZ28gZGVlcGVyIGFmdGVyIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUxMTU6XHRpbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcbjUxMTY6XHR7XG41MTE3Olx0XHRpbnQgc3RhdGUgPSBpbmV0X3NrX3N0YXRlX2xvYWQoc2spO1xuNTExODpcdFxuNTExOTpcdFx0aWYgKHN0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpIHtcbjUxMjA6XHRcdFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxID0gaW5ldF9yZXFzayhzayk7XG41MTIxOlx0XG41MTIyOlx0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbjUxMjM6XHRcdFx0aW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChyZXEtXHUwMDNlcnNrX2xpc3RlbmVyLCByZXEpO1xuNTEyNDpcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjUxMjU6XHRcdFx0cmV0dXJuIDA7XG41MTI2Olx0XHR9XG41MTI3Olx0XHRpZiAoc3RhdGUgPT0gVENQX1RJTUVfV0FJVCkge1xuNTEyODpcdFx0XHRzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyA9IGluZXRfdHdzayhzayk7XG41MTI5Olx0XG41MTMwOlx0XHRcdHJlZmNvdW50X2luYyhcdTAwMjZ0dy1cdTAwM2V0d19yZWZjbnQpO1xuNTEzMTpcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG41MTMyOlx0XHRcdGluZXRfdHdza19kZXNjaGVkdWxlX3B1dCh0dyk7XG41MTMzOlx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuNTEzNDpcdFx0XHRyZXR1cm4gMDtcbjUxMzU6XHRcdH1cbjUxMzY6XHRcbjUxMzc6XHRcdC8qIEJQRiBjb250ZXh0IGVuc3VyZXMgc29jayBsb2NraW5nLiAqL1xuNTEzODpcdFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG41MTM5Olx0XHRcdC8qIERvbiYjMzk7dCByYWNlIHdpdGggdXNlcnNwYWNlIHNvY2tldCBjbG9zZXMgc3VjaCBhcyB0Y3BfY2xvc2UuICovXG41MTQwOlx0XHRcdGxvY2tfc29jayhzayk7XG41MTQxOlx0XG41MTQyOlx0XHQvKiBBdm9pZCBjbG9zaW5nIHRoZSBzYW1lIHNvY2tldCB0d2ljZS4gKi9cbjUxNDM6XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHtcbjUxNDQ6XHRcdFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXG41MTQ1Olx0XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbjUxNDY6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG41MTQ3Olx0XHR9XG41MTQ4Olx0XG41MTQ5Olx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikge1xuNTE1MDpcdFx0XHR0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xuNTE1MTpcdFx0XHRpbmV0X2Nza19saXN0ZW5fc3RvcChzayk7XG41MTUyOlx0XHR9XG41MTUzOlx0XG41MTU0Olx0XHQvKiBEb24mIzM5O3QgcmFjZSB3aXRoIEJIIHNvY2tldCBjbG9zZXMgc3VjaCBhcyBpbmV0X2Nza19saXN0ZW5fc3RvcC4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkzMAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBicGZfc29ja19kZXN0cm95YCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGJwZl9zb2NrX2Rlc3Ryb3lgIGFuZCBpbW1lZGlhdGVseSBhIGZldyB0aGluZ3MganVtcCBvdXQuIFRoZSBjb2RlJiMzOTtzIG5vdyBoYW5kbGluZyBgVENQX05FV19TWU5fUkVDVmAgYW5kIGBUQ1BfVElNRV9XQUlUYCBzdGF0ZXMgc3BlY2lmaWNhbGx5LCB3aGljaCBpcyBzbWFydC4gUHJldmlvdXNseSwgdGhlIGBicGZfc29ja19kZXN0cm95YCBmdW5jdGlvbiBoYWQgdGhpcyBjaGVjazoKCmBgYGMKaWYgKCFzay0mZ3Q7c2tfcHJvdC0mZ3Q7ZGlhZ19kZXN0cm95IHx8IChzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJmFtcDsmYW1wOwoJCQkJICAgc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKSkKCXJldHVybiAtRU9QTk9UU1VQUDsKYGBgCgpUaGUgaXNzdWUgaGVyZSwgYW5kIHRoZSBjcnV4IG9mIHRoaXMgcGF0Y2gsIGlzIHRoYXQgZm9yIG5vbi1mdWxsIHNvY2tldHMsIGxpa2UgdGhvc2UgaW4gYFRDUF9USU1FX1dBSVRgIG9yIGBUQ1BfTkVXX1NZTl9SRUNWYCwgYHNrLSZndDtza19wcm90b2NvbGAgd2FzIGJlaW5nIHJlYWQgZnJvbSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG9yIG5vbi1wcm90b2NvbCBtZW1vcnkuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHJlY2lwZSBmb3IgcHJvYmxlbXMsIGxlYWRpbmcgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBvciBvdXRyaWdodCBmYWlsdXJlcywgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBgcmVxdWVzdF9zb2NrYCBvciBgdGltZXdhaXRfc29ja2AuCgpXaXRoIHRoaXMgcGF0Y2gsIHRoZSBjaGVjayBvbiBgc2stJmd0O3NrX3Byb3RvY29sYCBpcyBvbmx5IHBlcmZvcm1lZCBpZiBgc2tfZnVsbHNvY2soc2spYCBpcyB0cnVlLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnQuIEl0IG1lYW5zIHdlIGNhbiBub3cgY2FsbCBgc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKWAgb24gdGhlc2Ugbm9uLWZ1bGwgc29ja2V0cy4KCkNydWNpYWxseSwgdGhpcyBjaGFuZ2UgaXMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYnBmX3NvY2tfZGVzdHJveWAuIFRoaXMgaXMgYSBCUEYga2Z1bmMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGV4cG9zZWQgdG8gQlBGIGl0ZXJhdG9ycywgbGlrZSB0aGUgb25lcyB1c2VkIHdpdGggYGl0ZXIvdGNwYC4gVGhpcyBpcyAqcmVhY2hhYmxlKiBrZXJuZWwgY29kZSBmcm9tIEJQRiBhbmQgY29yZSBuZXR3b3JraW5nLCB3aGljaCBpcyBhIG1ham9yIHBvaW50IHRvIGNvbnNpZGVyLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHNob3VsZCB0aGlzIGJlIGZ1enplZD8gQWJzb2x1dGVseSEgVGhpcyBvcGVucyB0aGUgZG9vciBmb3IgQlBGIHByb2dyYW1zIHRvIGRlc3Ryb3kgdGltZXdhaXQvcmVxdWVzdCBzb2NrZXRzIHZpYSBgYnBmX3NvY2tfZGVzdHJveShza19jb21tb24pYC4gVGhpcyBpcyBub3cgcmVhY2hhYmxlIHRocm91Z2ggQlBGIGl0ZXJhdG9ycywgc3BlY2lmaWNhbGx5IHdoZW4gYEJQRl9UUkFDRV9JVEVSYCBpcyB1c2VkLCBzdWNoIGFzIHdpdGggaXRlci90Y3AgYW5kIGl0ZXIvdWRwLgoKTGV0IG1lIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBmb3IgYGJwZl9zb2NrX2Rlc3Ryb3lgIGFuZCB0aGUgQlBGIGl0ZXJhdG9ycyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCBqdXN0IHRvIGJlIGNlcnRhaW4uIEkmIzM5O2xsIGFsc28gc2VlIHdoZXJlIHRoZSBgYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzYCBhbmQgYGJwZl9zb2NrX2Rlc3Ryb3lgIGZ1bmN0aW9ucyBhcmUgcmVnaXN0ZXJlZC4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UgYW5kIHdoZXJlIGl0IGNhbiBiZSBhcHBsaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc2tfaXRlcl9rZnVuY19pZHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTI5NDA9X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQxLVxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NDI6QlRGX0tGVU5DU19TVEFSVChicGZfc2tfaXRlcl9rZnVuY19pZHMpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0My1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTQ0OkJURl9LRlVOQ1NfRU5EKGJwZl9za19pdGVyX2tmdW5jX2lkcylcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQ1LVxubmV0L2NvcmUvZmlsdGVyLmM9MTI5NDY9c3RhdGljIGludCB0cmFjaW5nX2l0ZXJfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NDcte1xubmV0L2NvcmUvZmlsdGVyLmM6MTI5NDg6XHRpZiAoYnRmX2lkX3NldDhfY29udGFpbnMoXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfaWRzLCBrZnVuY19pZCkgXHUwMDI2XHUwMDI2XG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0OS1cdCAgICBwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9JVEVSKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfc2tfaXRlcl9rZnVuY19zZXQgPSB7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjk1NS1cdC5vd25lciA9IFRISVNfTU9EVUxFLFxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NTY6XHQuc2V0ICAgPSBcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19pZHMsXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk1Ny1cdC5maWx0ZXIgPSB0cmFjaW5nX2l0ZXJfZmlsdGVyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM3MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGVCUEYgYW5kIE5ldHdvcmsgRmlsdGVyaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYnBmX3NrX2l0ZXJfa2Z1bmNfc2V0YCwgc3BlY2lmaWNhbGx5IHdoZXJlIGl0JiMzOTtzICp1c2VkKiB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIG5ldHdvcmsgZmlsdGVyaW5nIGNvbnRleHQuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHNvbWUgYXNwZWN0IG9mIHNvY2tldC1sZXZlbCBmaWx0ZXJpbmcgb3IgaXRlcmF0aW9uLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gc29ja2V0cyBvciBuZXR3b3JrIG5hbWVzcGFjZXMuIEkgd2FudCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBjYWxsaW5nIGNvbnRleHQsIGhvdyB0aGUgcGFyYW1ldGVycyBhcmUgYmVpbmcgdXNlZC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYXR0YWNoaW5nIHByb2dyYW1zLCBzZXR0aW5nIHVwIGl0ZXJhdG9ycywgYXBwbHlpbmcgZmlsdGVycywgbWFuaXB1bGF0aW5nIHNvY2tldCBvcHRpb25zLCBvciB3aGF0PyBUaGUgZ29hbCBpcyB0byBwaWVjZSB0b2dldGhlciBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBUaGlzIGludmVzdGlnYXRpb24gc2hvdWxkIGdpdmUgbWUgaW5zaWdodCBpbnRvIGhvdyB0aGUga2VybmVsIHVzZXMgdGhpcyBtZWNoYW5pc20gZm9yIG5ldHdvcmsgdHJhZmZpYyBtYW5hZ2VtZW50IGFuZCBmaWx0ZXJpbmcgYXQgYSBsb3dlciBsZXZlbC4gTXkgaG9wZSBpcyB0aGlzIHdpbGwgcmV2ZWFsIG5ldyBhc3BlY3RzIGZvciBvcHRpbWl6YXRpb24gb3IgcG9zc2libHkgdnVsbmVyYWJpbGl0eSBkZXRlY3Rpb24gaW4gbXkgYXJlYSBvZiBleHBlcnRpc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19pdGVyX2tmdW5jX3NldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMjk0Nj1zdGF0aWMgaW50IHRyYWNpbmdfaXRlcl9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NTMtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjk1NDpzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX3NrX2l0ZXJfa2Z1bmNfc2V0ID0ge1xubmV0L2NvcmUvZmlsdGVyLmMtMTI5NTUtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjk2MD1zdGF0aWMgaW50IGluaXRfc3Vic3lzdGVtKHZvaWQpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk2MS17XG5uZXQvY29yZS9maWx0ZXIuYzoxMjk2MjpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfc2V0KTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTYzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NzEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGBpZmRlZmAgYmxvY2tzIGFyb3VuZCBsaW5lcyAxMjkwMC0xMjk3MCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLgoKKipEaXZpbmcgaW50byB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyAxMjkwMCB0aHJvdWdoIDEyOTcwIG9mIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgYmVpbmcgY29uZGl0aW9uYWxseSBjb21waWxlZCBoZXJlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gZGVhbHMgd2l0aCBzb21lIHNwZWNpZmljIGZlYXR1cmUsIGhhcmR3YXJlLCBvciBwZXJoYXBzIGFuIG9wdGltaXphdGlvbiB0aGF0IGlzbiYjMzk7dCB1bml2ZXJzYWxseSBhcHBsaWNhYmxlLiBJIHN1c3BlY3QgaXQgcmVsYXRlcyB0byBwYWNrZXQgZmlsdGVyaW5nLCBsaWtlbHkgaW52b2x2aW5nIHNvbWUgc3BlY2lmaWMgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBsb2dpYyBvciBpbnRlcmFjdGlvbiB3aXRoIGEgcGFydGljdWxhciBOSUMgKE5ldHdvcmsgSW50ZXJmYWNlIENvbnRyb2xsZXIpIG9yIGhhcmR3YXJlIGFjY2VsZXJhdG9yLiBUaGUgdXNlIG9mIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGlzIGEgZGVhZCBnaXZlYXdheSB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGggb3B0aW9uYWwsIGNvbmZpZ3VyYWJsZSBjb2RlIHBhdGhzLgoKSSYjMzk7bGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IHRoZSBjb25kaXRpb25zIHdpdGhpbiB0aGUgYCNpZmRlZmAgYmxvY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRlZmluZXMgYXJlIGJlaW5nIGNoZWNrZWQg4oCTIHdoYXQgKmZlYXR1cmUgZmxhZ3MqIGFyZSBjb250cm9sbGluZyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgY29kZT8gS25vd2luZyB0aGF0IHdpbGwgdGVsbCBtZSB3aHkgdGhpcyBjb2RlIGlzbiYjMzk7dCBhbHdheXMgYWN0aXZlIGFuZCB3aGljaCBwYXJ0cyBvZiB0aGUga2VybmVsIGNvbmZpZyB3b3VsZCBlbmFibGUgaXQuIEFyZSB0aGVzZSByZWxhdGVkIHRvIGhhcmR3YXJlIGNhcGFiaWxpdGllcywga2VybmVsIGZlYXR1cmVzLCBvciBwZXJoYXBzIGV2ZW4gdXNlci1zcGFjZSBjb25maWd1cmF0aW9uIHNldHRpbmdzPyBJdCBjb3VsZCBiZSBzb21ldGhpbmcgbGlrZSBzdXBwb3J0IGZvciBhIHBhcnRpY3VsYXIgQlBGIGluc3RydWN0aW9uIHNldCBvciBhbiBvcHRpbWl6YXRpb24gdGhhdCByZWxpZXMgb24gYSBzcGVjaWZpYyBOSUPigJlzIGNhcGFiaWxpdGllcy4gSeKAmW0gcHJlcGFyZWQgdG8gZmluZCB0aGF0IHRoaXMgY291bGQgYmUgcmVsYXRlZCB0byBzb21lIG9ic2N1cmUgaGFyZHdhcmUgc3VwcG9ydCwgb3Igc3BlY2lmaWMgcGFja2V0IG1hbmlwdWxhdGlvbi4KCkkmIzM5O2xsIGFsc28ga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgY29tbWVudHMgaW4gdGhpcyBzZWN0aW9uLiBUaG9zZSBjb3VsZCBvZmZlciB2YWx1YWJsZSBjbHVlcyB0byBleHBsYWluIHdoeSB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIG5lY2Vzc2FyeSBhbmQgaG93IHRoaXMgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZmlsdGVyaW5nIGVuZ2luZS4gTXkgZ29hbCBpcyB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBzY2VuYXJpb3MgaW4gd2hpY2ggdGhpcyBwYXJ0aWN1bGFyIGNvZGUgaXMgYmVpbmcgdXRpbGl6ZWQsIGFzIHdlbGwgYXMgdGhlIGRlc2lnbiBjb25zaWRlcmF0aW9ucyB0aGF0IG1hZGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gdGhlIHJpZ2h0IGFwcHJvYWNoIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjkwMDpcdFxuMTI5MDE6XHRfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4xMjkwMjpcdFxuMTI5MDM6XHQvKiBicGZfc29ja19kZXN0cm95OiBEZXN0cm95IHRoZSBnaXZlbiBzb2NrZXQgd2l0aCBFQ09OTkFCT1JURUQgZXJyb3IgY29kZS5cbjEyOTA0Olx0ICpcbjEyOTA1Olx0ICogVGhlIGZ1bmN0aW9uIGV4cGVjdHMgYSBub24tTlVMTCBwb2ludGVyIHRvIGEgc29ja2V0LCBhbmQgaW52b2tlcyB0aGVcbjEyOTA2Olx0ICogcHJvdG9jb2wgc3BlY2lmaWMgc29ja2V0IGRlc3Ryb3kgaGFuZGxlcnMuXG4xMjkwNzpcdCAqXG4xMjkwODpcdCAqIFRoZSBoZWxwZXIgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gQlBGIGNvbnRleHRzIHRoYXQgaGF2ZSBhY3F1aXJlZCB0aGUgc29ja2V0XG4xMjkwOTpcdCAqIGxvY2tzLlxuMTI5MTA6XHQgKlxuMTI5MTE6XHQgKiBQYXJhbWV0ZXJzOlxuMTI5MTI6XHQgKiBAc29jazogUG9pbnRlciB0byBzb2NrZXQgdG8gYmUgZGVzdHJveWVkXG4xMjkxMzpcdCAqXG4xMjkxNDpcdCAqIFJldHVybjpcbjEyOTE1Olx0ICogT24gZXJyb3IsIG1heSByZXR1cm4gRU9QTk9UU1VQUCwgb3Igd2hhdGV2ZXIgdGhlIHByb3RvY29sIHNwZWNpZmljXG4xMjkxNjpcdCAqIGRlc3Ryb3kgaGFuZGxlciByZXR1cm5zLlxuMTI5MTc6XHQgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuMTI5MTg6XHQgKiAwIG90aGVyd2lzZVxuMTI5MTk6XHQgKi9cbjEyOTIwOlx0X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuMTI5MjE6XHR7XG4xMjkyMjpcdFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopc29jaztcbjEyOTIzOlx0XG4xMjkyNDpcdFx0LyogVGhlIGxvY2tpbmcgc2VtYW50aWNzIHRoYXQgYWxsb3cgZm9yIHN5bmNocm9ub3VzIGV4ZWN1dGlvbiBvZiB0aGVcbjEyOTI1Olx0XHQgKiBkZXN0cm95IGhhbmRsZXJzIGFyZSBvbmx5IHN1cHBvcnRlZCBmb3IgVENQIGFuZCBVRFAuXG4xMjkyNjpcdFx0ICogU3VwcG9ydGluZyBwcm90b2NvbHMgd2lsbCBuZWVkIHRvIGFjcXVpcmUgc29jayBsb2NrIGluIHRoZSBCUEYgY29udGV4dFxuMTI5Mjc6XHRcdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXG4xMjkyODpcdFx0ICovXG4xMjkyOTpcdFx0aWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSlcbjEyOTMwOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEyOTMxOlx0XG4xMjkzMjpcdFx0aWYgKHNrX2Z1bGxzb2NrKHNrKSBcdTAwMjZcdTAwMjZcbjEyOTMzOlx0XHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4xMjkzNDpcdFx0ICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxuMTI5MzU6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTI5MzY6XHRcbjEyOTM3Olx0XHRyZXR1cm4gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XG4xMjkzODpcdH1cbjEyOTM5Olx0XG4xMjk0MDpcdF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4xMjk0MTpcdFxuMTI5NDI6XHRCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcbjEyOTQzOlx0QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zb2NrX2Rlc3Ryb3kpXG4xMjk0NDpcdEJURl9LRlVOQ1NfRU5EKGJwZl9za19pdGVyX2tmdW5jX2lkcylcbjEyOTQ1Olx0XG4xMjk0NjpcdHN0YXRpYyBpbnQgdHJhY2luZ19pdGVyX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbjEyOTQ3Olx0e1xuMTI5NDg6XHRcdGlmIChidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19pZHMsIGtmdW5jX2lkKSBcdTAwMjZcdTAwMjZcbjEyOTQ5Olx0XHQgICAgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfSVRFUilcbjEyOTUwOlx0XHRcdHJldHVybiAtRUFDQ0VTO1xuMTI5NTE6XHRcdHJldHVybiAwO1xuMTI5NTI6XHR9XG4xMjk1MzpcdFxuMTI5NTQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX3NrX2l0ZXJfa2Z1bmNfc2V0ID0ge1xuMTI5NTU6XHRcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuMTI5NTY6XHRcdC5zZXQgICA9IFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcyxcbjEyOTU3Olx0XHQuZmlsdGVyID0gdHJhY2luZ19pdGVyX2ZpbHRlcixcbjEyOTU4Olx0fTtcbjEyOTU5Olx0XG4xMjk2MDpcdHN0YXRpYyBpbnQgaW5pdF9zdWJzeXN0ZW0odm9pZClcbjEyOTYxOlx0e1xuMTI5NjI6XHRcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2YnBmX3NrX2l0ZXJfa2Z1bmNfc2V0KTtcbjEyOTYzOlx0fVxuMTI5NjQ6XHRsYXRlX2luaXRjYWxsKGluaXRfc3Vic3lzdGVtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MzIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgRmlsdGVyIENvbXBpbGF0aW9uIERlcGVuZGVuY2llcyoqCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgY29tcGlsYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgbmV0L2NvcmUvZmlsdGVyLmNgLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgc3VzcGVjdCB0aGUgY3J1Y2lhbCBpbmZvcm1hdGlvbiB3aWxsIGJlIGZvdW5kIGluIGVpdGhlciBgbmV0L2NvcmUvTWFrZWZpbGVgIG9yIHBlcmhhcHMgdGhlIGBLY29uZmlnYCBmaWxlcyB3aXRoaW4gdGhlIGBuZXQvY29yZWAgZGlyZWN0b3J5LiBNeSBhaW0gaXMgdG8gZGV0ZXJtaW5lIHVuZGVyIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBgbmV0L2NvcmUvZmlsdGVyLmNgIGlzIGNvbXBpbGVkLiBJdCYjMzk7cyBoaWdobHkgbGlrZWx5IHRoYXQgdW5kZXJzdGFuZGluZyB0aGUgYENPTkZJR19gIGZsYWdzIGlzIGtleSBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoaW5ncyBsaWtlIGBDT05GSUdfQlBGX1NZU0NBTExgIG9yIHRoZSBicm9hZGVyIGBDT05GSUdfTkVUYCBhcmUgcmVxdWlyZWQgb3IgaW5mbHVlbmNlIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBmaWx0ZXIgY29kZS4gS25vd2luZyB0aG9zZSBkZXBlbmRlbmNpZXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgYW5kIHdoZW4gdGhpcyBtb2R1bGUgZ2V0cyBidWlsdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsdGVyXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XHRcdCAgICAgJiM0Mzs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlx0XHRcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cdFx0XHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtODctICpcbm5ldC9jb3JlL3BrdGdlbi5jOjg4OiAqIFJlbW92ZSBpZiBmaXggZnJvbSBhZGRlZCBIYXJhbGQgV2VsdGUgXHUwMDNjbGFmb3JnZUBuZXRmaWx0ZXIub3JnXHUwMDNlIDA0MDQxOVxubmV0L2NvcmUvcGt0Z2VuLmMtODktICogaWE2NCBjb21waWxhdGlvbiBmaXggZnJvbSAgQXJvbiBHcmlmZmlzIFx1MDAzY2Fyb25AaHAuY29tXHUwMDNlIDA0MDYwNFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg5MAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3kgb2YgQlBGIFN5c2NhbGwgU3VwcG9ydCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBrZnVuY3Mgb3IsIG1vcmUgc3BlY2lmaWNhbGx5LCBmb3IgdGhlIHJlZ2lzdHJhdGlvbiBvZiBCVEYga2Z1bmMgSUQgc2V0cyB0aHJvdWdoIGByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0YC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIGZvciBhbnkgZGlyZWN0IGRlcGVuZGVuY2llcyBvciBjb2RlIHBhdGhzLiBMZXQmIzM5O3MgZmlyZSB1cCBhIGBncmVwYCBhbmQgc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlIGZvciBpbnN0YW5jZXMgb2YgYHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXRgLiBUaGF0IHNob3VsZCBxdWlja2x5IHJldmVhbCBhbnkgZGlyZWN0IHJlbGF0aW9uc2hpcHMgYW5kIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhhdCBjb25maWcgb3B0aW9uIGZhY3RvcnMgaW50byBpdHMgZXhpc3RlbmNlIG9yIGJlaGF2aW9yLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXA7IEkgY2FuJiMzOTt0IHN0YXJ0IG9wdGltaXppbmcgb3IgaW50ZWdyYXRpbmcgdW50aWwgSSYjMzk7bSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlc2UgYmFzZSBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZ3JlcCBzZWFyY2ggdHVybnMgdXAhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdD00OTQ9dHlwZS4gQW4gZXhhbXBsZSBpcyBzaG93biBiZWxvdzo6XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdC01MDctICAgICAgICB7XG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0OjUwODogICAgICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcdTAwMjZicGZfdGFza19rZnVuY19zZXQpO1xuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdC01MDktICAgICAgICB9XG4tLVxuZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jPTEyMjc9c3RhdGljIHZvaWQgX19pbml0IHdha2V1cF9zb3VyY2VzX2JwZl9pbml0KHZvaWQpXG5kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmMtMTIyOC17XG5kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmM6MTIyOTpcdGlmIChyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2d2FrZXVwX3NvdXJjZV9rZnVuY19zZXQpKVxuZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jLTEyMzAtXHRcdHBtX3ByX2RiZyhcJiMzNDtXYWtldXA6IGZhaWxlZCB0byByZWdpc3RlciBCVEYga2Z1bmNzXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2hpZC9icGYvaGlkX2JwZl9kaXNwYXRjaC5jPTY1OD1zdGF0aWMgaW50IF9faW5pdCBoaWRfYnBmX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2hpZC9icGYvaGlkX2JwZl9kaXNwYXRjaC5jLTY2Ny1cbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmM6NjY4Olx0ZXJyID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFx1MDAyNmhpZF9icGZfa2Z1bmNfc2V0KTtcbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmMtNjY5LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmMtNjczLVxuZHJpdmVycy9oaWQvYnBmL2hpZF9icGZfZGlzcGF0Y2guYzo2NzQ6XHRlcnIgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2aGlkX2JwZl9zeXNjYWxsX2tmdW5jX3NldCk7XG5kcml2ZXJzL2hpZC9icGYvaGlkX2JwZl9kaXNwYXRjaC5jLTY3NS1cdGlmIChlcnIpIHtcbi0tXG5mcy9iaW5mbXRfbWlzY19icGYuYz0zMjE9c3RhdGljIGludCBibV9icGZfaW5pdChzdHJ1Y3QgYnRmICpidGYpXG5mcy9iaW5mbXRfbWlzY19icGYuYy0zMjIte1xuZnMvYmluZm10X21pc2NfYnBmLmM6MzIzOlx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxuZnMvYmluZm10X21pc2NfYnBmLmMtMzI0LVx0XHRcdFx0XHQgXHUwMDI2Ym1fYnBmX2tmdW5jX3NldCk7XG4tLVxuZnMvYnBmX2ZzX2tmdW5jcy5jPTQ5Mj1zdGF0aWMgaW50IF9faW5pdCBicGZfZnNfa2Z1bmNzX2luaXQodm9pZClcbi0tXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDk1LVxuZnMvYnBmX2ZzX2tmdW5jcy5jOjQ5NjpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sIFx1MDAyNmJwZl9mc19rZnVuY19zZXQpO1xuZnMvYnBmX2ZzX2tmdW5jcy5jLTQ5Ny1cdGlmIChyZXQgfHwgIUlTX0VOQUJMRUQoQ09ORklHX0JJTkZNVF9NSVNDX0JQRikpXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDk4LVx0XHRyZXR1cm4gcmV0O1xuZnMvYnBmX2ZzX2tmdW5jcy5jOjQ5OTpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyxcbmZzL2JwZl9mc19rZnVuY3MuYy01MDAtXHRcdFx0XHRcdCBcdTAwMjZicGZfZnNfa2Z1bmNfc2V0KTtcbi0tXG5mcy92ZXJpdHkvbWVhc3VyZS5jPTE4Nj12b2lkIF9faW5pdCBmc3Zlcml0eV9pbml0X2JwZih2b2lkKVxuZnMvdmVyaXR5L21lYXN1cmUuYy0xODcte1xuZnMvdmVyaXR5L21lYXN1cmUuYzoxODg6XHRyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLCBcdTAwMjZicGZfZnN2ZXJpdHlfc2V0KTtcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTg5LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2J0Zi5oPTU4Nz11MzIgKmJ0Zl9rZnVuY19pc19tb2RpZnlfcmV0dXJuKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGtmdW5jX2J0Zl9pZCxcbmluY2x1ZGUvbGludXgvYnRmLmgtNTg4LVx0XHRcdFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbmluY2x1ZGUvbGludXgvYnRmLmg6NTg5OmludCByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXG5pbmNsdWRlL2xpbnV4L2J0Zi5oLTU5MC1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCAqcyk7XG4tLVxuaW5jbHVkZS9saW51eC9idGYuaD02NDc9c3RhdGljIGlubGluZSB1MzIgKmJ0Zl9rZnVuY19pZF9zZXRfY29udGFpbnMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmluY2x1ZGUvbGludXgvYnRmLmgtNjUzLX1cbmluY2x1ZGUvbGludXgvYnRmLmg6NjU0OnN0YXRpYyBpbmxpbmUgaW50IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcbmluY2x1ZGUvbGludXgvYnRmLmgtNjU1LVx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgKnMpXG4tLVxuaW9fdXJpbmcvYnBmLW9wcy5jPTEyMD1zdGF0aWMgaW50IGJwZl9pb19pbml0KHN0cnVjdCBidGYgKmJ0Zilcbi0tXG5pb191cmluZy9icGYtb3BzLmMtMTI5LVxuaW9fdXJpbmcvYnBmLW9wcy5jOjEzMDpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxuaW9fdXJpbmcvYnBmLW9wcy5jLTEzMS1cdFx0XHRcdFx0XHUwMDI2YnBmX2lvX3VyaW5nX2tmdW5jX3NldCk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTExMzE9c3RhdGljIGludCBfX2luaXQga2Z1bmNfaW5pdCh2b2lkKVxua2VybmVsL2JwZi9hcmVuYS5jLTExMzIte1xua2VybmVsL2JwZi9hcmVuYS5jOjExMzM6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQywgXHUwMDI2Y29tbW9uX2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTEzNC19XG4tLVxua2VybmVsL2JwZi9idGYuYz04OTAyPXN0YXRpYyBpbnQgYnRmX3BvcHVsYXRlX2tmdW5jX3NldChzdHJ1Y3QgYnRmICpidGYsIGVudW0gYnRmX2tmdW5jX2hvb2sgaG9vayxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg5NDgtXHRzZXQgPSB0YWItXHUwMDNlc2V0c1tob29rXTtcbmtlcm5lbC9icGYvYnRmLmM6ODk0OTpcdC8qIFdhcm4gd2hlbiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0IGlzIGNhbGxlZCB0d2ljZSBmb3IgdGhlIHNhbWUgaG9va1xua2VybmVsL2JwZi9idGYuYy04OTUwLVx0ICogZm9yIG1vZHVsZSBzZXRzLlxuLS1cbmtlcm5lbC9icGYvYnRmLmM9OTE3Mz11MzIgKmJ0Zl9rZnVuY19pc19tb2RpZnlfcmV0dXJuKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGtmdW5jX2J0Zl9pZCxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTkxODEtXG5rZXJuZWwvYnBmL2J0Zi5jOjkxODI6c3RhdGljIGludCBfX3JlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoZW51bSBidGZfa2Z1bmNfaG9vayBob29rLFxua2VybmVsL2JwZi9idGYuYy05MTgzLVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0ICprc2V0KVxuLS1cbmtlcm5lbC9icGYvYnRmLmMtOTIwOC0vKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgaW52b2tlZCBvbmx5IGZyb20gaW5pdGNhbGxzL21vZHVsZSBpbml0IGZ1bmN0aW9ucyAqL1xua2VybmVsL2JwZi9idGYuYzo5MjA5OmludCByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXG5rZXJuZWwvYnBmL2J0Zi5jLTkyMTAtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgKmtzZXQpXG4tLVxua2VybmVsL2JwZi9idGYuYy05MjIyLVx0aG9vayA9IGJwZl9wcm9nX3R5cGVfdG9fa2Z1bmNfaG9vayhwcm9nX3R5cGUpO1xua2VybmVsL2JwZi9idGYuYzo5MjIzOlx0cmV0dXJuIF9fcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChob29rLCBrc2V0KTtcbmtlcm5lbC9icGYvYnRmLmMtOTIyNC19XG5rZXJuZWwvYnBmL2J0Zi5jOjkyMjU6RVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldCk7XG5rZXJuZWwvYnBmL2J0Zi5jLTkyMjYtXG4tLVxua2VybmVsL2JwZi9idGYuYz05MjI4PWludCByZWdpc3Rlcl9idGZfZm1vZHJldF9pZF9zZXQoY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgKmtzZXQpXG5rZXJuZWwvYnBmL2J0Zi5jLTkyMjkte1xua2VybmVsL2JwZi9idGYuYzo5MjMwOlx0cmV0dXJuIF9fcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCVEZfS0ZVTkNfSE9PS19GTU9EUkVULCBrc2V0KTtcbmtlcm5lbC9icGYvYnRmLmMtOTIzMS19XG4tLVxua2VybmVsL2JwZi9jcHVtYXNrLmM9NTE1PXN0YXRpYyBpbnQgX19pbml0IGNwdW1hc2tfa2Z1bmNfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9icGYvY3B1bWFzay5jLTUyNS1cdHJldCA9IGJwZl9tZW1fYWxsb2NfaW5pdChcdTAwMjZicGZfY3B1bWFza19tYSwgc2l6ZW9mKHN0cnVjdCBicGZfY3B1bWFzayksIGZhbHNlKTtcbmtlcm5lbC9icGYvY3B1bWFzay5jOjUyNjpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2Y3B1bWFza19rZnVuY19zZXQpO1xua2VybmVsL2JwZi9jcHVtYXNrLmM6NTI3Olx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcdTAwMjZjcHVtYXNrX2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL2NwdW1hc2suYzo1Mjg6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFx1MDAyNmNwdW1hc2tfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvY3B1bWFzay5jLTUyOS1cdHJldHVybiAgcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhjcHVtYXNrX2R0b3JzLFxuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmM9Mzc5PXN0YXRpYyBpbnQgX19pbml0IGNyeXB0b19rZnVuY19pbml0KHZvaWQpXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy0zODgtXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM4OTpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmNyeXB0X2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL2NyeXB0by5jOjM5MDpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCBcdTAwMjZjcnlwdF9rZnVuY19zZXQpO1xua2VybmVsL2JwZi9jcnlwdG8uYzozOTE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1hEUCwgXHUwMDI2Y3J5cHRfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzkyOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxua2VybmVsL2JwZi9jcnlwdG8uYy0zOTMtXHRcdFx0XHRcdCAgICAgICBcdTAwMjZjcnlwdF9pbml0X2tmdW5jX3NldCk7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk4Mj1zdGF0aWMgaW50IF9faW5pdCBrZnVuY19pbml0KHZvaWQpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk5Ny1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5OTg6XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2Z2VuZXJpY19rZnVuY19zZXQpO1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDk5OTpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcdTAwMjZnZW5lcmljX2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDAwOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsIFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDI6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDM6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMDQtXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGdlbmVyaWNfZHRvcnMsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTAwNi1cdFx0XHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDc6XHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9VTlNQRUMsIFx1MDAyNmNvbW1vbl9rZnVuY19zZXQpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNTAwOC19XG4tLVxua2VybmVsL2JwZi9tYXBfaXRlci5jPTIzMD1zdGF0aWMgaW50IGluaXRfc3Vic3lzdGVtKHZvaWQpXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMjMxLXtcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYzoyMzI6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQywgXHUwMDI2YnBmX21hcF9pdGVyX2tmdW5jX3NldCk7XG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMjMzLX1cbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz03NTk9c3RhdGljIF9faW5pdCBpbnQgcnFzcGlubG9ja19yZWdpc3Rlcl9rZnVuY3Modm9pZClcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTc2MC17XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo3NjE6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQywgXHUwMDI2cnFzcGlubG9ja19rZnVuY19zZXQpO1xua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzYyLX1cbi0tXG5rZXJuZWwvY2dyb3VwL3JzdGF0LmM9NzY2PXN0YXRpYyBpbnQgX19pbml0IGJwZl9yc3RhdF9rZnVuY19pbml0KHZvaWQpXG5rZXJuZWwvY2dyb3VwL3JzdGF0LmMtNzY3LXtcbmtlcm5lbC9jZ3JvdXAvcnN0YXQuYzo3Njg6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsXG5rZXJuZWwvY2dyb3VwL3JzdGF0LmMtNzY5LVx0XHRcdFx0XHQgXHUwMDI2YnBmX3JzdGF0X2tmdW5jX3NldCk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9jaWQuYz0xMTYwPWludCBzY3hfY2lkX2tmdW5jX2luaXQodm9pZClcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMTE2MS17XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjExNjI6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFx1MDAyNnNjeF9rZnVuY19zZXRfaW5pdF9jaWRzKSA/Olxua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoxMTYzOlx0XHRyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2c2N4X2tmdW5jX3NldF9jaWQpID86XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjExNjQ6XHRcdHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcdTAwMjZzY3hfa2Z1bmNfc2V0X2NpZCkgPzpcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MTE2NTpcdFx0cmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFx1MDAyNnNjeF9rZnVuY19zZXRfY2lkKTtcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMTE2Ni19XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMDg5OD1zdGF0aWMgaW50IF9faW5pdCBzY3hfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NzYtXHQgKiBrZnVuYyByZWdpc3RyYXRpb24gY2FuJiMzOTt0IGJlIGRvbmUgZnJvbSBpbml0X3NjaGVkX2V4dF9jbGFzcygpIGFzXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTc3Olx0ICogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldCgpIG5lZWRzIG1vc3Qgb2YgdGhlIHN5c3RlbSB0byBiZSB1cC5cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NzgtXHQgKlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5ODYtXHQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5ODc6XHRpZiAoKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk4OC1cdFx0XHRcdFx0ICAgICBcdTAwMjZzY3hfa2Z1bmNfc2V0X2VucXVldWVfZGlzcGF0Y2gpKSB8fFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk4OTpcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTkwLVx0XHRcdFx0XHQgICAgIFx1MDAyNnNjeF9rZnVuY19zZXRfZGlzcGF0Y2gpKSB8fFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5MTpcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTkyLVx0XHRcdFx0XHQgICAgIFx1MDAyNnNjeF9rZnVuY19zZXRfY3B1X3JlbGVhc2UpKSB8fFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5MzpcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTk0LVx0XHRcdFx0XHQgICAgIFx1MDAyNnNjeF9rZnVuY19zZXRfdW5sb2NrZWQpKSB8fFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5NTpcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTk2LVx0XHRcdFx0XHQgICAgIFx1MDAyNnNjeF9rZnVuY19zZXRfdW5sb2NrZWQpKSB8fFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5NzpcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTk4LVx0XHRcdFx0XHQgICAgIFx1MDAyNnNjeF9rZnVuY19zZXRfYW55KSkgfHxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5OTk6XHQgICAgKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTAwMC1cdFx0XHRcdFx0ICAgICBcdTAwMjZzY3hfa2Z1bmNfc2V0X2FueSkpIHx8XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDAxOlx0ICAgIChyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTEwMDItXHRcdFx0XHRcdCAgICAgXHUwMDI2c2N4X2tmdW5jX3NldF9hbnkpKSkge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jPTE1NTQ9aW50IHNjeF9pZGxlX2luaXQodm9pZClcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTE1NTUte1xua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1NjpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2c2N4X2tmdW5jX3NldF9pZGxlKSA/Olxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1NzpcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2c2N4X2tmdW5jX3NldF9pZGxlKSA/Olxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1ODpcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2c2N4X2tmdW5jX3NldF9pZGxlKSA/Olxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1OTpcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2c2N4X2tmdW5jX3NldF9zZWxlY3RfY3B1KSA/Olxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU2MDpcdCAgICAgICByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2c2N4X2tmdW5jX3NldF9zZWxlY3RfY3B1KTtcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTE1NjEtfVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNDU5PXN0YXRpYyBpbnQgX19pbml0IGJwZl90cmFjZV9rZnVuY3NfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNDYyLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM0NjM6XHRlcnIgPSBlcnIgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0tQUk9CRSwgXHUwMDI2YnBmX3Nlc3Npb25fa2Z1bmNfc2V0KTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNDY0Olx0ZXJyID0gZXJyID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcdTAwMjZicGZfc2Vzc2lvbl9rZnVuY19zZXQpO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM0NjUtXG4tLVxubW0vYnBmX21lbWNvbnRyb2wuYz0xODI9c3RhdGljIGludCBfX2luaXQgYnBmX21lbWNvbnRyb2xfaW5pdCh2b2lkKVxuLS1cbm1tL2JwZl9tZW1jb250cm9sLmMtMTg1LVxubW0vYnBmX21lbWNvbnRyb2wuYzoxODY6XHRlcnIgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVU5TUEVDLFxubW0vYnBmX21lbWNvbnRyb2wuYy0xODctXHRcdFx0XHRcdFx1MDAyNmJwZl9tZW1jb250cm9sX2tmdW5jX3NldCk7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTE4ODg9c3RhdGljIGludCBfX2luaXQgYnBmX3Byb2dfdGVzdF9ydW5faW5pdCh2b2lkKVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xOTAyLVx0cmV0ID0gcmVnaXN0ZXJfYnRmX2Ztb2RyZXRfaWRfc2V0KFx1MDAyNmJwZl90ZXN0X21vZGlmeV9yZXR1cm5fc2V0KTtcbm5ldC9icGYvdGVzdF9ydW4uYzoxOTAzOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmJwZl9wcm9nX3Rlc3Rfa2Z1bmNfc2V0KTtcbm5ldC9icGYvdGVzdF9ydW4uYzoxOTA0Olx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcdTAwMjZicGZfcHJvZ190ZXN0X2tmdW5jX3NldCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTkwNTpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2YnBmX3Byb2dfdGVzdF9rZnVuY19zZXQpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTE5MDYtXHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfcHJvZ190ZXN0X2R0b3Jfa2Z1bmMsXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MzA3PXN0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzE2LVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MzE3Olx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXG5uZXQvY29yZS9icGZfa3NvY2suYy0zMTgtXHRcdFx0XHRcdFx1MDAyNmtzb2NrX2luaXRfa2Z1bmNfc2V0KTtcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMxOTpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMyMC1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNmtzb2NrX2tmdW5jX3NldCk7XG5uZXQvY29yZS9icGZfa3NvY2suYzozMjE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xTTSxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMyMi1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNmtzb2NrX2tmdW5jX3NldCk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTI4NzU9c3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg3OC1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyODc5Olx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODA6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NLX1NLQiwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODI6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODgzOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4NDpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX09VVCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODU6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9JTiwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODY6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4NzpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODg6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX05FVEZJTFRFUiwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODk6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODkwOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiX21ldGEpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTE6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2JfbWV0YSk7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5MjpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3hkcCk7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5MzpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUixcbm5ldC9jb3JlL2ZpbHRlci5jLTEyODk0LVx0XHRcdFx0XHQgICAgICAgXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX2FkZHIpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTU6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF90Y3BfcmVxc2spO1xubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTY6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFx1MDAyNmJwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODk3Olx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU09DS19PUFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19vcHMpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTI4OTgtfVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTYwPXN0YXRpYyBpbnQgaW5pdF9zdWJzeXN0ZW0odm9pZClcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTYxLXtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTYyOlx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19zZXQpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTI5NjMtfVxuLS1cbm5ldC9jb3JlL3hkcC5jPTk5Mz1zdGF0aWMgaW50IF9faW5pdCB4ZHBfbWV0YWRhdGFfaW5pdCh2b2lkKVxubmV0L2NvcmUveGRwLmMtOTk0LXtcbm5ldC9jb3JlL3hkcC5jOjk5NTpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcdTAwMjZ4ZHBfbWV0YWRhdGFfa2Z1bmNfc2V0KTtcbm5ldC9jb3JlL3hkcC5jLTk5Ni19XG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTM0NT1zdGF0aWMgaW50IF9faW5pdCBicGZfdGNwX2NhX2tmdW5jX2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzQ4LVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjM0OTpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcdTAwMjZicGZfdGNwX2NhX2tmdW5jX3NldCk7XG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzUwLVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2JwZl9zdHJ1Y3Rfb3BzKFx1MDAyNmJwZl90Y3BfY29uZ2VzdGlvbl9vcHMsIHRjcF9jb25nZXN0aW9uX29wcyk7XG4tLVxubmV0L2lwdjQvZm91X2JwZi5jPTExMz1pbnQgcmVnaXN0ZXJfZm91X2JwZih2b2lkKVxubmV0L2lwdjQvZm91X2JwZi5jLTExNC17XG5uZXQvaXB2NC9mb3VfYnBmLmM6MTE1Olx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXG5uZXQvaXB2NC9mb3VfYnBmLmMtMTE2LVx0XHRcdFx0XHQgXHUwMDI2Zm91X2JwZl9rZnVuY19zZXQpO1xuLS1cbm5ldC9pcHY0L3RjcF9iYnIuYz0xMTc1PXN0YXRpYyBpbnQgX19pbml0IGJicl9yZWdpc3Rlcih2b2lkKVxuLS1cbm5ldC9pcHY0L3RjcF9iYnIuYy0xMTgwLVxubmV0L2lwdjQvdGNwX2Jici5jOjExODE6XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2dGNwX2Jicl9rZnVuY19zZXQpO1xubmV0L2lwdjQvdGNwX2Jici5jLTExODItXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9pcHY0L3RjcF9jdWJpYy5jPTUwMT1zdGF0aWMgaW50IF9faW5pdCBjdWJpY3RjcF9yZWdpc3Rlcih2b2lkKVxuLS1cbm5ldC9pcHY0L3RjcF9jdWJpYy5jLTUzNC1cbm5ldC9pcHY0L3RjcF9jdWJpYy5jOjUzNTpcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcdTAwMjZ0Y3BfY3ViaWNfa2Z1bmNfc2V0KTtcbm5ldC9pcHY0L3RjcF9jdWJpYy5jLTUzNi1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L2lwdjQvdGNwX2RjdGNwLmM9Mjk0PXN0YXRpYyBpbnQgX19pbml0IGRjdGNwX3JlZ2lzdGVyKHZvaWQpXG4tLVxubmV0L2lwdjQvdGNwX2RjdGNwLmMtMjk5LVxubmV0L2lwdjQvdGNwX2RjdGNwLmM6MzAwOlx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFx1MDAyNnRjcF9kY3RjcF9rZnVuY19zZXQpO1xubmV0L2lwdjQvdGNwX2RjdGNwLmMtMzAxLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz01NDA9aW50IHJlZ2lzdGVyX25mX2Nvbm50cmFja19icGYodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01NDMtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzo1NDQ6XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcdTAwMjZuZl9jb25udHJhY2tfa2Z1bmNfc2V0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjU0NTpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcdTAwMjZuZl9jb25udHJhY2tfa2Z1bmNfc2V0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTU0Ni1cdGlmICghcmV0KSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jPTExNj1pbnQgbmZfZmxvd19yZWdpc3Rlcl9icGYodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYy0xMTcte1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jOjExODpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTExOS1cdFx0XHRcdFx0IFx1MDAyNm5mX2Zsb3dfa2Z1bmNfc2V0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYz02Nj1pbnQgcmVnaXN0ZXJfbmZfbmF0X2JwZih2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2JwZi5jLTY5LVxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmM6NzA6XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmMtNzEtXHRcdFx0XHRcdFx1MDAyNm5mX2JwZl9uYXRfa2Z1bmNfc2V0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYy03NC1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2JwZi5jOjc1Olx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYy03Ni1cdFx0XHRcdFx0IFx1MDAyNm5mX2JwZl9uYXRfa2Z1bmNfc2V0KTtcbi0tXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmM9NDYwPXN0YXRpYyBpbnQgX19pbml0IGJwZl9xZGlzY19rZnVuY19pbml0KHZvaWQpXG4tLVxubmV0L3NjaGVkL2JwZl9xZGlzYy5jLTQ2OS1cbm5ldC9zY2hlZC9icGZfcWRpc2MuYzo0NzA6XHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2YnBmX3FkaXNjX2tmdW5jX3NldCk7XG5uZXQvc2NoZWQvYnBmX3FkaXNjLmMtNDcxLVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhza2Jfa2Z1bmNfZHRvcnMsXG4tLVxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfYnBmLmM9MTA2PWludCBfX2luaXQgcmVnaXN0ZXJfeGZybV9pbnRlcmZhY2VfYnBmKHZvaWQpXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9icGYuYy0xMDcte1xubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfYnBmLmM6MTA4Olx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9icGYuYy0xMDktXHRcdFx0XHRcdCBcdTAwMjZ4ZnJtX2ludGVyZmFjZV9rZnVuY19zZXQpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGVfYnBmLmM9MTMwPWludCBfX2luaXQgcmVnaXN0ZXJfeGZybV9zdGF0ZV9icGYodm9pZClcbm5ldC94ZnJtL3hmcm1fc3RhdGVfYnBmLmMtMTMxLXtcbm5ldC94ZnJtL3hmcm1fc3RhdGVfYnBmLmM6MTMyOlx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsXG5uZXQveGZybS94ZnJtX3N0YXRlX2JwZi5jLTEzMy1cdFx0XHRcdFx0IFx1MDAyNnhmcm1fc3RhdGVfeGRwX2tmdW5jX3NldCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3RfbW9kb3JkZXJfeC5jPTI1PXN0YXRpYyBpbnQgX19pbml0IGJwZl90ZXN0X21vZG9yZGVyX3hfaW5pdCh2b2lkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3RfbW9kb3JkZXJfeC5jLTI2LXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3guYzoyNzpcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3RfbW9kb3JkZXJfeC5jLTI4LVx0XHRcdFx0XHQgXHUwMDI2YnBmX3Rlc3RfbW9kb3JkZXJfeF9zZXQpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3kuYz0yNT1zdGF0aWMgaW50IF9faW5pdCBicGZfdGVzdF9tb2RvcmRlcl95X2luaXQodm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3kuYy0yNi17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdF9tb2RvcmRlcl95LmM6Mjc6XHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3kuYy0yOC1cdFx0XHRcdFx0IFx1MDAyNmJwZl90ZXN0X21vZG9yZGVyX3lfc2V0KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jPTIxMzA9c3RhdGljIGludCBicGZfdGVzdG1vZF9pbml0KHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYy0yMTQwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYzoyMTQxOlx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQywgXHUwMDI2YnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX3NldCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjIxNDI6XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6MjE0MzpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6MjE0NDpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6MjE0NTpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMtMjE0Ni1cdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfZm1vZHJldF9pZF9zZXQoXHUwMDI2YnBmX3Rlc3Rtb2RfdHJhbXBvbGluZV9jb3VudF9mbW9kcmV0X3NldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODE2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgZm9yIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIHRoZSBOZXR3b3JrIEZpbHRlciBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHplcm8gaW4gb24gaG93IHRoZXNlIGBpbml0X3N1YnN5c3RlbWAgYW5kIGBicGZfc29ja19kZXN0cm95YCBmdW5jdGlvbnMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBuZXR3b3JrIGZpbHRlciBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgY29uZmlybWluZyB3aGV0aGVyIG9yIG5vdCB0aGVzZSBjYWxscyBhcmUgd3JhcHBlZCBpbiBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIGxpa2UgYCNpZmRlZmAgYmxvY2tzLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBhbmQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaWYgZGlmZmVyZW50IGZlYXR1cmVzIG9yIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGFyZSBhZmZlY3RpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZXNlIGZ1bmN0aW9ucy4gU28sIGxldCYjMzk7cyBzdGFydCBhdCBsaW5lIDEyODUwIG9mIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIHdvcmsgbXkgd2F5IHRocm91Z2ggdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4gSSB3YW50IHRvIHNlZSBpZiB0aGV5JiMzOTtyZSBoYW5kbGVkIGRpZmZlcmVudGx5IGJhc2VkIG9uIGZsYWdzIG9yIHNldHRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI4NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyODUwOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfeGRwID0ge1xuMTI4NTE6XHRcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuMTI4NTI6XHRcdC5zZXQgPSBcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X3hkcCxcbjEyODUzOlx0fTtcbjEyODU0Olx0XG4xMjg1NTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X3NvY2tfYWRkciA9IHtcbjEyODU2Olx0XHQub3duZXIgPSBUSElTX01PRFVMRSxcbjEyODU3Olx0XHQuc2V0ID0gXHUwMDI2YnBmX2tmdW5jX2NoZWNrX3NldF9zb2NrX2FkZHIsXG4xMjg1ODpcdH07XG4xMjg1OTpcdFxuMTI4NjA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF90Y3BfcmVxc2sgPSB7XG4xMjg2MTpcdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4xMjg2MjpcdFx0LnNldCA9IFx1MDAyNmJwZl9rZnVuY19jaGVja19zZXRfdGNwX3JlcXNrLFxuMTI4NjM6XHR9O1xuMTI4NjQ6XHRcbjEyODY1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfc29ja19vcHMgPSB7XG4xMjg2NjpcdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4xMjg2NzpcdFx0LnNldCA9IFx1MDAyNmJwZl9rZnVuY19jaGVja19zZXRfc29ja19vcHMsXG4xMjg2ODpcdH07XG4xMjg2OTpcdFxuMTI4NzA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9pY21wX3NlbmQgPSB7XG4xMjg3MTpcdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4xMjg3MjpcdFx0LnNldCA9IFx1MDAyNmJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kLFxuMTI4NzM6XHR9O1xuMTI4NzQ6XHRcbjEyODc1Olx0c3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZClcbjEyODc2Olx0e1xuMTI4Nzc6XHRcdGludCByZXQ7XG4xMjg3ODpcdFxuMTI4Nzk6XHRcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbjEyODgwOlx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xuMTI4ODE6XHRcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0tfU0tCLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG4xMjg4MjpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG4xMjg4MzpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG4xMjg4NDpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfT1VULCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG4xMjg4NTpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfSU4sIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbjEyODg2Olx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG4xMjg4NzpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MV1RfU0VHNkxPQ0FMLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XG4xMjg4ODpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9ORVRGSUxURVIsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbjEyODg5Olx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcbjEyODkwOlx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF9za2JfbWV0YSk7XG4xMjg5MTpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1QsIFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiX21ldGEpO1xuMTI4OTI6XHRcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3hkcCk7XG4xMjg5MzpcdFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxuMTI4OTQ6XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19hZGRyKTtcbjEyODk1Olx0XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF90Y3BfcmVxc2spO1xuMTI4OTY6XHRcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiwgXHUwMDI2YnBmX2tmdW5jX3NldF9pY21wX3NlbmQpO1xuMTI4OTc6XHRcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tfT1BTLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NvY2tfb3BzKTtcbjEyODk4Olx0fVxuMTI4OTk6XHRsYXRlX2luaXRjYWxsKGJwZl9rZnVuY19pbml0KTtcbjEyOTAwOlx0XG4xMjkwMTpcdF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbjEyOTAyOlx0XG4xMjkwMzpcdC8qIGJwZl9zb2NrX2Rlc3Ryb3k6IERlc3Ryb3kgdGhlIGdpdmVuIHNvY2tldCB3aXRoIEVDT05OQUJPUlRFRCBlcnJvciBjb2RlLlxuMTI5MDQ6XHQgKlxuMTI5MDU6XHQgKiBUaGUgZnVuY3Rpb24gZXhwZWN0cyBhIG5vbi1OVUxMIHBvaW50ZXIgdG8gYSBzb2NrZXQsIGFuZCBpbnZva2VzIHRoZVxuMTI5MDY6XHQgKiBwcm90b2NvbCBzcGVjaWZpYyBzb2NrZXQgZGVzdHJveSBoYW5kbGVycy5cbjEyOTA3Olx0ICpcbjEyOTA4Olx0ICogVGhlIGhlbHBlciBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBCUEYgY29udGV4dHMgdGhhdCBoYXZlIGFjcXVpcmVkIHRoZSBzb2NrZXRcbjEyOTA5Olx0ICogbG9ja3MuXG4xMjkxMDpcdCAqXG4xMjkxMTpcdCAqIFBhcmFtZXRlcnM6XG4xMjkxMjpcdCAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWRcbjEyOTEzOlx0ICpcbjEyOTE0Olx0ICogUmV0dXJuOlxuMTI5MTU6XHQgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBvciB3aGF0ZXZlciB0aGUgcHJvdG9jb2wgc3BlY2lmaWNcbjEyOTE2Olx0ICogZGVzdHJveSBoYW5kbGVyIHJldHVybnMuXG4xMjkxNzpcdCAqIEVPUE5PVFNVUFAgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuXG4xMjkxODpcdCAqIDAgb3RoZXJ3aXNlXG4xMjkxOTpcdCAqL1xuMTI5MjA6XHRfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spXG4xMjkyMTpcdHtcbjEyOTIyOlx0XHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilzb2NrO1xuMTI5MjM6XHRcbjEyOTI0Olx0XHQvKiBUaGUgbG9ja2luZyBzZW1hbnRpY3MgdGhhdCBhbGxvdyBmb3Igc3luY2hyb25vdXMgZXhlY3V0aW9uIG9mIHRoZVxuMTI5MjU6XHRcdCAqIGRlc3Ryb3kgaGFuZGxlcnMgYXJlIG9ubHkgc3VwcG9ydGVkIGZvciBUQ1AgYW5kIFVEUC5cbjEyOTI2Olx0XHQgKiBTdXBwb3J0aW5nIHByb3RvY29scyB3aWxsIG5lZWQgdG8gYWNxdWlyZSBzb2NrIGxvY2sgaW4gdGhlIEJQRiBjb250ZXh0XG4xMjkyNzpcdFx0ICogcHJpb3IgdG8gaW52b2tpbmcgdGhpcyBrZnVuYy5cbjEyOTI4Olx0XHQgKi9cbjEyOTI5Olx0XHRpZiAoIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KVxuMTI5MzA6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTI5MzE6XHRcbjEyOTMyOlx0XHRpZiAoc2tfZnVsbHNvY2soc2spIFx1MDAyNlx1MDAyNlxuMTI5MzM6XHRcdCAgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjZcbjEyOTM0Olx0XHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXG4xMjkzNTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMjkzNjpcdFxuMTI5Mzc6XHRcdHJldHVybiBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcbjEyOTM4Olx0fVxuMTI5Mzk6XHRcbjEyOTQwOlx0X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcbjEyOTQxOlx0XG4xMjk0MjpcdEJURl9LRlVOQ1NfU1RBUlQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKVxuMTI5NDM6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlcbjEyOTQ0Olx0QlRGX0tGVU5DU19FTkQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKVxuMTI5NDU6XHRcbjEyOTQ2Olx0c3RhdGljIGludCB0cmFjaW5nX2l0ZXJfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxuMTI5NDc6XHR7XG4xMjk0ODpcdFx0aWYgKGJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcywga2Z1bmNfaWQpIFx1MDAyNlx1MDAyNlxuMTI5NDk6XHRcdCAgICBwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9JVEVSKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM2OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQlBGIFNvY2sgRGVzdHJ1Y3Rpb24gTWVjaGFuaXNtKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgYGJwZl9zb2NrX2Rlc3Ryb3lgLiBJdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBhdmFpbGFiaWxpdHkgaW4gdGhlIGtlcm5lbCwgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmtpbmcgYW5kIEJQRiBzeXNjYWxscy4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgd2hldGhlciB0aGUgZW50aXJlIGBuZXQvY29yZS9maWx0ZXIuY2AgZmlsZSBpcyBnYXRlZCBiZWhpbmQgc29tZSBjb25kaXRpb25hbCBvciBpZiBgYnBmX3NvY2tfZGVzdHJveWAgaXMgKmFsd2F5cyogYnVpbHQgaWYgYE5FVGAgYW5kIGBCUEZfU1lTQ0FMTGAgYXJlIGJvdGggZW5hYmxlZC4gTXkgaW5zdGluY3QgaXMgdG8gZXhhbWluZSB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYCBmb3IgdGhlIG1vc3QgZGVmaW5pdGl2ZSBhbnN3ZXIuIFRoYXQgc2hvdWxkIGhhdmUgdGhlIGJ1aWxkIHJ1bGVzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgcmVsZXZhbnQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCB3aWxsIGlsbHVtaW5hdGUgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIHRoYXQgZnVuY3Rpb24uIEZyb20gdGhlcmUgSSYjMzk7bGwgYmUgYWJsZSB0byB0ZWxsIGlmIGl0JiMzOTtzIGFsd2F5cyBpbmNsdWRlZCBvciBub3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbHRlclxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVx0XHQgICAgICYjNDM7PSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZToxMzpcdFx0XHRuZWlnaGJvdXIubyBydG5ldGxpbmsubyB1dGlscy5vIGxpbmtfd2F0Y2gubyBmaWx0ZXIubyBcXFxubmV0L2NvcmUvTWFrZWZpbGUtMTQtXHRcdFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTc0MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzLCBkaXN0aWxsZWQgaW50byBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IGFzIHlvdSByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmRzIHNvbWVvbmUgYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBpbm5lciB3b3JraW5nczoKCioqQ2hlY2tpbmcgQlBGIGFuZCBCVEYgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgQlBGX1NZU0NBTExgIGlzIGRlZmluZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIGBERUJVR19JTkZPX0JURmAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoZSBsb2dpY2FsIHBsYWNlcyB0byBsb29rIGFyZSBgaW5pdC9LY29uZmlnYCDigJMgdGhhdCYjMzk7cyB3aGVyZSBhIGxvdCBvZiB0aGUgaW5pdGlhbCBmZWF0dXJlcyBhcmUgZGVjbGFyZWQg4oCTIGFuZCBga2VybmVsL2JwZi9LY29uZmlnYCwgc2luY2Ugd2UmIzM5O3JlIHNwZWNpZmljYWxseSB0YWxraW5nIGFib3V0IEJQRi4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgaW5kZXBlbmRlbnRseSBhbmQgaWYgdGhlIGBERUJVR19JTkZPX0JURmAgaXMgY29uZGl0aW9uYWxseSBhZmZlY3RlZC4KClRoZW4sIHRvIGJlIGVmZmljaWVudCwgaW5zdGVhZCBvZiBtYW51YWxseSBzaWZ0aW5nIHRocm91Z2ggdGhlIGZpbGUsIEkmIzM5O2xsIHF1aWNrbHkgdXNlIGBncmVwYCB0byBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciBib3RoIGBCUEZfU1lTQ0FMTGAgYW5kIGBERUJVR19JTkZPX0JURmAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIHJlbGV2YW50IGxpbmVzIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLCBhbmQgYWxzbyB0aGUgYnJvYWRlciBjb2RlYmFzZSB0byBzZWUgd2hhdCBkZXBlbmRzIG9uIHRoZW0sIG9yIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZS4gVGhpcyB3aWxsIGhvcGVmdWxseSBwcm92aWRlIHRoZSBjb250ZXh0IEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZWlyIHJlbGF0aW9uc2hpcCBhbmQgZW5zdXJlIHRoZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQuIFRoaXMgaXMgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCB0byB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTc0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBCVEYgYW5kIEtmdW5jcyoqCgpPa2F5LCBzbyBJJiMzOTttIHdvbmRlcmluZyBhYm91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYENPTkZJR19ERUJVR19JTkZPX0JURmAgYW5kIGtlcm5lbCBmdW5jdGlvbnMg4oCTIGFyZSB3ZSB0cnVseSByZWxpYW50IG9uIEJURiBpbmZvcm1hdGlvbiBmb3Iga2Z1bmMgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXRgIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVmaW5lZCB3aXRoaW4gYGluY2x1ZGUvbGludXgvYnRmLmhgLiBVbmRlcnN0YW5kaW5nIHRoYXQgcmVnaXN0cmF0aW9uIHByb2Nlc3Mgd2lsbCBsaWtlbHkgc2hlZCBsaWdodCBvbiB0aGUgZGVwZW5kZW5jeSwgb3IgbGFjayB0aGVyZW9mLCBvbiB0aGUgZGVidWcgQlRGIGRhdGEuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBkaXZlIGludG8gdGhlIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9idGYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTg1Olx0aW50IGJ0Zl9rZnVuY19jaGVja19mbGFnKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGtmdW5jX2J0Zl9pZCwgdTMyIGZsYWcpO1xuIDU4NjpcdGJvb2wgYnRmX2tmdW5jX2lzX2FsbG93ZWQoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIga2Z1bmNfYnRmX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xuIDU4NzpcdHUzMiAqYnRmX2tmdW5jX2lzX21vZGlmeV9yZXR1cm4oY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIga2Z1bmNfYnRmX2lkLFxuIDU4ODpcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbiA1ODk6XHRpbnQgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxuIDU5MDpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0ICpzKTtcbiA1OTE6XHRpbnQgcmVnaXN0ZXJfYnRmX2Ztb2RyZXRfaWRfc2V0KGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0ICprc2V0KTtcbiA1OTI6XHRzMzIgYnRmX2ZpbmRfZHRvcl9rZnVuYyhzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfaWQpO1xuIDU5MzpcdGludCByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3MoY29uc3Qgc3RydWN0IGJ0Zl9pZF9kdG9yX2tmdW5jICpkdG9ycywgdTMyIGFkZF9jbnQsXG4gNTk0Olx0XHRcdFx0XHRzdHJ1Y3QgbW9kdWxlICpvd25lcik7XG4gNTk1Olx0c3RydWN0IGJ0Zl9zdHJ1Y3RfbWV0YSAqYnRmX2ZpbmRfc3RydWN0X21ldGEoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkKTtcbiA1OTY6XHRib29sIGJ0Zl9pc19wcm9qZWN0aW9uX29mKGNvbnN0IGNoYXIgKnBuYW1lLCBjb25zdCBjaGFyICp0bmFtZSk7XG4gNTk3Olx0Ym9vbCBidGZfaXNfcHJvZ19jdHhfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4gNTk4Olx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxuIDU5OTpcdFx0XHRcdCAgIGludCBhcmcpO1xuIDYwMDpcdGludCBnZXRfa2Vybl9jdHhfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csIGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUpO1xuIDYwMTpcdGJvb2wgYnRmX3R5cGVzX2FyZV9zYW1lKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZjEsIHUzMiBpZDEsXG4gNjAyOlx0XHRcdFx0Y29uc3Qgc3RydWN0IGJ0ZiAqYnRmMiwgdTMyIGlkMik7XG4gNjAzOlx0aW50IGJ0Zl9jaGVja19pdGVyX2FyZyhzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuYywgaW50IGFyZ19pZHgpO1xuIDYwNDpcdFxuIDYwNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBidGZfdHlwZV9pc19zdHJ1Y3RfcHRyKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KVxuIDYwNjpcdHtcbiA2MDc6XHRcdGlmICghYnRmX3R5cGVfaXNfcHRyKHQpKVxuIDYwODpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNjA5Olx0XG4gNjEwOlx0XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVx1MDAzZXR5cGUsIE5VTEwpO1xuIDYxMTpcdFxuIDYxMjpcdFx0cmV0dXJuIGJ0Zl90eXBlX2lzX3N0cnVjdCh0KTtcbiA2MTM6XHR9XG4gNjE0Olx0I2Vsc2VcbiA2MTU6XHRzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYnRmX3R5cGVfYnlfaWQoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIDYxNjpcdFx0XHRcdFx0XHRcdCAgICB1MzIgdHlwZV9pZClcbiA2MTc6XHR7XG4gNjE4Olx0XHRyZXR1cm4gTlVMTDtcbiA2MTk6XHR9XG4gNjIwOlx0XG4gNjIxOlx0c3RhdGljIGlubGluZSB2b2lkIGJ0Zl9zZXRfYmFzZV9idGYoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmICpiYXNlX2J0ZilcbiA2MjI6XHR7XG4gNjIzOlx0fVxuIDYyNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzMxNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gQlRGIGluIGBpbmNsdWRlL2xpbnV4L2J0Zi5oYCoqCgpPa2F5LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgQlRGIHN0dWZmIGJldHRlci4gU3BlY2lmaWNhbGx5LCB0aGVyZSYjMzk7cyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgYXJvdW5kIGxpbmUgNTg1IGluIHRoZSBgaW5jbHVkZS9saW51eC9idGYuaGAgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdoYXQmIzM5O3MgZGVmaW5lZCBpbiB0aGUgYGlmZGVmYCBibG9jayBpbW1lZGlhdGVseSAqYWJvdmUqIHRoYXQgbGluZS4gSSYjMzk7bSBhc3N1bWluZyBpdCByZWxhdGVzIHRvIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiwgZmVhdHVyZSBvciBwbGF0Zm9ybS4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG1hZ2ljIGhhcHBlbnMsIGFuZCB1bmRlcnN0YW5kaW5nIHRoYXQgbG9naWMgd2lsbCBnaXZlIG1lIHNvbWUgY29udGV4dCBiZWZvcmUgSSBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIGNvZGUgaW4gdGhlIGFyZWEgb2YgaW50ZXJlc3QsIHdoaWNoIGlzIGxpa2VseSBkZXBlbmRlbnQgb24gdGhhdCBjb25kaXRpb25hbCBsb2dpYy4gSSBhbnRpY2lwYXRlIHRoYXQgdGhlIGAjaWZkZWZgIHdpbGwgbGlrZWx5IGNvbmRpdGlvbiBpbmNsdXNpb24gb2Ygb3RoZXIgcmVsZXZhbnQgaGVhZGVycywgZGVjbGFyYXRpb25zLCBvciBtYXliZSBldmVuIGZ1bmN0aW9uIGRlZmluaXRpb25zIHRoYXQgSSBuZWVkIGZvciBmdWxsIGNvbXByZWhlbnNpb24gb2YgdGhlIGNvZGUmIzM5O3MgYmVoYXZpb3IuIFRpbWUgdG8gb3BlbiB0aGUgZmlsZSBhbmQgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9idGYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTUwOlx0ZW51bSBidGZfZmllbGRfaXRlcl9raW5kIHtcbiA1NTE6XHRcdEJURl9GSUVMRF9JVEVSX0lEUyxcbiA1NTI6XHRcdEJURl9GSUVMRF9JVEVSX1NUUlMsXG4gNTUzOlx0fTtcbiA1NTQ6XHRcbiA1NTU6XHRzdHJ1Y3QgYnRmX2ZpZWxkX2Rlc2Mge1xuIDU1NjpcdFx0Lyogb25jZS1wZXItdHlwZSBvZmZzZXRzICovXG4gNTU3Olx0XHRpbnQgdF9vZmZfY250LCB0X29mZnNbMl07XG4gNTU4Olx0XHQvKiBtZW1iZXIgc3RydWN0IHNpemUsIG9yIHplcm8sIGlmIG5vIG1lbWJlcnMgKi9cbiA1NTk6XHRcdGludCBtX3N6O1xuIDU2MDpcdFx0LyogcmVwZWF0ZWQgcGVyLW1lbWJlciBvZmZzZXRzICovXG4gNTYxOlx0XHRpbnQgbV9vZmZfY250LCBtX29mZnNbMV07XG4gNTYyOlx0fTtcbiA1NjM6XHRcbiA1NjQ6XHRzdHJ1Y3QgYnRmX2ZpZWxkX2l0ZXIge1xuIDU2NTpcdFx0c3RydWN0IGJ0Zl9maWVsZF9kZXNjIGRlc2M7XG4gNTY2Olx0XHR2b2lkICpwO1xuIDU2NzpcdFx0aW50IG1faWR4O1xuIDU2ODpcdFx0aW50IG9mZl9pZHg7XG4gNTY5Olx0XHRpbnQgdmxlbjtcbiA1NzA6XHR9O1xuIDU3MTpcdFxuIDU3MjpcdCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbiA1NzM6XHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmJ0Zl90eXBlX2J5X2lkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIHR5cGVfaWQpO1xuIDU3NDpcdHZvaWQgYnRmX3NldF9iYXNlX2J0ZihzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGYgKmJhc2VfYnRmKTtcbiA1NzU6XHRpbnQgYnRmX3JlbG9jYXRlKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0ZiAqYmFzZV9idGYsIF9fdTMyICoqbWFwX2lkcyk7XG4gNTc2Olx0aW50IGJ0Zl9maWVsZF9pdGVyX2luaXQoc3RydWN0IGJ0Zl9maWVsZF9pdGVyICppdCwgc3RydWN0IGJ0Zl90eXBlICp0LFxuIDU3NzpcdFx0XHRcdGVudW0gYnRmX2ZpZWxkX2l0ZXJfa2luZCBpdGVyX2tpbmQpO1xuIDU3ODpcdF9fdTMyICpidGZfZmllbGRfaXRlcl9uZXh0KHN0cnVjdCBidGZfZmllbGRfaXRlciAqaXQpO1xuIDU3OTpcdFxuIDU4MDpcdGNvbnN0IGNoYXIgKmJ0Zl9uYW1lX2J5X29mZnNldChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBvZmZzZXQpO1xuIDU4MTpcdGNvbnN0IGNoYXIgKmJ0Zl9zdHJfYnlfb2Zmc2V0KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIG9mZnNldCk7XG4gNTgyOlx0c3RydWN0IGJ0ZiAqYnRmX3BhcnNlX3ZtbGludXgodm9pZCk7XG4gNTgzOlx0c3RydWN0IGJ0ZiAqYnBmX3Byb2dfZ2V0X3RhcmdldF9idGYoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbiA1ODQ6XHR1MzIgKmJ0Zl9rZnVuY19mbGFncyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBrZnVuY19idGZfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG4gNTg1Olx0aW50IGJ0Zl9rZnVuY19jaGVja19mbGFnKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGtmdW5jX2J0Zl9pZCwgdTMyIGZsYWcpO1xuIDU4NjpcdGJvb2wgYnRmX2tmdW5jX2lzX2FsbG93ZWQoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIga2Z1bmNfYnRmX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xuIDU4NzpcdHUzMiAqYnRmX2tmdW5jX2lzX21vZGlmeV9yZXR1cm4oY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIga2Z1bmNfYnRmX2lkLFxuIDU4ODpcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbiA1ODk6XHRpbnQgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ1MAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQlBGIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlIGZvciBJdGVyYXRvcnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGZvY3VzaW5nIG9uIGVuYWJsaW5nIEJQRiBpdGVyYXRvcnMsIHBhcnRpY3VsYXJseSB0aG9zZSB0b3VjaGluZyBvbiBUQ1AuIEkga25vdyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgLCBgQ09ORklHX05FVGAsIGFuZCBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCBhcmUgZGVmaW5pdGVseSBpbiBwbGF5IOKAkyB0aG9zZSBhcmUgdGhlIGZvdW5kYXRpb24uIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyBzcGVjaWZpYyB0byBgQlBGX1RSQUNFX0lURVJgIG9yIHRob3NlIHJlbGF0ZWQgdG8gdGhlIGBpdGVyL3RjcGAgZnVuY3Rpb25hbGl0eS4gU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBzZWFyY2ggZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gYGJwZl9pdGVyX3RjcGAgb3IgYW55IG90aGVyIHVzZSBvZiBpdGVyYXRvcnMgaW4gdGhlIEJQRiB3b3JsZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIG1vcmUgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2l0ZXJfcmVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0PTMwMD1maWxlLlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0LTMwMy1cbkRvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0OjMwNDogIHN0cnVjdCBicGZfaXRlcl9yZWcge1xuRG9jdW1lbnRhdGlvbi9icGYvYnBmX2l0ZXJhdG9ycy5yc3QtMzA1LSAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRhcmdldDtcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9icGZfaXRlcmF0b3JzLnJzdC0zMTYtXG5Eb2N1bWVudGF0aW9uL2JwZi9icGZfaXRlcmF0b3JzLnJzdDozMTc6QWZ0ZXIgZmlsbGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUgZmllbGRzLCBjYWxsIGBgYnBmX2l0ZXJfcmVnX3RhcmdldCgpYGAgdG9cbkRvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0LTMxOC1yZWdpc3RlciB0aGUgaXRlcmF0b3IgdG8gdGhlIG1haW4gQlBGIGl0ZXJhdG9yIHN1YnN5c3RlbS5cbkRvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0LTMxOS1cbkRvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0OjMyMDpUaGUgZm9sbG93aW5nIGlzIHRoZSBicmVha2Rvd24gZm9yIGVhY2ggZmllbGQgaW4gc3RydWN0IGBgYnBmX2l0ZXJfcmVnYGAuXG5Eb2N1bWVudGF0aW9uL2JwZi9icGZfaXRlcmF0b3JzLnJzdC0zMjEtXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0yOTgwPWVudW0gYnBmX2l0ZXJfZmVhdHVyZSB7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0yOTg0LSNkZWZpbmUgQlBGX0lURVJfQ1RYX0FSR19NQVggMlxuaW5jbHVkZS9saW51eC9icGYuaDoyOTg1OnN0cnVjdCBicGZfaXRlcl9yZWcge1xuaW5jbHVkZS9saW51eC9icGYuaC0yOTg2LVx0Y29uc3QgY2hhciAqdGFyZ2V0O1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9MzAwND1zdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9tYXBfZWxlbSB7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0zMDEwLVxuaW5jbHVkZS9saW51eC9icGYuaDozMDExOmludCBicGZfaXRlcl9yZWdfdGFyZ2V0KGNvbnN0IHN0cnVjdCBicGZfaXRlcl9yZWcgKnJlZ19pbmZvKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MzAxMjp2b2lkIGJwZl9pdGVyX3VucmVnX3RhcmdldChjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfcmVnICpyZWdfaW5mbyk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMwMTMtaW50IGJwZl9pdGVyX3Byb2dfc3VwcG9ydGVkKHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jPTEwPXN0cnVjdCBicGZfaXRlcl90YXJnZXRfaW5mbyB7XG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMTEtXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6MTI6XHRjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfcmVnICpyZWdfaW5mbztcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy0xMy1cdHUzMiBidGZfaWQ7XHQvKiBjYWNoZWQgdmFsdWUgKi9cbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9MjgzPWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnBmX2l0ZXJfZm9wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMjkxLSAqIGEgY29uc3Qgc3RhdGljIHZhcmlhYmxlIGFuZCBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG9cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzoyOTI6ICogYnBmX2l0ZXJfcmVnX3RhcmdldCgpLlxua2VybmVsL2JwZi9icGZfaXRlci5jLTI5My0gKi9cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzoyOTQ6aW50IGJwZl9pdGVyX3JlZ190YXJnZXQoY29uc3Qgc3RydWN0IGJwZl9pdGVyX3JlZyAqcmVnX2luZm8pXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMjk1LXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMzExLVxua2VybmVsL2JwZi9icGZfaXRlci5jOjMxMjp2b2lkIGJwZl9pdGVyX3VucmVnX3RhcmdldChjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfcmVnICpyZWdfaW5mbylcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy0zMTMte1xuLS1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYz0zNzA9YnBmX2l0ZXJfZ2V0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTM3Ny1cdFx0aWYgKHRpbmZvLVx1MDAzZWJ0Zl9pZCA9PSBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkKSB7XG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6Mzc4Olx0XHRcdGNvbnN0IHN0cnVjdCBicGZfaXRlcl9yZWcgKnJlZ19pbmZvO1xua2VybmVsL2JwZi9icGZfaXRlci5jLTM3OS1cbi0tXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM9Mjg0PURFRklORV9CUEZfSVRFUl9GVU5DKGNncm91cCwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jLTI4Ni1cbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzoyODc6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX2Nncm91cF9yZWdfaW5mbyA9IHtcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0yODgtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDtjZ3JvdXBcJiMzNDssXG4tLVxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jPTMwMj1zdGF0aWMgaW50IF9faW5pdCBicGZfY2dyb3VwX2l0ZXJfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0zMDQtXHRicGZfY2dyb3VwX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSBicGZfY2dyb3VwX2J0Zl9pZFswXTtcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzozMDU6XHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZicGZfY2dyb3VwX3JlZ19pbmZvKTtcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0zMDYtfVxuLS1cbmtlcm5lbC9icGYvZG1hYnVmX2l0ZXIuYz0xMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBkbWFidWZfaXRlcl9zZXFfaW5mbyA9IHtcbi0tXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmMtMTIyLVxua2VybmVsL2JwZi9kbWFidWZfaXRlci5jOjEyMzpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfZG1hYnVmX3JlZ19pbmZvID0ge1xua2VybmVsL2JwZi9kbWFidWZfaXRlci5jLTEyNC1cdC50YXJnZXRcdFx0XHQ9IFwmIzM0O2RtYWJ1ZlwmIzM0Oyxcbi0tXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmM9MTM4PXN0YXRpYyBpbnQgX19pbml0IGRtYWJ1Zl9pdGVyX2luaXQodm9pZClcbi0tXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmMtMTQwLVx0YnBmX2RtYWJ1Zl9yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID0gYnBmX2RtYWJ1Zl9idGZfaWRbMF07XG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmM6MTQxOlx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXHUwMDI2YnBmX2RtYWJ1Zl9yZWdfaW5mbyk7XG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmMtMTQyLX1cbi0tXG5rZXJuZWwvYnBmL2ttZW1fY2FjaGVfaXRlci5jPTIxNz1ERUZJTkVfQlBGX0lURVJfRlVOQyhrbWVtX2NhY2hlLCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcbi0tXG5rZXJuZWwvYnBmL2ttZW1fY2FjaGVfaXRlci5jLTIxOS1cbmtlcm5lbC9icGYva21lbV9jYWNoZV9pdGVyLmM6MjIwOnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGJwZl9rbWVtX2NhY2hlX3JlZ19pbmZvID0ge1xua2VybmVsL2JwZi9rbWVtX2NhY2hlX2l0ZXIuYy0yMjEtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDtrbWVtX2NhY2hlXCYjMzQ7LFxuLS1cbmtlcm5lbC9icGYva21lbV9jYWNoZV9pdGVyLmM9MjMyPXN0YXRpYyBpbnQgX19pbml0IGJwZl9rbWVtX2NhY2hlX2l0ZXJfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9icGYva21lbV9jYWNoZV9pdGVyLmMtMjM0LVx0YnBmX2ttZW1fY2FjaGVfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9IGJwZl9rbWVtX2NhY2hlX2J0Zl9pZFswXTtcbmtlcm5lbC9icGYva21lbV9jYWNoZV9pdGVyLmM6MjM1Olx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXHUwMDI2YnBmX2ttZW1fY2FjaGVfcmVnX2luZm8pO1xua2VybmVsL2JwZi9rbWVtX2NhY2hlX2l0ZXIuYy0yMzYtfVxuLS1cbmtlcm5lbC9icGYvbGlua19pdGVyLmM9ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBicGZfbGlua19zZXFfaW5mbyA9IHtcbi0tXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTg5LVxua2VybmVsL2JwZi9saW5rX2l0ZXIuYzo5MDpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfbGlua19yZWdfaW5mbyA9IHtcbmtlcm5lbC9icGYvbGlua19pdGVyLmMtOTEtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDticGZfbGlua1wmIzM0Oyxcbi0tXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jPTEwMD1zdGF0aWMgaW50IF9faW5pdCBicGZfbGlua19pdGVyX2luaXQodm9pZClcbi0tXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTEwMi1cdGJwZl9saW5rX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSAqYnRmX2JwZl9saW5rX2lkO1xua2VybmVsL2JwZi9saW5rX2l0ZXIuYzoxMDM6XHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZicGZfbGlua19yZWdfaW5mbyk7XG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTEwNC19XG4tLVxua2VybmVsL2JwZi9tYXBfaXRlci5jPTgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gYnBmX21hcF9zZXFfaW5mbyA9IHtcbi0tXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtODktXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM6OTA6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX21hcF9yZWdfaW5mbyA9IHtcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy05MS1cdC50YXJnZXRcdFx0XHQ9IFwmIzM0O2JwZl9tYXBcJiMzNDssXG4tLVxua2VybmVsL2JwZi9tYXBfaXRlci5jPTE2OT1ERUZJTkVfQlBGX0lURVJfRlVOQyhicGZfbWFwX2VsZW0sIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xNzEtXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM6MTcyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGJwZl9tYXBfZWxlbV9yZWdfaW5mbyA9IHtcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xNzMtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDticGZfbWFwX2VsZW1cJiMzNDssXG4tLVxua2VybmVsL2JwZi9tYXBfaXRlci5jPTE4Nz1zdGF0aWMgaW50IF9faW5pdCBicGZfbWFwX2l0ZXJfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xOTEtXHRicGZfbWFwX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSAqYnRmX2JwZl9tYXBfaWQ7XG5rZXJuZWwvYnBmL21hcF9pdGVyLmM6MTkyOlx0cmV0ID0gYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZicGZfbWFwX3JlZ19pbmZvKTtcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xOTMtXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xOTUtXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM6MTk2Olx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXHUwMDI2YnBmX21hcF9lbGVtX3JlZ19pbmZvKTtcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xOTctfVxuLS1cbmtlcm5lbC9icGYvcHJvZ19pdGVyLmM9ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBicGZfcHJvZ19zZXFfaW5mbyA9IHtcbi0tXG5rZXJuZWwvYnBmL3Byb2dfaXRlci5jLTg5LVxua2VybmVsL2JwZi9wcm9nX2l0ZXIuYzo5MDpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfcHJvZ19yZWdfaW5mbyA9IHtcbmtlcm5lbC9icGYvcHJvZ19pdGVyLmMtOTEtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDticGZfcHJvZ1wmIzM0Oyxcbi0tXG5rZXJuZWwvYnBmL3Byb2dfaXRlci5jPTEwMD1zdGF0aWMgaW50IF9faW5pdCBicGZfcHJvZ19pdGVyX2luaXQodm9pZClcbi0tXG5rZXJuZWwvYnBmL3Byb2dfaXRlci5jLTEwMi1cdGJwZl9wcm9nX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSAqYnRmX2JwZl9wcm9nX2lkO1xua2VybmVsL2JwZi9wcm9nX2l0ZXIuYzoxMDM6XHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZicGZfcHJvZ19yZWdfaW5mbyk7XG5rZXJuZWwvYnBmL3Byb2dfaXRlci5jLTEwNC19XG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz02ODQ9c3RhdGljIHZvaWQgYnBmX2l0ZXJfdGFza19zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eCwgc3RydWN0IHNlcV9maWxlICpzZXEpXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy02OTItXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjY5MzpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyB0YXNrX3JlZ19pbmZvID0ge1xua2VybmVsL2JwZi90YXNrX2l0ZXIuYy02OTQtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDt0YXNrXCYjMzQ7LFxuLS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmM9NzA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gdGFza19maWxlX3NlcV9pbmZvID0ge1xuLS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmMtNzEzLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo3MTQ6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgdGFza19maWxlX3JlZ19pbmZvID0ge1xua2VybmVsL2JwZi90YXNrX2l0ZXIuYy03MTUtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDt0YXNrX2ZpbGVcJiMzNDssXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz03MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyB0YXNrX3ZtYV9zZXFfaW5mbyA9IHtcbi0tXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTczNi1cbmtlcm5lbC9icGYvdGFza19pdGVyLmM6NzM3OnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIHRhc2tfdm1hX3JlZ19pbmZvID0ge1xua2VybmVsL2JwZi90YXNrX2l0ZXIuYy03MzgtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDt0YXNrX3ZtYVwmIzM0Oyxcbi0tXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jPTEyMDI9c3RhdGljIGludCBfX2luaXQgdGFza19pdGVyX2luaXQodm9pZClcbi0tXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEyMTItXHR0YXNrX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSBidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9UQVNLXTtcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6MTIxMzpcdHJldCA9IGJwZl9pdGVyX3JlZ190YXJnZXQoXHUwMDI2dGFza19yZWdfaW5mbyk7XG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEyMTQtXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTIxOC1cdHRhc2tfZmlsZV9yZWdfaW5mby5jdHhfYXJnX2luZm9bMV0uYnRmX2lkID0gYnRmX3RyYWNpbmdfaWRzW0JURl9UUkFDSU5HX1RZUEVfRklMRV07XG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjEyMTk6XHRyZXQgPSAgYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZ0YXNrX2ZpbGVfcmVnX2luZm8pO1xua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMjIwLVx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEyMjQtXHR0YXNrX3ZtYV9yZWdfaW5mby5jdHhfYXJnX2luZm9bMV0uYnRmX2lkID0gYnRmX3RyYWNpbmdfaWRzW0JURl9UUkFDSU5HX1RZUEVfVk1BXTtcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6MTIyNTpcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFx1MDAyNnRhc2tfdm1hX3JlZ19pbmZvKTtcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTIyNi19XG4tLVxua2VybmVsL2thbGxzeW1zLmM9ODU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8ga3N5bV9pdGVyX3NlcV9pbmZvID0ge1xuLS1cbmtlcm5lbC9rYWxsc3ltcy5jLTg2MC1cbmtlcm5lbC9rYWxsc3ltcy5jOjg2MTpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBrc3ltX2l0ZXJfcmVnX2luZm8gPSB7XG5rZXJuZWwva2FsbHN5bXMuYy04NjItXHQudGFyZ2V0ICAgICAgICAgICAgICAgICA9IFwmIzM0O2tzeW1cJiMzNDssXG4tLVxua2VybmVsL2thbGxzeW1zLmM9ODc0PXN0YXRpYyBpbnQgX19pbml0IGJwZl9rc3ltX2l0ZXJfcmVnaXN0ZXIodm9pZClcbi0tXG5rZXJuZWwva2FsbHN5bXMuYy04NzYtXHRrc3ltX2l0ZXJfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9ICpidGZfa3N5bV9pdGVyX2lkO1xua2VybmVsL2thbGxzeW1zLmM6ODc3Olx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXHUwMDI2a3N5bV9pdGVyX3JlZ19pbmZvKTtcbmtlcm5lbC9rYWxsc3ltcy5jLTg3OC19XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBpdGVyX3NlcV9pbmZvID0ge1xuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODk3LVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo4OTg6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvID0ge1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04OTktXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDticGZfc2tfc3RvcmFnZV9tYXBcJiMzNDssXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz05MTQ9c3RhdGljIGludCBfX2luaXQgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdCh2b2lkKVxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE3LVx0XHRidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9TT0NLXTtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6OTE4Olx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXHUwMDI2YnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvKTtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE5LX1cbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE5NjY9c3RhdGljIHZvaWQgc29ja19tYXBfaXRlcl9kZXRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfaXRlcl9hdXhfaW5mbyAqYXV4KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTk3MC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTk3MTpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBzb2NrX21hcF9pdGVyX3JlZyA9IHtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTk3Mi1cdC50YXJnZXRcdFx0XHQ9IFwmIzM0O3NvY2ttYXBcJiMzNDssXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xOTg2PXN0YXRpYyBpbnQgX19pbml0IGJwZl9zb2NrbWFwX2l0ZXJfaW5pdCh2b2lkKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTk4OS1cdFx0YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS107XG5uZXQvY29yZS9zb2NrX21hcC5jOjE5OTA6XHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZzb2NrX21hcF9pdGVyX3JlZyk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE5OTEtfVxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzYxNj1icGZfaXRlcl90Y3BfZ2V0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzYyOC1cbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzYyOTpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyB0Y3BfcmVnX2luZm8gPSB7XG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM2MzAtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDt0Y3BcJiMzNDssXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjM5LVxubmV0L2lwdjQvdGNwX2lwdjQuYzozNjQwOnN0YXRpYyB2b2lkIF9faW5pdCBicGZfaXRlcl9yZWdpc3Rlcih2b2lkKVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjQxLXtcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzY0Mi1cdHRjcF9yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID0gYnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS19DT01NT05dO1xubmV0L2lwdjQvdGNwX2lwdjQuYzozNjQzOlx0aWYgKGJwZl9pdGVyX3JlZ190YXJnZXQoXHUwMDI2dGNwX3JlZ19pbmZvKSlcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzY0NC1cdFx0cHJfd2FybihcJiMzNDtXYXJuaW5nOiBjb3VsZCBub3QgcmVnaXN0ZXIgYnBmIGl0ZXJhdG9yIHRjcFxcblwmIzM0Oyk7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0zNjQ5PXZvaWQgX19pbml0IHRjcF92NF9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjc0LSNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjM2NzU6XHRicGZfaXRlcl9yZWdpc3RlcigpO1xubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjc2LSNlbmRpZlxuLS1cbm5ldC9pcHY0L3VkcC5jPTM4ODI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyB1ZHBfc2VxX2luZm8gPSB7XG4tLVxubmV0L2lwdjQvdWRwLmMtMzg4OC1cbm5ldC9pcHY0L3VkcC5jOjM4ODk6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgdWRwX3JlZ19pbmZvID0ge1xubmV0L2lwdjQvdWRwLmMtMzg5MC1cdC50YXJnZXRcdFx0XHQ9IFwmIzM0O3VkcFwmIzM0Oyxcbi0tXG5uZXQvaXB2NC91ZHAuYy0zODk4LVxubmV0L2lwdjQvdWRwLmM6Mzg5OTpzdGF0aWMgdm9pZCBfX2luaXQgYnBmX2l0ZXJfcmVnaXN0ZXIodm9pZClcbm5ldC9pcHY0L3VkcC5jLTM5MDAte1xubmV0L2lwdjQvdWRwLmMtMzkwMS1cdHVkcF9yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID0gYnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfVURQXTtcbm5ldC9pcHY0L3VkcC5jOjM5MDI6XHRpZiAoYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZ1ZHBfcmVnX2luZm8pKVxubmV0L2lwdjQvdWRwLmMtMzkwMy1cdFx0cHJfd2FybihcJiMzNDtXYXJuaW5nOiBjb3VsZCBub3QgcmVnaXN0ZXIgYnBmIGl0ZXJhdG9yIHVkcFxcblwmIzM0Oyk7XG4tLVxubmV0L2lwdjQvdWRwLmM9MzkwNz12b2lkIF9faW5pdCB1ZHBfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTM5MjEtI2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcbm5ldC9pcHY0L3VkcC5jOjM5MjI6XHRicGZfaXRlcl9yZWdpc3RlcigpO1xubmV0L2lwdjQvdWRwLmMtMzkyMy0jZW5kaWZcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTY4OTI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBpcHY2X3JvdXRlX3NlcV9pbmZvID0ge1xuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNjg5OC1cbm5ldC9pcHY2L3JvdXRlLmM6Njg5OTpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBpcHY2X3JvdXRlX3JlZ19pbmZvID0ge1xubmV0L2lwdjYvcm91dGUuYy02OTAwLVx0LnRhcmdldFx0XHRcdD0gXCYjMzQ7aXB2Nl9yb3V0ZVwmIzM0Oyxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTY5MDgtXG5uZXQvaXB2Ni9yb3V0ZS5jOjY5MDk6c3RhdGljIGludCBfX2luaXQgYnBmX2l0ZXJfcmVnaXN0ZXIodm9pZClcbm5ldC9pcHY2L3JvdXRlLmMtNjkxMC17XG5uZXQvaXB2Ni9yb3V0ZS5jLTY5MTEtXHRpcHY2X3JvdXRlX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSAqYnRmX2ZpYjZfaW5mb19pZDtcbm5ldC9pcHY2L3JvdXRlLmM6NjkxMjpcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFx1MDAyNmlwdjZfcm91dGVfcmVnX2luZm8pO1xubmV0L2lwdjYvcm91dGUuYy02OTEzLX1cbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTY5MzA9aW50IF9faW5pdCBpcDZfcm91dGVfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNjk4MC0jaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxubmV0L2lwdjYvcm91dGUuYzo2OTgxOlx0cmV0ID0gYnBmX2l0ZXJfcmVnaXN0ZXIoKTtcbm5ldC9pcHY2L3JvdXRlLmMtNjk4Mi1cdGlmIChyZXQpXG4tLVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jPTI4OTU9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBuZXRsaW5rX3NlcV9pbmZvID0ge1xuLS1cbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yOTAxLVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjI5MDI6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgbmV0bGlua19yZWdfaW5mbyA9IHtcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yOTAzLVx0LnRhcmdldFx0XHRcdD0gXCYjMzQ7bmV0bGlua1wmIzM0Oyxcbi0tXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMjkxMS1cbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoyOTEyOnN0YXRpYyBpbnQgX19pbml0IGJwZl9pdGVyX3JlZ2lzdGVyKHZvaWQpXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMjkxMy17XG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMjkxNC1cdG5ldGxpbmtfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9ICpidGZfbmV0bGlua19zb2NrX2lkO1xubmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjI5MTU6XHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcdTAwMjZuZXRsaW5rX3JlZ19pbmZvKTtcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yOTE2LX1cbi0tXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM9MjkxOT1zdGF0aWMgaW50IF9faW5pdCBuZXRsaW5rX3Byb3RvX2luaXQodm9pZClcbi0tXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMjkyNy0jaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjI5Mjg6XHRlcnIgPSBicGZfaXRlcl9yZWdpc3RlcigpO1xubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTI5MjktXHRpZiAoZXJyKVxuLS1cbm5ldC91bml4L2FmX3VuaXguYz0zOTA4PWJwZl9pdGVyX3VuaXhfZ2V0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLFxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zOTIwLVxubmV0L3VuaXgvYWZfdW5peC5jOjM5MjE6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgdW5peF9yZWdfaW5mbyA9IHtcbm5ldC91bml4L2FmX3VuaXguYy0zOTIyLVx0LnRhcmdldFx0XHRcdD0gXCYjMzQ7dW5peFwmIzM0Oyxcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzkzMS1cbm5ldC91bml4L2FmX3VuaXguYzozOTMyOnN0YXRpYyB2b2lkIF9faW5pdCBicGZfaXRlcl9yZWdpc3Rlcih2b2lkKVxubmV0L3VuaXgvYWZfdW5peC5jLTM5MzMte1xubmV0L3VuaXgvYWZfdW5peC5jLTM5MzQtXHR1bml4X3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSBidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9VTklYXTtcbm5ldC91bml4L2FmX3VuaXguYzozOTM1Olx0aWYgKGJwZl9pdGVyX3JlZ190YXJnZXQoXHUwMDI2dW5peF9yZWdfaW5mbykpXG5uZXQvdW5peC9hZl91bml4LmMtMzkzNi1cdFx0cHJfd2FybihcJiMzNDtXYXJuaW5nOiBjb3VsZCBub3QgcmVnaXN0ZXIgYnBmIGl0ZXJhdG9yIHVuaXhcXG5cJiMzNDspO1xuLS1cbm5ldC91bml4L2FmX3VuaXguYz0zOTQwPXN0YXRpYyBpbnQgX19pbml0IGFmX3VuaXhfaW5pdCh2b2lkKVxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zOTY4LSNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXG5uZXQvdW5peC9hZl91bml4LmM6Mzk2OTpcdGJwZl9pdGVyX3JlZ2lzdGVyKCk7XG5uZXQvdW5peC9hZl91bml4LmMtMzk3MC0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwNTUKCQkJCQkJCW91dHB1dDogMTY1CgkJCQkJCQl0aG91Z2h0czogNTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBhdGNoIGZvciBGdXp6aW5nIFByaW9yaXRpemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBpbXBhY3RzIHRoZSBpbnRlcmFjdGlvbiBvZiBCUEYgd2l0aCBuZXR3b3JrIHNvY2tldHMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgQlBGX1NZU0NBTExgLCBgTkVUYCwgYW5kIGBJTkVUYCBmdW5jdGlvbmFsaXRpZXMuIE15IGluaXRpYWwgY2hlY2sgd2l0aCBgRm9jdXNTeW1ib2xzYCB6ZXJvZWQgaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgbW9kaWZpZWQ6IGBicGZfc29ja19kZXN0cm95YCBhbmQgdGhlIHJlbGF0ZWQgYHRjcF9hYm9ydGAuIFRoZSBkaXJlY3QgY2FsbCB0byBgdGNwX2Fib3J0YCBmcm9tIGBzay0mZ3Q7c2tfcHJvdC0mZ3Q7ZGlhZ19kZXN0cm95YCB3aGVuIGBicGZfc29ja19kZXN0cm95YCBpcyBpbnZva2VkIGZvciBUQ1AgY29ubmVjdGlvbnMsIGluY2x1ZGluZyB0aG9zZSBpbiB0aGUgdGltZXdhaXQvc3luX3JlY3Ygc3RhdGVzLCBpcyBjcml0aWNhbC4gV2UgYWxzbyBoYXZlIHRvIGNvbnNpZGVyIGBpbmV0X3R3c2tfZGVzY2hlZHVsZV9wdXRgIG9yIGBpbmV0X2Nza19yZXFza19xdWV1ZV9kcm9wYCwgdGhvdWdoIGB0Y3BfYWJvcnRgIGlzIHRoZSBwcmltYXJ5IHRhcmdldC4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBicGZfc29ja19kZXN0cm95YCBpcyBpbmRlZWQgYSBkaXN0aW5jdCwgbm9uLWlubGluZWQga2Z1bmMgd2l0aGluIGB2bWxpbnV4YCwgZXhwb3J0ZWQgdmlhIEJURiwgc28gd2UgY2FuIGFkZHJlc3MgaXQgc3BlY2lmaWNhbGx5LiBBIHJldmlldyBvZiB0aGUgcGF0Y2ggaW5kaWNhdGVzIHRoYXQgdGhlIGNoYW5nZSBlbmNvbXBhc3NlcyBtb2RpZmljYXRpb25zIHRvIGBuZXQvY29yZS9maWx0ZXIuY2AgKHNwZWNpZmljYWxseSBgYnBmX3NvY2tfZGVzdHJveWApIGFuZCB0aGUgc2VsZnRlc3RzIGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvLi4uYCBkaXJlY3RvcnkuCgpOb3csIGxldCYjMzk7cyBjb25maWd1cmUgdGhlIGZ1enppbmcgcnVuLiBXZSYjMzk7cmUgc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAg4oCTIGFic29sdXRlbHkuIFRoZSAqcmVhc29uaW5nKiBpcyBjbGVhcjogdGhpcyBwYXRjaCBhbGxvd3MgdGhlIGRlc3RydWN0aW9uIG9mIG5vbi1mdWxseSBlc3RhYmxpc2hlZCBzb2NrZXRzLCBsaWtlIFRDUCB0aW1ld2FpdCBvciByZXF1ZXN0IHNvY2tldHMsIHRocm91Z2ggQlBGIGl0ZXJhdG9ycywgYWNoaWV2ZWQgYnkgY2hlY2tpbmcgYHNrX2Z1bGxzb2NrKClgIGJlZm9yZSBwcm90b2NvbCB2ZXJpZmljYXRpb24uIE15IGBGb2N1c1N5bWJvbHNgIGxpc3QgaXM6IGBbJiMzNDticGZfc29ja19kZXN0cm95JiMzNDssICYjMzQ7dGNwX2Fib3J0JiMzNDtdYC4gVGhlIHJlcXVpcmVkIGBFbmFibGVDb25maWdzYCBhcmU6IGBbJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LCAmIzM0O05FVCYjMzQ7LCAmIzM0O0lORVQmIzM0OywgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7XWAuIEZpbmFsbHksIEkgY29uZmlybWVkIHRoZXJlIGFyZSBubyBgQ09ORklHX2AgcHJlZml4ZXMuIEV2ZXJ5dGhpbmcgbG9va3Mgc29saWQuIEkgYW0gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc29ja19kZXN0cm95JiMzNDssCiAgICAmIzM0O3RjcF9hYm9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVhY2hhYmxlIEJQRiBrZnVuYyBgYnBmX3NvY2tfZGVzdHJveWAgdG8gc3VwcG9ydCBub24tZnVsbCBzb2NrZXRzIChzdWNoIGFzIFRDUCBUSU1FX1dBSVQgYW5kIHJlcXVlc3Qgc29ja2V0cykgYnkgb25seSBjaGVja2luZyB0aGUgcHJvdG9jb2wgb24gZnVsbCBzb2NrZXRzIChgc2tfZnVsbHNvY2tgKS4gVGhpcyBhbGxvd3MgQlBGIGl0ZXJhdG9yIHByb2dyYW1zIHRvIGludm9rZSBzb2NrZXQgZGVzdHJ1Y3Rpb24gKGBkaWFnX2Rlc3Ryb3lgIC8gYHRjcF9hYm9ydGApIG9uIHRpbWV3YWl0IHNvY2tldHMgYW5kIHN5bi1yZWN2IHJlcXVlc3RzLCB3aGljaCBjYW4gdW5jb3ZlciByYWNlIGNvbmRpdGlvbnMgb3Igc3RhdGUtaGFuZGxpbmcgaXNzdWVzIGR1cmluZyBzb2NrZXQgdGVhcmRvd24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NvY2tfZGVzdHJveSYjMzQ7LAogICAgJiMzNDt0Y3BfYWJvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlYWNoYWJsZSBCUEYga2Z1bmMgYGJwZl9zb2NrX2Rlc3Ryb3lgIHRvIHN1cHBvcnQgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIGFuZCByZXF1ZXN0IHNvY2tldHMpIGJ5IG9ubHkgY2hlY2tpbmcgdGhlIHByb3RvY29sIG9uIGZ1bGwgc29ja2V0cyAoYHNrX2Z1bGxzb2NrYCkuIFRoaXMgYWxsb3dzIEJQRiBpdGVyYXRvciBwcm9ncmFtcyB0byBpbnZva2Ugc29ja2V0IGRlc3RydWN0aW9uIChgZGlhZ19kZXN0cm95YCAvIGB0Y3BfYWJvcnRgKSBvbiB0aW1ld2FpdCBzb2NrZXRzIGFuZCBzeW4tcmVjdiByZXF1ZXN0cywgd2hpY2ggY2FuIHVuY292ZXIgcmFjZSBjb25kaXRpb25zIG9yIHN0YXRlLWhhbmRsaW5nIGlzc3VlcyBkdXJpbmcgc29ja2V0IHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBrZnVuYyBgYnBmX3NvY2tfZGVzdHJveSgpYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIHN1cHBvcnQgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIGJ5IGNoZWNraW5nIGBza19mdWxsc29jayhzaylgIGJlZm9yZSBpbnNwZWN0aW5nIGBzay1cdTAwM2Vza19wcm90b2NvbGAsIGFuZCBpbnZva2VzIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKWAuIFRoZSBhY2NvbXBhbnlpbmcgY2hhbmdlcyBhcmUgQlBGIHNlbGZ0ZXN0cy5cblxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBzdHJ1Y3R1cmUgY29weWluZyB0byB1c2Vyc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsLCBldGMuKSwgYW5kIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG4tIFRoZSBwb3RlbnRpYWwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHNvY2tldCBkZXN0cnVjdGlvbiAoZS5nLiwgc29ja2V0IGxpZmVjeWNsZS9yZWZjb3VudGluZyByYWNlcywgbG9ja2luZyBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgZGVyZWZlcmVuY2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycy5cbi0gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdlZTQ4NzQzNWQxNjFlNjhlN2Q5ZmRhNzE3ZjM1NDQ0MDBiY2VkOGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDE4OjQxOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCA2MTk0MGU3NTM1NTIzLi5hNDFjYzYwYTQwMWE1IDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtMTI5MTIsOCAmIzQzOzEyOTEyLDkgQEAgX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpOwogICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZAogICoKICAqIFJldHVybjoKLSAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVQUk9UT05PU1VQUE9SVCwgRUlOVkFMLgotICogRVBST1RPTk9TVVBQT1JUIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLgomIzQzOyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIG9yIHdoYXRldmVyIHRoZSBwcm90b2NvbCBzcGVjaWZpYwomIzQzOyAqIGRlc3Ryb3kgaGFuZGxlciByZXR1cm5zLgomIzQzOyAqIEVPUE5PVFNVUFAgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuCiAgKiAwIG90aGVyd2lzZQogICovCiBfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spCkBAIC0xMjkyNSw4ICYjNDM7MTI5MjYsMTIgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKQogCSAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHQKIAkgKiBwcmlvciB0byBpbnZva2luZyB0aGlzIGtmdW5jLgogCSAqLwotCWlmICghc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveSB8fCAoc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVENQICZhbXA7JmFtcDsKLQkJCQkJICAgc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKSkKJiM0MzsJaWYgKCFzay0mZ3Q7c2tfcHJvdC0mZ3Q7ZGlhZ19kZXN0cm95KQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlpZiAoc2tfZnVsbHNvY2soc2spICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrLSZndDtza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCAmYW1wOyZhbXA7CiYjNDM7CSAgICBzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXJldHVybiBzay0mZ3Q7c2tfcHJvdC0mZ3Q7ZGlhZ19kZXN0cm95KHNrLCBFQ09OTkFCT1JURUQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYwppbmRleCA5YzExOTM4ZmU1OTdkLi5iOTBmYWI3MDczMzg2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYwpAQCAtMTEwLDYgJiM0MzsxMTAsNzQgQEAgc3RhdGljIHZvaWQgdGVzdF90Y3Bfc2VydmVyKHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbCkKIAkJY2xvc2Uoc2Vydik7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3RjcF90aW1ld2FpdChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpCiYjNDM7ewomIzQzOwlpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBhY2NlcHRfc2VydiA9IC0xLCBuOwomIzQzOwlzdHJ1Y3QgdGltZXZhbCB0diA9IHt9OwomIzQzOwljaGFyIGJ1ZlsxXTsKJiM0MzsKJiM0MzsJc2VydiA9IHN0YXJ0X3NlcnZlcihBRl9JTkVUNiwgU09DS19TVFJFQU0sIE5VTEwsIDAsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9HRShzZXJ2LCAwLCAmIzM0O3N0YXJ0X3NlcnZlciYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJY2xpZW4gPSBjb25uZWN0X3RvX2ZkKHNlcnYsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9HRShjbGllbiwgMCwgJiMzNDtjb25uZWN0X3RvX2ZkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlhY2NlcHRfc2VydiA9IGFjY2VwdChzZXJ2LCBOVUxMLCBOVUxMKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoYWNjZXB0X3NlcnYsIDAsICYjMzQ7c2VydiBhY2NlcHQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEFjdGl2ZSBjbG9zZSBmcm9tIHRoZSBjbGllbnQsIHRoZW4gY2xvc2UgdGhlIHNlcnZlciBzaWRlLiBPbmNlCiYjNDM7CSAqIHJlY3YoKSBzZWVzIEVPRiB0aGUgc2VydmVyIEZJTiBoYXMgYmVlbiBwcm9jZXNzZWQgYW5kIHRoZSBjbGllbnQKJiM0MzsJICogc29jayBpcyBpbiBUSU1FX1dBSVQuIEJsb2NrIHdpdGhvdXQgdGltZW91dCBzbyBhIGxvYWRlZCBDSSBib3gKJiM0MzsJICogY2FuJiMzOTt0IHJhY2UgdXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoIUFTU0VSVF9PSyhzZXRzb2Nrb3B0KGNsaWVuLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgJmFtcDt0diwKJiM0MzsJCQkJICBzaXplb2YodHYpKSwgJiMzNDtjbGVhciByY3Z0aW1lbyYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soc2h1dGRvd24oY2xpZW4sIFNIVVRfV1IpLCAmIzM0O2NsaWVudCBzaHV0ZG93biYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTWFrZSBzdXJlIHRoZSBzZXJ2ZXIgaGFzIHNlZW4gdGhlIGNsaWVudCBGSU4gYmVmb3JlIGl0IGNsb3NlcywKJiM0MzsJICogc28gdGhlIHR3byBGSU5zIG5ldmVyIGNyb3NzLgomIzQzOwkgKi8KJiM0MzsJbiA9IHJlY3YoYWNjZXB0X3NlcnYsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOwomIzQzOwlpZiAoIUFTU0VSVF9FUShuLCAwLCAmIzM0O3NlcnZlciByZWN2IEVPRiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJY2xvc2UoYWNjZXB0X3NlcnYpOwomIzQzOwlhY2NlcHRfc2VydiA9IC0xOwomIzQzOwomIzQzOwkvKiBibG9jayB1bnRpbCByZXR1cm4gRU9GICovCiYjNDM7CW4gPSByZWN2KGNsaWVuLCBidWYsIHNpemVvZihidWYpLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEobiwgMCwgJiMzNDtjbGllbnQgcmVjdiBFT0YmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgdGhlIHRpbWV3YWl0IGNsaWVudCBzb2NrLiAqLwomIzQzOwlza2VsLSZndDtic3MtJmd0O3R3X2ZvdW5kID0gMDsKJiM0MzsJc3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtJmd0O3Byb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZm91bmQsIDEsICYjMzQ7dGltZXdhaXQgc29jayBmb3VuZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJQVNTRVJUX09LKHNrZWwtJmd0O2Jzcy0mZ3Q7dHdfZGVzdHJveV9lcnIsICYjMzQ7ZGVzdHJveSB0aW1ld2FpdCBzb2NrJiMzNDspOwomIzQzOwomIzQzOwkvKiBUaGUgZGVzdHJveWVkIHRpbWV3YWl0IHNvY2sgbXVzdCBiZSBnb25lLiAqLwomIzQzOwlza2VsLSZndDtic3MtJmd0O3R3X2ZvdW5kID0gMDsKJiM0MzsJc3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtJmd0O3Byb2dzLml0ZXJfdGNwNl90aW1ld2FpdCk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3R3X2ZvdW5kLCAwLCAmIzM0O3RpbWV3YWl0IHNvY2sgZGVzdHJveWVkJiMzNDspOwomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CWlmIChjbGllbiAhPSAtMSkKJiM0MzsJCWNsb3NlKGNsaWVuKTsKJiM0MzsJaWYgKGFjY2VwdF9zZXJ2ICE9IC0xKQomIzQzOwkJY2xvc2UoYWNjZXB0X3NlcnYpOwomIzQzOwlpZiAoc2VydiAhPSAtMSkKJiM0MzsJCWNsb3NlKHNlcnYpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRlc3RfdWRwX2NsaWVudChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpCiB7CiAJaW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgbiA9IDA7CkBAIC0yMDQsMTEgJiM0MzsyNzIsMTIgQEAgdm9pZCB0ZXN0X3NvY2tfZGVzdHJveSh2b2lkKQogCQl0ZXN0X3RjcF9jbGllbnQoc2tlbCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt0Y3Bfc2VydmVyJiMzNDspKQogCQl0ZXN0X3RjcF9zZXJ2ZXIoc2tlbCk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dGNwX3RpbWV3YWl0JiMzNDspKQomIzQzOwkJdGVzdF90Y3BfdGltZXdhaXQoc2tlbCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt1ZHBfY2xpZW50JiMzNDspKQogCQl0ZXN0X3VkcF9jbGllbnQoc2tlbCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt1ZHBfc2VydmVyJiMzNDspKQogCQl0ZXN0X3VkcF9zZXJ2ZXIoc2tlbCk7Ci0KIAlSVU5fVEVTVFMoc29ja19kZXN0cm95X3Byb2dfZmFpbCk7CiAKIGNsZWFudXA6CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jCmluZGV4IDllMGJmN2E1NGNlYzkuLjBhODg4NzU0MzIxOGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jCkBAIC03LDYgJiM0Mzs3LDggQEAKICNpbmNsdWRlICYjMzQ7YnBmX3RyYWNpbmdfbmV0LmgmIzM0OwogCiBfX2JlMTYgc2Vydl9wb3J0ID0gMDsKJiM0MztpbnQgdHdfZm91bmQgPSAwOwomIzQzO2ludCB0d19kZXN0cm95X2VyciA9IDA7CiAKIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc2spIF9fa3N5bTsKIApAQCAtMTAwLDYgJiM0MzsxMDIsMzQgQEAgaW50IGl0ZXJfdGNwNl9zZXJ2ZXIoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O2l0ZXIvdGNwJiMzNDspCiYjNDM7aW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2tfY29tbW9uICpza19jb21tb24gPSBjdHgtJmd0O3NrX2NvbW1vbjsKJiM0MzsJX191NjQgKnZhbDsKJiM0MzsJaW50IGtleSA9IDA7CiYjNDM7CiYjNDM7CWlmICghc2tfY29tbW9uKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChza19jb21tb24tJmd0O3NrY19mYW1pbHkgIT0gQUZfSU5FVDYpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFicGZfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrKHNrX2NvbW1vbikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3RjcF9jb25uX3NvY2tldHMsICZhbXA7a2V5KTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJLyogVGhlIHRpbWV3YWl0IHNvY2sgaW5oZXJpdHMgdGhlIGNvb2tpZSBvZiB0aGUgY2xvc2VkIGNsaWVudCBzb2NrLiAqLwomIzQzOwlpZiAoYnBmX2dldF9zb2NrZXRfY29va2llKHNrX2NvbW1vbikgIT0gKnZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl0d19mb3VuZCYjNDM7JiM0Mzs7CiYjNDM7CXR3X2Rlc3Ryb3lfZXJyID0gYnBmX3NvY2tfZGVzdHJveShza19jb21tb24pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiAKIFNFQygmIzM0O2l0ZXIvdWRwJiMzNDspCiBpbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA3OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQW5hbHlzaXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIGtlcm5lbCBwYXRjaCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0JiMzOTtzIGRpZyBpbi4gSSBzZWUgdGhleSYjMzk7dmUgbW9kaWZpZWQgdGhlIGBicGZfc29ja19kZXN0cm95YCBmdW5jdGlvbi4gVGhlIGNvZGUmIzM5O3MgYmVlbiBzaW1wbGlmaWVkIGEgYml0LCBidXQgdGhlcmUmIzM5O3MgYSBuZXcgY2hlY2sgdXNpbmcgYHNrX2Z1bGxzb2NrKHNrKWAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBza19mdWxsc29ja2AgYWN0dWFsbHkgKmRvZXMqIGFuZCwgaW1wb3J0YW50bHksIHRoZSBjb250ZXh0cyBpbiB3aGljaCBgYnBmX3NvY2tfZGVzdHJveWAgaXMgY2FsbGVkIGFuZCBob3cgdGhlIG5ldyBjaGVjayBpbnRlcmFjdHMgd2l0aCBkaWZmZXJlbnQgc29ja2V0IHR5cGVzLiBJJiMzOTttIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCBUQ1AgYW5kIFVEUCwgYXMgdGhlIGNvbW1lbnQgbWVudGlvbnMgcHJvdG9jb2wtc3BlY2lmaWMgbG9ja2luZyBzZW1hbnRpY3MuIFRoZSByZW1vdmVkIGNvbmRpdGlvbiBhbmQgYWRkZWQgY29uZGl0aW9uIGNvdWxkIGNoYW5nZSBiZWhhdmlvciBmb3Igc29tZSBwcm90b2NvbHMuCgpJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2VhcmNoIGZvciB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX3NvY2tfZGVzdHJveWAsIGBza19mdWxsc29ja2AsIGFuZCBgZGlhZ19kZXN0cm95YCB1c2luZyBgZ3JlcHBlcmAuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGJlaGF2ZSBpbiB0aGUgcHJlc2VuY2Ugb2YgVENQIHRpbWV3YWl0IHNvY2tldHMsIG9yIGFueSBvdGhlciBraW5kIG9mICYjMzQ7bm9uLWZ1bGxzb2NrJiMzNDsgc2NlbmFyaW9zLiBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIG1pZ2h0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBzYWZldHkgaXNzdWVzLCBlc3BlY2lhbGx5IHdpdGggdGhvc2UgZGVsaWNhdGUsIG9mdGVuIHRyYW5zaWVudCwgc3RhdGVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgc2hvdWxkIGFsbG93IG1lIHRvIG1ha2UgYW4gaW5mb3JtZWQgZGVjaXNpb24gYXMgdG8gd2hldGhlciBhIHNwZWNpYWxpemVkIGZ1enppbmcgY2FtcGFpZ24gaXMgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBza19mdWxsc29jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3OTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHNrX2Z1bGxzb2NrYCBpbiBgaW5jbHVkZS9uZXQvc29jay5oYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHNrX2Z1bGxzb2NrYCBpcyBiZWluZyB1c2VkLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgZGVmaW5pdGlvbiwgd2hpY2ggbGlrZWx5IGxpdmVzIGluIGBpbmNsdWRlL25ldC9zb2NrLmhgLiBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIHN0cnVjdHVyZSBvciBtYWNybywgYW5kIHRoZSBoZWFkZXIgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBjb250ZXh0LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBgc29ja2Agc3RydWN0dXJlIGl0c2VsZiwgYW55IGFzc29jaWF0ZWQgZmxhZ3Mgb3Igc3RhdGVzLCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBkYXRhIGZsb3csIGFuZCBzb2NrZXQgbGlmZWN5Y2xlIGluIGdlbmVyYWwuIEl0IHdpbGwgYWxzbyBiZSB1c2VmdWwgdG8gc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgdmFyaWFibGUsIGBza19mdWxsc29ja2AgaGFzIGJlZW4gdXNlZCwgc28gSSBhbSBnb2luZyB0byBuZWVkIHRvIGRvIHNvbWUgY29kZSBzZWFyY2hlcyBiYXNlZCBvbiB0aGlzIGluZm9ybWF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfZnVsbHNvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9zb2NrLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc29jay5oPTMwMTY9c2tiX3NrX2lzX3ByZWZldGNoZWQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmgtMzAyNy0gKi9cbmluY2x1ZGUvbmV0L3NvY2suaDozMDI4OnN0YXRpYyBpbmxpbmUgYm9vbCBza19mdWxsc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5pbmNsdWRlL25ldC9zb2NrLmgtMzAyOS17XG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTMwMzQ9c2tfaXNfcmVmY291bnRlZChzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTMwMzYtXHQvKiBPbmx5IGZ1bGwgc29ja2V0cyBoYXZlIHNrLVx1MDAzZXNrX2ZsYWdzLiAqL1xuaW5jbHVkZS9uZXQvc29jay5oOjMwMzc6XHRyZXR1cm4gIXNrX2Z1bGxzb2NrKHNrKSB8fCAhc29ja19mbGFnKHNrLCBTT0NLX1JDVV9GUkVFKTtcbmluY2x1ZGUvbmV0L3NvY2suaC0zMDM4LX1cbi0tXG5pbmNsdWRlL25ldC9zb2NrLmg9MzA0MT1za19yZXF1ZXN0c193aWZpX3N0YXR1cyhzdHJ1Y3Qgc29jayAqc2spXG5pbmNsdWRlL25ldC9zb2NrLmgtMzA0Mi17XG5pbmNsdWRlL25ldC9zb2NrLmg6MzA0MzpcdHJldHVybiBzayBcdTAwMjZcdTAwMjYgc2tfZnVsbHNvY2soc2spIFx1MDAyNlx1MDAyNiBzb2NrX2ZsYWcoc2ssIFNPQ0tfV0lGSV9TVEFUVVMpO1xuaW5jbHVkZS9uZXQvc29jay5oLTMwNDQtfVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0zMTE2PXN0YXRpYyBpbmxpbmUgdm9pZCBza19wYWNpbmdfc2hpZnRfdXBkYXRlKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcbmluY2x1ZGUvbmV0L3NvY2suaC0zMTE3LXtcbmluY2x1ZGUvbmV0L3NvY2suaDozMTE4Olx0aWYgKCFzayB8fCAhc2tfZnVsbHNvY2soc2spIHx8IFJFQURfT05DRShzay1cdTAwM2Vza19wYWNpbmdfc2hpZnQpID09IHZhbClcbmluY2x1ZGUvbmV0L3NvY2suaC0zMTE5LVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBzb2NrLmhgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIG5ldHdvcmsgc29ja2V0IGJlaGF2aW9yLiBMZXQmIzM5O3MgcHVsbCB1cCB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgaW5jbHVkZS9uZXQvc29jay5oYC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBhcm91bmQgbGluZSAzMDI4LiBIb3BlZnVsbHksIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGFyZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGF0IGEgZ3JhbnVsYXIgbGV2ZWwuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc29jay5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMDIwOlx0I2Vsc2VcbjMwMjE6XHRcdHJldHVybiBmYWxzZTtcbjMwMjI6XHQjZW5kaWYgLyogQ09ORklHX0lORVQgKi9cbjMwMjM6XHR9XG4zMDI0Olx0XG4zMDI1Olx0LyogVGhpcyBoZWxwZXIgY2hlY2tzIGlmIGEgc29ja2V0IGlzIGEgZnVsbCBzb2NrZXQsXG4zMDI2Olx0ICogaWUgX25vdF8gYSB0aW1ld2FpdCBvciByZXF1ZXN0IHNvY2tldC5cbjMwMjc6XHQgKi9cbjMwMjg6XHRzdGF0aWMgaW5saW5lIGJvb2wgc2tfZnVsbHNvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuMzAyOTpcdHtcbjMwMzA6XHRcdHJldHVybiAoMSBcdTAwM2NcdTAwM2Mgc2stXHUwMDNlc2tfc3RhdGUpIFx1MDAyNiB+KFRDUEZfVElNRV9XQUlUIHwgVENQRl9ORVdfU1lOX1JFQ1YpO1xuMzAzMTpcdH1cbjMwMzI6XHRcbjMwMzM6XHRzdGF0aWMgaW5saW5lIGJvb2xcbjMwMzQ6XHRza19pc19yZWZjb3VudGVkKHN0cnVjdCBzb2NrICpzaylcbjMwMzU6XHR7XG4zMDM2Olx0XHQvKiBPbmx5IGZ1bGwgc29ja2V0cyBoYXZlIHNrLVx1MDAzZXNrX2ZsYWdzLiAqL1xuMzAzNzpcdFx0cmV0dXJuICFza19mdWxsc29jayhzaykgfHwgIXNvY2tfZmxhZyhzaywgU09DS19SQ1VfRlJFRSk7XG4zMDM4Olx0fVxuMzAzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTM3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlbHZpbmcgaW50byBTb2NrZXQgU3RydWN0dXJlcyBhbmQgRGVzdHJ1Y3Rpb24gTWVjaGFuaXNtcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBgYnBmX3NvY2tfZGVzdHJveWAgZnVuY3Rpb24gd2FzIGNoZWNraW5nIGBzay0mZ3Q7c2tfcHJvdG9jb2xgLCBldmVuIHRob3VnaCBpdCBzZWVtcyBsaWtlIHRoYXQgZmllbGQgbWlnaHQgbm90IGFsd2F5cyBiZSByZWxpYWJsZSBvciBldmVuIHZhbGlkIGluIHNvY2tldHMgdGhhdCBhcmUgaW4gdGhlIGBUSU1FX1dBSVRgIG9yIGBSRVFVRVNUYCBzdGF0ZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIHN0cnVjdHVyZXMgdGhlbXNlbHZlcywgcGFydGljdWxhcmx5IGBzdHJ1Y3Qgc29ja19jb21tb25gLCBgc3RydWN0IGluZXRfdGltZXdhaXRfc29ja2AsIGFuZCBgc3RydWN0IHRjcF90aW1ld2FpdF9zb2NrYC4gU2VlaW5nIGhvdyB0aGVzZSBhcmUgZGVmaW5lZCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIHNvY2tldCAoYHNrYCkgd2lsbCBsaWtlbHkgc2hlZCBsaWdodCBvbiB0aGUgaXNzdWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2Ugc29ja2V0cyBhbmQgd2hlcmUgYHNrLSZndDtza19wcm90b2NvbGAgZml0cyBpbi4KCkZvbGxvd2luZyB0aGF0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcGF0aCB0aGUgc29ja2V0IHRha2VzIHRvIGJlIGRlc3Ryb3llZC4gVGhlcmVmb3JlLCBJIHdpbGwgc2VhcmNoIGZvciB0aGUgZnVuY3Rpb24gYGRpYWdfZGVzdHJveWAgYWNyb3NzIHRoZSBgbmV0L2AgZGlyZWN0b3J5IGFuZCBmdW5jdGlvbnMgc3VjaCBhcyBgdGNwX3R3c2tfZGlhZ19kZXN0cm95YCBvciBgdGNwX2RpYWdfZGVzdHJveWAgdG8gZ2V0IGEgc2Vuc2Ugb2YgdGhlIGRlc3RydWN0aW9uIHByb2Nlc3MuIEhvcGVmdWxseSwgdGhpcyB3aWxsIHRlbGwgbWUgd2hhdCB0aGUgZGVzdHJ1Y3Rpb24gcm91dGluZXMgZGVwZW5kIG9uLiBJdCBzaG91bGQgc2hvdyBpZiB0aGUgcHJvdG9jb2wgaXMgbmVlZGVkIG9yIG5vdC4gSSYjMzk7bSBob3BpbmcgdG8gcGlucG9pbnQgdGhlIGV4YWN0IG1vbWVudCBvciBjb250ZXh0IHdoZXJlIHRoZSBwcm90b2NvbCBtaWdodCBiZWNvbWUgdW5hdmFpbGFibGUgb3IgdW5kZWZpbmVkLCBhbmQgdGh1cywgd2h5IHRoYXQgY2hlY2sgaW4gYGJwZl9zb2NrX2Rlc3Ryb3lgIG1pZ2h0IGhhdmUgY2F1c2VkIHByb2JsZW1zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2Ygd2hldGhlciB0aGUgY2hlY2sgd2FzIG5lY2Vzc2FyeSwgYW5kIGhvdyB3ZSBjb3VsZCBoYW5kbGUgdGhlIHNvY2tldCYjMzk7cyBzdGF0ZXMgbW9yZSByb2J1c3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlhZ19kZXN0cm95JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMjkyMD1fX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI5MjgtXHQgKi9cbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTI5Olx0aWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSlcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTMwLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI5MzYtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjkzNzpcdHJldHVybiBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTM4LX1cbi0tXG5uZXQvY29yZS9zb2NrX2RpYWcuYz0xNDM9c3RhdGljIHZvaWQgc29ja19kaWFnX2Jyb2FkY2FzdF9kZXN0cm95X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTE0OS1cdHN0cnVjdCBza19idWZmICpza2I7XG5uZXQvY29yZS9zb2NrX2RpYWcuYzoxNTA6XHRjb25zdCBlbnVtIHNrbmV0bGlua19ncm91cHMgZ3JvdXAgPSBzb2NrX2RpYWdfZGVzdHJveV9ncm91cChzayk7XG5uZXQvY29yZS9zb2NrX2RpYWcuYy0xNTEtXHRpbnQgZXJyID0gLTE7XG4tLVxubmV0L2NvcmUvc29ja19kaWFnLmM9Mjk1PXN0YXRpYyBpbnQgc29ja19kaWFnX2JpbmQoc3RydWN0IG5ldCAqbmV0LCBpbnQgZ3JvdXApXG4tLVxubmV0L2NvcmUvc29ja19kaWFnLmMtMzExLVxubmV0L2NvcmUvc29ja19kaWFnLmM6MzEyOmludCBzb2NrX2RpYWdfZGVzdHJveShzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXG5uZXQvY29yZS9zb2NrX2RpYWcuYy0zMTMte1xuLS1cbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTMxNi1cbm5ldC9jb3JlL3NvY2tfZGlhZy5jOjMxNzpcdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kpXG5uZXQvY29yZS9zb2NrX2RpYWcuYy0zMTgtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTMxOS1cbm5ldC9jb3JlL3NvY2tfZGlhZy5jOjMyMDpcdHJldHVybiBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgZXJyKTtcbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTMyMS19XG5uZXQvY29yZS9zb2NrX2RpYWcuYzozMjI6RVhQT1JUX1NZTUJPTF9HUEwoc29ja19kaWFnX2Rlc3Ryb3kpO1xubmV0L2NvcmUvc29ja19kaWFnLmMtMzIzLVxuLS1cbm5ldC9pcHY0L3Jhdy5jPTk0OD1zdHJ1Y3QgcHJvdG8gcmF3X3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvcmF3LmMtOTcyLSNlbmRpZlxubmV0L2lwdjQvcmF3LmM6OTczOlx0LmRpYWdfZGVzdHJveVx0ICAgPSByYXdfYWJvcnQsXG5uZXQvaXB2NC9yYXcuYy05NzQtfTtcbi0tXG5uZXQvaXB2NC9yYXdfZGlhZy5jPTE4Nz1zdGF0aWMgdm9pZCByYXdfZGlhZ19nZXRfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2RpYWdfbXNnICpyLFxuLS1cbm5ldC9pcHY0L3Jhd19kaWFnLmMtMTk0LSNpZmRlZiBDT05GSUdfSU5FVF9ESUFHX0RFU1RST1lcbm5ldC9pcHY0L3Jhd19kaWFnLmM6MTk1OnN0YXRpYyBpbnQgcmF3X2RpYWdfZGVzdHJveShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxubmV0L2lwdjQvcmF3X2RpYWcuYy0xOTYtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyICpyKVxuLS1cbm5ldC9pcHY0L3Jhd19kaWFnLmMtMjA0LVx0XHRyZXR1cm4gUFRSX0VSUihzayk7XG5uZXQvaXB2NC9yYXdfZGlhZy5jOjIwNTpcdGVyciA9IHNvY2tfZGlhZ19kZXN0cm95KHNrLCBFQ09OTkFCT1JURUQpO1xubmV0L2lwdjQvcmF3X2RpYWcuYy0yMDYtXHRzb2NrX3B1dChzayk7XG4tLVxubmV0L2lwdjQvcmF3X2RpYWcuYz0yMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciByYXdfZGlhZ19oYW5kbGVyID0ge1xuLS1cbm5ldC9pcHY0L3Jhd19kaWFnLmMtMjE4LSNpZmRlZiBDT05GSUdfSU5FVF9ESUFHX0RFU1RST1lcbm5ldC9pcHY0L3Jhd19kaWFnLmM6MjE5Olx0LmRlc3Ryb3lcdFx0PSByYXdfZGlhZ19kZXN0cm95LFxubmV0L2lwdjQvcmF3X2RpYWcuYy0yMjAtI2VuZGlmXG4tLVxubmV0L2lwdjQvdGNwX2RpYWcuYz02MDQ9c3RhdGljIGludCB0Y3BfZGlhZ19kdW1wX29uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4tLVxubmV0L2lwdjQvdGNwX2RpYWcuYy02NDEtI2lmZGVmIENPTkZJR19JTkVUX0RJQUdfREVTVFJPWVxubmV0L2lwdjQvdGNwX2RpYWcuYzo2NDI6c3RhdGljIGludCB0Y3BfZGlhZ19kZXN0cm95KHN0cnVjdCBza19idWZmICppbl9za2IsXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY0My1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnJlcSlcbi0tXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY1Mi1cbm5ldC9pcHY0L3RjcF9kaWFnLmM6NjUzOlx0ZXJyID0gc29ja19kaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY1NC1cbi0tXG5uZXQvaXB2NC90Y3BfZGlhZy5jPTY2MT1zdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyIHRjcF9kaWFnX2hhbmRsZXIgPSB7XG4tLVxubmV0L2lwdjQvdGNwX2RpYWcuYy02NjktI2lmZGVmIENPTkZJR19JTkVUX0RJQUdfREVTVFJPWVxubmV0L2lwdjQvdGNwX2RpYWcuYzo2NzA6XHQuZGVzdHJveVx0XHQ9IHRjcF9kaWFnX2Rlc3Ryb3ksXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY3MS0jZW5kaWZcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTMzNDc9c3RydWN0IHByb3RvIHRjcF9wcm90ID0ge1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM5NS1cdC5ub19hdXRvYmluZFx0XHQ9IHRydWUsXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjMzOTY6XHQuZGlhZ19kZXN0cm95XHRcdD0gdGNwX2Fib3J0LFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzk3LX07XG4tLVxubmV0L2lwdjQvdWRwLmM9MzE0Mz1zdHJ1Y3QgcHJvdG8gdWRwX3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvdWRwLmMtMzE3My1cdC5vYmpfc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgdWRwX3NvY2spLFxubmV0L2lwdjQvdWRwLmM6MzE3NDpcdC5kaWFnX2Rlc3Ryb3lcdFx0PSB1ZHBfYWJvcnQsXG5uZXQvaXB2NC91ZHAuYy0zMTc1LX07XG4tLVxubmV0L2lwdjQvdWRwX2RpYWcuYz0xNDQ9c3RhdGljIHZvaWQgdWRwX2RpYWdfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqcixcbi0tXG5uZXQvaXB2NC91ZHBfZGlhZy5jLTE1MS0jaWZkZWYgQ09ORklHX0lORVRfRElBR19ERVNUUk9ZXG5uZXQvaXB2NC91ZHBfZGlhZy5jOjE1MjpzdGF0aWMgaW50IHVkcF9kaWFnX2Rlc3Ryb3koc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbm5ldC9pcHY0L3VkcF9kaWFnLmMtMTUzLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxKVxuLS1cbm5ldC9pcHY0L3VkcF9kaWFnLmMtMjAwLVxubmV0L2lwdjQvdWRwX2RpYWcuYzoyMDE6XHRlcnIgPSBzb2NrX2RpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcbm5ldC9pcHY0L3VkcF9kaWFnLmMtMjAyLVxuLS1cbm5ldC9pcHY0L3VkcF9kaWFnLmM9MjA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgdWRwX2RpYWdfaGFuZGxlciA9IHtcbi0tXG5uZXQvaXB2NC91ZHBfZGlhZy5jLTIxNi0jaWZkZWYgQ09ORklHX0lORVRfRElBR19ERVNUUk9ZXG5uZXQvaXB2NC91ZHBfZGlhZy5jOjIxNzpcdC5kZXN0cm95XHQgPSB1ZHBfZGlhZ19kZXN0cm95LFxubmV0L2lwdjQvdWRwX2RpYWcuYy0yMTgtI2VuZGlmXG4tLVxubmV0L2lwdjYvcmF3LmM9MTIwNz1zdHJ1Y3QgcHJvdG8gcmF3djZfcHJvdCA9IHtcbi0tXG5uZXQvaXB2Ni9yYXcuYy0xMjMxLSNlbmRpZlxubmV0L2lwdjYvcmF3LmM6MTIzMjpcdC5kaWFnX2Rlc3Ryb3lcdCAgID0gcmF3X2Fib3J0LFxubmV0L2lwdjYvcmF3LmMtMTIzMy19O1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjI3Nj1zdHJ1Y3QgcHJvdG8gdGNwdjZfcHJvdCA9IHtcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIzMjUtXHQubm9fYXV0b2JpbmRcdFx0PSB0cnVlLFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMzI2Olx0LmRpYWdfZGVzdHJveVx0XHQ9IHRjcF9hYm9ydCxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMyNy19O1xuLS1cbm5ldC9pcHY2L3VkcC5jPTE5MDg9c3RydWN0IHByb3RvIHVkcHY2X3Byb3QgPSB7XG4tLVxubmV0L2lwdjYvdWRwLmMtMTk0MC1cdC5pcHY2X3BpbmZvX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB1ZHA2X3NvY2ssIGluZXQ2KSxcbm5ldC9pcHY2L3VkcC5jOjE5NDE6XHQuZGlhZ19kZXN0cm95XHRcdD0gdWRwX2Fib3J0LFxubmV0L2lwdjYvdWRwLmMtMTk0Mi19O1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE0Nj12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjYtXHR0Y3BfcHJvdF9vdmVycmlkZS5yZWxlYXNlX2NiID0gdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIxNjc6XHR0Y3BfcHJvdF9vdmVycmlkZS5kaWFnX2Rlc3Ryb3kgPSB0Y3BfYWJvcnRfb3ZlcnJpZGU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjgtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE4MD12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X3Y2X2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTMtXHR0Y3B2Nl9wcm90X292ZXJyaWRlLnJlbGVhc2VfY2IgPSB0Y3BfcmVsZWFzZV9jYl9vdmVycmlkZTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjIxNDpcdHRjcHY2X3Byb3Rfb3ZlcnJpZGUuZGlhZ19kZXN0cm95ID0gdGNwX2Fib3J0X292ZXJyaWRlO1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMjE1LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODczNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFNvY2tldCBTdHJ1Y3R1cmVzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgc29ja2V0IGRhdGEgc3RydWN0dXJlcyBhZ2FpbiwgYW5kIHRoZSBzcGVjaWZpYyByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlbSBhcmUsIGFzIGFsd2F5cywgdGhlIGtleS4gTGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzOiBgc3RydWN0IHNvY2tfY29tbW9uYCwgYHN0cnVjdCBzb2NrYCwgYW5kIGBzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrYC4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgdG8gcHVsbCB1cCB0aGUgbWVtb3J5IG1hcHMgYW5kIGxpa2VseSB0aGUgaW5oZXJpdGFuY2UgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZW0uIFdoZXJlIGRvZXMgZWFjaCBvbmUgY29tZSBpbiB0byBwbGF5PyBXaGF0IGNvcmUgZmVhdHVyZXMgYXJlIGVhY2ggcmVzcG9uc2libGUgZm9yPwoKSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBmb3VuZGF0aW9uLCBzbyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyBgc3RydWN0IHNvY2tfY29tbW9uYC4gSSYjMzk7bGwgd2FudCB0byByZXZpZXcgdGhlIGJhc2ljIGVsZW1lbnRzIHRoYXQgYXJlIGNvbW1vbiBhY3Jvc3Mgc29ja2V0IHR5cGVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGhhcHBlbmluZyBhdCB0aGUgbG93IGxldmVsLiBHb3R0YSByZWZyZXNoIHRoZSBtZW1vcnkgb2Ygd2hhdCYjMzk7cyBmdW5kYW1lbnRhbCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgc29ja19jb21tb24gXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc29jay5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NvY2suaD0xMDg9dHlwZWRlZiBfX3U2NCBfX2JpdHdpc2UgX19hZGRycGFpcjtcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmgtMTU1LSAqL1xuaW5jbHVkZS9uZXQvc29jay5oOjE1NjpzdHJ1Y3Qgc29ja19jb21tb24ge1xuaW5jbHVkZS9uZXQvc29jay5oLTE1Ny1cdHVuaW9uIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA3NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHN0cnVjdCBzb2NrX2NvbW1vbmAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBkaWcgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgSSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZSB0aGF0IHVuZGVycGlucyBzb2NrZXQgb3BlcmF0aW9ucyBpbiB0aGUgTGludXgga2VybmVsLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gYHN0cnVjdCBzb2NrX2NvbW1vbmAgd2l0aGluIGBpbmNsdWRlL25ldC9zb2NrLmhgLiBJJiMzOTt2ZSBwcm9iYWJseSBsb29rZWQgYXQgdGhpcyBhIHRob3VzYW5kIHRpbWVzLCBidXQgZXZlcnkgdGltZSBJIHJldmlldyBpdCBJIGZpbmQgc29tZXRoaW5nIG5ldyBvciBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCBmaXRzIGludG8gdGhlIHdob2xlLiBJ4oCZbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgc3RydWN0dXJlIHRpZXMgaW50byB0aGUgdmFyaW91cyBzb2NrZXQgc3RhdGVzIGFuZCBsaWZlY3ljbGUgZXZlbnRzLiBIb3BlZnVsbHksIGl0JiMzOTtzIGFsbCBpbiB0aGUgaGVhZGVyLCBvciB0aGUgcmVsYXRlZCBzb3VyY2UgZmlsZXMuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgc29ja2V0IHF1ZXVpbmcgaXMgbWFuYWdlZCBpbiByZWxhdGlvbiB0byBSWC9UWCBwYXRocywgbG9ja2luZyBtZWNoYW5pc21zLCBhbmQgdGhlIGltcGFjdCBvZiB2YXJpb3VzIHNvY2tldCBvcHRpb25zIGFuZCBmbGFncy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgZmluZGluZyBwb2ludGVycyB0byBxdWV1ZXMsIGZsYWdzIGluZGljYXRpbmcgc3RhdGUgKGxpa2UgYFRDUF9FU1RBQkxJU0hFRGAgb3IgYFNPQ0tfREVBRGApLCBhbmQgcG9zc2libHkgZmllbGRzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlc291cmNlIGFsbG9jYXRpb24uIEl0JiMzOTtzIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIGNoZWNrIGZvciBhbnkgbnVhbmNlcyBvciBjaGFuZ2VzIHNpbmNlIG15IGxhc3QgZGVlcCBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NvY2suaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTU2Olx0c3RydWN0IHNvY2tfY29tbW9uIHtcbiAxNTc6XHRcdHVuaW9uIHtcbiAxNTg6XHRcdFx0X19hZGRycGFpclx0c2tjX2FkZHJwYWlyO1xuIDE1OTpcdFx0XHRzdHJ1Y3Qge1xuIDE2MDpcdFx0XHRcdF9fYmUzMlx0c2tjX2RhZGRyO1xuIDE2MTpcdFx0XHRcdF9fYmUzMlx0c2tjX3Jjdl9zYWRkcjtcbiAxNjI6XHRcdFx0fTtcbiAxNjM6XHRcdH07XG4gMTY0Olx0XHR1bmlvbiAge1xuIDE2NTpcdFx0XHR1bnNpZ25lZCBpbnRcdHNrY19oYXNoO1xuIDE2NjpcdFx0XHRfX3UxNlx0XHRza2NfdTE2aGFzaGVzWzJdO1xuIDE2NzpcdFx0fTtcbiAxNjg6XHRcdC8qIHNrY19kcG9ydCBcdTAwMjZcdTAwMjYgc2tjX251bSBtdXN0IGJlIGdyb3VwZWQgYXMgd2VsbCAqL1xuIDE2OTpcdFx0dW5pb24ge1xuIDE3MDpcdFx0XHRfX3BvcnRwYWlyXHRza2NfcG9ydHBhaXI7XG4gMTcxOlx0XHRcdHN0cnVjdCB7XG4gMTcyOlx0XHRcdFx0X19iZTE2XHRza2NfZHBvcnQ7XG4gMTczOlx0XHRcdFx0X191MTZcdHNrY19udW07XG4gMTc0Olx0XHRcdH07XG4gMTc1Olx0XHR9O1xuIDE3NjpcdFxuIDE3NzpcdFx0dW5zaWduZWQgc2hvcnRcdFx0c2tjX2ZhbWlseTtcbiAxNzg6XHRcdHZvbGF0aWxlIHVuc2lnbmVkIGNoYXJcdHNrY19zdGF0ZTtcbiAxNzk6XHRcdHVuc2lnbmVkIGNoYXJcdFx0c2tjX3JldXNlOjQ7XG4gMTgwOlx0XHR1bnNpZ25lZCBjaGFyXHRcdHNrY19yZXVzZXBvcnQ6MTtcbiAxODE6XHRcdHVuc2lnbmVkIGNoYXJcdFx0c2tjX2lwdjZvbmx5OjE7XG4gMTgyOlx0XHR1bnNpZ25lZCBjaGFyXHRcdHNrY19uZXRfcmVmY250OjE7XG4gMTgzOlx0XHR1bnNpZ25lZCBjaGFyXHRcdHNrY19ieXBhc3NfcHJvdF9tZW06MTtcbiAxODQ6XHRcdGludFx0XHRcdHNrY19ib3VuZF9kZXZfaWY7XG4gMTg1Olx0XHR1bmlvbiB7XG4gMTg2Olx0XHRcdHN0cnVjdCBobGlzdF9ub2RlXHRza2NfYmluZF9ub2RlO1xuIDE4NzpcdFx0XHRzdHJ1Y3QgaGxpc3Rfbm9kZVx0c2tjX3BvcnRhZGRyX25vZGU7XG4gMTg4Olx0XHR9O1xuIDE4OTpcdFx0c3RydWN0IHByb3RvXHRcdCpza2NfcHJvdDtcbiAxOTA6XHRcdHBvc3NpYmxlX25ldF90XHRcdHNrY19uZXQ7XG4gMTkxOlx0XG4gMTkyOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gMTkzOlx0XHRzdHJ1Y3QgaW42X2FkZHJcdFx0c2tjX3Y2X2RhZGRyO1xuIDE5NDpcdFx0c3RydWN0IGluNl9hZGRyXHRcdHNrY192Nl9yY3Zfc2FkZHI7XG4gMTk1Olx0I2VuZGlmXG4gMTk2Olx0XG4gMTk3Olx0XHRhdG9taWM2NF90XHRcdHNrY19jb29raWU7XG4gMTk4Olx0XG4gMTk5Olx0XHQvKiBmb2xsb3dpbmcgZmllbGRzIGFyZSBwYWRkaW5nIHRvIGZvcmNlXG4gMjAwOlx0XHQgKiBvZmZzZXQoc3RydWN0IHNvY2ssIHNrX3JlZmNudCkgPT0gMTI4IG9uIDY0Yml0IGFyY2hlc1xuIDIwMTpcdFx0ICogYXNzdW1pbmcgSVBWNiBpcyBlbmFibGVkLiBXZSB1c2UgdGhpcyBwYWRkaW5nIGRpZmZlcmVudGx5XG4gMjAyOlx0XHQgKiBmb3IgZGlmZmVyZW50IGtpbmQgb2YgJiMzOTtzb2NrZXRzJiMzOTtcbiAyMDM6XHRcdCAqL1xuIDIwNDpcdFx0dW5pb24ge1xuIDIwNTpcdFx0XHR1bnNpZ25lZCBsb25nXHRza2NfZmxhZ3M7XG4gMjA2Olx0XHRcdHN0cnVjdCBzb2NrXHQqc2tjX2xpc3RlbmVyOyAvKiByZXF1ZXN0X3NvY2sgKi9cbiAyMDc6XHRcdFx0c3RydWN0IGluZXRfdGltZXdhaXRfZGVhdGhfcm93ICpza2NfdHdfZHI7IC8qIGluZXRfdGltZXdhaXRfc29jayAqL1xuIDIwODpcdFx0fTtcbiAyMDk6XHRcdC8qXG4gMjEwOlx0XHQgKiBmaWVsZHMgYmV0d2VlbiBkb250Y29weV9iZWdpbi9kb250Y29weV9lbmRcbiAyMTE6XHRcdCAqIGFyZSBub3QgY29waWVkIGluIHNvY2tfY29weSgpXG4gMjEyOlx0XHQgKi9cbiAyMTM6XHRcdC8qIHByaXZhdGU6ICovXG4gMjE0Olx0XHRpbnRcdFx0XHRza2NfZG9udGNvcHlfYmVnaW5bMF07XG4gMjE1Olx0XHQvKiBwdWJsaWM6ICovXG4gMjE2Olx0XHR1bmlvbiB7XG4gMjE3Olx0XHRcdHN0cnVjdCBobGlzdF9ub2RlXHRza2Nfbm9kZTtcbiAyMTg6XHRcdFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgc2tjX251bGxzX25vZGU7XG4gMjE5Olx0XHR9O1xuIDIyMDpcdFx0dW5zaWduZWQgc2hvcnRcdFx0c2tjX3R4X3F1ZXVlX21hcHBpbmc7XG4gMjIxOlx0I2lmZGVmIENPTkZJR19TT0NLX1JYX1FVRVVFX01BUFBJTkdcbiAyMjI6XHRcdHVuc2lnbmVkIHNob3J0XHRcdHNrY19yeF9xdWV1ZV9tYXBwaW5nO1xuIDIyMzpcdCNlbmRpZlxuIDIyNDpcdFx0dW5pb24ge1xuIDIyNTpcdFx0XHRpbnRcdFx0c2tjX2luY29taW5nX2NwdTtcbiAyMjY6XHRcdFx0dTMyXHRcdHNrY19yY3Zfd25kO1xuIDIyNzpcdFx0XHR1MzJcdFx0c2tjX3R3X3Jjdl9ueHQ7IC8qIHN0cnVjdCB0Y3BfdGltZXdhaXRfc29jayAgKi9cbiAyMjg6XHRcdH07XG4gMjI5Olx0XG4gMjMwOlx0XHRyZWZjb3VudF90XHRcdHNrY19yZWZjbnQ7XG4gMjMxOlx0XHQvKiBwcml2YXRlOiAqL1xuIDIzMjpcdFx0aW50ICAgICAgICAgICAgICAgICAgICAgc2tjX2RvbnRjb3B5X2VuZFswXTtcbiAyMzM6XHRcdHVuaW9uIHtcbiAyMzQ6XHRcdFx0dTMyXHRcdHNrY19yeGhhc2g7XG4gMjM1Olx0XHRcdHUzMlx0XHRza2Nfd2luZG93X2NsYW1wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU5MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsJiMzOTtzIE5ldHdvcmsgU29ja2V0IFN0cnVjdHVyZSoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYHN0cnVjdCBzb2NrYC4gTGV0JiMzOTtzIHNlZS4uLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgc29tZXdoZXJlIGluIGhlcmUsIGBza19wcm90b2NvbGAgaXMgZGVmaW5lZC4gSSB0aGluayBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBjb21tb24gc29ja2V0IGRhdGEsIG1heWJlIGRlZmluZWQgdXNpbmcgYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGAjZGVmaW5lIHNrX3Byb3RvY29sIF9fc2tfY29tbW9uLnNrY19wcm90b2NvbGAuLi4gb3Igd2FzIGl0IGEgc2xpZ2h0bHkgZGlmZmVyZW50IG5hbWluZyBjb252ZW50aW9uPyBFaXRoZXIgd2F5LCBJIG5lZWQgdG8gY29uZmlybSB3aGVyZSBgc2tfcHJvdG9jb2xgIGFjdHVhbGx5IGxpdmVzIHdpdGhpbiB0aGlzIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyB0aGUga2V5OiB1bmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgbWVtYmVycy4gVGltZSB0byB0cmFjZSB3aGVyZSBleGFjdGx5IGl0JiMzOTtzIGRlY2xhcmVkIGFuZCBob3cgaXQgaXMgdXNlZC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0JiMzOTtzIGxvY2F0ZWQgdG8gY29udGludWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX3Byb3RvY29sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc29jay5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NvY2suaD0yNDI9c3RydWN0IHNrX2ZpbHRlcjtcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmgtMzAxLSAgKlx0QHNrX3R5cGU6IHNvY2tldCB0eXBlICglU09DS19TVFJFQU0sIGV0YylcbmluY2x1ZGUvbmV0L3NvY2suaDozMDI6ICAqXHRAc2tfcHJvdG9jb2w6IHdoaWNoIHByb3RvY29sIHRoaXMgc29ja2V0IGJlbG9uZ3MgaW4gdGhpcyBuZXR3b3JrIGZhbWlseVxuaW5jbHVkZS9uZXQvc29jay5oLTMwMy0gICpcdEBza19wZWVyX2xvY2s6IGxvY2sgcHJvdGVjdGluZyBAc2tfcGVlcl9waWQgYW5kIEBza19wZWVyX2NyZWRcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmg9MzY1PXN0cnVjdCBzb2NrIHtcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmgtNTExLVx0a3VpZF90XHRcdFx0c2tfdWlkO1xuaW5jbHVkZS9uZXQvc29jay5oOjUxMjpcdHUxNlx0XHRcdHNrX3Byb3RvY29sO1xuaW5jbHVkZS9uZXQvc29jay5oLTUxMy1cdHUxNlx0XHRcdHNrX3R5cGU7XG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTI5NjU9c3RhdGljIGlubGluZSBib29sIHNrX2lzX3RjcChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTI5NjgtXHQgICAgICAgc2stXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1NUUkVBTSBcdTAwMjZcdTAwMjZcbmluY2x1ZGUvbmV0L3NvY2suaDoyOTY5Olx0ICAgICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVENQO1xuaW5jbHVkZS9uZXQvc29jay5oLTI5NzAtfVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0yOTcyPXN0YXRpYyBpbmxpbmUgYm9vbCBza19pc191ZHAoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC0yOTc1LVx0ICAgICAgIHNrLVx1MDAzZXNrX3R5cGUgPT0gU09DS19ER1JBTSBcdTAwMjZcdTAwMjZcbmluY2x1ZGUvbmV0L3NvY2suaDoyOTc2Olx0ICAgICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQO1xuaW5jbHVkZS9uZXQvc29jay5oLTI5NzctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI1OAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDYxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYGJwZl9zb2NrX2Rlc3Ryb3lgIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuLi4gVGhlIGBza19wcm90b2NvbGAgZmllbGQgaXMgbG9jYXRlZCB3aXRoaW4gdGhlIGBzdHJ1Y3Qgc29ja2Agc3RydWN0dXJlLCBhbmQgaXQgYXBwZWFycyAqYWZ0ZXIqIHRoZSBgc3RydWN0IHNvY2tfY29tbW9uYCBwb3J0aW9uIG9mIHRoYXQgc3RydWN0dXJlLiBCdXQsIGltcG9ydGFudGx5LCBgc3RydWN0IGluZXRfdGltZXdhaXRfc29ja2AgKmRvZXNuJiMzOTt0KiBjb250YWluIGEgZnVsbCBgc3RydWN0IHNvY2tgISBJdCBvbmx5IGNvbnRhaW5zIGEgYHN0cnVjdCBzb2NrX2NvbW1vbmAuIFJpZ2h0LCBzbyBpZiBgYnBmX3NvY2tfZGVzdHJveWAgZ2V0cyBoYW5kZWQgYSBgc3RydWN0IHNvY2tfY29tbW9uICpzb2NrYCwgd2hpY2gsIGluIHNvbWUgY2FzZXMsIGNvdWxkIGFjdHVhbGx5IGJlIGEgYHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKmAgY29taW5nIGZyb20gYSBCUEYgaXRlcmF0b3IsIGFuZCB0aGVuIGl0IGNhc3RzIHRoYXQgdG8gYSBgc3RydWN0IHNvY2sgKmAuLi4gdGhhdCYjMzk7cyBhIHByb2JsZW0uCgpCYXNpY2FsbHksICpiZWZvcmUqLCB3aGVuIHRoZSBjb2RlIHRyaWVkIHRvIHJlYWQgYHNrLSZndDtza19wcm90b2NvbGAgaW4gdGhlIGBicGZfc29ja19kZXN0cm95YCBmdW5jdGlvbiwgaXQgd2FzIGVmZmVjdGl2ZWx5IHJlYWRpbmcgbWVtb3J5ICpiZXlvbmQqIHRoZSBib3VuZHMgb2YgdGhlIGBpbmV0X3RpbWV3YWl0X3NvY2tgIHN0cnVjdHVyZS4gSWYgdGhlIGBpbmV0X3RpbWV3YWl0X3NvY2tgIHN0cnVjdHVyZSBpcyBzbWFsbGVyIHRoYW4gYHN0cnVjdCBzb2NrYCwgd2Ugd2VyZSByZWFkaW5nIGdhcmJhZ2UhCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgc2l6ZXMuLi4gWWVhaCwgYHN0cnVjdCBzb2NrYCBpcyBkZWZpbml0ZWx5ICptdWNoKiBsYXJnZXIgdGhhbiBgc3RydWN0IGluZXRfdGltZXdhaXRfc29ja2AuICBHb3QgaXQuCgpBbHJpZ2h0LCB3aGF0IGFib3V0IHRoYXQgYHNrX2Z1bGxzb2NrKHNrKWAgY2FsbD8gVGhhdCBjaGVja3MgdGhlIGBzay0mZ3Q7c2tfc3RhdGVgLiBPa2F5LCBidXQgd2hlcmUgaXMgYHNrX3N0YXRlYD8gQWgsIGl0JiMzOTtzIGluc2lkZSBgc3RydWN0IHNvY2tfY29tbW9uYCBhcyBgc2tjX3N0YXRlYC4gUGVyZmVjdC4gU28gd2UgZG8gbm90IGhhdmUgYW4gaXNzdWUgd2l0aCBgc2tfZnVsbHNvY2tgLgoKTm93IGxldCYjMzk7cyBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBjaGFuZ2UgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBmb3IgYGJwZl9zb2NrX2Rlc3Ryb3lgOgoKYGBgYwpfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spCnsKCXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKXNvY2s7CgoJLyogVGhlIGxvY2tpbmcgc2VtYW50aWNzIHRoYXQgYWxsb3cgZm9yIGNvbmN1cnJlbnQgc29jayBkZXN0cm95IGFyZQoJICogc3BlY2lmaWMgdG8gZWFjaCBwcm90b2NvbCwgc28gb25seSBhbGxvdyB0aGUgc3VwcG9ydGVkIHByb3RvY29scy4KCSAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHQKCSAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuCgkgKi8KCWlmICghc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveSkKCQlyZXR1cm4gLUVPUE5PVFNVUFA7CgoJaWYgKHNrX2Z1bGxzb2NrKHNrKSAmYW1wOyZhbXA7CgkgICAgc2stJmd0O3NrX3Byb3RvY29sICE9IElQUFJPVE9fVENQICZhbXA7JmFtcDsKCSAgICBzay0mZ3Q7c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApCgkJcmV0dXJuIC1FT1BOT1RTVVBQOwoKCXJldHVybiBzay0mZ3Q7c2tfcHJvdC0mZ3Q7ZGlhZ19kZXN0cm95KHNrLCBFQ09OTkFCT1JURUQpOwp9CmBgYAoKT2theSwgc28gdGhlIHZ1bG5lcmFiaWxpdHkgaXMgdGhlIGBzay0mZ3Q7c2tfcHJvdG9jb2xgIGFjY2Vzcy4gTm93IGxldCYjMzk7cyBzZWUgd2hhdCBgc2stJmd0O3NrX3Byb3RgIGFjdHVhbGx5ICppcyogd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgdGltZXdhaXQgc29ja2V0IG9yIGEgcmVxdWVzdCBzb2NrZXQuIFdlIG5lZWQgdG8gY2hlY2sgd2hlcmUgYGRpYWdfZGVzdHJveWAgZ2V0cyBjYWxsZWQgZm9yIHRoZXNlIHR5cGVzLiBPa2F5LCBzbyBJIHNob3VsZCBzZWFyY2ggZm9yIGB0d3NrYCBhbmQgYGRpYWdfZGVzdHJveWAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLiBJIGFtIG5vdCBzZWVpbmcgYGRpYWdfZGVzdHJveWAgZGlyZWN0bHkuIExldCYjMzk7cyBsb29rIGZvciBgdGNwX3R3c2tfZGlhZ19kZXN0cm95YCwgYHRjcF90d3NrX2Rlc2NoZWR1bGVfcmV0cnlgLCBgdGNwX2Fib3J0YCwgb3IgYGluZXRfdHdza19kZXNjaGVkdWxlX3B1dGAuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2Fib3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYz02Mjc9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgaXB2NF9uZXRfdGFibGVbXSA9IHtcbi0tXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xMjc5LVx0e1xubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTI4MDpcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O3RjcF9hYm9ydF9vbl9vdmVyZmxvd1wmIzM0Oyxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jOjEyODE6XHRcdC5kYXRhXHRcdD0gXHUwMDI2aW5pdF9uZXQuaXB2NC5zeXNjdGxfdGNwX2Fib3J0X29uX292ZXJmbG93LFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMtMTI4Mi1cdFx0Lm1heGxlblx0XHQ9IHNpemVvZih1OCksXG4tLVxubmV0L2lwdjQvdGNwLmM9NTA4OT12b2lkIHRjcF9kb25lKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3AuYy01MTE0LVxubmV0L2lwdjQvdGNwLmM6NTExNTppbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcbm5ldC9pcHY0L3RjcC5jLTUxMTYte1xuLS1cbm5ldC9pcHY0L3RjcC5jLTUxNjctfVxubmV0L2lwdjQvdGNwLmM6NTE2ODpFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYWJvcnQpO1xubmV0L2lwdjQvdGNwLmMtNTE2OS1cbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTMzNDc9c3RydWN0IHByb3RvIHRjcF9wcm90ID0ge1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM5NS1cdC5ub19hdXRvYmluZFx0XHQ9IHRydWUsXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjMzOTY6XHQuZGlhZ19kZXN0cm95XHRcdD0gdGNwX2Fib3J0LFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzk3LX07XG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTY4Nz1zdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk1OC1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo5NTk6XHRpZiAoIVJFQURfT05DRShzb2NrX25ldChzayktXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Fib3J0X29uX292ZXJmbG93KSkge1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk2MC1cdFx0aW5ldF9yc2socmVxKS1cdTAwM2VhY2tlZCA9IDE7XG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMjc2PXN0cnVjdCBwcm90byB0Y3B2Nl9wcm90ID0ge1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMyNS1cdC5ub19hdXRvYmluZFx0XHQ9IHRydWUsXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIzMjY6XHQuZGlhZ19kZXN0cm95XHRcdD0gdGNwX2Fib3J0LFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzI3LX07XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0yMDk2PXN0YXRpYyB2b2lkIHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlKHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTExLVxubmV0L21wdGNwL3N1YmZsb3cuYzoyMTEyOnN0YXRpYyBpbnQgdGNwX2Fib3J0X292ZXJyaWRlKHN0cnVjdCBzb2NrICpzc2ssIGludCBlcnIpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxMTMte1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjExOS1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MjEyMDpcdHJldHVybiB0Y3BfYWJvcnQoc3NrLCBlcnIpO1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMTIxLX1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIxNDY9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd19pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTY2LVx0dGNwX3Byb3Rfb3ZlcnJpZGUucmVsZWFzZV9jYiA9IHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlO1xubmV0L21wdGNwL3N1YmZsb3cuYzoyMTY3Olx0dGNwX3Byb3Rfb3ZlcnJpZGUuZGlhZ19kZXN0cm95ID0gdGNwX2Fib3J0X292ZXJyaWRlO1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMTY4LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIxODA9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd192Nl9pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yMjEzLVx0dGNwdjZfcHJvdF9vdmVycmlkZS5yZWxlYXNlX2NiID0gdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIyMTQ6XHR0Y3B2Nl9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjIxNS0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4tLVxubmV0L3NtYy9hZl9zbWMuYz0zMjg9aW50IHNtY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zNDMtXHRpZiAoc21jLVx1MDAzZWNvbm5lY3Rfbm9uYmxvY2sgXHUwMDI2XHUwMDI2IG9sZF9zdGF0ZSA9PSBTTUNfSU5JVClcbm5ldC9zbWMvYWZfc21jLmM6MzQ0Olx0XHR0Y3BfYWJvcnQoc21jLVx1MDAzZWNsY3NvY2stXHUwMDNlc2ssIEVDT05OQUJPUlRFRCk7XG5uZXQvc21jL2FmX3NtYy5jLTM0NS1cbi0tXG5uZXQvc21jL3NtY19jbG9zZS5jPTEyOD12b2lkIHNtY19jbG9zZV9hY3RpdmVfYWJvcnQoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9zbWNfY2xvc2UuYy0xMzUtXHRcdGlmIChzbWMtXHUwMDNlY2xjc29jayBcdTAwMjZcdTAwMjYgc21jLVx1MDAzZWNsY3NvY2stXHUwMDNlc2spXG5uZXQvc21jL3NtY19jbG9zZS5jOjEzNjpcdFx0XHR0Y3BfYWJvcnQoc21jLVx1MDAzZWNsY3NvY2stXHUwMDNlc2ssIEVDT05OQUJPUlRFRCk7XG5uZXQvc21jL3NtY19jbG9zZS5jLTEzNy1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5OTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgdGNwX2Fib3J0YCBmdW5jdGlvbjoKCioqRGl2aW5nIGludG8gYHRjcF9hYm9ydGAqKgoKT2theSwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBndXRzIG9mIGBuZXQvaXB2NC90Y3AuY2AgYW5kIHNwZWNpZmljYWxseSwgdGhhdCBgdGNwX2Fib3J0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IFRDUCBjb25uZWN0aW9ucyBhcmUgZ3JhY2VmdWxseSAob3IsIGxlc3MgZ3JhY2VmdWxseSwgZGVwZW5kaW5nIG9uIHRoZSBzaXR1YXRpb24pIHRvcm4gZG93biB3aGVuIHNvbWV0aGluZyBnb2VzIHdyb25nIGF0IHRoZSBrZXJuZWwgbGV2ZWwuIFJpZ2h0IGF3YXksIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgY3JpdGljYWwgZm9yIGhhbmRsaW5nIGEgdmFyaWV0eSBvZiBlcnJvciBzY2VuYXJpb3Mg4oCTIHRoaW5ncyBsaWtlIHVucmVjb3ZlcmFibGUgY29uZ2VzdGlvbiwgUlNUIHNlZ21lbnRzIGJlaW5nIHJlY2VpdmVkIHdoZW4gd2Ugd2VyZW4mIzM5O3QgZXhwZWN0aW5nIHRoZW0sIG9yIHBlcmhhcHMgaW50ZXJuYWwga2VybmVsIGluY29uc2lzdGVuY2llcy4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHN0YXRlIHRyYW5zaXRpb25zLiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGluZmx1ZW5jZSB0aGUgVENQIHN0YXRlIG1hY2hpbmU/IERvZXMgaXQgYWx3YXlzIHRyaWdnZXIgYSBoYXJkIHJlc2V0PyBPciBhcmUgdGhlcmUgbW9yZSBudWFuY2VkIGFwcHJvYWNoZXMgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gc3RhdGU/IEkgaW1hZ2luZSB0aGVyZSBhcmUgZGlmZmVyZW50IGNvZGVwYXRocyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgY29ubmVjdGlvbiBpcyBFU1RBQkxJU0hFRCwgTElTVEVOLCBvciBpbiBzb21lIG90aGVyIGludGVyaW0gc3RhdGUuIEhhbmRsaW5nIGEgRklOX1dBSVQgc3RhdGUgZGlmZmVyZW50bHkgdGhhbiBhIFNZTl9TRU5UIHN0YXRlIGlzIGdvaW5nIHRvIGJlIGtleSwgYW5kIEnigJlsbCBiZSB3YXRjaGluZyBmb3IgdGhvc2Ugc3BlY2lmaWMgbG9naWMgYnJhbmNoZXMuCgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIFRDUCBzdGFjay4gSG93IGRvZXMgaXQgc2lnbmFsIHRoZSBhcHBsaWNhdGlvbiBsYXllciBhYm91dCB0aGUgY29ubmVjdGlvbiYjMzk7cyBkZW1pc2U/IERvZXMgaXQgc2VuZCBhbiBlcnJvciBjb2RlIGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uIG9yIGlzIHRoZSBzb2NrZXQgc2ltcGx5IGNsb3NlZD8gQW5kIHdoYXQgYWJvdXQgcmVzb3VyY2UgY2xlYW51cD8gRG9lcyBpdCBoYW5kbGUgcmVsZWFzaW5nIGFueSBhbGxvY2F0ZWQgYnVmZmVycywgdGltZXJzLCBvciBvdGhlciBjb25uZWN0aW9uLXNwZWNpZmljIGRhdGEgc3RydWN0dXJlcz8gQSBtZW1vcnkgbGVhayBoZXJlIGlzIHVuYWNjZXB0YWJsZS4gVGhlIGxldmVsIG9mIGRldGFpbCBhbmQgY2FyZSBpbiB0aGVzZSBhcmVhcyB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgdmlldyBvZiB0aGUgcXVhbGl0eSBvZiB0aGUgc3RhY2ssIGFuZCBob3cgcm9idXN0IGl0IGlzLgoKVGhlIHVzZSBvZiBsb2NrcyBpcyBhbHNvIGEgY29uY2Vybi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IHByb3RlY3RzIGFuZCB0aGUgcG90ZW50aWFsIGZvciBhbnkgcmFjZSBjb25kaXRpb25zLiBBIGZ1bmN0aW9uIGxpa2UgdGhpcyBpcyBnb2luZyB0byBiZSBjcml0aWNhbCBmb3IgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHksIGFuZCBJIHdhbnQgdG8gc2VlIGhvdyB0aGF0JiMzOTtzIGhhbmRsZWQuIEZpbmFsbHksIEkmIzM5O20gaG9waW5nIHRvIHNlZSB3ZWxsLWNvbW1lbnRlZCBjb2RlLCBhcyBpdCYjMzk7cyBpbXBlcmF0aXZlIHRoYXQgSSBnYWluIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgZnVuY3Rpb24mIzM5O3MgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MTE1Olx0aW50IHRjcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXG41MTE2Olx0e1xuNTExNzpcdFx0aW50IHN0YXRlID0gaW5ldF9za19zdGF0ZV9sb2FkKHNrKTtcbjUxMTg6XHRcbjUxMTk6XHRcdGlmIChzdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKSB7XG41MTIwOlx0XHRcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSA9IGluZXRfcmVxc2soc2spO1xuNTEyMTpcdFxuNTEyMjpcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG41MTIzOlx0XHRcdGluZXRfY3NrX3JlcXNrX3F1ZXVlX2Ryb3AocmVxLVx1MDAzZXJza19saXN0ZW5lciwgcmVxKTtcbjUxMjQ6XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG41MTI1Olx0XHRcdHJldHVybiAwO1xuNTEyNjpcdFx0fVxuNTEyNzpcdFx0aWYgKHN0YXRlID09IFRDUF9USU1FX1dBSVQpIHtcbjUxMjg6XHRcdFx0c3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBpbmV0X3R3c2soc2spO1xuNTEyOTpcdFxuNTEzMDpcdFx0XHRyZWZjb3VudF9pbmMoXHUwMDI2dHctXHUwMDNldHdfcmVmY250KTtcbjUxMzE6XHRcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuNTEzMjpcdFx0XHRpbmV0X3R3c2tfZGVzY2hlZHVsZV9wdXQodHcpO1xuNTEzMzpcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjUxMzQ6XHRcdFx0cmV0dXJuIDA7XG41MTM1Olx0XHR9XG41MTM2Olx0XG41MTM3Olx0XHQvKiBCUEYgY29udGV4dCBlbnN1cmVzIHNvY2sgbG9ja2luZy4gKi9cbjUxMzg6XHRcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxuNTEzOTpcdFx0XHQvKiBEb24mIzM5O3QgcmFjZSB3aXRoIHVzZXJzcGFjZSBzb2NrZXQgY2xvc2VzIHN1Y2ggYXMgdGNwX2Nsb3NlLiAqL1xuNTE0MDpcdFx0XHRsb2NrX3NvY2soc2spO1xuNTE0MTpcdFxuNTE0MjpcdFx0LyogQXZvaWQgY2xvc2luZyB0aGUgc2FtZSBzb2NrZXQgdHdpY2UuICovXG41MTQzOlx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XG41MTQ0Olx0XHRcdGlmICghaGFzX2N1cnJlbnRfYnBmX2N0eCgpKVxuNTE0NTpcdFx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG41MTQ2Olx0XHRcdHJldHVybiAtRU5PRU5UO1xuNTE0NzpcdFx0fVxuNTE0ODpcdFxuNTE0OTpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pIHtcbjUxNTA6XHRcdFx0dGNwX3NldF9zdGF0ZShzaywgVENQX0NMT1NFKTtcbjUxNTE6XHRcdFx0aW5ldF9jc2tfbGlzdGVuX3N0b3Aoc2spO1xuNTE1MjpcdFx0fVxuNTE1MzpcdFxuNTE1NDpcdFx0LyogRG9uJiMzOTt0IHJhY2Ugd2l0aCBCSCBzb2NrZXQgY2xvc2VzIHN1Y2ggYXMgaW5ldF9jc2tfbGlzdGVuX3N0b3AuICovXG41MTU1Olx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG41MTU2Olx0XHRiaF9sb2NrX3NvY2soc2spO1xuNTE1NzpcdFxuNTE1ODpcdFx0aWYgKHRjcF9uZWVkX3Jlc2V0KHNrLVx1MDAzZXNrX3N0YXRlKSlcbjUxNTk6XHRcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XG41MTYwOlx0XHR0Y3BfZG9uZV93aXRoX2Vycm9yKHNrLCBlcnIpO1xuNTE2MTpcdFxuNTE2MjpcdFx0YmhfdW5sb2NrX3NvY2soc2spO1xuNTE2MzpcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG41MTY0Olx0XHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcbjUxNjU6XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbjUxNjY6XHRcdHJldHVybiAwO1xuNTE2NzpcdH1cbjUxNjg6XHRFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYWJvcnQpO1xuNTE2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMwNgoJCQkJCQkJb3V0cHV0OiAyNTQKCQkJCQkJCXRob3VnaHRzOiAxMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIFJlYXNvbmluZyBmb3IgVENQIFRpbWUtV2FpdCBTb2NrZXQgRGVzdHJ1Y3Rpb24gaW4gQlBGKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCByZXF1aXJlcyBLTVNBTiBvciBpZiBLQVNBTiBhbmQgc3RhbmRhcmQgZGVidWdnZXJzIGFyZSBzdWZmaWNpZW50LiBUaGUgY29yZSBjaGFuZ2UgZm9jdXNlcyBvbiBzYWZlbHkgZGVzdHJveWluZyBUQ1AgVElNRV9XQUlUIHNvY2tldHMgYW5kIHNpbWlsYXIgJiMzNDttaW5pLXNvY2tldHMmIzM0OyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0IHZpYSBgYnBmX3NvY2tfZGVzdHJveWAuIFNwZWNpZmljYWxseSwgaXQgYWRkcmVzc2VzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5IHdoZW4gYHNrLSZndDtza19wcm90b2NvbGAgd2FzIGFjY2Vzc2VkIG9uIHRoZXNlIG5vbi1mdWxsIHNvY2tldHMsIHdoaWNoIHVzZSBgaW5ldF90aW1ld2FpdF9zb2NrYCBpbnN0ZWFkIG9mIGBzdHJ1Y3Qgc29ja2AuCgpJbml0aWFsbHksIGB0Y3BfYWJvcnRgIHdhcyB1c2VkIHRvIGhhbmRsZSB0aGUgY2xlYW51cCBhbmQgaXQgdG91Y2hlZCB0aGVzZSB0aW1lLXdhaXQgc29ja2V0cy4gTm93LCB0aGlzIHBhdGNoIG5vdyBjaGVja3MgYHNrX2Z1bGxzb2NrKHNrKWAgKmJlZm9yZSogYWNjZXNzaW5nIGBzay0mZ3Q7c2tfcHJvdG9jb2xgLiBJZiBpdCAqaXMqIGEgZnVsbCBzb2NrZXQsIGl0IHByb2NlZWRzIHdpdGggdGhlIHByb3RvY29sIGNoZWNrLiBJZiBpdCYjMzk7cyAqbm90KiBmdWxsIChsaWtlIGEgYFRJTUVfV0FJVGAgc29ja2V0KSwgaXQgaW52b2tlcyBgc2stJmd0O3NrX3Byb3QtJmd0O2RpYWdfZGVzdHJveWAgKHdoaWNoIGlzIGB0Y3BfYWJvcnRgIGhlcmUpIHRvIGNsZWFubHkgaGFuZGxlIGRlc3RydWN0aW9uLCBlbnN1cmluZyB3ZSBhdm9pZCB0aGUgb3V0LW9mLWJvdW5kcyByZWFkIGlzc3VlLiBXZSYjMzk7cmUgYWxzbyBhZGRpbmcgc2VsZnRlc3RzIHRvIHZlcmlmeSB0aGlzIGJlaGF2aW9yLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgS01TQU4tc3BlY2lmaWMgcmlza3M/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYToKCiogICAqKlVzZXItc3BhY2UgY29waWVzL2xlYWtzPyoqIE5vcGUuIE5vIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLiBUaGVyZSYjMzk7cyBubyBkYXRhIGNvcHlpbmcgdXNpbmcgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIGV0Yy4KKiAgICoqVW5pbml0aWFsaXplZCB2YXJpYWJsZXMvY29uZGl0aW9uYWwgbG9naWM/KiogQWJzb2x1dGVseSBub3QuIFRoZSBjb2RlIGlzICpwcmV2ZW50aW5nKiBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIG5vdCBhZGRpbmcgYW55IGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFdlIGFyZSBhZGRpbmcgYSBjaGVjayB0byBlbnN1cmUgd2Ugb25seSBhY2Nlc3MgdGhlIGZ1bGwgc29ja2V0LgoqICAgKipDb21wbGV4IGFsbG9jYXRpb25zPyoqIE5vIG5ldyBhbGxvY2F0aW9ucyB0aGF0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhcmUgcHJlc2VudC4KKiAgICoqQm91bmRzIGNoZWNrcy9sZW5ndGggaXNzdWVzPyoqIFRoZSBtYWluIGNoYW5nZSAqaXMqIGEgYm91bmRzIGNoZWNrLCBidXQgaXQmIzM5O3MgKnN0cmVuZ3RoZW5pbmcqIHRoZSBib3VuZHMgY2hlY2tpbmcuIFRoZSBjaGVjayBlbnN1cmVzIHdlJiMzOTtyZSAqbm90KiBhY2Nlc3NpbmcgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0IHByb3RlY3RzIGBzay0mZ3Q7c2tfcHJvdG9jb2xgLgoKSW4gZmFjdCwgdGhpcyBwYXRjaCBpcyAqcHJldmVudGluZyogdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZSBwcmV2aW91cyBjb2RlIHdhcyBhY2Nlc3NpbmcgYHNrLSZndDtza19wcm90b2NvbGAgb24gd2hhdCB3ZXJlIGVzc2VudGlhbGx5LCBzbWFsbGVyIGBzb2NrX2NvbW1vbmAgc3RydWN0dXJlcy4gVGhlIG5ldyBsb2dpYyBpcyBkZXNpZ25lZCB0byAqYXZvaWQqIHRoYXQuCgpUaGUgYnVncyBwb3RlbnRpYWxseSBpbnRyb2R1Y2VkIGFyZSBvZiB0aGUgdHlwZSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dlcnMgYXJlIGJ1aWx0IHRvIGZpbmQuIEZvciBleGFtcGxlLCBpZiB0aGVyZSB3ZXJlIGlzc3VlcyB3aXRoIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcsIHVzZS1hZnRlci1mcmVlLCBvciBpZiBgZGlhZ19kZXN0cm95YCB3YXMgaW5jb3JyZWN0bHkgY2FsbGVkLCB0aGVzZSB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCB3aGljaCBhcmUgYWxsIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgbG9ja2RlcC4KClRoZXJlZm9yZSwgdGhlIHJlYXNvbmluZyBpcyBhcyBmb2xsb3dzOgoKKiAgICoqS0FTQU4gLyBTdGFuZGFyZCBEZXRlY3RvcnM6KiogVGhlIHBhdGNoIG1haW5seSBhZGRyZXNzZXMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHNvY2tldCBsaWZlY3ljbGUgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2Ugbm9uLWZ1bGwgc29ja2V0cy4gVGhlc2Ugcmlza3MgYXJlIHJlbGF0ZWQgdG8gcmVmY291bnRpbmcsIHNvY2tldCBsaWZlY3ljbGUvbG9ja2luZyAoaGFuZGxlZCBieSBgaW5ldF90d3NrX2Rlc2NoZWR1bGVfcHV0YCksIHVzZS1hZnRlci1mcmVlLCBhbmQgaW52YWxpZCBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBtb25pdG9yZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCB0aGUgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLgoqICAgKipLTVNBTjoqKiBUaGUgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgbWVtb3J5IGNvcGllcyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIGJ1ZmZlciBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gQWN0dWFsbHksIHRoZSBwYXRjaCAqcHJldmVudHMqIGFuIG91dC1vZi1ib3VuZHMgcmVhZGluZyBvZiBgc2tfcHJvdG9jb2xgIG9uIG1pbmktc29ja2V0cywgc28gdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBLTVNBTi4KClNvLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gV2UgY2FuIHNhZmVseSBtYXJrIHRoaXMgYXMgbm90IG5lZWRpbmcgS01TQU4gZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBrZnVuYyBgYnBmX3NvY2tfZGVzdHJveSgpYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIHN1cHBvcnQgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIGJ5IGNoZWNraW5nIGBza19mdWxsc29jayhzaylgIGJlZm9yZSBpbnNwZWN0aW5nIGBzay1cdTAwM2Vza19wcm90b2NvbGAsIGFuZCBpbnZva2VzIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKWAuIFRoZSBhY2NvbXBhbnlpbmcgY2hhbmdlcyBhcmUgQlBGIHNlbGZ0ZXN0cy5cblxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBzdHJ1Y3R1cmUgY29weWluZyB0byB1c2Vyc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsLCBldGMuKSwgYW5kIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG4tIFRoZSBwb3RlbnRpYWwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHNvY2tldCBkZXN0cnVjdGlvbiAoZS5nLiwgc29ja2V0IGxpZmVjeWNsZS9yZWZjb3VudGluZyByYWNlcywgbG9ja2luZyBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgZGVyZWZlcmVuY2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycy5cbi0gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYga2Z1bmMgYGJwZl9zb2NrX2Rlc3Ryb3koKWAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBzdXBwb3J0IG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBzb2NrZXRzKSBieSBjaGVja2luZyBgc2tfZnVsbHNvY2soc2spYCBiZWZvcmUgaW5zcGVjdGluZyBgc2stXHUwMDNlc2tfcHJvdG9jb2xgLCBhbmQgaW52b2tlcyBgc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRClgLiBUaGUgYWNjb21wYW55aW5nIGNoYW5nZXMgYXJlIEJQRiBzZWxmdGVzdHMuXG5cbktNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlcnNwYWNlICh2aWEgY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCwgZXRjLiksIGFuZCBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuLSBUaGUgcG90ZW50aWFsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBzb2NrZXQgZGVzdHJ1Y3Rpb24gKGUuZy4sIHNvY2tldCBsaWZlY3ljbGUvcmVmY291bnRpbmcgcmFjZXMsIGxvY2tpbmcgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGRlcmVmZXJlbmNlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMuXG4tIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQxOjI0LjI4MjQyMDMwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzQzOTEwMzQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zb2NrX2Rlc3Ryb3lcIixcbiAgICBcInRjcF9hYm9ydFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBrZnVuYyBgYnBmX3NvY2tfZGVzdHJveSgpYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHRvIHN1cHBvcnQgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIHNvY2tldHMpIGJ5IGNoZWNraW5nIGBza19mdWxsc29jayhzaylgIGJlZm9yZSBpbnNwZWN0aW5nIGBzay1cXHUwMDNlc2tfcHJvdG9jb2xgLCBhbmQgaW52b2tlcyBgc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKWAuIFRoZSBhY2NvbXBhbnlpbmcgY2hhbmdlcyBhcmUgQlBGIHNlbGZ0ZXN0cy5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBzdHJ1Y3R1cmUgY29weWluZyB0byB1c2Vyc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsLCBldGMuKSwgYW5kIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXFxuLSBUaGUgcG90ZW50aWFsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBzb2NrZXQgZGVzdHJ1Y3Rpb24gKGUuZy4sIHNvY2tldCBsaWZlY3ljbGUvcmVmY291bnRpbmcgcmFjZXMsIGxvY2tpbmcgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGRlcmVmZXJlbmNlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMuXFxuLSBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWFjaGFibGUgQlBGIGtmdW5jIGBicGZfc29ja19kZXN0cm95YCB0byBzdXBwb3J0IG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBhbmQgcmVxdWVzdCBzb2NrZXRzKSBieSBvbmx5IGNoZWNraW5nIHRoZSBwcm90b2NvbCBvbiBmdWxsIHNvY2tldHMgKGBza19mdWxsc29ja2ApLiBUaGlzIGFsbG93cyBCUEYgaXRlcmF0b3IgcHJvZ3JhbXMgdG8gaW52b2tlIHNvY2tldCBkZXN0cnVjdGlvbiAoYGRpYWdfZGVzdHJveWAgLyBgdGNwX2Fib3J0YCkgb24gdGltZXdhaXQgc29ja2V0cyBhbmQgc3luLXJlY3YgcmVxdWVzdHMsIHdoaWNoIGNhbiB1bmNvdmVyIHJhY2UgY29uZGl0aW9ucyBvciBzdGF0ZS1oYW5kbGluZyBpc3N1ZXMgZHVyaW5nIHNvY2tldCB0ZWFyZG93bi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDE6MjQuMjgyNDI0OTY0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTUzMDA3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3ZWU0ODc0MzVkMTYxZTY4ZTdkOWZkYTcxN2YzNTQ0NDAwYmNlZDhiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMTg6NDE6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDYxOTQwZTc1MzU1MjMuLmE0MWNjNjBhNDAxYTUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC0xMjkxMiw4ICsxMjkxMiw5IEBAIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4gICogQHNvY2s6IFBvaW50ZXIgdG8gc29ja2V0IHRvIGJlIGRlc3Ryb3llZFxcbiAgKlxcbiAgKiBSZXR1cm46XFxuLSAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVQUk9UT05PU1VQUE9SVCwgRUlOVkFMLlxcbi0gKiBFUFJPVE9OT1NVUFBPUlQgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuXFxuKyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIG9yIHdoYXRldmVyIHRoZSBwcm90b2NvbCBzcGVjaWZpY1xcbisgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cXG4rICogRU9QTk9UU1VQUCBpZiBwcm90b2NvbCBzcGVjaWZpYyBkZXN0cm95IGhhbmRsZXIgaXMgbm90IHN1cHBvcnRlZC5cXG4gICogMCBvdGhlcndpc2VcXG4gICovXFxuIF9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcXG5AQCAtMTI5MjUsOCArMTI5MjYsMTIgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxcbiBcXHQgKiBTdXBwb3J0aW5nIHByb3RvY29scyB3aWxsIG5lZWQgdG8gYWNxdWlyZSBzb2NrIGxvY2sgaW4gdGhlIEJQRiBjb250ZXh0XFxuIFxcdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXFxuIFxcdCAqL1xcbi1cXHRpZiAoIXNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VkaWFnX2Rlc3Ryb3kgfHwgKHNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRcXHRcXHQgICBzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApKVxcbitcXHRpZiAoIXNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VkaWFnX2Rlc3Ryb3kpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGlmIChza19mdWxsc29jayhzaykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbiBcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xcbmluZGV4IDljMTE5MzhmZTU5N2QuLmI5MGZhYjcwNzMzODYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuY1xcbkBAIC0xMTAsNiArMTEwLDc0IEBAIHN0YXRpYyB2b2lkIHRlc3RfdGNwX3NlcnZlcihzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpXFxuIFxcdFxcdGNsb3NlKHNlcnYpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0ZXN0X3RjcF90aW1ld2FpdChzdHJ1Y3Qgc29ja19kZXN0cm95X3Byb2cgKnNrZWwpXFxuK3tcXG4rXFx0aW50IHNlcnYgPSAtMSwgY2xpZW4gPSAtMSwgYWNjZXB0X3NlcnYgPSAtMSwgbjtcXG4rXFx0c3RydWN0IHRpbWV2YWwgdHYgPSB7fTtcXG4rXFx0Y2hhciBidWZbMV07XFxuK1xcbitcXHRzZXJ2ID0gc3RhcnRfc2VydmVyKEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgTlVMTCwgMCwgMCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKHNlcnYsIDAsIFxcXCJzdGFydF9zZXJ2ZXJcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0Y2xpZW4gPSBjb25uZWN0X3RvX2ZkKHNlcnYsIDApO1xcbitcXHRpZiAoIUFTU0VSVF9HRShjbGllbiwgMCwgXFxcImNvbm5lY3RfdG9fZmRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0YWNjZXB0X3NlcnYgPSBhY2NlcHQoc2VydiwgTlVMTCwgTlVMTCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGFjY2VwdF9zZXJ2LCAwLCBcXFwic2VydiBhY2NlcHRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQWN0aXZlIGNsb3NlIGZyb20gdGhlIGNsaWVudCwgdGhlbiBjbG9zZSB0aGUgc2VydmVyIHNpZGUuIE9uY2VcXG4rXFx0ICogcmVjdigpIHNlZXMgRU9GIHRoZSBzZXJ2ZXIgRklOIGhhcyBiZWVuIHByb2Nlc3NlZCBhbmQgdGhlIGNsaWVudFxcbitcXHQgKiBzb2NrIGlzIGluIFRJTUVfV0FJVC4gQmxvY2sgd2l0aG91dCB0aW1lb3V0IHNvIGEgbG9hZGVkIENJIGJveFxcbitcXHQgKiBjYW4ndCByYWNlIHVzLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFBU1NFUlRfT0soc2V0c29ja29wdChjbGllbiwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFxcdTAwMjZ0dixcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2YodHYpKSwgXFxcImNsZWFyIHJjdnRpbWVvXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0aWYgKCFBU1NFUlRfT0soc2h1dGRvd24oY2xpZW4sIFNIVVRfV1IpLCBcXFwiY2xpZW50IHNodXRkb3duXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE1ha2Ugc3VyZSB0aGUgc2VydmVyIGhhcyBzZWVuIHRoZSBjbGllbnQgRklOIGJlZm9yZSBpdCBjbG9zZXMsXFxuK1xcdCAqIHNvIHRoZSB0d28gRklOcyBuZXZlciBjcm9zcy5cXG4rXFx0ICovXFxuK1xcdG4gPSByZWN2KGFjY2VwdF9zZXJ2LCBidWYsIHNpemVvZihidWYpLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEobiwgMCwgXFxcInNlcnZlciByZWN2IEVPRlxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRjbG9zZShhY2NlcHRfc2Vydik7XFxuK1xcdGFjY2VwdF9zZXJ2ID0gLTE7XFxuK1xcbitcXHQvKiBibG9jayB1bnRpbCByZXR1cm4gRU9GICovXFxuK1xcdG4gPSByZWN2KGNsaWVuLCBidWYsIHNpemVvZihidWYpLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEobiwgMCwgXFxcImNsaWVudCByZWN2IEVPRlxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKiBSdW4gaXRlcmF0b3IgcHJvZ3JhbSB0aGF0IGRlc3Ryb3lzIHRoZSB0aW1ld2FpdCBjbGllbnQgc29jay4gKi9cXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2V0d19mb3VuZCA9IDA7XFxuK1xcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVxcdTAwM2Vwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpO1xcbitcXHRpZiAoIUFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXR3X2ZvdW5kLCAxLCBcXFwidGltZXdhaXQgc29jayBmb3VuZFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRBU1NFUlRfT0soc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2V0d19kZXN0cm95X2VyciwgXFxcImRlc3Ryb3kgdGltZXdhaXQgc29ja1xcXCIpO1xcbitcXG4rXFx0LyogVGhlIGRlc3Ryb3llZCB0aW1ld2FpdCBzb2NrIG11c3QgYmUgZ29uZS4gKi9cXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2V0d19mb3VuZCA9IDA7XFxuK1xcdHN0YXJ0X2l0ZXJfc29ja2V0cyhza2VsLVxcdTAwM2Vwcm9ncy5pdGVyX3RjcDZfdGltZXdhaXQpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2V0d19mb3VuZCwgMCwgXFxcInRpbWV3YWl0IHNvY2sgZGVzdHJveWVkXFxcIik7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRpZiAoY2xpZW4gIT0gLTEpXFxuK1xcdFxcdGNsb3NlKGNsaWVuKTtcXG4rXFx0aWYgKGFjY2VwdF9zZXJ2ICE9IC0xKVxcbitcXHRcXHRjbG9zZShhY2NlcHRfc2Vydik7XFxuK1xcdGlmIChzZXJ2ICE9IC0xKVxcbitcXHRcXHRjbG9zZShzZXJ2KTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdGVzdF91ZHBfY2xpZW50KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcXG4ge1xcbiBcXHRpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBuID0gMDtcXG5AQCAtMjA0LDExICsyNzIsMTIgQEAgdm9pZCB0ZXN0X3NvY2tfZGVzdHJveSh2b2lkKVxcbiBcXHRcXHR0ZXN0X3RjcF9jbGllbnQoc2tlbCk7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJ0Y3Bfc2VydmVyXFxcIikpXFxuIFxcdFxcdHRlc3RfdGNwX3NlcnZlcihza2VsKTtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInRjcF90aW1ld2FpdFxcXCIpKVxcbitcXHRcXHR0ZXN0X3RjcF90aW1ld2FpdChza2VsKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInVkcF9jbGllbnRcXFwiKSlcXG4gXFx0XFx0dGVzdF91ZHBfY2xpZW50KHNrZWwpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwidWRwX3NlcnZlclxcXCIpKVxcbiBcXHRcXHR0ZXN0X3VkcF9zZXJ2ZXIoc2tlbCk7XFxuLVxcbiBcXHRSVU5fVEVTVFMoc29ja19kZXN0cm95X3Byb2dfZmFpbCk7XFxuIFxcbiBjbGVhbnVwOlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jXFxuaW5kZXggOWUwYmY3YTU0Y2VjOS4uMGE4ODg3NTQzMjE4YSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jXFxuQEAgLTcsNiArNyw4IEBAXFxuICNpbmNsdWRlIFxcXCJicGZfdHJhY2luZ19uZXQuaFxcXCJcXG4gXFxuIF9fYmUxNiBzZXJ2X3BvcnQgPSAwO1xcbitpbnQgdHdfZm91bmQgPSAwO1xcbitpbnQgdHdfZGVzdHJveV9lcnIgPSAwO1xcbiBcXG4gaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzaykgX19rc3ltO1xcbiBcXG5AQCAtMTAwLDYgKzEwMiwzNCBAQCBpbnQgaXRlcl90Y3A2X3NlcnZlcihzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rU0VDKFxcXCJpdGVyL3RjcFxcXCIpXFxuK2ludCBpdGVyX3RjcDZfdGltZXdhaXQoc3RydWN0IGJwZl9pdGVyX190Y3AgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja19jb21tb24gKnNrX2NvbW1vbiA9IGN0eC1cXHUwMDNlc2tfY29tbW9uO1xcbitcXHRfX3U2NCAqdmFsO1xcbitcXHRpbnQga2V5ID0gMDtcXG4rXFxuK1xcdGlmICghc2tfY29tbW9uKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChza19jb21tb24tXFx1MDAzZXNrY19mYW1pbHkgIT0gQUZfSU5FVDYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFicGZfc2tjX3RvX3RjcF90aW1ld2FpdF9zb2NrKHNrX2NvbW1vbikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2dGNwX2Nvbm5fc29ja2V0cywgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0LyogVGhlIHRpbWV3YWl0IHNvY2sgaW5oZXJpdHMgdGhlIGNvb2tpZSBvZiB0aGUgY2xvc2VkIGNsaWVudCBzb2NrLiAqL1xcbitcXHRpZiAoYnBmX2dldF9zb2NrZXRfY29va2llKHNrX2NvbW1vbikgIT0gKnZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHR0d19mb3VuZCsrO1xcbitcXHR0d19kZXN0cm95X2VyciA9IGJwZl9zb2NrX2Rlc3Ryb3koc2tfY29tbW9uKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuIFxcbiBTRUMoXFxcIml0ZXIvdWRwXFxcIilcXG4gaW50IGl0ZXJfdWRwNl9jbGllbnQoc3RydWN0IGJwZl9pdGVyX191ZHAgKmN0eClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDE6MjQuNjk4NDEwMTI0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3MTAwMjM1OTE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zb2NrX2Rlc3Ryb3lcIixcbiAgICBcInRjcF9hYm9ydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZWFjaGFibGUgQlBGIGtmdW5jIGBicGZfc29ja19kZXN0cm95YCB0byBzdXBwb3J0IG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBhbmQgcmVxdWVzdCBzb2NrZXRzKSBieSBvbmx5IGNoZWNraW5nIHRoZSBwcm90b2NvbCBvbiBmdWxsIHNvY2tldHMgKGBza19mdWxsc29ja2ApLiBUaGlzIGFsbG93cyBCUEYgaXRlcmF0b3IgcHJvZ3JhbXMgdG8gaW52b2tlIHNvY2tldCBkZXN0cnVjdGlvbiAoYGRpYWdfZGVzdHJveWAgLyBgdGNwX2Fib3J0YCkgb24gdGltZXdhaXQgc29ja2V0cyBhbmQgc3luLXJlY3YgcmVxdWVzdHMsIHdoaWNoIGNhbiB1bmNvdmVyIHJhY2UgY29uZGl0aW9ucyBvciBzdGF0ZS1oYW5kbGluZyBpc3N1ZXMgZHVyaW5nIHNvY2tldCB0ZWFyZG93bi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZWU0ODc0MzVkMTYxZTY4ZTdkOWZkYTcxN2YzNTQ0NDAwYmNlZDhiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxODo0MToyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDYxOTQwZTc1MzU1MjMuLmE0MWNjNjBhNDAxYTUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC0xMjkxMiw4ICsxMjkxMiw5IEBAIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbiAgKiBAc29jazogUG9pbnRlciB0byBzb2NrZXQgdG8gYmUgZGVzdHJveWVkXG4gICpcbiAgKiBSZXR1cm46XG4tICogT24gZXJyb3IsIG1heSByZXR1cm4gRVBST1RPTk9TVVBQT1JULCBFSU5WQUwuXG4tICogRVBST1RPTk9TVVBQT1JUIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuKyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIG9yIHdoYXRldmVyIHRoZSBwcm90b2NvbCBzcGVjaWZpY1xuKyAqIGRlc3Ryb3kgaGFuZGxlciByZXR1cm5zLlxuKyAqIEVPUE5PVFNVUFAgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuXG4gICogMCBvdGhlcndpc2VcbiAgKi9cbiBfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spXG5AQCAtMTI5MjUsOCArMTI5MjYsMTIgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuIFx0ICogU3VwcG9ydGluZyBwcm90b2NvbHMgd2lsbCBuZWVkIHRvIGFjcXVpcmUgc29jayBsb2NrIGluIHRoZSBCUEYgY29udGV4dFxuIFx0ICogcHJpb3IgdG8gaW52b2tpbmcgdGhpcyBrZnVuYy5cbiBcdCAqL1xuLVx0aWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSB8fCAoc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdCAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKSlcbitcdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGlmIChza19mdWxsc29jayhzaykgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdHJldHVybiBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG5pbmRleCA5YzExOTM4ZmU1OTdkLi5iOTBmYWI3MDczMzg2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG5AQCAtMTEwLDYgKzExMCw3NCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3RjcF9zZXJ2ZXIoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuIFx0XHRjbG9zZShzZXJ2KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGVzdF90Y3BfdGltZXdhaXQoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuK3tcbitcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIGFjY2VwdF9zZXJ2ID0gLTEsIG47XG4rXHRzdHJ1Y3QgdGltZXZhbCB0diA9IHt9O1xuK1x0Y2hhciBidWZbMV07XG4rXG4rXHRzZXJ2ID0gc3RhcnRfc2VydmVyKEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgTlVMTCwgMCwgMCk7XG4rXHRpZiAoIUFTU0VSVF9HRShzZXJ2LCAwLCBcInN0YXJ0X3NlcnZlclwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0Y2xpZW4gPSBjb25uZWN0X3RvX2ZkKHNlcnYsIDApO1xuK1x0aWYgKCFBU1NFUlRfR0UoY2xpZW4sIDAsIFwiY29ubmVjdF90b19mZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0YWNjZXB0X3NlcnYgPSBhY2NlcHQoc2VydiwgTlVMTCwgTlVMTCk7XG4rXHRpZiAoIUFTU0VSVF9HRShhY2NlcHRfc2VydiwgMCwgXCJzZXJ2IGFjY2VwdFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LypcbitcdCAqIEFjdGl2ZSBjbG9zZSBmcm9tIHRoZSBjbGllbnQsIHRoZW4gY2xvc2UgdGhlIHNlcnZlciBzaWRlLiBPbmNlXG4rXHQgKiByZWN2KCkgc2VlcyBFT0YgdGhlIHNlcnZlciBGSU4gaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCB0aGUgY2xpZW50XG4rXHQgKiBzb2NrIGlzIGluIFRJTUVfV0FJVC4gQmxvY2sgd2l0aG91dCB0aW1lb3V0IHNvIGEgbG9hZGVkIENJIGJveFxuK1x0ICogY2FuJ3QgcmFjZSB1cy5cbitcdCAqL1xuK1x0aWYgKCFBU1NFUlRfT0soc2V0c29ja29wdChjbGllbiwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFx1MDAyNnR2LFxuK1x0XHRcdFx0ICBzaXplb2YodHYpKSwgXCJjbGVhciByY3Z0aW1lb1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aWYgKCFBU1NFUlRfT0soc2h1dGRvd24oY2xpZW4sIFNIVVRfV1IpLCBcImNsaWVudCBzaHV0ZG93blwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LypcbitcdCAqIE1ha2Ugc3VyZSB0aGUgc2VydmVyIGhhcyBzZWVuIHRoZSBjbGllbnQgRklOIGJlZm9yZSBpdCBjbG9zZXMsXG4rXHQgKiBzbyB0aGUgdHdvIEZJTnMgbmV2ZXIgY3Jvc3MuXG4rXHQgKi9cbitcdG4gPSByZWN2KGFjY2VwdF9zZXJ2LCBidWYsIHNpemVvZihidWYpLCAwKTtcbitcdGlmICghQVNTRVJUX0VRKG4sIDAsIFwic2VydmVyIHJlY3YgRU9GXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRjbG9zZShhY2NlcHRfc2Vydik7XG4rXHRhY2NlcHRfc2VydiA9IC0xO1xuK1xuK1x0LyogYmxvY2sgdW50aWwgcmV0dXJuIEVPRiAqL1xuK1x0biA9IHJlY3YoY2xpZW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuK1x0aWYgKCFBU1NFUlRfRVEobiwgMCwgXCJjbGllbnQgcmVjdiBFT0ZcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgdGhlIHRpbWV3YWl0IGNsaWVudCBzb2NrLiAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQgPSAwO1xuK1x0c3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtXHUwMDNlcHJvZ3MuaXRlcl90Y3A2X3RpbWV3YWl0KTtcbitcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kLCAxLCBcInRpbWV3YWl0IHNvY2sgZm91bmRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdEFTU0VSVF9PSyhza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19kZXN0cm95X2VyciwgXCJkZXN0cm95IHRpbWV3YWl0IHNvY2tcIik7XG4rXG4rXHQvKiBUaGUgZGVzdHJveWVkIHRpbWV3YWl0IHNvY2sgbXVzdCBiZSBnb25lLiAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQgPSAwO1xuK1x0c3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtXHUwMDNlcHJvZ3MuaXRlcl90Y3A2X3RpbWV3YWl0KTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19mb3VuZCwgMCwgXCJ0aW1ld2FpdCBzb2NrIGRlc3Ryb3llZFwiKTtcbitcbitjbGVhbnVwOlxuK1x0aWYgKGNsaWVuICE9IC0xKVxuK1x0XHRjbG9zZShjbGllbik7XG4rXHRpZiAoYWNjZXB0X3NlcnYgIT0gLTEpXG4rXHRcdGNsb3NlKGFjY2VwdF9zZXJ2KTtcbitcdGlmIChzZXJ2ICE9IC0xKVxuK1x0XHRjbG9zZShzZXJ2KTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGVzdF91ZHBfY2xpZW50KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbiB7XG4gXHRpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBuID0gMDtcbkBAIC0yMDQsMTEgKzI3MiwxMiBAQCB2b2lkIHRlc3Rfc29ja19kZXN0cm95KHZvaWQpXG4gXHRcdHRlc3RfdGNwX2NsaWVudChza2VsKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidGNwX3NlcnZlclwiKSlcbiBcdFx0dGVzdF90Y3Bfc2VydmVyKHNrZWwpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ0Y3BfdGltZXdhaXRcIikpXG4rXHRcdHRlc3RfdGNwX3RpbWV3YWl0KHNrZWwpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ1ZHBfY2xpZW50XCIpKVxuIFx0XHR0ZXN0X3VkcF9jbGllbnQoc2tlbCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInVkcF9zZXJ2ZXJcIikpXG4gXHRcdHRlc3RfdWRwX3NlcnZlcihza2VsKTtcbi1cbiBcdFJVTl9URVNUUyhzb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsKTtcbiBcbiBjbGVhbnVwOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbmluZGV4IDllMGJmN2E1NGNlYzkuLjBhODg4NzU0MzIxOGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbkBAIC03LDYgKzcsOCBAQFxuICNpbmNsdWRlIFwiYnBmX3RyYWNpbmdfbmV0LmhcIlxuIFxuIF9fYmUxNiBzZXJ2X3BvcnQgPSAwO1xuK2ludCB0d19mb3VuZCA9IDA7XG4raW50IHR3X2Rlc3Ryb3lfZXJyID0gMDtcbiBcbiBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNrKSBfX2tzeW07XG4gXG5AQCAtMTAwLDYgKzEwMiwzNCBAQCBpbnQgaXRlcl90Y3A2X3NlcnZlcihzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcIml0ZXIvdGNwXCIpXG4raW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuK3tcbitcdHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tfY29tbW9uID0gY3R4LVx1MDAzZXNrX2NvbW1vbjtcbitcdF9fdTY0ICp2YWw7XG4rXHRpbnQga2V5ID0gMDtcbitcbitcdGlmICghc2tfY29tbW9uKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChza19jb21tb24tXHUwMDNlc2tjX2ZhbWlseSAhPSBBRl9JTkVUNilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIWJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2soc2tfY29tbW9uKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRjcF9jb25uX3NvY2tldHMsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXHQvKiBUaGUgdGltZXdhaXQgc29jayBpbmhlcml0cyB0aGUgY29va2llIG9mIHRoZSBjbG9zZWQgY2xpZW50IHNvY2suICovXG4rXHRpZiAoYnBmX2dldF9zb2NrZXRfY29va2llKHNrX2NvbW1vbikgIT0gKnZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR0d19mb3VuZCsrO1xuK1x0dHdfZGVzdHJveV9lcnIgPSBicGZfc29ja19kZXN0cm95KHNrX2NvbW1vbik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4gXG4gU0VDKFwiaXRlci91ZHBcIilcbiBpbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDE6MjQuNjk4NDEyMTUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY0NjE3NTkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGJwZl9zb2NrX2Rlc3Ryb3kgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGJwZl9zb2NrX2Rlc3Ryb3lgIGRpZmYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGNoYW5nZWQgYW5kIHRoZSBpbXBsaWNhdGlvbnMuIFJpZ2h0IGF3YXksIEkgc2VlIHRoZSBtb2RpZmljYXRpb25zIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBJdCBsb29rcyBsaWtlIHdlJ3ZlIGdvdCBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIHJlbGF0ZWQgdG8gcHJvdG9jb2wgaGFuZGxpbmcgYW5kIHNvY2tldCBkZXN0cnVjdGlvbi5cblxuU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBvcmlnaW5hbGx5IGhhZCBhIGNoZWNrIHRvIHNlZSBpZiB0aGUgc29ja2V0IHByb3RvY29sIHdhcyBuZWl0aGVyIFRDUCBub3IgVURQIGJlZm9yZSByZXR1cm5pbmcgYC1FT1BOT1RTVVBQYC4gVGhhdCBjaGVjayBoYXMgYmVlbiBtb2RpZmllZC4gTm93LCBpdCBhcHBlYXJzIHRoZXJlJ3MgYSBzcGVjaWZpYyBjaGVjayBgc2tfZnVsbHNvY2soc2spYCBpbnRyb2R1Y2VkLCBhbmQgdGhlIHByb3RvY29sIGZpbHRlcmluZyBpcyB3aXRoaW4gdGhhdCBuZXcgY29uZGl0aW9uYWwuIEFsc28sIGEgYC1FT1BOT1RTVVBQYCBpcyByZXR1cm5lZCBpZiBgZGlhZ19kZXN0cm95YCBpcyBub3QgZGVmaW5lZC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBoZXJlLiBUaGUgY29tbWVudCBzdWdnZXN0cyB0aGF0IHN1cHBvcnRpbmcgcHJvdG9jb2xzIG11c3QgYWNxdWlyZSB0aGUgc29jayBsb2NrIGJlZm9yZSBjYWxsaW5nIHRoaXMga2Z1bmMuIFNvIEkgaGF2ZSB0byB1bmRlcnN0YW5kIHdoeSB0aGUgYWRkZWQgY2hlY2sgYW5kIHRoZSBwcm90b2NvbCBmaWx0ZXJpbmcgaXMgcmVsZXZhbnQgdG8gdGhpcyBsb2NraW5nIHJlcXVpcmVtZW50LlxuXG5UbyB0cnVseSBncmFzcCB0aGlzLCBJIG5lZWQgY29udGV4dC4gSSdsbCBuZWVkIHRvIGdvIGJleW9uZCB0aGlzIHNuaXBwZXQuIEknbSBnb2luZyB0byBwdWxsIHVwIGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gc2VlIGhvdyBgYnBmX3NvY2tfZGVzdHJveWAgaXMgZGVmaW5lZC4gSSdsbCBhbHNvIGNoZWNrIHdoZXJlIGl0J3MgY2FsbGVkIGFuZCB0aGUgcmVsYXRlZCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gQSBxdWljayBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgd2lsbCBnaXZlIG1lIHRoYXQgc3Vycm91bmRpbmcgY29kZSwgZGVwZW5kZW5jaWVzLCBhbmQgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGNvZGUgdGhpcyB0b3VjaGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDE6MzEuMzQ0NTkxMTAzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjkxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5MTA6XFx0ICpcXG4xMjkxMTpcXHQgKiBQYXJhbWV0ZXJzOlxcbjEyOTEyOlxcdCAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWRcXG4xMjkxMzpcXHQgKlxcbjEyOTE0OlxcdCAqIFJldHVybjpcXG4xMjkxNTpcXHQgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBvciB3aGF0ZXZlciB0aGUgcHJvdG9jb2wgc3BlY2lmaWNcXG4xMjkxNjpcXHQgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cXG4xMjkxNzpcXHQgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxcbjEyOTE4OlxcdCAqIDAgb3RoZXJ3aXNlXFxuMTI5MTk6XFx0ICovXFxuMTI5MjA6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxcbjEyOTIxOlxcdHtcXG4xMjkyMjpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilzb2NrO1xcbjEyOTIzOlxcdFxcbjEyOTI0OlxcdFxcdC8qIFRoZSBsb2NraW5nIHNlbWFudGljcyB0aGF0IGFsbG93IGZvciBzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgdGhlXFxuMTI5MjU6XFx0XFx0ICogZGVzdHJveSBoYW5kbGVycyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIFRDUCBhbmQgVURQLlxcbjEyOTI2OlxcdFxcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcXG4xMjkyNzpcXHRcXHQgKiBwcmlvciB0byBpbnZva2luZyB0aGlzIGtmdW5jLlxcbjEyOTI4OlxcdFxcdCAqL1xcbjEyOTI5OlxcdFxcdGlmICghc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveSlcXG4xMjkzMDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTI5MzE6XFx0XFxuMTI5MzI6XFx0XFx0aWYgKHNrX2Z1bGxzb2NrKHNrKSBcXHUwMDI2XFx1MDAyNlxcbjEyOTMzOlxcdFxcdCAgICBzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjZcXG4xMjkzNDpcXHRcXHQgICAgc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxcbjEyOTM1OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMjkzNjpcXHRcXG4xMjkzNzpcXHRcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG4xMjkzODpcXHR9XFxuMTI5Mzk6XFx0XFxuMTI5NDA6XFx0X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG4xMjk0MTpcXHRcXG4xMjk0MjpcXHRCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcXG4xMjk0MzpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlcXG4xMjk0NDpcXHRCVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXFxuMTI5NDU6XFx0XFxuMTI5NDY6XFx0c3RhdGljIGludCB0cmFjaW5nX2l0ZXJfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbjEyOTQ3OlxcdHtcXG4xMjk0ODpcXHRcXHRpZiAoYnRmX2lkX3NldDhfY29udGFpbnMoXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcywga2Z1bmNfaWQpIFxcdTAwMjZcXHUwMDI2XFxuMTI5NDk6XFx0XFx0ICAgIHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9JVEVSKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MTozMS4zNDYzODc2NDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDg0NTIyMTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTb2NrZXQgRGVzdHJ1Y3Rpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUgc25pcHBldCBhbmQgZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24uIEknbSBsb29raW5nIGF0IGEgY29uZGl0aW9uYWwgc3RhdGVtZW50IGhlcmUsIHNwZWNpZmljYWxseTpcblxuYGBgY1xuaWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSB8fCAoc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG5cdFx0XHRcdCAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKSlcbmBgYFxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhpcyBsb29rcyBsaWtlIHNvbWUgc29ydCBvZiBzb2NrZXQgY2xlYW51cCBvciBkZXN0cnVjdGlvbiBsb2dpYy4gUHJldmlvdXNseSwgdGhlIGNvZGUgY2hlY2tzIGZvciBgZGlhZ19kZXN0cm95YCwgYnV0IEkgc2VlIHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHByb2JsZW1hdGljOiBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIGlzIG9ubHkgcmVsaWFibGUgd2hlbiBgc2tfZnVsbHNvY2soc2spYCBpcyB0cnVlLiBJZiBgc2tgIGlzICpub3QqIGEgXCJmdWxsIHNvY2tldCxcIiBtZWFuaW5nIGl0J3Mgc29tZXRoaW5nIGxpa2UgYSBgaW5ldF90aW1ld2FpdF9zb2NrYCBvciBhIGByZXF1ZXN0X3NvY2tgIChzb2NrZXRzIGRlcml2ZWQgZnJvbSBgc29ja19jb21tb25gKSwgdGhlbiBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIGVpdGhlciBkb2Vzbid0IGV4aXN0IGF0IGFsbCBvciBpdCdzIGF0IGFuIG9mZnNldCB0aGF0J3MgaW52YWxpZCwgYW5kIGBza19mdWxsc29ja2AgaXMgZmFsc2UuIFRoaXMgaXMgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLlxuXG5TcGVjaWZpY2FsbHksIHdpdGggdGltZXdhaXQgc29ja2V0cywgYHNrX2Z1bGxzb2NrKHNrKWAgaXMgZmFsc2UuIFNvLCBub3csIEkgbmVlZCB0byBrbm93IGFib3V0IGBkaWFnX2Rlc3Ryb3lgIGZvciBUQ1AgdGltZXdhaXQgb3Igbm9uLWZ1bGxzb2NrIGluc3RhbmNlcy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGFuZCBob3cgaXQgaGFuZGxlcyB0aGVzZSBzb2NrZXQgdHlwZXMuIEknbGwgbmVlZCB0byBncmVwIHRocm91Z2ggdGhlIGNvZGViYXNlIHRvIHRyYWNlIHRoZSB1c2Ugb2YgYGRpYWdfZGVzdHJveWAgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgaW4gdGhlIGNhc2Ugb2YgdGltZXdhaXQgc29ja2V0cyBhbmQgc29ja2V0cyB0aGF0IGFyZSBub3QgZnVsbCBzb2NrZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjA3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDE6MzguNDMwOTEzNzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMjQ4MTI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcLmRpYWdfZGVzdHJveVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9yYXcuYz05NDg9c3RydWN0IHByb3RvIHJhd19wcm90ID0ge1xcbi0tXFxubmV0L2lwdjQvcmF3LmMtOTcyLSNlbmRpZlxcbm5ldC9pcHY0L3Jhdy5jOjk3MzpcXHQuZGlhZ19kZXN0cm95XFx0ICAgPSByYXdfYWJvcnQsXFxubmV0L2lwdjQvcmF3LmMtOTc0LX07XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTMzNDc9c3RydWN0IHByb3RvIHRjcF9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzk1LVxcdC5ub19hdXRvYmluZFxcdFxcdD0gdHJ1ZSxcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjMzOTY6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdGNwX2Fib3J0LFxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM5Ny19O1xcbi0tXFxubmV0L2lwdjQvdWRwLmM9MzE0Mz1zdHJ1Y3QgcHJvdG8gdWRwX3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0zMTczLVxcdC5vYmpfc2l6ZVxcdFxcdD0gc2l6ZW9mKHN0cnVjdCB1ZHBfc29jayksXFxubmV0L2lwdjQvdWRwLmM6MzE3NDpcXHQuZGlhZ19kZXN0cm95XFx0XFx0PSB1ZHBfYWJvcnQsXFxubmV0L2lwdjQvdWRwLmMtMzE3NS19O1xcbi0tXFxubmV0L2lwdjYvcmF3LmM9MTIwNz1zdHJ1Y3QgcHJvdG8gcmF3djZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jLTEyMzEtI2VuZGlmXFxubmV0L2lwdjYvcmF3LmM6MTIzMjpcXHQuZGlhZ19kZXN0cm95XFx0ICAgPSByYXdfYWJvcnQsXFxubmV0L2lwdjYvcmF3LmMtMTIzMy19O1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMjc2PXN0cnVjdCBwcm90byB0Y3B2Nl9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzI1LVxcdC5ub19hdXRvYmluZFxcdFxcdD0gdHJ1ZSxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIzMjY6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdGNwX2Fib3J0LFxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMyNy19O1xcbi0tXFxubmV0L2lwdjYvdWRwLmM9MTkwOD1zdHJ1Y3QgcHJvdG8gdWRwdjZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTE5NDAtXFx0LmlwdjZfcGluZm9fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVkcDZfc29jaywgaW5ldDYpLFxcbm5ldC9pcHY2L3VkcC5jOjE5NDE6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdWRwX2Fib3J0LFxcbm5ldC9pcHY2L3VkcC5jLTE5NDItfTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE0Nj12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X2luaXQodm9pZClcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE2Ni1cXHR0Y3BfcHJvdF9vdmVycmlkZS5yZWxlYXNlX2NiID0gdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGU7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoyMTY3OlxcdHRjcF9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjgtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTgwPXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfdjZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMjEzLVxcdHRjcHY2X3Byb3Rfb3ZlcnJpZGUucmVsZWFzZV9jYiA9IHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjIxNDpcXHR0Y3B2Nl9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTUtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MTo0MC40NjM0MDQ2MDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjg1MjY2NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgdGNwX2Fib3J0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgVENQL0lQIHBpY3R1cmUsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgW21lbnRpb24gc29tZXRoaW5nIHNwZWNpZmljIHRvIHlvdXIgZmllbGQsIGUuZy4sIFwidGhlIGFwcGxpY2F0aW9uLWxldmVsIGltcGxpY2F0aW9ucyBmb3IgaGlnaC10aHJvdWdocHV0IGRhdGEgdHJhbnNmZXIsXCIgb3IgXCJ0aGUgcG90ZW50aWFsIGZvciBhYnVzZSBpbiBERG9TIGF0dGFja3NcIl0uICBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgZXJyb3IgaGFuZGxpbmcg4oCTIHdoYXQgc3BlY2lmaWMgc2l0dWF0aW9ucyB0cmlnZ2VyIHRoaXMgYWJvcnQ/IElzIGl0IGluaXRpYXRlZCBieSB0aGUgbG9jYWwgaG9zdCwgdGhlIHJlbW90ZSBob3N0LCBvciBwZXJoYXBzIGEgdGltZW91dD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIGNvbmRpdGlvbnMuXG5cbioqTXkgQW5hbHlzaXMgb2YgYHRjcF9hYm9ydGAqKlxuXG5JIGhhdmUgdG8gY29uc2lkZXIgdGhlIGltbWVkaWF0ZSBpbXBhY3Qgb24gdGhlIGNvbm5lY3Rpb24sIG9mIGNvdXJzZS4gRG9lcyBpdCBncmFjZWZ1bGx5IHNodXQgZG93biB0aGUgY29ubmVjdGlvbiwgYXR0ZW1wdCBzb21lIHNvcnQgb2Ygbm90aWZpY2F0aW9uLCBvciBzaW1wbHkgc2xhbSB0aGUgZG9vcj8gIFRoZSBsZXZlbCBvZiBkZXRhaWwgcmVxdWlyZWQgZm9yIHRoZSByZXNwb25zZSBpcyBjcnVjaWFsLCBhcyB0aGlzIGRpY3RhdGVzIHJlY292ZXJ5IHN0cmF0ZWd5LCBzbyBJIG5lZWQgdG8ga25vdyBob3cgaXQgaW5mb3JtcyB0aGUgYXBwbGljYXRpb24uIEFyZSB0aGVyZSBhbnkgcmVzb3VyY2UgY2xlYW51cCByb3V0aW5lcyBpbiB0aGlzIGFib3J0IHByb2Nlc3M/ICBJdCdzIGNyaXRpY2FsIHRvIGF2b2lkIHJlc291cmNlIGxlYWtzLiBBbHNvLCB3aGF0IGlzIHRoZSBpbXBhY3Qgb24gdGhlIHJlY2VpdmluZyBlbmQ/XG5cbkZ1cnRoZXJtb3JlLCBJIGhhdmUgdG8gbWVudGFsbHkgbW9kZWwgaG93IHRoaXMgd29ya3Mgd2l0aCBleGlzdGluZyBjb2RlYmFzZXMuIEkgaW1tZWRpYXRlbHkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgaG93IGl0IGJlaGF2ZXMgaW4gcHJhY3RpY2UuIENvdWxkIHRoaXMgaGF2ZSBwb3RlbnRpYWwgcHJvYmxlbXM/IERvZXMgdGhpcyBpbnRyb2R1Y2UgbGF0ZW5jeT8gSXMgaXQgZWZmaWNpZW50LCBvciBjYW4gd2UgcmVmYWN0b3IgZm9yIGJldHRlciBlZmZpY2llbmN5PyBJcyB0aGVyZSBhbnkgY2hhbmNlIG9mIGRhdGEgY29ycnVwdGlvbiBvciBsb3N0IGRhdGE/IEhvdyBkb2VzIHRoaXMgd29yayB3aXRoIG90aGVyIGZ1bmN0aW9ucz9cblxuXG4iLCJJbnB1dFRva2VucyI6NzY1NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQxOjQzLjE0ODY3NDExMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTE0OTM2NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCB0Y3BfYWJvcnRcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD0xNzA0PXZvaWQgdGNwX2RvbmUoc3RydWN0IHNvY2sgKnNrKTtcXG5pbmNsdWRlL25ldC90Y3AuaDoxNzA1OmludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKTtcXG5pbmNsdWRlL25ldC90Y3AuaC0xNzA2LVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9NTA4OT12b2lkIHRjcF9kb25lKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTUxMTQtXFxubmV0L2lwdjQvdGNwLmM6NTExNTppbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcXG5uZXQvaXB2NC90Y3AuYy01MTE2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDE6NDUuNjYzNjE2NzE2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgxMzc3MTMyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUQ1AgU3RhY2sqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgYSBzcGVjaWZpYyBiZWhhdmlvciBpbiB0aGUgTGludXggVENQIGltcGxlbWVudGF0aW9uLCBzbyBsZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBuZXQvaXB2NC90Y3AuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1MTE1LiBJIGtub3cgdGhpcyBhcmVhIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSB0b3BpYyBJJ20gaW52ZXN0aWdhdGluZywgYnV0IEkgbmVlZCB0byBnZXQgdG8gdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoYXQncyBiZWluZyBkb25lLiBGcm9tIGhlcmUgSSBjYW4gZXh0cmFwb2xhdGUgd2hhdCdzIGNhdXNpbmcgdGhlIHByb2JsZW0uIEknbGwgbmVlZCB0byBnbyBkZWVwZXIgYWZ0ZXIgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEzNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQxOjQ3LjQ3NzM5MDc2MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzYxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTExNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTExNTpcXHRpbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcXG41MTE2OlxcdHtcXG41MTE3OlxcdFxcdGludCBzdGF0ZSA9IGluZXRfc2tfc3RhdGVfbG9hZChzayk7XFxuNTExODpcXHRcXG41MTE5OlxcdFxcdGlmIChzdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKSB7XFxuNTEyMDpcXHRcXHRcXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEgPSBpbmV0X3JlcXNrKHNrKTtcXG41MTIxOlxcdFxcbjUxMjI6XFx0XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbjUxMjM6XFx0XFx0XFx0aW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChyZXEtXFx1MDAzZXJza19saXN0ZW5lciwgcmVxKTtcXG41MTI0OlxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbjUxMjU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTEyNjpcXHRcXHR9XFxuNTEyNzpcXHRcXHRpZiAoc3RhdGUgPT0gVENQX1RJTUVfV0FJVCkge1xcbjUxMjg6XFx0XFx0XFx0c3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBpbmV0X3R3c2soc2spO1xcbjUxMjk6XFx0XFxuNTEzMDpcXHRcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNnR3LVxcdTAwM2V0d19yZWZjbnQpO1xcbjUxMzE6XFx0XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbjUxMzI6XFx0XFx0XFx0aW5ldF90d3NrX2Rlc2NoZWR1bGVfcHV0KHR3KTtcXG41MTMzOlxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbjUxMzQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTEzNTpcXHRcXHR9XFxuNTEzNjpcXHRcXG41MTM3OlxcdFxcdC8qIEJQRiBjb250ZXh0IGVuc3VyZXMgc29jayBsb2NraW5nLiAqL1xcbjUxMzg6XFx0XFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXFxuNTEzOTpcXHRcXHRcXHQvKiBEb24ndCByYWNlIHdpdGggdXNlcnNwYWNlIHNvY2tldCBjbG9zZXMgc3VjaCBhcyB0Y3BfY2xvc2UuICovXFxuNTE0MDpcXHRcXHRcXHRsb2NrX3NvY2soc2spO1xcbjUxNDE6XFx0XFxuNTE0MjpcXHRcXHQvKiBBdm9pZCBjbG9zaW5nIHRoZSBzYW1lIHNvY2tldCB0d2ljZS4gKi9cXG41MTQzOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XFxuNTE0NDpcXHRcXHRcXHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcXG41MTQ1OlxcdFxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuNTE0NjpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG41MTQ3OlxcdFxcdH1cXG41MTQ4OlxcdFxcbjUxNDk6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOKSB7XFxuNTE1MDpcXHRcXHRcXHR0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xcbjUxNTE6XFx0XFx0XFx0aW5ldF9jc2tfbGlzdGVuX3N0b3Aoc2spO1xcbjUxNTI6XFx0XFx0fVxcbjUxNTM6XFx0XFxuNTE1NDpcXHRcXHQvKiBEb24ndCByYWNlIHdpdGggQkggc29ja2V0IGNsb3NlcyBzdWNoIGFzIGluZXRfY3NrX2xpc3Rlbl9zdG9wLiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MTo0Ny40Nzc2MzExMDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE3MDg5ODA4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBicGZfc29ja19kZXN0cm95YCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBicGZfc29ja19kZXN0cm95YCBhbmQgaW1tZWRpYXRlbHkgYSBmZXcgdGhpbmdzIGp1bXAgb3V0LiBUaGUgY29kZSdzIG5vdyBoYW5kbGluZyBgVENQX05FV19TWU5fUkVDVmAgYW5kIGBUQ1BfVElNRV9XQUlUYCBzdGF0ZXMgc3BlY2lmaWNhbGx5LCB3aGljaCBpcyBzbWFydC4gUHJldmlvdXNseSwgdGhlIGBicGZfc29ja19kZXN0cm95YCBmdW5jdGlvbiBoYWQgdGhpcyBjaGVjazpcblxuYGBgY1xuaWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSB8fCAoc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG5cdFx0XHRcdCAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKSlcblx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuYGBgXG5cblRoZSBpc3N1ZSBoZXJlLCBhbmQgdGhlIGNydXggb2YgdGhpcyBwYXRjaCwgaXMgdGhhdCBmb3Igbm9uLWZ1bGwgc29ja2V0cywgbGlrZSB0aG9zZSBpbiBgVENQX1RJTUVfV0FJVGAgb3IgYFRDUF9ORVdfU1lOX1JFQ1ZgLCBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIHdhcyBiZWluZyByZWFkIGZyb20gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBvciBub24tcHJvdG9jb2wgbWVtb3J5LiBUaGF0J3MgYSBjbGFzc2ljIHJlY2lwZSBmb3IgcHJvYmxlbXMsIGxlYWRpbmcgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBvciBvdXRyaWdodCBmYWlsdXJlcywgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBgcmVxdWVzdF9zb2NrYCBvciBgdGltZXdhaXRfc29ja2AuXG5cbldpdGggdGhpcyBwYXRjaCwgdGhlIGNoZWNrIG9uIGBzay1cdTAwM2Vza19wcm90b2NvbGAgaXMgb25seSBwZXJmb3JtZWQgaWYgYHNrX2Z1bGxzb2NrKHNrKWAgaXMgdHJ1ZS4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnQuIEl0IG1lYW5zIHdlIGNhbiBub3cgY2FsbCBgc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRClgIG9uIHRoZXNlIG5vbi1mdWxsIHNvY2tldHMuXG5cbkNydWNpYWxseSwgdGhpcyBjaGFuZ2UgaXMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYnBmX3NvY2tfZGVzdHJveWAuIFRoaXMgaXMgYSBCUEYga2Z1bmMsIHdoaWNoIG1lYW5zIGl0J3MgZXhwb3NlZCB0byBCUEYgaXRlcmF0b3JzLCBsaWtlIHRoZSBvbmVzIHVzZWQgd2l0aCBgaXRlci90Y3BgLiBUaGlzIGlzICpyZWFjaGFibGUqIGtlcm5lbCBjb2RlIGZyb20gQlBGIGFuZCBjb3JlIG5ldHdvcmtpbmcsIHdoaWNoIGlzIGEgbWFqb3IgcG9pbnQgdG8gY29uc2lkZXIuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBzaG91bGQgdGhpcyBiZSBmdXp6ZWQ/IEFic29sdXRlbHkhIFRoaXMgb3BlbnMgdGhlIGRvb3IgZm9yIEJQRiBwcm9ncmFtcyB0byBkZXN0cm95IHRpbWV3YWl0L3JlcXVlc3Qgc29ja2V0cyB2aWEgYGJwZl9zb2NrX2Rlc3Ryb3koc2tfY29tbW9uKWAuIFRoaXMgaXMgbm93IHJlYWNoYWJsZSB0aHJvdWdoIEJQRiBpdGVyYXRvcnMsIHNwZWNpZmljYWxseSB3aGVuIGBCUEZfVFJBQ0VfSVRFUmAgaXMgdXNlZCwgc3VjaCBhcyB3aXRoIGl0ZXIvdGNwIGFuZCBpdGVyL3VkcC5cblxuTGV0IG1lIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBmb3IgYGJwZl9zb2NrX2Rlc3Ryb3lgIGFuZCB0aGUgQlBGIGl0ZXJhdG9ycyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLCBqdXN0IHRvIGJlIGNlcnRhaW4uIEknbGwgYWxzbyBzZWUgd2hlcmUgdGhlIGBicGZfc2tfaXRlcl9rZnVuY19pZHNgIGFuZCBgYnBmX3NvY2tfZGVzdHJveWAgZnVuY3Rpb25zIGFyZSByZWdpc3RlcmVkLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSBhbmQgd2hlcmUgaXQgY2FuIGJlIGFwcGxpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MzAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MTo1MS42NDg1MzM5NTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTM3MzkzNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyOTQwPV9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NDEtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NDI6QlRGX0tGVU5DU19TVEFSVChicGZfc2tfaXRlcl9rZnVuY19pZHMpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NDMtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zb2NrX2Rlc3Ryb3kpXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NDQ6QlRGX0tGVU5DU19FTkQoYnBmX3NrX2l0ZXJfa2Z1bmNfaWRzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQ1LVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTQ2PXN0YXRpYyBpbnQgdHJhY2luZ19pdGVyX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk0Ny17XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NDg6XFx0aWYgKGJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFxcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19pZHMsIGtmdW5jX2lkKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTQ5LVxcdCAgICBwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBCUEZfVFJBQ0VfSVRFUilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyOTU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfc2tfaXRlcl9rZnVuY19zZXQgPSB7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NTUtXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI5NTY6XFx0LnNldCAgID0gXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcyxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjk1Ny1cXHQuZmlsdGVyID0gdHJhY2luZ19pdGVyX2ZpbHRlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDE6NTMuMjYyMjc4NDg0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzOTM0MTIwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGVCUEYgYW5kIE5ldHdvcmsgRmlsdGVyaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGJwZl9za19pdGVyX2tmdW5jX3NldGAsIHNwZWNpZmljYWxseSB3aGVyZSBpdCdzICp1c2VkKiB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIG5ldHdvcmsgZmlsdGVyaW5nIGNvbnRleHQuIEknbSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gc29tZSBhc3BlY3Qgb2Ygc29ja2V0LWxldmVsIGZpbHRlcmluZyBvciBpdGVyYXRpb24sIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBzb2NrZXRzIG9yIG5ldHdvcmsgbmFtZXNwYWNlcy4gSSB3YW50IHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIGNhbGxpbmcgY29udGV4dCwgaG93IHRoZSBwYXJhbWV0ZXJzIGFyZSBiZWluZyB1c2VkLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhdHRhY2hpbmcgcHJvZ3JhbXMsIHNldHRpbmcgdXAgaXRlcmF0b3JzLCBhcHBseWluZyBmaWx0ZXJzLCBtYW5pcHVsYXRpbmcgc29ja2V0IG9wdGlvbnMsIG9yIHdoYXQ/IFRoZSBnb2FsIGlzIHRvIHBpZWNlIHRvZ2V0aGVyIGl0cyBmdW5jdGlvbmFsaXR5IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIFRoaXMgaW52ZXN0aWdhdGlvbiBzaG91bGQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gaG93IHRoZSBrZXJuZWwgdXNlcyB0aGlzIG1lY2hhbmlzbSBmb3IgbmV0d29yayB0cmFmZmljIG1hbmFnZW1lbnQgYW5kIGZpbHRlcmluZyBhdCBhIGxvd2VyIGxldmVsLiBNeSBob3BlIGlzIHRoaXMgd2lsbCByZXZlYWwgbmV3IGFzcGVjdHMgZm9yIG9wdGltaXphdGlvbiBvciBwb3NzaWJseSB2dWxuZXJhYmlsaXR5IGRldGVjdGlvbiBpbiBteSBhcmVhIG9mIGV4cGVydGlzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNzEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MTo1NS42NTU2OTMxODhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDgxMzQ1NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NrX2l0ZXJfa2Z1bmNfc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyOTQ2PXN0YXRpYyBpbnQgdHJhY2luZ19pdGVyX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTUzLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTU0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfc2tfaXRlcl9rZnVuY19zZXQgPSB7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NTUtXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjk2MD1zdGF0aWMgaW50IGluaXRfc3Vic3lzdGVtKHZvaWQpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NjEte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTYyOlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX3NldCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NjMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MTo1Ny4yNjM4MzI2MTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzMyNTI2MTkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgYGlmZGVmYCBibG9ja3MgYXJvdW5kIGxpbmVzIDEyOTAwLTEyOTcwIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuXG5cbioqRGl2aW5nIGludG8gdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIGBuZXQvY29yZS9maWx0ZXIuY2AqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDEyOTAwIHRocm91Z2ggMTI5NzAgb2YgYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGJlaW5nIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaGVyZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gZGVhbHMgd2l0aCBzb21lIHNwZWNpZmljIGZlYXR1cmUsIGhhcmR3YXJlLCBvciBwZXJoYXBzIGFuIG9wdGltaXphdGlvbiB0aGF0IGlzbid0IHVuaXZlcnNhbGx5IGFwcGxpY2FibGUuIEkgc3VzcGVjdCBpdCByZWxhdGVzIHRvIHBhY2tldCBmaWx0ZXJpbmcsIGxpa2VseSBpbnZvbHZpbmcgc29tZSBzcGVjaWZpYyBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGxvZ2ljIG9yIGludGVyYWN0aW9uIHdpdGggYSBwYXJ0aWN1bGFyIE5JQyAoTmV0d29yayBJbnRlcmZhY2UgQ29udHJvbGxlcikgb3IgaGFyZHdhcmUgYWNjZWxlcmF0b3IuIFRoZSB1c2Ugb2YgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgaXMgYSBkZWFkIGdpdmVhd2F5IHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCBvcHRpb25hbCwgY29uZmlndXJhYmxlIGNvZGUgcGF0aHMuXG5cbkknbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IHRoZSBjb25kaXRpb25zIHdpdGhpbiB0aGUgYCNpZmRlZmAgYmxvY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRlZmluZXMgYXJlIGJlaW5nIGNoZWNrZWQg4oCTIHdoYXQgKmZlYXR1cmUgZmxhZ3MqIGFyZSBjb250cm9sbGluZyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgY29kZT8gS25vd2luZyB0aGF0IHdpbGwgdGVsbCBtZSB3aHkgdGhpcyBjb2RlIGlzbid0IGFsd2F5cyBhY3RpdmUgYW5kIHdoaWNoIHBhcnRzIG9mIHRoZSBrZXJuZWwgY29uZmlnIHdvdWxkIGVuYWJsZSBpdC4gQXJlIHRoZXNlIHJlbGF0ZWQgdG8gaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCBrZXJuZWwgZmVhdHVyZXMsIG9yIHBlcmhhcHMgZXZlbiB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3M/IEl0IGNvdWxkIGJlIHNvbWV0aGluZyBsaWtlIHN1cHBvcnQgZm9yIGEgcGFydGljdWxhciBCUEYgaW5zdHJ1Y3Rpb24gc2V0IG9yIGFuIG9wdGltaXphdGlvbiB0aGF0IHJlbGllcyBvbiBhIHNwZWNpZmljIE5JQ+KAmXMgY2FwYWJpbGl0aWVzLiBJ4oCZbSBwcmVwYXJlZCB0byBmaW5kIHRoYXQgdGhpcyBjb3VsZCBiZSByZWxhdGVkIHRvIHNvbWUgb2JzY3VyZSBoYXJkd2FyZSBzdXBwb3J0LCBvciBzcGVjaWZpYyBwYWNrZXQgbWFuaXB1bGF0aW9uLlxuXG5JJ2xsIGFsc28ga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgY29tbWVudHMgaW4gdGhpcyBzZWN0aW9uLiBUaG9zZSBjb3VsZCBvZmZlciB2YWx1YWJsZSBjbHVlcyB0byBleHBsYWluIHdoeSB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIG5lY2Vzc2FyeSBhbmQgaG93IHRoaXMgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZmlsdGVyaW5nIGVuZ2luZS4gTXkgZ29hbCBpcyB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBzY2VuYXJpb3MgaW4gd2hpY2ggdGhpcyBwYXJ0aWN1bGFyIGNvZGUgaXMgYmVpbmcgdXRpbGl6ZWQsIGFzIHdlbGwgYXMgdGhlIGRlc2lnbiBjb25zaWRlcmF0aW9ucyB0aGF0IG1hZGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gdGhlIHJpZ2h0IGFwcHJvYWNoIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODcxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6MDAuNTg5MDk3MTc0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjkwMCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5MDA6XFx0XFxuMTI5MDE6XFx0X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbjEyOTAyOlxcdFxcbjEyOTAzOlxcdC8qIGJwZl9zb2NrX2Rlc3Ryb3k6IERlc3Ryb3kgdGhlIGdpdmVuIHNvY2tldCB3aXRoIEVDT05OQUJPUlRFRCBlcnJvciBjb2RlLlxcbjEyOTA0OlxcdCAqXFxuMTI5MDU6XFx0ICogVGhlIGZ1bmN0aW9uIGV4cGVjdHMgYSBub24tTlVMTCBwb2ludGVyIHRvIGEgc29ja2V0LCBhbmQgaW52b2tlcyB0aGVcXG4xMjkwNjpcXHQgKiBwcm90b2NvbCBzcGVjaWZpYyBzb2NrZXQgZGVzdHJveSBoYW5kbGVycy5cXG4xMjkwNzpcXHQgKlxcbjEyOTA4OlxcdCAqIFRoZSBoZWxwZXIgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gQlBGIGNvbnRleHRzIHRoYXQgaGF2ZSBhY3F1aXJlZCB0aGUgc29ja2V0XFxuMTI5MDk6XFx0ICogbG9ja3MuXFxuMTI5MTA6XFx0ICpcXG4xMjkxMTpcXHQgKiBQYXJhbWV0ZXJzOlxcbjEyOTEyOlxcdCAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWRcXG4xMjkxMzpcXHQgKlxcbjEyOTE0OlxcdCAqIFJldHVybjpcXG4xMjkxNTpcXHQgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBvciB3aGF0ZXZlciB0aGUgcHJvdG9jb2wgc3BlY2lmaWNcXG4xMjkxNjpcXHQgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cXG4xMjkxNzpcXHQgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxcbjEyOTE4OlxcdCAqIDAgb3RoZXJ3aXNlXFxuMTI5MTk6XFx0ICovXFxuMTI5MjA6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxcbjEyOTIxOlxcdHtcXG4xMjkyMjpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilzb2NrO1xcbjEyOTIzOlxcdFxcbjEyOTI0OlxcdFxcdC8qIFRoZSBsb2NraW5nIHNlbWFudGljcyB0aGF0IGFsbG93IGZvciBzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgdGhlXFxuMTI5MjU6XFx0XFx0ICogZGVzdHJveSBoYW5kbGVycyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIFRDUCBhbmQgVURQLlxcbjEyOTI2OlxcdFxcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcXG4xMjkyNzpcXHRcXHQgKiBwcmlvciB0byBpbnZva2luZyB0aGlzIGtmdW5jLlxcbjEyOTI4OlxcdFxcdCAqL1xcbjEyOTI5OlxcdFxcdGlmICghc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveSlcXG4xMjkzMDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTI5MzE6XFx0XFxuMTI5MzI6XFx0XFx0aWYgKHNrX2Z1bGxzb2NrKHNrKSBcXHUwMDI2XFx1MDAyNlxcbjEyOTMzOlxcdFxcdCAgICBzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjZcXG4xMjkzNDpcXHRcXHQgICAgc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxcbjEyOTM1OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMjkzNjpcXHRcXG4xMjkzNzpcXHRcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG4xMjkzODpcXHR9XFxuMTI5Mzk6XFx0XFxuMTI5NDA6XFx0X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG4xMjk0MTpcXHRcXG4xMjk0MjpcXHRCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcXG4xMjk0MzpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlcXG4xMjk0NDpcXHRCVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXFxuMTI5NDU6XFx0XFxuMTI5NDY6XFx0c3RhdGljIGludCB0cmFjaW5nX2l0ZXJfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbjEyOTQ3OlxcdHtcXG4xMjk0ODpcXHRcXHRpZiAoYnRmX2lkX3NldDhfY29udGFpbnMoXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcywga2Z1bmNfaWQpIFxcdTAwMjZcXHUwMDI2XFxuMTI5NDk6XFx0XFx0ICAgIHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9JVEVSKVxcbjEyOTUwOlxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbjEyOTUxOlxcdFxcdHJldHVybiAwO1xcbjEyOTUyOlxcdH1cXG4xMjk1MzpcXHRcXG4xMjk1NDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX3NrX2l0ZXJfa2Z1bmNfc2V0ID0ge1xcbjEyOTU1OlxcdFxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbjEyOTU2OlxcdFxcdC5zZXQgICA9IFxcdTAwMjZicGZfc2tfaXRlcl9rZnVuY19pZHMsXFxuMTI5NTc6XFx0XFx0LmZpbHRlciA9IHRyYWNpbmdfaXRlcl9maWx0ZXIsXFxuMTI5NTg6XFx0fTtcXG4xMjk1OTpcXHRcXG4xMjk2MDpcXHRzdGF0aWMgaW50IGluaXRfc3Vic3lzdGVtKHZvaWQpXFxuMTI5NjE6XFx0e1xcbjEyOTYyOlxcdFxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX3NldCk7XFxuMTI5NjM6XFx0fVxcbjEyOTY0OlxcdGxhdGVfaW5pdGNhbGwoaW5pdF9zdWJzeXN0ZW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjowMC41ODk1MjkzNTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE0MTQwNjI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIEZpbHRlciBDb21waWxhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgY29tcGlsYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgbmV0L2NvcmUvZmlsdGVyLmNgLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgc3VzcGVjdCB0aGUgY3J1Y2lhbCBpbmZvcm1hdGlvbiB3aWxsIGJlIGZvdW5kIGluIGVpdGhlciBgbmV0L2NvcmUvTWFrZWZpbGVgIG9yIHBlcmhhcHMgdGhlIGBLY29uZmlnYCBmaWxlcyB3aXRoaW4gdGhlIGBuZXQvY29yZWAgZGlyZWN0b3J5LiBNeSBhaW0gaXMgdG8gZGV0ZXJtaW5lIHVuZGVyIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBgbmV0L2NvcmUvZmlsdGVyLmNgIGlzIGNvbXBpbGVkLiBJdCdzIGhpZ2hseSBsaWtlbHkgdGhhdCB1bmRlcnN0YW5kaW5nIHRoZSBgQ09ORklHX2AgZmxhZ3MgaXMga2V5IGhlcmUuIEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGluZ3MgbGlrZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBvciB0aGUgYnJvYWRlciBgQ09ORklHX05FVGAgYXJlIHJlcXVpcmVkIG9yIGluZmx1ZW5jZSB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgZmlsdGVyIGNvZGUuIEtub3dpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGFuZCB3aGVuIHRoaXMgbW9kdWxlIGdldHMgYnVpbHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDMyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjowMi43MzA5Mzg3MjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4ODEzMjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbHRlclxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVxcdFxcdCAgICAgKz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVxcdFxcdFxcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcXFxcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtODctICpcXG5uZXQvY29yZS9wa3RnZW4uYzo4ODogKiBSZW1vdmUgaWYgZml4IGZyb20gYWRkZWQgSGFyYWxkIFdlbHRlIFxcdTAwM2NsYWZvcmdlQG5ldGZpbHRlci5vcmdcXHUwMDNlIDA0MDQxOVxcbm5ldC9jb3JlL3BrdGdlbi5jLTg5LSAqIGlhNjQgY29tcGlsYXRpb24gZml4IGZyb20gIEFyb24gR3JpZmZpcyBcXHUwMDNjYXJvbkBocC5jb21cXHUwMDNlIDA0MDYwNFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjowMi43ODk3NTcxMTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxNTQwOTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jeSBvZiBCUEYgU3lzY2FsbCBTdXBwb3J0KipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3Iga2Z1bmNzIG9yLCBtb3JlIHNwZWNpZmljYWxseSwgZm9yIHRoZSByZWdpc3RyYXRpb24gb2YgQlRGIGtmdW5jIElEIHNldHMgdGhyb3VnaCBgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldGAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayBmb3IgYW55IGRpcmVjdCBkZXBlbmRlbmNpZXMgb3IgY29kZSBwYXRocy4gTGV0J3MgZmlyZSB1cCBhIGBncmVwYCBhbmQgc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlIGZvciBpbnN0YW5jZXMgb2YgYHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXRgLiBUaGF0IHNob3VsZCBxdWlja2x5IHJldmVhbCBhbnkgZGlyZWN0IHJlbGF0aW9uc2hpcHMgYW5kIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhhdCBjb25maWcgb3B0aW9uIGZhY3RvcnMgaW50byBpdHMgZXhpc3RlbmNlIG9yIGJlaGF2aW9yLiBJdCdzIGEgZnVuZGFtZW50YWwgc3RlcDsgSSBjYW4ndCBzdGFydCBvcHRpbWl6aW5nIG9yIGludGVncmF0aW5nIHVudGlsIEknbSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlc2UgYmFzZSBkZXBlbmRlbmNpZXMuIExldCdzIHNlZSB3aGF0IHRoZSBncmVwIHNlYXJjaCB0dXJucyB1cCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTI4OTAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjowNS4xMDUxNzI0OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NzU3NjQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3Q9NDk0PXR5cGUuIEFuIGV4YW1wbGUgaXMgc2hvd24gYmVsb3c6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdC01MDctICAgICAgICB7XFxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdDo1MDg6ICAgICAgICAgICAgICAgIHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXFx1MDAyNmJwZl90YXNrX2tmdW5jX3NldCk7XFxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdC01MDktICAgICAgICB9XFxuLS1cXG5kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmM9MTIyNz1zdGF0aWMgdm9pZCBfX2luaXQgd2FrZXVwX3NvdXJjZXNfYnBmX2luaXQodm9pZClcXG5kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmMtMTIyOC17XFxuZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jOjEyMjk6XFx0aWYgKHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLCBcXHUwMDI2d2FrZXVwX3NvdXJjZV9rZnVuY19zZXQpKVxcbmRyaXZlcnMvYmFzZS9wb3dlci93YWtldXAuYy0xMjMwLVxcdFxcdHBtX3ByX2RiZyhcXFwiV2FrZXVwOiBmYWlsZWQgdG8gcmVnaXN0ZXIgQlRGIGtmdW5jc1xcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL2hpZC9icGYvaGlkX2JwZl9kaXNwYXRjaC5jPTY1OD1zdGF0aWMgaW50IF9faW5pdCBoaWRfYnBmX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmMtNjY3LVxcbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmM6NjY4OlxcdGVyciA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2aGlkX2JwZl9rZnVuY19zZXQpO1xcbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmMtNjY5LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmMtNjczLVxcbmRyaXZlcnMvaGlkL2JwZi9oaWRfYnBmX2Rpc3BhdGNoLmM6Njc0OlxcdGVyciA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLCBcXHUwMDI2aGlkX2JwZl9zeXNjYWxsX2tmdW5jX3NldCk7XFxuZHJpdmVycy9oaWQvYnBmL2hpZF9icGZfZGlzcGF0Y2guYy02NzUtXFx0aWYgKGVycikge1xcbi0tXFxuZnMvYmluZm10X21pc2NfYnBmLmM9MzIxPXN0YXRpYyBpbnQgYm1fYnBmX2luaXQoc3RydWN0IGJ0ZiAqYnRmKVxcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTMyMi17XFxuZnMvYmluZm10X21pc2NfYnBmLmM6MzIzOlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyxcXG5mcy9iaW5mbXRfbWlzY19icGYuYy0zMjQtXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZibV9icGZfa2Z1bmNfc2V0KTtcXG4tLVxcbmZzL2JwZl9mc19rZnVuY3MuYz00OTI9c3RhdGljIGludCBfX2luaXQgYnBmX2ZzX2tmdW5jc19pbml0KHZvaWQpXFxuLS1cXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDk1LVxcbmZzL2JwZl9mc19rZnVuY3MuYzo0OTY6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xTTSwgXFx1MDAyNmJwZl9mc19rZnVuY19zZXQpO1xcbmZzL2JwZl9mc19rZnVuY3MuYy00OTctXFx0aWYgKHJldCB8fCAhSVNfRU5BQkxFRChDT05GSUdfQklORk1UX01JU0NfQlBGKSlcXG5mcy9icGZfZnNfa2Z1bmNzLmMtNDk4LVxcdFxcdHJldHVybiByZXQ7XFxuZnMvYnBmX2ZzX2tmdW5jcy5jOjQ5OTpcXHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXFxuZnMvYnBmX2ZzX2tmdW5jcy5jLTUwMC1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmJwZl9mc19rZnVuY19zZXQpO1xcbi0tXFxuZnMvdmVyaXR5L21lYXN1cmUuYz0xODY9dm9pZCBfX2luaXQgZnN2ZXJpdHlfaW5pdF9icGYodm9pZClcXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTE4Ny17XFxuZnMvdmVyaXR5L21lYXN1cmUuYzoxODg6XFx0cmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xTTSwgXFx1MDAyNmJwZl9mc3Zlcml0eV9zZXQpO1xcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTg5LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvYnRmLmg9NTg3PXUzMiAqYnRmX2tmdW5jX2lzX21vZGlmeV9yZXR1cm4oY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIga2Z1bmNfYnRmX2lkLFxcbmluY2x1ZGUvbGludXgvYnRmLmgtNTg4LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuaW5jbHVkZS9saW51eC9idGYuaDo1ODk6aW50IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcXG5pbmNsdWRlL2xpbnV4L2J0Zi5oLTU5MC1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCAqcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2J0Zi5oPTY0Nz1zdGF0aWMgaW5saW5lIHUzMiAqYnRmX2tmdW5jX2lkX3NldF9jb250YWlucyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2J0Zi5oLTY1My19XFxuaW5jbHVkZS9saW51eC9idGYuaDo2NTQ6c3RhdGljIGlubGluZSBpbnQgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxcbmluY2x1ZGUvbGludXgvYnRmLmgtNjU1LVxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCAqcylcXG4tLVxcbmlvX3VyaW5nL2JwZi1vcHMuYz0xMjA9c3RhdGljIGludCBicGZfaW9faW5pdChzdHJ1Y3QgYnRmICpidGYpXFxuLS1cXG5pb191cmluZy9icGYtb3BzLmMtMTI5LVxcbmlvX3VyaW5nL2JwZi1vcHMuYzoxMzA6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsXFxuaW9fdXJpbmcvYnBmLW9wcy5jLTEzMS1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2YnBmX2lvX3VyaW5nX2tmdW5jX3NldCk7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTEzMT1zdGF0aWMgaW50IF9faW5pdCBrZnVuY19pbml0KHZvaWQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTExMzIte1xcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTMzOlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVU5TUEVDLCBcXHUwMDI2Y29tbW9uX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTExMzQtfVxcbi0tXFxua2VybmVsL2JwZi9idGYuYz04OTAyPXN0YXRpYyBpbnQgYnRmX3BvcHVsYXRlX2tmdW5jX3NldChzdHJ1Y3QgYnRmICpidGYsIGVudW0gYnRmX2tmdW5jX2hvb2sgaG9vayxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODk0OC1cXHRzZXQgPSB0YWItXFx1MDAzZXNldHNbaG9va107XFxua2VybmVsL2JwZi9idGYuYzo4OTQ5OlxcdC8qIFdhcm4gd2hlbiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0IGlzIGNhbGxlZCB0d2ljZSBmb3IgdGhlIHNhbWUgaG9va1xcbmtlcm5lbC9icGYvYnRmLmMtODk1MC1cXHQgKiBmb3IgbW9kdWxlIHNldHMuXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTkxNzM9dTMyICpidGZfa2Z1bmNfaXNfbW9kaWZ5X3JldHVybihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBrZnVuY19idGZfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTkxODEtXFxua2VybmVsL2JwZi9idGYuYzo5MTgyOnN0YXRpYyBpbnQgX19yZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KGVudW0gYnRmX2tmdW5jX2hvb2sgaG9vayxcXG5rZXJuZWwvYnBmL2J0Zi5jLTkxODMtXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0ICprc2V0KVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy05MjA4LS8qIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBpbnZva2VkIG9ubHkgZnJvbSBpbml0Y2FsbHMvbW9kdWxlIGluaXQgZnVuY3Rpb25zICovXFxua2VybmVsL2JwZi9idGYuYzo5MjA5OmludCByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXFxua2VybmVsL2JwZi9idGYuYy05MjEwLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0ICprc2V0KVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy05MjIyLVxcdGhvb2sgPSBicGZfcHJvZ190eXBlX3RvX2tmdW5jX2hvb2socHJvZ190eXBlKTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjkyMjM6XFx0cmV0dXJuIF9fcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChob29rLCBrc2V0KTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTkyMjQtfVxcbmtlcm5lbC9icGYvYnRmLmM6OTIyNTpFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KTtcXG5rZXJuZWwvYnBmL2J0Zi5jLTkyMjYtXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTkyMjg9aW50IHJlZ2lzdGVyX2J0Zl9mbW9kcmV0X2lkX3NldChjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCAqa3NldClcXG5rZXJuZWwvYnBmL2J0Zi5jLTkyMjkte1xcbmtlcm5lbC9icGYvYnRmLmM6OTIzMDpcXHRyZXR1cm4gX19yZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJURl9LRlVOQ19IT09LX0ZNT0RSRVQsIGtzZXQpO1xcbmtlcm5lbC9icGYvYnRmLmMtOTIzMS19XFxuLS1cXG5rZXJuZWwvYnBmL2NwdW1hc2suYz01MTU9c3RhdGljIGludCBfX2luaXQgY3B1bWFza19rZnVuY19pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2NwdW1hc2suYy01MjUtXFx0cmV0ID0gYnBmX21lbV9hbGxvY19pbml0KFxcdTAwMjZicGZfY3B1bWFza19tYSwgc2l6ZW9mKHN0cnVjdCBicGZfY3B1bWFzayksIGZhbHNlKTtcXG5rZXJuZWwvYnBmL2NwdW1hc2suYzo1MjY6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcXHUwMDI2Y3B1bWFza19rZnVuY19zZXQpO1xcbmtlcm5lbC9icGYvY3B1bWFzay5jOjUyNzpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZjcHVtYXNrX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9jcHVtYXNrLmM6NTI4OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCwgXFx1MDAyNmNwdW1hc2tfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2NwdW1hc2suYy01MjktXFx0cmV0dXJuICByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGNwdW1hc2tfZHRvcnMsXFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jPTM3OT1zdGF0aWMgaW50IF9faW5pdCBjcnlwdG9fa2Z1bmNfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYy0zODgtXFxua2VybmVsL2JwZi9jcnlwdG8uYzozODk6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmNyeXB0X2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9jcnlwdG8uYzozOTA6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1QsIFxcdTAwMjZjcnlwdF9rZnVuY19zZXQpO1xcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzkxOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcXHUwMDI2Y3J5cHRfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM5MjpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXFxua2VybmVsL2JwZi9jcnlwdG8uYy0zOTMtXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjcnlwdF9pbml0X2tmdW5jX3NldCk7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00OTgyPXN0YXRpYyBpbnQgX19pbml0IGtmdW5jX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5OTctXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDk5ODpcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXFx1MDAyNmdlbmVyaWNfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTk5OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcXHUwMDI2Z2VuZXJpY19rZnVuY19zZXQpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDA6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsIFxcdTAwMjZnZW5lcmljX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NTAwMTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZnZW5lcmljX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NTAwMjpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFxcdTAwMjZnZW5lcmljX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NTAwMzpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFxcdTAwMjZnZW5lcmljX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTAwNC1cXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGdlbmVyaWNfZHRvcnMsXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDA2LVxcdFxcdFxcdFxcdFxcdFxcdCAgVEhJU19NT0RVTEUpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMDc6XFx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVU5TUEVDLCBcXHUwMDI2Y29tbW9uX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTAwOC19XFxuLS1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM9MjMwPXN0YXRpYyBpbnQgaW5pdF9zdWJzeXN0ZW0odm9pZClcXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMjMxLXtcXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM6MjMyOlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVU5TUEVDLCBcXHUwMDI2YnBmX21hcF9pdGVyX2tmdW5jX3NldCk7XFxua2VybmVsL2JwZi9tYXBfaXRlci5jLTIzMy19XFxuLS1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz03NTk9c3RhdGljIF9faW5pdCBpbnQgcnFzcGlubG9ja19yZWdpc3Rlcl9rZnVuY3Modm9pZClcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03NjAte1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjc2MTpcXHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQywgXFx1MDAyNnJxc3BpbmxvY2tfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03NjItfVxcbi0tXFxua2VybmVsL2Nncm91cC9yc3RhdC5jPTc2Nj1zdGF0aWMgaW50IF9faW5pdCBicGZfcnN0YXRfa2Z1bmNfaW5pdCh2b2lkKVxcbmtlcm5lbC9jZ3JvdXAvcnN0YXQuYy03Njcte1xcbmtlcm5lbC9jZ3JvdXAvcnN0YXQuYzo3Njg6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLFxcbmtlcm5lbC9jZ3JvdXAvcnN0YXQuYy03NjktXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZicGZfcnN0YXRfa2Z1bmNfc2V0KTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM9MTE2MD1pbnQgc2N4X2NpZF9rZnVuY19pbml0KHZvaWQpXFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0xMTYxLXtcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjExNjI6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2c2N4X2tmdW5jX3NldF9pbml0X2NpZHMpID86XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoxMTYzOlxcdFxcdHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2c2N4X2tmdW5jX3NldF9jaWQpID86XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoxMTY0OlxcdFxcdHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcXHUwMDI2c2N4X2tmdW5jX3NldF9jaWQpID86XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoxMTY1OlxcdFxcdHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLCBcXHUwMDI2c2N4X2tmdW5jX3NldF9jaWQpO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMTE2Ni19XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwODk4PXN0YXRpYyBpbnQgX19pbml0IHNjeF9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTc2LVxcdCAqIGtmdW5jIHJlZ2lzdHJhdGlvbiBjYW4ndCBiZSBkb25lIGZyb20gaW5pdF9zY2hlZF9leHRfY2xhc3MoKSBhc1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5Nzc6XFx0ICogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldCgpIG5lZWRzIG1vc3Qgb2YgdGhlIHN5c3RlbSB0byBiZSB1cC5cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTc4LVxcdCAqXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTg2LVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5ODc6XFx0aWYgKChyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTg4LVxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnNjeF9rZnVuY19zZXRfZW5xdWV1ZV9kaXNwYXRjaCkpIHx8XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk4OTpcXHQgICAgKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5OTAtXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2c2N4X2tmdW5jX3NldF9kaXNwYXRjaCkpIHx8XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5MTpcXHQgICAgKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5OTItXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2c2N4X2tmdW5jX3NldF9jcHVfcmVsZWFzZSkpIHx8XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5MzpcXHQgICAgKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5OTQtXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2c2N4X2tmdW5jX3NldF91bmxvY2tlZCkpIHx8XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5NTpcXHQgICAgKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5OTYtXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2c2N4X2tmdW5jX3NldF91bmxvY2tlZCkpIHx8XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk5NzpcXHQgICAgKHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5OTgtXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2c2N4X2tmdW5jX3NldF9hbnkpKSB8fFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5OTk6XFx0ICAgIChyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORyxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTExMDAwLVxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnNjeF9rZnVuY19zZXRfYW55KSkgfHxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDAxOlxcdCAgICAocmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTAwMi1cXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2FueSkpKSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYz0xNTU0PWludCBzY3hfaWRsZV9pbml0KHZvaWQpXFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmMtMTU1NS17XFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1NjpcXHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2lkbGUpID86XFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1NzpcXHQgICAgICAgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2lkbGUpID86XFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1ODpcXHQgICAgICAgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X2lkbGUpID86XFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU1OTpcXHQgICAgICAgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMsIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X3NlbGVjdF9jcHUpID86XFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTU2MDpcXHQgICAgICAgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsIFxcdTAwMjZzY3hfa2Z1bmNfc2V0X3NlbGVjdF9jcHUpO1xcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTE1NjEtfVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM0NTk9c3RhdGljIGludCBfX2luaXQgYnBmX3RyYWNlX2tmdW5jc19pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzQ2Mi1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzQ2MzpcXHRlcnIgPSBlcnIgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0tQUk9CRSwgXFx1MDAyNmJwZl9zZXNzaW9uX2tmdW5jX3NldCk7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM0NjQ6XFx0ZXJyID0gZXJyID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcXHUwMDI2YnBmX3Nlc3Npb25fa2Z1bmNfc2V0KTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzQ2NS1cXG4tLVxcbm1tL2JwZl9tZW1jb250cm9sLmM9MTgyPXN0YXRpYyBpbnQgX19pbml0IGJwZl9tZW1jb250cm9sX2luaXQodm9pZClcXG4tLVxcbm1tL2JwZl9tZW1jb250cm9sLmMtMTg1LVxcbm1tL2JwZl9tZW1jb250cm9sLmM6MTg2OlxcdGVyciA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9VTlNQRUMsXFxubW0vYnBmX21lbWNvbnRyb2wuYy0xODctXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmJwZl9tZW1jb250cm9sX2tmdW5jX3NldCk7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTg4OD1zdGF0aWMgaW50IF9faW5pdCBicGZfcHJvZ190ZXN0X3J1bl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTkwMi1cXHRyZXQgPSByZWdpc3Rlcl9idGZfZm1vZHJldF9pZF9zZXQoXFx1MDAyNmJwZl90ZXN0X21vZGlmeV9yZXR1cm5fc2V0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTkwMzpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9wcm9nX3Rlc3Rfa2Z1bmNfc2V0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTkwNDpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZicGZfcHJvZ190ZXN0X2tmdW5jX3NldCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjE5MDU6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLCBcXHUwMDI2YnBmX3Byb2dfdGVzdF9rZnVuY19zZXQpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xOTA2LVxcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGJwZl9wcm9nX3Rlc3RfZHRvcl9rZnVuYyxcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jPTMwNz1zdGF0aWMgaW50IF9faW5pdCBicGZfa3NvY2tfa2Z1bmNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzE2LVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMxNzpcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcXG5uZXQvY29yZS9icGZfa3NvY2suYy0zMTgtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmtzb2NrX2luaXRfa2Z1bmNfc2V0KTtcXG5uZXQvY29yZS9icGZfa3NvY2suYzozMTk6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMyMC1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmtzb2NrX2tmdW5jX3NldCk7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MzIxOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLFxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMyMi1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmtzb2NrX2tmdW5jX3NldCk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjg3NT1zdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI4NzgtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4Nzk6XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4MDpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4MTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NLX1NLQiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4MjpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4ODM6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODg0OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX09VVCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4NTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9JTiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4NjpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODg3OlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4ODpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX05FVEZJTFRFUiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg4OTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTA6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYl9tZXRhKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5MTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiX21ldGEpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODkyOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcXHUwMDI2YnBmX2tmdW5jX3NldF94ZHApO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyODkzOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg5NC1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19hZGRyKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5NTpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfdGNwX3JlcXNrKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjg5NjpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI4OTc6XFx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU09DS19PUFMsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NvY2tfb3BzKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjg5OC19XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjk2MD1zdGF0aWMgaW50IGluaXRfc3Vic3lzdGVtKHZvaWQpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NjEte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTYyOlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX3NldCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTI5NjMtfVxcbi0tXFxubmV0L2NvcmUveGRwLmM9OTkzPXN0YXRpYyBpbnQgX19pbml0IHhkcF9tZXRhZGF0YV9pbml0KHZvaWQpXFxubmV0L2NvcmUveGRwLmMtOTk0LXtcXG5uZXQvY29yZS94ZHAuYzo5OTU6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsIFxcdTAwMjZ4ZHBfbWV0YWRhdGFfa2Z1bmNfc2V0KTtcXG5uZXQvY29yZS94ZHAuYy05OTYtfVxcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTM0NT1zdGF0aWMgaW50IF9faW5pdCBicGZfdGNwX2NhX2tmdW5jX2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zNDgtXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjM0OTpcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywgXFx1MDAyNmJwZl90Y3BfY2Ffa2Z1bmNfc2V0KTtcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzUwLVxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9icGZfc3RydWN0X29wcyhcXHUwMDI2YnBmX3RjcF9jb25nZXN0aW9uX29wcywgdGNwX2Nvbmdlc3Rpb25fb3BzKTtcXG4tLVxcbm5ldC9pcHY0L2ZvdV9icGYuYz0xMTM9aW50IHJlZ2lzdGVyX2ZvdV9icGYodm9pZClcXG5uZXQvaXB2NC9mb3VfYnBmLmMtMTE0LXtcXG5uZXQvaXB2NC9mb3VfYnBmLmM6MTE1OlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLFxcbm5ldC9pcHY0L2ZvdV9icGYuYy0xMTYtXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZmb3VfYnBmX2tmdW5jX3NldCk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYmJyLmM9MTE3NT1zdGF0aWMgaW50IF9faW5pdCBiYnJfcmVnaXN0ZXIodm9pZClcXG4tLVxcbm5ldC9pcHY0L3RjcF9iYnIuYy0xMTgwLVxcbm5ldC9pcHY0L3RjcF9iYnIuYzoxMTgxOlxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2dGNwX2Jicl9rZnVuY19zZXQpO1xcbm5ldC9pcHY0L3RjcF9iYnIuYy0xMTgyLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2lwdjQvdGNwX2N1YmljLmM9NTAxPXN0YXRpYyBpbnQgX19pbml0IGN1YmljdGNwX3JlZ2lzdGVyKHZvaWQpXFxuLS1cXG5uZXQvaXB2NC90Y3BfY3ViaWMuYy01MzQtXFxubmV0L2lwdjQvdGNwX2N1YmljLmM6NTM1OlxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2dGNwX2N1YmljX2tmdW5jX3NldCk7XFxubmV0L2lwdjQvdGNwX2N1YmljLmMtNTM2LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2lwdjQvdGNwX2RjdGNwLmM9Mjk0PXN0YXRpYyBpbnQgX19pbml0IGRjdGNwX3JlZ2lzdGVyKHZvaWQpXFxuLS1cXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYy0yOTktXFxubmV0L2lwdjQvdGNwX2RjdGNwLmM6MzAwOlxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2dGNwX2RjdGNwX2tmdW5jX3NldCk7XFxubmV0L2lwdjQvdGNwX2RjdGNwLmMtMzAxLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM9NTQwPWludCByZWdpc3Rlcl9uZl9jb25udHJhY2tfYnBmKHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01NDMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6NTQ0OlxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsIFxcdTAwMjZuZl9jb25udHJhY2tfa2Z1bmNfc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzo1NDU6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFxcdTAwMjZuZl9jb25udHJhY2tfa2Z1bmNfc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01NDYtXFx0aWYgKCFyZXQpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9icGYuYz0xMTY9aW50IG5mX2Zsb3dfcmVnaXN0ZXJfYnBmKHZvaWQpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jLTExNy17XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2JwZi5jOjExODpcXHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1hEUCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfYnBmLmMtMTE5LVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bmZfZmxvd19rZnVuY19zZXQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmM9NjY9aW50IHJlZ2lzdGVyX25mX25hdF9icGYodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2JwZi5jLTY5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2JwZi5jOjcwOlxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9YRFAsXFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmMtNzEtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5mX2JwZl9uYXRfa2Z1bmNfc2V0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2JwZi5jLTc0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2JwZi5jOjc1OlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLFxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2JwZi5jLTc2LVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bmZfYnBmX25hdF9rZnVuY19zZXQpO1xcbi0tXFxubmV0L3NjaGVkL2JwZl9xZGlzYy5jPTQ2MD1zdGF0aWMgaW50IF9faW5pdCBicGZfcWRpc2Nfa2Z1bmNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3NjaGVkL2JwZl9xZGlzYy5jLTQ2OS1cXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmM6NDcwOlxcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2YnBmX3FkaXNjX2tmdW5jX3NldCk7XFxubmV0L3NjaGVkL2JwZl9xZGlzYy5jLTQ3MS1cXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKHNrYl9rZnVuY19kdG9ycyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2JwZi5jPTEwNj1pbnQgX19pbml0IHJlZ2lzdGVyX3hmcm1faW50ZXJmYWNlX2JwZih2b2lkKVxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2JwZi5jLTEwNy17XFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfYnBmLmM6MTA4OlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLFxcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2JwZi5jLTEwOS1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnhmcm1faW50ZXJmYWNlX2tmdW5jX3NldCk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlX2JwZi5jPTEzMD1pbnQgX19pbml0IHJlZ2lzdGVyX3hmcm1fc3RhdGVfYnBmKHZvaWQpXFxubmV0L3hmcm0veGZybV9zdGF0ZV9icGYuYy0xMzEte1xcbm5ldC94ZnJtL3hmcm1fc3RhdGVfYnBmLmM6MTMyOlxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLFxcbm5ldC94ZnJtL3hmcm1fc3RhdGVfYnBmLmMtMTMzLVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2eGZybV9zdGF0ZV94ZHBfa2Z1bmNfc2V0KTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3guYz0yNT1zdGF0aWMgaW50IF9faW5pdCBicGZfdGVzdF9tb2RvcmRlcl94X2luaXQodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdF9tb2RvcmRlcl94LmMtMjYte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0X21vZG9yZGVyX3guYzoyNzpcXHRyZXR1cm4gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdF9tb2RvcmRlcl94LmMtMjgtXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZicGZfdGVzdF9tb2RvcmRlcl94X3NldCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdF9tb2RvcmRlcl95LmM9MjU9c3RhdGljIGludCBfX2luaXQgYnBmX3Rlc3RfbW9kb3JkZXJfeV9pbml0KHZvaWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3RfbW9kb3JkZXJfeS5jLTI2LXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdF9tb2RvcmRlcl95LmM6Mjc6XFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3RfbW9kb3JkZXJfeS5jLTI4LVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2YnBmX3Rlc3RfbW9kb3JkZXJfeV9zZXQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYz0yMTMwPXN0YXRpYyBpbnQgYnBmX3Rlc3Rtb2RfaW5pdCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYy0yMTQwLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmM6MjE0MTpcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVU5TUEVDLCBcXHUwMDI2YnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX3NldCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYzoyMTQyOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjIxNDM6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9UUkFDSU5HLCBcXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjIxNDQ6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLCBcXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjIxNDU6XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLCBcXHUwMDI2YnBmX3Rlc3Rtb2Rfa2Z1bmNfc2V0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jLTIxNDYtXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9mbW9kcmV0X2lkX3NldChcXHUwMDI2YnBmX3Rlc3Rtb2RfdHJhbXBvbGluZV9jb3VudF9mbW9kcmV0X3NldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQyOjA2Ljc2Mjc1NDc4OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDAwOTAzMjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIGZvciBDb25kaXRpb25hbCBDb21waWxhdGlvbiBpbiB0aGUgTmV0d29yayBGaWx0ZXIgQ29kZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBJIG5lZWQgdG8gemVybyBpbiBvbiBob3cgdGhlc2UgYGluaXRfc3Vic3lzdGVtYCBhbmQgYGJwZl9zb2NrX2Rlc3Ryb3lgIGZ1bmN0aW9ucyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIG5ldHdvcmsgZmlsdGVyIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgd2hldGhlciBvciBub3QgdGhlc2UgY2FsbHMgYXJlIHdyYXBwZWQgaW4gYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBsaWtlIGAjaWZkZWZgIGJsb2Nrcy4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgYW5kIGl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaWYgZGlmZmVyZW50IGZlYXR1cmVzIG9yIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGFyZSBhZmZlY3RpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZXNlIGZ1bmN0aW9ucy4gU28sIGxldCdzIHN0YXJ0IGF0IGxpbmUgMTI4NTAgb2YgYG5ldC9jb3JlL2ZpbHRlci5jYCBhbmQgd29yayBteSB3YXkgdGhyb3VnaCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkncmUgaGFuZGxlZCBkaWZmZXJlbnRseSBiYXNlZCBvbiBmbGFncyBvciBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4MTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjowOC43NjM2NjE4MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzk1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI4NTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjg1MDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF94ZHAgPSB7XFxuMTI4NTE6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuMTI4NTI6XFx0XFx0LnNldCA9IFxcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X3hkcCxcXG4xMjg1MzpcXHR9O1xcbjEyODU0OlxcdFxcbjEyODU1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X3NvY2tfYWRkciA9IHtcXG4xMjg1NjpcXHRcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4xMjg1NzpcXHRcXHQuc2V0ID0gXFx1MDAyNmJwZl9rZnVuY19jaGVja19zZXRfc29ja19hZGRyLFxcbjEyODU4OlxcdH07XFxuMTI4NTk6XFx0XFxuMTI4NjA6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfdGNwX3JlcXNrID0ge1xcbjEyODYxOlxcdFxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbjEyODYyOlxcdFxcdC5zZXQgPSBcXHUwMDI2YnBmX2tmdW5jX2NoZWNrX3NldF90Y3BfcmVxc2ssXFxuMTI4NjM6XFx0fTtcXG4xMjg2NDpcXHRcXG4xMjg2NTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9zb2NrX29wcyA9IHtcXG4xMjg2NjpcXHRcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4xMjg2NzpcXHRcXHQuc2V0ID0gXFx1MDAyNmJwZl9rZnVuY19jaGVja19zZXRfc29ja19vcHMsXFxuMTI4Njg6XFx0fTtcXG4xMjg2OTpcXHRcXG4xMjg3MDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9pY21wX3NlbmQgPSB7XFxuMTI4NzE6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuMTI4NzI6XFx0XFx0LnNldCA9IFxcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZCxcXG4xMjg3MzpcXHR9O1xcbjEyODc0OlxcdFxcbjEyODc1OlxcdHN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXFxuMTI4NzY6XFx0e1xcbjEyODc3OlxcdFxcdGludCByZXQ7XFxuMTI4Nzg6XFx0XFxuMTI4Nzk6XFx0XFx0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjg4MDpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjg4MTpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NLX1NLQiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjg4MjpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxuMTI4ODM6XFx0XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbjEyODg0OlxcdFxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX09VVCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjg4NTpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9JTiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjg4NjpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBcXHUwMDI2YnBmX2tmdW5jX3NldF9za2IpO1xcbjEyODg3OlxcdFxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFdUX1NFRzZMT0NBTCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjg4ODpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX05FVEZJTFRFUiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiKTtcXG4xMjg4OTpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYik7XFxuMTI4OTA6XFx0XFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NrYl9tZXRhKTtcXG4xMjg5MTpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgXFx1MDAyNmJwZl9rZnVuY19zZXRfc2tiX21ldGEpO1xcbjEyODkyOlxcdFxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfWERQLCBcXHUwMDI2YnBmX2tmdW5jX3NldF94ZHApO1xcbjEyODkzOlxcdFxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUixcXG4xMjg5NDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19hZGRyKTtcXG4xMjg5NTpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfdGNwX3JlcXNrKTtcXG4xMjg5NjpcXHRcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7XFxuMTI4OTc6XFx0XFx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU09DS19PUFMsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NvY2tfb3BzKTtcXG4xMjg5ODpcXHR9XFxuMTI4OTk6XFx0bGF0ZV9pbml0Y2FsbChicGZfa2Z1bmNfaW5pdCk7XFxuMTI5MDA6XFx0XFxuMTI5MDE6XFx0X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbjEyOTAyOlxcdFxcbjEyOTAzOlxcdC8qIGJwZl9zb2NrX2Rlc3Ryb3k6IERlc3Ryb3kgdGhlIGdpdmVuIHNvY2tldCB3aXRoIEVDT05OQUJPUlRFRCBlcnJvciBjb2RlLlxcbjEyOTA0OlxcdCAqXFxuMTI5MDU6XFx0ICogVGhlIGZ1bmN0aW9uIGV4cGVjdHMgYSBub24tTlVMTCBwb2ludGVyIHRvIGEgc29ja2V0LCBhbmQgaW52b2tlcyB0aGVcXG4xMjkwNjpcXHQgKiBwcm90b2NvbCBzcGVjaWZpYyBzb2NrZXQgZGVzdHJveSBoYW5kbGVycy5cXG4xMjkwNzpcXHQgKlxcbjEyOTA4OlxcdCAqIFRoZSBoZWxwZXIgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gQlBGIGNvbnRleHRzIHRoYXQgaGF2ZSBhY3F1aXJlZCB0aGUgc29ja2V0XFxuMTI5MDk6XFx0ICogbG9ja3MuXFxuMTI5MTA6XFx0ICpcXG4xMjkxMTpcXHQgKiBQYXJhbWV0ZXJzOlxcbjEyOTEyOlxcdCAqIEBzb2NrOiBQb2ludGVyIHRvIHNvY2tldCB0byBiZSBkZXN0cm95ZWRcXG4xMjkxMzpcXHQgKlxcbjEyOTE0OlxcdCAqIFJldHVybjpcXG4xMjkxNTpcXHQgKiBPbiBlcnJvciwgbWF5IHJldHVybiBFT1BOT1RTVVBQLCBvciB3aGF0ZXZlciB0aGUgcHJvdG9jb2wgc3BlY2lmaWNcXG4xMjkxNjpcXHQgKiBkZXN0cm95IGhhbmRsZXIgcmV0dXJucy5cXG4xMjkxNzpcXHQgKiBFT1BOT1RTVVBQIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxcbjEyOTE4OlxcdCAqIDAgb3RoZXJ3aXNlXFxuMTI5MTk6XFx0ICovXFxuMTI5MjA6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxcbjEyOTIxOlxcdHtcXG4xMjkyMjpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilzb2NrO1xcbjEyOTIzOlxcdFxcbjEyOTI0OlxcdFxcdC8qIFRoZSBsb2NraW5nIHNlbWFudGljcyB0aGF0IGFsbG93IGZvciBzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgdGhlXFxuMTI5MjU6XFx0XFx0ICogZGVzdHJveSBoYW5kbGVycyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIFRDUCBhbmQgVURQLlxcbjEyOTI2OlxcdFxcdCAqIFN1cHBvcnRpbmcgcHJvdG9jb2xzIHdpbGwgbmVlZCB0byBhY3F1aXJlIHNvY2sgbG9jayBpbiB0aGUgQlBGIGNvbnRleHRcXG4xMjkyNzpcXHRcXHQgKiBwcmlvciB0byBpbnZva2luZyB0aGlzIGtmdW5jLlxcbjEyOTI4OlxcdFxcdCAqL1xcbjEyOTI5OlxcdFxcdGlmICghc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveSlcXG4xMjkzMDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTI5MzE6XFx0XFxuMTI5MzI6XFx0XFx0aWYgKHNrX2Z1bGxzb2NrKHNrKSBcXHUwMDI2XFx1MDAyNlxcbjEyOTMzOlxcdFxcdCAgICBzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjZcXG4xMjkzNDpcXHRcXHQgICAgc2stXFx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKVxcbjEyOTM1OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMjkzNjpcXHRcXG4xMjkzNzpcXHRcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG4xMjkzODpcXHR9XFxuMTI5Mzk6XFx0XFxuMTI5NDA6XFx0X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG4xMjk0MTpcXHRcXG4xMjk0MjpcXHRCVEZfS0ZVTkNTX1NUQVJUKGJwZl9za19pdGVyX2tmdW5jX2lkcylcXG4xMjk0MzpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfZGVzdHJveSlcXG4xMjk0NDpcXHRCVEZfS0ZVTkNTX0VORChicGZfc2tfaXRlcl9rZnVuY19pZHMpXFxuMTI5NDU6XFx0XFxuMTI5NDY6XFx0c3RhdGljIGludCB0cmFjaW5nX2l0ZXJfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbjEyOTQ3OlxcdHtcXG4xMjk0ODpcXHRcXHRpZiAoYnRmX2lkX3NldDhfY29udGFpbnMoXFx1MDAyNmJwZl9za19pdGVyX2tmdW5jX2lkcywga2Z1bmNfaWQpIFxcdTAwMjZcXHUwMDI2XFxuMTI5NDk6XFx0XFx0ICAgIHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlICE9IEJQRl9UUkFDRV9JVEVSKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjowOC43NjQwNDI4OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjUzNjkzMDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQlBGIFNvY2sgRGVzdHJ1Y3Rpb24gTWVjaGFuaXNtKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZvciBgYnBmX3NvY2tfZGVzdHJveWAuIEl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgYXZhaWxhYmlsaXR5IGluIHRoZSBrZXJuZWwsIHBhcnRpY3VsYXJseSB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JraW5nIGFuZCBCUEYgc3lzY2FsbHMuIEknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgd2hldGhlciB0aGUgZW50aXJlIGBuZXQvY29yZS9maWx0ZXIuY2AgZmlsZSBpcyBnYXRlZCBiZWhpbmQgc29tZSBjb25kaXRpb25hbCBvciBpZiBgYnBmX3NvY2tfZGVzdHJveWAgaXMgKmFsd2F5cyogYnVpbHQgaWYgYE5FVGAgYW5kIGBCUEZfU1lTQ0FMTGAgYXJlIGJvdGggZW5hYmxlZC4gTXkgaW5zdGluY3QgaXMgdG8gZXhhbWluZSB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYCBmb3IgdGhlIG1vc3QgZGVmaW5pdGl2ZSBhbnN3ZXIuIFRoYXQgc2hvdWxkIGhhdmUgdGhlIGJ1aWxkIHJ1bGVzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgcmVsZXZhbnQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCB3aWxsIGlsbHVtaW5hdGUgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIHRoYXQgZnVuY3Rpb24uIEZyb20gdGhlcmUgSSdsbCBiZSBhYmxlIHRvIHRlbGwgaWYgaXQncyBhbHdheXMgaW5jbHVkZWQgb3Igbm90LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM2OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6MTEuNDE3NzM5ODY0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA3NDU1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWx0ZXJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcXHRcXHQgICAgICs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlxcdFxcdFxcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cXHRcXHRcXHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6MTEuNDY1ODIyMjkxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxMTQ2NTk2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcywgZGlzdGlsbGVkIGludG8gYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBhcyB5b3UgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkcyBzb21lb25lIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgaW5uZXIgd29ya2luZ3M6XG5cbioqQ2hlY2tpbmcgQlBGIGFuZCBCVEYgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBCUEZfU1lTQ0FMTGAgaXMgZGVmaW5lZCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gYERFQlVHX0lORk9fQlRGYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIGxvZ2ljYWwgcGxhY2VzIHRvIGxvb2sgYXJlIGBpbml0L0tjb25maWdgIOKAkyB0aGF0J3Mgd2hlcmUgYSBsb3Qgb2YgdGhlIGluaXRpYWwgZmVhdHVyZXMgYXJlIGRlY2xhcmVkIOKAkyBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AsIHNpbmNlIHdlJ3JlIHNwZWNpZmljYWxseSB0YWxraW5nIGFib3V0IEJQRi4gTGV0J3Mgc3RhcnQgdGhlcmUuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIGluZGVwZW5kZW50bHkgYW5kIGlmIHRoZSBgREVCVUdfSU5GT19CVEZgIGlzIGNvbmRpdGlvbmFsbHkgYWZmZWN0ZWQuXG5cblRoZW4sIHRvIGJlIGVmZmljaWVudCwgaW5zdGVhZCBvZiBtYW51YWxseSBzaWZ0aW5nIHRocm91Z2ggdGhlIGZpbGUsIEknbGwgcXVpY2tseSB1c2UgYGdyZXBgIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIGJvdGggYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgbGluZXMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBhbHNvIHRoZSBicm9hZGVyIGNvZGViYXNlIHRvIHNlZSB3aGF0IGRlcGVuZHMgb24gdGhlbSwgb3Igd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLiBUaGlzIHdpbGwgaG9wZWZ1bGx5IHByb3ZpZGUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlaXIgcmVsYXRpb25zaGlwIGFuZCBlbnN1cmUgdGhlIGRlc2lyZWQgY29uZmlndXJhdGlvbnMgYXJlIHNldC4gVGhpcyBpcyB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IHRvIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTc0MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQyOjE1LjU4MDQ4NzI3NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NjM4ODc3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjoxNy4xNjY4ODIxOTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njc2MDc2MDU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEJURiBhbmQgS2Z1bmNzKipcblxuT2theSwgc28gSSdtIHdvbmRlcmluZyBhYm91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYENPTkZJR19ERUJVR19JTkZPX0JURmAgYW5kIGtlcm5lbCBmdW5jdGlvbnMg4oCTIGFyZSB3ZSB0cnVseSByZWxpYW50IG9uIEJURiBpbmZvcm1hdGlvbiBmb3Iga2Z1bmMgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldGAgdG8gc2VlIGhvdyBpdCdzIGRlZmluZWQgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2J0Zi5oYC4gVW5kZXJzdGFuZGluZyB0aGF0IHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdpbGwgbGlrZWx5IHNoZWQgbGlnaHQgb24gdGhlIGRlcGVuZGVuY3ksIG9yIGxhY2sgdGhlcmVvZiwgb24gdGhlIGRlYnVnIEJURiBkYXRhLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZGl2ZSBpbnRvIHRoZSBjb2RlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjE3NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQyOjIzLjkyNzY0NTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvYnRmLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTg1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTg1OlxcdGludCBidGZfa2Z1bmNfY2hlY2tfZmxhZyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBrZnVuY19idGZfaWQsIHUzMiBmbGFnKTtcXG4gNTg2OlxcdGJvb2wgYnRmX2tmdW5jX2lzX2FsbG93ZWQoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIga2Z1bmNfYnRmX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbiA1ODc6XFx0dTMyICpidGZfa2Z1bmNfaXNfbW9kaWZ5X3JldHVybihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBrZnVuY19idGZfaWQsXFxuIDU4ODpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbiA1ODk6XFx0aW50IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSxcXG4gNTkwOlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0ICpzKTtcXG4gNTkxOlxcdGludCByZWdpc3Rlcl9idGZfZm1vZHJldF9pZF9zZXQoY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgKmtzZXQpO1xcbiA1OTI6XFx0czMyIGJ0Zl9maW5kX2R0b3Jfa2Z1bmMoc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkKTtcXG4gNTkzOlxcdGludCByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3MoY29uc3Qgc3RydWN0IGJ0Zl9pZF9kdG9yX2tmdW5jICpkdG9ycywgdTMyIGFkZF9jbnQsXFxuIDU5NDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbW9kdWxlICpvd25lcik7XFxuIDU5NTpcXHRzdHJ1Y3QgYnRmX3N0cnVjdF9tZXRhICpidGZfZmluZF9zdHJ1Y3RfbWV0YShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfaWQpO1xcbiA1OTY6XFx0Ym9vbCBidGZfaXNfcHJvamVjdGlvbl9vZihjb25zdCBjaGFyICpwbmFtZSwgY29uc3QgY2hhciAqdG5hbWUpO1xcbiA1OTc6XFx0Ym9vbCBidGZfaXNfcHJvZ19jdHhfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuIDU5ODpcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXFxuIDU5OTpcXHRcXHRcXHRcXHQgICBpbnQgYXJnKTtcXG4gNjAwOlxcdGludCBnZXRfa2Vybl9jdHhfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csIGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUpO1xcbiA2MDE6XFx0Ym9vbCBidGZfdHlwZXNfYXJlX3NhbWUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmMSwgdTMyIGlkMSxcXG4gNjAyOlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBidGYgKmJ0ZjIsIHUzMiBpZDIpO1xcbiA2MDM6XFx0aW50IGJ0Zl9jaGVja19pdGVyX2FyZyhzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuYywgaW50IGFyZ19pZHgpO1xcbiA2MDQ6XFx0XFxuIDYwNTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgYnRmX3R5cGVfaXNfc3RydWN0X3B0cihzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdClcXG4gNjA2OlxcdHtcXG4gNjA3OlxcdFxcdGlmICghYnRmX3R5cGVfaXNfcHRyKHQpKVxcbiA2MDg6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA2MDk6XFx0XFxuIDYxMDpcXHRcXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVxcdTAwM2V0eXBlLCBOVUxMKTtcXG4gNjExOlxcdFxcbiA2MTI6XFx0XFx0cmV0dXJuIGJ0Zl90eXBlX2lzX3N0cnVjdCh0KTtcXG4gNjEzOlxcdH1cXG4gNjE0OlxcdCNlbHNlXFxuIDYxNTpcXHRzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYnRmX3R5cGVfYnlfaWQoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbiA2MTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHUzMiB0eXBlX2lkKVxcbiA2MTc6XFx0e1xcbiA2MTg6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDYxOTpcXHR9XFxuIDYyMDpcXHRcXG4gNjIxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBidGZfc2V0X2Jhc2VfYnRmKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0ZiAqYmFzZV9idGYpXFxuIDYyMjpcXHR7XFxuIDYyMzpcXHR9XFxuIDYyNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6MjMuOTI3ODMzNzZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEzMzE2Njc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBCVEYgaW4gYGluY2x1ZGUvbGludXgvYnRmLmhgKipcblxuT2theSwgSSdtIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgQlRGIHN0dWZmIGJldHRlci4gU3BlY2lmaWNhbGx5LCB0aGVyZSdzIHNvbWV0aGluZyBpbnRlcmVzdGluZyBhcm91bmQgbGluZSA1ODUgaW4gdGhlIGBpbmNsdWRlL2xpbnV4L2J0Zi5oYCBmaWxlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB3aGF0J3MgZGVmaW5lZCBpbiB0aGUgYGlmZGVmYCBibG9jayBpbW1lZGlhdGVseSAqYWJvdmUqIHRoYXQgbGluZS4gSSdtIGFzc3VtaW5nIGl0IHJlbGF0ZXMgdG8gYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBmZWF0dXJlIG9yIHBsYXRmb3JtLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbWFnaWMgaGFwcGVucywgYW5kIHVuZGVyc3RhbmRpbmcgdGhhdCBsb2dpYyB3aWxsIGdpdmUgbWUgc29tZSBjb250ZXh0IGJlZm9yZSBJIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUgY29kZSBpbiB0aGUgYXJlYSBvZiBpbnRlcmVzdCwgd2hpY2ggaXMgbGlrZWx5IGRlcGVuZGVudCBvbiB0aGF0IGNvbmRpdGlvbmFsIGxvZ2ljLiBJIGFudGljaXBhdGUgdGhhdCB0aGUgYCNpZmRlZmAgd2lsbCBsaWtlbHkgY29uZGl0aW9uIGluY2x1c2lvbiBvZiBvdGhlciByZWxldmFudCBoZWFkZXJzLCBkZWNsYXJhdGlvbnMsIG9yIG1heWJlIGV2ZW4gZnVuY3Rpb24gZGVmaW5pdGlvbnMgdGhhdCBJIG5lZWQgZm9yIGZ1bGwgY29tcHJlaGVuc2lvbiBvZiB0aGUgY29kZSdzIGJlaGF2aW9yLiBUaW1lIHRvIG9wZW4gdGhlIGZpbGUgYW5kIHRha2UgYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzMxNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6MjYuMDYxMDAzOTkzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvYnRmLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTUwOlxcdGVudW0gYnRmX2ZpZWxkX2l0ZXJfa2luZCB7XFxuIDU1MTpcXHRcXHRCVEZfRklFTERfSVRFUl9JRFMsXFxuIDU1MjpcXHRcXHRCVEZfRklFTERfSVRFUl9TVFJTLFxcbiA1NTM6XFx0fTtcXG4gNTU0OlxcdFxcbiA1NTU6XFx0c3RydWN0IGJ0Zl9maWVsZF9kZXNjIHtcXG4gNTU2OlxcdFxcdC8qIG9uY2UtcGVyLXR5cGUgb2Zmc2V0cyAqL1xcbiA1NTc6XFx0XFx0aW50IHRfb2ZmX2NudCwgdF9vZmZzWzJdO1xcbiA1NTg6XFx0XFx0LyogbWVtYmVyIHN0cnVjdCBzaXplLCBvciB6ZXJvLCBpZiBubyBtZW1iZXJzICovXFxuIDU1OTpcXHRcXHRpbnQgbV9zejtcXG4gNTYwOlxcdFxcdC8qIHJlcGVhdGVkIHBlci1tZW1iZXIgb2Zmc2V0cyAqL1xcbiA1NjE6XFx0XFx0aW50IG1fb2ZmX2NudCwgbV9vZmZzWzFdO1xcbiA1NjI6XFx0fTtcXG4gNTYzOlxcdFxcbiA1NjQ6XFx0c3RydWN0IGJ0Zl9maWVsZF9pdGVyIHtcXG4gNTY1OlxcdFxcdHN0cnVjdCBidGZfZmllbGRfZGVzYyBkZXNjO1xcbiA1NjY6XFx0XFx0dm9pZCAqcDtcXG4gNTY3OlxcdFxcdGludCBtX2lkeDtcXG4gNTY4OlxcdFxcdGludCBvZmZfaWR4O1xcbiA1Njk6XFx0XFx0aW50IHZsZW47XFxuIDU3MDpcXHR9O1xcbiA1NzE6XFx0XFxuIDU3MjpcXHQjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxuIDU3MzpcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmJ0Zl90eXBlX2J5X2lkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIHR5cGVfaWQpO1xcbiA1NzQ6XFx0dm9pZCBidGZfc2V0X2Jhc2VfYnRmKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0ZiAqYmFzZV9idGYpO1xcbiA1NzU6XFx0aW50IGJ0Zl9yZWxvY2F0ZShzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGYgKmJhc2VfYnRmLCBfX3UzMiAqKm1hcF9pZHMpO1xcbiA1NzY6XFx0aW50IGJ0Zl9maWVsZF9pdGVyX2luaXQoc3RydWN0IGJ0Zl9maWVsZF9pdGVyICppdCwgc3RydWN0IGJ0Zl90eXBlICp0LFxcbiA1Nzc6XFx0XFx0XFx0XFx0ZW51bSBidGZfZmllbGRfaXRlcl9raW5kIGl0ZXJfa2luZCk7XFxuIDU3ODpcXHRfX3UzMiAqYnRmX2ZpZWxkX2l0ZXJfbmV4dChzdHJ1Y3QgYnRmX2ZpZWxkX2l0ZXIgKml0KTtcXG4gNTc5OlxcdFxcbiA1ODA6XFx0Y29uc3QgY2hhciAqYnRmX25hbWVfYnlfb2Zmc2V0KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIG9mZnNldCk7XFxuIDU4MTpcXHRjb25zdCBjaGFyICpidGZfc3RyX2J5X29mZnNldChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBvZmZzZXQpO1xcbiA1ODI6XFx0c3RydWN0IGJ0ZiAqYnRmX3BhcnNlX3ZtbGludXgodm9pZCk7XFxuIDU4MzpcXHRzdHJ1Y3QgYnRmICpicGZfcHJvZ19nZXRfdGFyZ2V0X2J0Zihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbiA1ODQ6XFx0dTMyICpidGZfa2Z1bmNfZmxhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIga2Z1bmNfYnRmX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbiA1ODU6XFx0aW50IGJ0Zl9rZnVuY19jaGVja19mbGFnKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGtmdW5jX2J0Zl9pZCwgdTMyIGZsYWcpO1xcbiA1ODY6XFx0Ym9vbCBidGZfa2Z1bmNfaXNfYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBrZnVuY19idGZfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuIDU4NzpcXHR1MzIgKmJ0Zl9rZnVuY19pc19tb2RpZnlfcmV0dXJuKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGtmdW5jX2J0Zl9pZCxcXG4gNTg4OlxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuIDU4OTpcXHRpbnQgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjoyNi4wNjEwODQ1NDNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0NjE1MzczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBCUEYgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUgZm9yIEl0ZXJhdG9ycyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZm9jdXNpbmcgb24gZW5hYmxpbmcgQlBGIGl0ZXJhdG9ycywgcGFydGljdWxhcmx5IHRob3NlIHRvdWNoaW5nIG9uIFRDUC4gSSBrbm93IHRoYXQgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfTkVUYCwgYW5kIGBDT05GSUdfREVCVUdfSU5GT19CVEZgIGFyZSBkZWZpbml0ZWx5IGluIHBsYXkg4oCTIHRob3NlIGFyZSB0aGUgZm91bmRhdGlvbi4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIGNydWNpYWwgY29uZmlndXJhdGlvbnMgc3BlY2lmaWMgdG8gYEJQRl9UUkFDRV9JVEVSYCBvciB0aG9zZSByZWxhdGVkIHRvIHRoZSBgaXRlci90Y3BgIGZ1bmN0aW9uYWxpdHkuIFNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgc2VhcmNoIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIGBicGZfaXRlcl90Y3BgIG9yIGFueSBvdGhlciB1c2Ugb2YgaXRlcmF0b3JzIGluIHRoZSBCUEYgd29ybGQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDUwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjoyOC4zMDcyNDIwODdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTUzMTMwOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2l0ZXJfcmVnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0PTMwMD1maWxlLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvYnBmX2l0ZXJhdG9ycy5yc3QtMzAzLVxcbkRvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0OjMwNDogIHN0cnVjdCBicGZfaXRlcl9yZWcge1xcbkRvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0LTMwNS0gICAgICAgICAgICBjb25zdCBjaGFyICp0YXJnZXQ7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9icGZfaXRlcmF0b3JzLnJzdC0zMTYtXFxuRG9jdW1lbnRhdGlvbi9icGYvYnBmX2l0ZXJhdG9ycy5yc3Q6MzE3OkFmdGVyIGZpbGxpbmcgdGhlIGRhdGEgc3RydWN0dXJlIGZpZWxkcywgY2FsbCBgYGJwZl9pdGVyX3JlZ190YXJnZXQoKWBgIHRvXFxuRG9jdW1lbnRhdGlvbi9icGYvYnBmX2l0ZXJhdG9ycy5yc3QtMzE4LXJlZ2lzdGVyIHRoZSBpdGVyYXRvciB0byB0aGUgbWFpbiBCUEYgaXRlcmF0b3Igc3Vic3lzdGVtLlxcbkRvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0LTMxOS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9icGZfaXRlcmF0b3JzLnJzdDozMjA6VGhlIGZvbGxvd2luZyBpcyB0aGUgYnJlYWtkb3duIGZvciBlYWNoIGZpZWxkIGluIHN0cnVjdCBgYGJwZl9pdGVyX3JlZ2BgLlxcbkRvY3VtZW50YXRpb24vYnBmL2JwZl9pdGVyYXRvcnMucnN0LTMyMS1cXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9Mjk4MD1lbnVtIGJwZl9pdGVyX2ZlYXR1cmUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0yOTg0LSNkZWZpbmUgQlBGX0lURVJfQ1RYX0FSR19NQVggMlxcbmluY2x1ZGUvbGludXgvYnBmLmg6Mjk4NTpzdHJ1Y3QgYnBmX2l0ZXJfcmVnIHtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI5ODYtXFx0Y29uc3QgY2hhciAqdGFyZ2V0O1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0zMDA0PXN0cnVjdCBicGZfaXRlcl9fYnBmX21hcF9lbGVtIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzAxMC1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjMwMTE6aW50IGJwZl9pdGVyX3JlZ190YXJnZXQoY29uc3Qgc3RydWN0IGJwZl9pdGVyX3JlZyAqcmVnX2luZm8pO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6MzAxMjp2b2lkIGJwZl9pdGVyX3VucmVnX3RhcmdldChjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfcmVnICpyZWdfaW5mbyk7XFxuaW5jbHVkZS9saW51eC9icGYuaC0zMDEzLWludCBicGZfaXRlcl9wcm9nX3N1cHBvcnRlZChzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbi0tXFxua2VybmVsL2JwZi9icGZfaXRlci5jPTEwPXN0cnVjdCBicGZfaXRlcl90YXJnZXRfaW5mbyB7XFxua2VybmVsL2JwZi9icGZfaXRlci5jLTExLVxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6MTI6XFx0Y29uc3Qgc3RydWN0IGJwZl9pdGVyX3JlZyAqcmVnX2luZm87XFxua2VybmVsL2JwZi9icGZfaXRlci5jLTEzLVxcdHUzMiBidGZfaWQ7XFx0LyogY2FjaGVkIHZhbHVlICovXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9MjgzPWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnBmX2l0ZXJfZm9wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy0yOTEtICogYSBjb25zdCBzdGF0aWMgdmFyaWFibGUgYW5kIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0b1xcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzoyOTI6ICogYnBmX2l0ZXJfcmVnX3RhcmdldCgpLlxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy0yOTMtICovXFxua2VybmVsL2JwZi9icGZfaXRlci5jOjI5NDppbnQgYnBmX2l0ZXJfcmVnX3RhcmdldChjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfcmVnICpyZWdfaW5mbylcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMjk1LXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy0zMTEtXFxua2VybmVsL2JwZi9icGZfaXRlci5jOjMxMjp2b2lkIGJwZl9pdGVyX3VucmVnX3RhcmdldChjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfcmVnICpyZWdfaW5mbylcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMzEzLXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYz0zNzA9YnBmX2l0ZXJfZ2V0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMzc3LVxcdFxcdGlmICh0aW5mby1cXHUwMDNlYnRmX2lkID09IHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXR0YWNoX2J0Zl9pZCkge1xcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzozNzg6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9pdGVyX3JlZyAqcmVnX2luZm87XFxua2VybmVsL2JwZi9icGZfaXRlci5jLTM3OS1cXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYz0yODQ9REVGSU5FX0JQRl9JVEVSX0ZVTkMoY2dyb3VwLCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0yODYtXFxua2VybmVsL2JwZi9jZ3JvdXBfaXRlci5jOjI4NzpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfY2dyb3VwX3JlZ19pbmZvID0ge1xcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0yODgtXFx0LnRhcmdldFxcdFxcdFxcdD0gXFxcImNncm91cFxcXCIsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmM9MzAyPXN0YXRpYyBpbnQgX19pbml0IGJwZl9jZ3JvdXBfaXRlcl9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cF9pdGVyLmMtMzA0LVxcdGJwZl9jZ3JvdXBfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9IGJwZl9jZ3JvdXBfYnRmX2lkWzBdO1xcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYzozMDU6XFx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNmJwZl9jZ3JvdXBfcmVnX2luZm8pO1xcbmtlcm5lbC9icGYvY2dyb3VwX2l0ZXIuYy0zMDYtfVxcbi0tXFxua2VybmVsL2JwZi9kbWFidWZfaXRlci5jPTExNj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGRtYWJ1Zl9pdGVyX3NlcV9pbmZvID0ge1xcbi0tXFxua2VybmVsL2JwZi9kbWFidWZfaXRlci5jLTEyMi1cXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmM6MTIzOnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGJwZl9kbWFidWZfcmVnX2luZm8gPSB7XFxua2VybmVsL2JwZi9kbWFidWZfaXRlci5jLTEyNC1cXHQudGFyZ2V0XFx0XFx0XFx0PSBcXFwiZG1hYnVmXFxcIixcXG4tLVxcbmtlcm5lbC9icGYvZG1hYnVmX2l0ZXIuYz0xMzg9c3RhdGljIGludCBfX2luaXQgZG1hYnVmX2l0ZXJfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL2JwZi9kbWFidWZfaXRlci5jLTE0MC1cXHRicGZfZG1hYnVmX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSBicGZfZG1hYnVmX2J0Zl9pZFswXTtcXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmM6MTQxOlxcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFxcdTAwMjZicGZfZG1hYnVmX3JlZ19pbmZvKTtcXG5rZXJuZWwvYnBmL2RtYWJ1Zl9pdGVyLmMtMTQyLX1cXG4tLVxcbmtlcm5lbC9icGYva21lbV9jYWNoZV9pdGVyLmM9MjE3PURFRklORV9CUEZfSVRFUl9GVU5DKGttZW1fY2FjaGUsIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxcbi0tXFxua2VybmVsL2JwZi9rbWVtX2NhY2hlX2l0ZXIuYy0yMTktXFxua2VybmVsL2JwZi9rbWVtX2NhY2hlX2l0ZXIuYzoyMjA6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX2ttZW1fY2FjaGVfcmVnX2luZm8gPSB7XFxua2VybmVsL2JwZi9rbWVtX2NhY2hlX2l0ZXIuYy0yMjEtXFx0LnRhcmdldFxcdFxcdFxcdD0gXFxcImttZW1fY2FjaGVcXFwiLFxcbi0tXFxua2VybmVsL2JwZi9rbWVtX2NhY2hlX2l0ZXIuYz0yMzI9c3RhdGljIGludCBfX2luaXQgYnBmX2ttZW1fY2FjaGVfaXRlcl9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2ttZW1fY2FjaGVfaXRlci5jLTIzNC1cXHRicGZfa21lbV9jYWNoZV9yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID0gYnBmX2ttZW1fY2FjaGVfYnRmX2lkWzBdO1xcbmtlcm5lbC9icGYva21lbV9jYWNoZV9pdGVyLmM6MjM1OlxcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFxcdTAwMjZicGZfa21lbV9jYWNoZV9yZWdfaW5mbyk7XFxua2VybmVsL2JwZi9rbWVtX2NhY2hlX2l0ZXIuYy0yMzYtfVxcbi0tXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYz04Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGJwZl9saW5rX3NlcV9pbmZvID0ge1xcbi0tXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYy04OS1cXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jOjkwOnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGJwZl9saW5rX3JlZ19pbmZvID0ge1xcbmtlcm5lbC9icGYvbGlua19pdGVyLmMtOTEtXFx0LnRhcmdldFxcdFxcdFxcdD0gXFxcImJwZl9saW5rXFxcIixcXG4tLVxcbmtlcm5lbC9icGYvbGlua19pdGVyLmM9MTAwPXN0YXRpYyBpbnQgX19pbml0IGJwZl9saW5rX2l0ZXJfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYy0xMDItXFx0YnBmX2xpbmtfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9ICpidGZfYnBmX2xpbmtfaWQ7XFxua2VybmVsL2JwZi9saW5rX2l0ZXIuYzoxMDM6XFx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNmJwZl9saW5rX3JlZ19pbmZvKTtcXG5rZXJuZWwvYnBmL2xpbmtfaXRlci5jLTEwNC19XFxuLS1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM9ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBicGZfbWFwX3NlcV9pbmZvID0ge1xcbi0tXFxua2VybmVsL2JwZi9tYXBfaXRlci5jLTg5LVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYzo5MDpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfbWFwX3JlZ19pbmZvID0ge1xcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy05MS1cXHQudGFyZ2V0XFx0XFx0XFx0PSBcXFwiYnBmX21hcFxcXCIsXFxuLS1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM9MTY5PURFRklORV9CUEZfSVRFUl9GVU5DKGJwZl9tYXBfZWxlbSwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXFxuLS1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMTcxLVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYzoxNzI6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX21hcF9lbGVtX3JlZ19pbmZvID0ge1xcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xNzMtXFx0LnRhcmdldFxcdFxcdFxcdD0gXFxcImJwZl9tYXBfZWxlbVxcXCIsXFxuLS1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM9MTg3PXN0YXRpYyBpbnQgX19pbml0IGJwZl9tYXBfaXRlcl9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMTkxLVxcdGJwZl9tYXBfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9ICpidGZfYnBmX21hcF9pZDtcXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM6MTkyOlxcdHJldCA9IGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNmJwZl9tYXBfcmVnX2luZm8pO1xcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xOTMtXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xOTUtXFxua2VybmVsL2JwZi9tYXBfaXRlci5jOjE5NjpcXHRyZXR1cm4gYnBmX2l0ZXJfcmVnX3RhcmdldChcXHUwMDI2YnBmX21hcF9lbGVtX3JlZ19pbmZvKTtcXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMTk3LX1cXG4tLVxcbmtlcm5lbC9icGYvcHJvZ19pdGVyLmM9ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBicGZfcHJvZ19zZXFfaW5mbyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvcHJvZ19pdGVyLmMtODktXFxua2VybmVsL2JwZi9wcm9nX2l0ZXIuYzo5MDpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyBicGZfcHJvZ19yZWdfaW5mbyA9IHtcXG5rZXJuZWwvYnBmL3Byb2dfaXRlci5jLTkxLVxcdC50YXJnZXRcXHRcXHRcXHQ9IFxcXCJicGZfcHJvZ1xcXCIsXFxuLS1cXG5rZXJuZWwvYnBmL3Byb2dfaXRlci5jPTEwMD1zdGF0aWMgaW50IF9faW5pdCBicGZfcHJvZ19pdGVyX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9icGYvcHJvZ19pdGVyLmMtMTAyLVxcdGJwZl9wcm9nX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSAqYnRmX2JwZl9wcm9nX2lkO1xcbmtlcm5lbC9icGYvcHJvZ19pdGVyLmM6MTAzOlxcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFxcdTAwMjZicGZfcHJvZ19yZWdfaW5mbyk7XFxua2VybmVsL2JwZi9wcm9nX2l0ZXIuYy0xMDQtfVxcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz02ODQ9c3RhdGljIHZvaWQgYnBmX2l0ZXJfdGFza19zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eCwgc3RydWN0IHNlcV9maWxlICpzZXEpXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTY5Mi1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjY5MzpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyB0YXNrX3JlZ19pbmZvID0ge1xcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtNjk0LVxcdC50YXJnZXRcXHRcXHRcXHQ9IFxcXCJ0YXNrXFxcIixcXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM9NzA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gdGFza19maWxlX3NlcV9pbmZvID0ge1xcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy03MTMtXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzo3MTQ6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgdGFza19maWxlX3JlZ19pbmZvID0ge1xcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtNzE1LVxcdC50YXJnZXRcXHRcXHRcXHQ9IFxcXCJ0YXNrX2ZpbGVcXFwiLFxcbi0tXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz03MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyB0YXNrX3ZtYV9zZXFfaW5mbyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtNzM2LVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmM6NzM3OnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIHRhc2tfdm1hX3JlZ19pbmZvID0ge1xcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtNzM4LVxcdC50YXJnZXRcXHRcXHRcXHQ9IFxcXCJ0YXNrX3ZtYVxcXCIsXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jPTEyMDI9c3RhdGljIGludCBfX2luaXQgdGFza19pdGVyX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTIxMi1cXHR0YXNrX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSBidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9UQVNLXTtcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjEyMTM6XFx0cmV0ID0gYnBmX2l0ZXJfcmVnX3RhcmdldChcXHUwMDI2dGFza19yZWdfaW5mbyk7XFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMjE0LVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEyMTgtXFx0dGFza19maWxlX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1sxXS5idGZfaWQgPSBidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9GSUxFXTtcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjEyMTk6XFx0cmV0ID0gIGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNnRhc2tfZmlsZV9yZWdfaW5mbyk7XFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMjIwLVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTEyMjQtXFx0dGFza192bWFfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzFdLmJ0Zl9pZCA9IGJ0Zl90cmFjaW5nX2lkc1tCVEZfVFJBQ0lOR19UWVBFX1ZNQV07XFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzoxMjI1OlxcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFxcdTAwMjZ0YXNrX3ZtYV9yZWdfaW5mbyk7XFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMjI2LX1cXG4tLVxcbmtlcm5lbC9rYWxsc3ltcy5jPTg1ND1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGtzeW1faXRlcl9zZXFfaW5mbyA9IHtcXG4tLVxcbmtlcm5lbC9rYWxsc3ltcy5jLTg2MC1cXG5rZXJuZWwva2FsbHN5bXMuYzo4NjE6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcga3N5bV9pdGVyX3JlZ19pbmZvID0ge1xcbmtlcm5lbC9rYWxsc3ltcy5jLTg2Mi1cXHQudGFyZ2V0ICAgICAgICAgICAgICAgICA9IFxcXCJrc3ltXFxcIixcXG4tLVxcbmtlcm5lbC9rYWxsc3ltcy5jPTg3ND1zdGF0aWMgaW50IF9faW5pdCBicGZfa3N5bV9pdGVyX3JlZ2lzdGVyKHZvaWQpXFxuLS1cXG5rZXJuZWwva2FsbHN5bXMuYy04NzYtXFx0a3N5bV9pdGVyX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSAqYnRmX2tzeW1faXRlcl9pZDtcXG5rZXJuZWwva2FsbHN5bXMuYzo4Nzc6XFx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNmtzeW1faXRlcl9yZWdfaW5mbyk7XFxua2VybmVsL2thbGxzeW1zLmMtODc4LX1cXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gaXRlcl9zZXFfaW5mbyA9IHtcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODk3LVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODk4OnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mbyA9IHtcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg5OS1cXHQudGFyZ2V0XFx0XFx0XFx0PSBcXFwiYnBmX3NrX3N0b3JhZ2VfbWFwXFxcIixcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9OTE0PXN0YXRpYyBpbnQgX19pbml0IGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2luaXQodm9pZClcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE3LVxcdFxcdGJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tdO1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6OTE4OlxcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFxcdTAwMjZicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8pO1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE5LX1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTk2Nj1zdGF0aWMgdm9pZCBzb2NrX21hcF9pdGVyX2RldGFjaF90YXJnZXQoc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5NzAtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxOTcxOnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIHNvY2tfbWFwX2l0ZXJfcmVnID0ge1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTk3Mi1cXHQudGFyZ2V0XFx0XFx0XFx0PSBcXFwic29ja21hcFxcXCIsXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTE5ODY9c3RhdGljIGludCBfX2luaXQgYnBmX3NvY2ttYXBfaXRlcl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5ODktXFx0XFx0YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS107XFxubmV0L2NvcmUvc29ja19tYXAuYzoxOTkwOlxcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFxcdTAwMjZzb2NrX21hcF9pdGVyX3JlZyk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTkxLX1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzYxNj1icGZfaXRlcl90Y3BfZ2V0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjI4LVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzYyOTpzdGF0aWMgc3RydWN0IGJwZl9pdGVyX3JlZyB0Y3BfcmVnX2luZm8gPSB7XFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjMwLVxcdC50YXJnZXRcXHRcXHRcXHQ9IFxcXCJ0Y3BcXFwiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjM5LVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzY0MDpzdGF0aWMgdm9pZCBfX2luaXQgYnBmX2l0ZXJfcmVnaXN0ZXIodm9pZClcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM2NDEte1xcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzY0Mi1cXHR0Y3BfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9IGJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tfQ09NTU9OXTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjM2NDM6XFx0aWYgKGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNnRjcF9yZWdfaW5mbykpXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjQ0LVxcdFxcdHByX3dhcm4oXFxcIldhcm5pbmc6IGNvdWxkIG5vdCByZWdpc3RlciBicGYgaXRlcmF0b3IgdGNwXFxcXG5cXFwiKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzY0OT12b2lkIF9faW5pdCB0Y3BfdjRfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNjc0LSNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjM2NzU6XFx0YnBmX2l0ZXJfcmVnaXN0ZXIoKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM2NzYtI2VuZGlmXFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zODgyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gdWRwX3NlcV9pbmZvID0ge1xcbi0tXFxubmV0L2lwdjQvdWRwLmMtMzg4OC1cXG5uZXQvaXB2NC91ZHAuYzozODg5OnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIHVkcF9yZWdfaW5mbyA9IHtcXG5uZXQvaXB2NC91ZHAuYy0zODkwLVxcdC50YXJnZXRcXHRcXHRcXHQ9IFxcXCJ1ZHBcXFwiLFxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMzg5OC1cXG5uZXQvaXB2NC91ZHAuYzozODk5OnN0YXRpYyB2b2lkIF9faW5pdCBicGZfaXRlcl9yZWdpc3Rlcih2b2lkKVxcbm5ldC9pcHY0L3VkcC5jLTM5MDAte1xcbm5ldC9pcHY0L3VkcC5jLTM5MDEtXFx0dWRwX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSBidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9VRFBdO1xcbm5ldC9pcHY0L3VkcC5jOjM5MDI6XFx0aWYgKGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNnVkcF9yZWdfaW5mbykpXFxubmV0L2lwdjQvdWRwLmMtMzkwMy1cXHRcXHRwcl93YXJuKFxcXCJXYXJuaW5nOiBjb3VsZCBub3QgcmVnaXN0ZXIgYnBmIGl0ZXJhdG9yIHVkcFxcXFxuXFxcIik7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zOTA3PXZvaWQgX19pbml0IHVkcF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0zOTIxLSNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcXG5uZXQvaXB2NC91ZHAuYzozOTIyOlxcdGJwZl9pdGVyX3JlZ2lzdGVyKCk7XFxubmV0L2lwdjQvdWRwLmMtMzkyMy0jZW5kaWZcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9Njg5Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGlwdjZfcm91dGVfc2VxX2luZm8gPSB7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTY4OTgtXFxubmV0L2lwdjYvcm91dGUuYzo2ODk5OnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGlwdjZfcm91dGVfcmVnX2luZm8gPSB7XFxubmV0L2lwdjYvcm91dGUuYy02OTAwLVxcdC50YXJnZXRcXHRcXHRcXHQ9IFxcXCJpcHY2X3JvdXRlXFxcIixcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNjkwOC1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjY5MDk6c3RhdGljIGludCBfX2luaXQgYnBmX2l0ZXJfcmVnaXN0ZXIodm9pZClcXG5uZXQvaXB2Ni9yb3V0ZS5jLTY5MTAte1xcbm5ldC9pcHY2L3JvdXRlLmMtNjkxMS1cXHRpcHY2X3JvdXRlX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPSAqYnRmX2ZpYjZfaW5mb19pZDtcXG5uZXQvaXB2Ni9yb3V0ZS5jOjY5MTI6XFx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNmlwdjZfcm91dGVfcmVnX2luZm8pO1xcbm5ldC9pcHY2L3JvdXRlLmMtNjkxMy19XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTY5MzA9aW50IF9faW5pdCBpcDZfcm91dGVfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy02OTgwLSNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcXG5uZXQvaXB2Ni9yb3V0ZS5jOjY5ODE6XFx0cmV0ID0gYnBmX2l0ZXJfcmVnaXN0ZXIoKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTY5ODItXFx0aWYgKHJldClcXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz0yODk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gbmV0bGlua19zZXFfaW5mbyA9IHtcXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yOTAxLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoyOTAyOnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIG5ldGxpbmtfcmVnX2luZm8gPSB7XFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTI5MDMtXFx0LnRhcmdldFxcdFxcdFxcdD0gXFxcIm5ldGxpbmtcXFwiLFxcbi0tXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTI5MTEtXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjI5MTI6c3RhdGljIGludCBfX2luaXQgYnBmX2l0ZXJfcmVnaXN0ZXIodm9pZClcXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMtMjkxMy17XFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTI5MTQtXFx0bmV0bGlua19yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID0gKmJ0Zl9uZXRsaW5rX3NvY2tfaWQ7XFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjI5MTU6XFx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNm5ldGxpbmtfcmVnX2luZm8pO1xcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yOTE2LX1cXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz0yOTE5PXN0YXRpYyBpbnQgX19pbml0IG5ldGxpbmtfcHJvdG9faW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTI5MjctI2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoyOTI4OlxcdGVyciA9IGJwZl9pdGVyX3JlZ2lzdGVyKCk7XFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTI5MjktXFx0aWYgKGVycilcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0zOTA4PWJwZl9pdGVyX3VuaXhfZ2V0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLFxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTM5MjAtXFxubmV0L3VuaXgvYWZfdW5peC5jOjM5MjE6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgdW5peF9yZWdfaW5mbyA9IHtcXG5uZXQvdW5peC9hZl91bml4LmMtMzkyMi1cXHQudGFyZ2V0XFx0XFx0XFx0PSBcXFwidW5peFxcXCIsXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMzkzMS1cXG5uZXQvdW5peC9hZl91bml4LmM6MzkzMjpzdGF0aWMgdm9pZCBfX2luaXQgYnBmX2l0ZXJfcmVnaXN0ZXIodm9pZClcXG5uZXQvdW5peC9hZl91bml4LmMtMzkzMy17XFxubmV0L3VuaXgvYWZfdW5peC5jLTM5MzQtXFx0dW5peF9yZWdfaW5mby5jdHhfYXJnX2luZm9bMF0uYnRmX2lkID0gYnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfVU5JWF07XFxubmV0L3VuaXgvYWZfdW5peC5jOjM5MzU6XFx0aWYgKGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNnVuaXhfcmVnX2luZm8pKVxcbm5ldC91bml4L2FmX3VuaXguYy0zOTM2LVxcdFxcdHByX3dhcm4oXFxcIldhcm5pbmc6IGNvdWxkIG5vdCByZWdpc3RlciBicGYgaXRlcmF0b3IgdW5peFxcXFxuXFxcIik7XFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9Mzk0MD1zdGF0aWMgaW50IF9faW5pdCBhZl91bml4X2luaXQodm9pZClcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zOTY4LSNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcXG5uZXQvdW5peC9hZl91bml4LmM6Mzk2OTpcXHRicGZfaXRlcl9yZWdpc3RlcigpO1xcbm5ldC91bml4L2FmX3VuaXguYy0zOTcwLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjoyOS45NjI1NjM5MTVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY1NTM1ODM2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQYXRjaCBmb3IgRnV6emluZyBQcmlvcml0aXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgaW1wYWN0cyB0aGUgaW50ZXJhY3Rpb24gb2YgQlBGIHdpdGggbmV0d29yayBzb2NrZXRzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYEJQRl9TWVNDQUxMYCwgYE5FVGAsIGFuZCBgSU5FVGAgZnVuY3Rpb25hbGl0aWVzLiBNeSBpbml0aWFsIGNoZWNrIHdpdGggYEZvY3VzU3ltYm9sc2AgemVyb2VkIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIG1vZGlmaWVkOiBgYnBmX3NvY2tfZGVzdHJveWAgYW5kIHRoZSByZWxhdGVkIGB0Y3BfYWJvcnRgLiBUaGUgZGlyZWN0IGNhbGwgdG8gYHRjcF9hYm9ydGAgZnJvbSBgc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3lgIHdoZW4gYGJwZl9zb2NrX2Rlc3Ryb3lgIGlzIGludm9rZWQgZm9yIFRDUCBjb25uZWN0aW9ucywgaW5jbHVkaW5nIHRob3NlIGluIHRoZSB0aW1ld2FpdC9zeW5fcmVjdiBzdGF0ZXMsIGlzIGNyaXRpY2FsLiBXZSBhbHNvIGhhdmUgdG8gY29uc2lkZXIgYGluZXRfdHdza19kZXNjaGVkdWxlX3B1dGAgb3IgYGluZXRfY3NrX3JlcXNrX3F1ZXVlX2Ryb3BgLCB0aG91Z2ggYHRjcF9hYm9ydGAgaXMgdGhlIHByaW1hcnkgdGFyZ2V0LlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IGBicGZfc29ja19kZXN0cm95YCBpcyBpbmRlZWQgYSBkaXN0aW5jdCwgbm9uLWlubGluZWQga2Z1bmMgd2l0aGluIGB2bWxpbnV4YCwgZXhwb3J0ZWQgdmlhIEJURiwgc28gd2UgY2FuIGFkZHJlc3MgaXQgc3BlY2lmaWNhbGx5LiBBIHJldmlldyBvZiB0aGUgcGF0Y2ggaW5kaWNhdGVzIHRoYXQgdGhlIGNoYW5nZSBlbmNvbXBhc3NlcyBtb2RpZmljYXRpb25zIHRvIGBuZXQvY29yZS9maWx0ZXIuY2AgKHNwZWNpZmljYWxseSBgYnBmX3NvY2tfZGVzdHJveWApIGFuZCB0aGUgc2VsZnRlc3RzIGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvLi4uYCBkaXJlY3RvcnkuXG5cbk5vdywgbGV0J3MgY29uZmlndXJlIHRoZSBmdXp6aW5nIHJ1bi4gV2UncmUgc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAg4oCTIGFic29sdXRlbHkuIFRoZSAqcmVhc29uaW5nKiBpcyBjbGVhcjogdGhpcyBwYXRjaCBhbGxvd3MgdGhlIGRlc3RydWN0aW9uIG9mIG5vbi1mdWxseSBlc3RhYmxpc2hlZCBzb2NrZXRzLCBsaWtlIFRDUCB0aW1ld2FpdCBvciByZXF1ZXN0IHNvY2tldHMsIHRocm91Z2ggQlBGIGl0ZXJhdG9ycywgYWNoaWV2ZWQgYnkgY2hlY2tpbmcgYHNrX2Z1bGxzb2NrKClgIGJlZm9yZSBwcm90b2NvbCB2ZXJpZmljYXRpb24uIE15IGBGb2N1c1N5bWJvbHNgIGxpc3QgaXM6IGBbXCJicGZfc29ja19kZXN0cm95XCIsIFwidGNwX2Fib3J0XCJdYC4gVGhlIHJlcXVpcmVkIGBFbmFibGVDb25maWdzYCBhcmU6IGBbXCJCUEZfU1lTQ0FMTFwiLCBcIk5FVFwiLCBcIklORVRcIiwgXCJERUJVR19JTkZPX0JURlwiXWAuIEZpbmFsbHksIEkgY29uZmlybWVkIHRoZXJlIGFyZSBubyBgQ09ORklHX2AgcHJlZml4ZXMuIEV2ZXJ5dGhpbmcgbG9va3Mgc29saWQuIEkgYW0gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA1NSwiT3V0cHV0VG9rZW5zIjoxNjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6MzUuNjE3OTI3NTQ3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI4MzY1NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NvY2tfZGVzdHJveVwiLFxuICAgIFwidGNwX2Fib3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlYWNoYWJsZSBCUEYga2Z1bmMgYGJwZl9zb2NrX2Rlc3Ryb3lgIHRvIHN1cHBvcnQgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIGFuZCByZXF1ZXN0IHNvY2tldHMpIGJ5IG9ubHkgY2hlY2tpbmcgdGhlIHByb3RvY29sIG9uIGZ1bGwgc29ja2V0cyAoYHNrX2Z1bGxzb2NrYCkuIFRoaXMgYWxsb3dzIEJQRiBpdGVyYXRvciBwcm9ncmFtcyB0byBpbnZva2Ugc29ja2V0IGRlc3RydWN0aW9uIChgZGlhZ19kZXN0cm95YCAvIGB0Y3BfYWJvcnRgKSBvbiB0aW1ld2FpdCBzb2NrZXRzIGFuZCBzeW4tcmVjdiByZXF1ZXN0cywgd2hpY2ggY2FuIHVuY292ZXIgcmFjZSBjb25kaXRpb25zIG9yIHN0YXRlLWhhbmRsaW5nIGlzc3VlcyBkdXJpbmcgc29ja2V0IHRlYXJkb3duLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NvY2tfZGVzdHJveVwiLFxuICAgIFwidGNwX2Fib3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlYWNoYWJsZSBCUEYga2Z1bmMgYGJwZl9zb2NrX2Rlc3Ryb3lgIHRvIHN1cHBvcnQgbm9uLWZ1bGwgc29ja2V0cyAoc3VjaCBhcyBUQ1AgVElNRV9XQUlUIGFuZCByZXF1ZXN0IHNvY2tldHMpIGJ5IG9ubHkgY2hlY2tpbmcgdGhlIHByb3RvY29sIG9uIGZ1bGwgc29ja2V0cyAoYHNrX2Z1bGxzb2NrYCkuIFRoaXMgYWxsb3dzIEJQRiBpdGVyYXRvciBwcm9ncmFtcyB0byBpbnZva2Ugc29ja2V0IGRlc3RydWN0aW9uIChgZGlhZ19kZXN0cm95YCAvIGB0Y3BfYWJvcnRgKSBvbiB0aW1ld2FpdCBzb2NrZXRzIGFuZCBzeW4tcmVjdiByZXF1ZXN0cywgd2hpY2ggY2FuIHVuY292ZXIgcmFjZSBjb25kaXRpb25zIG9yIHN0YXRlLWhhbmRsaW5nIGlzc3VlcyBkdXJpbmcgc29ja2V0IHRlYXJkb3duLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MjozNS43MDA3NzU1MDFaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDIwNzM4MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6MzUuNzAxMzU3MDQxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDYwMjAxNTE5MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYga2Z1bmMgYGJwZl9zb2NrX2Rlc3Ryb3koKWAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBzdXBwb3J0IG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBzb2NrZXRzKSBieSBjaGVja2luZyBgc2tfZnVsbHNvY2soc2spYCBiZWZvcmUgaW5zcGVjdGluZyBgc2stXFx1MDAzZXNrX3Byb3RvY29sYCwgYW5kIGludm9rZXMgYHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRClgLiBUaGUgYWNjb21wYW55aW5nIGNoYW5nZXMgYXJlIEJQRiBzZWxmdGVzdHMuXFxuXFxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlcnNwYWNlICh2aWEgY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCwgZXRjLiksIGFuZCBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLlxcbi0gVGhlIHBvdGVudGlhbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggc29ja2V0IGRlc3RydWN0aW9uIChlLmcuLCBzb2NrZXQgbGlmZWN5Y2xlL3JlZmNvdW50aW5nIHJhY2VzLCBsb2NraW5nIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBkZXJlZmVyZW5jZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzLlxcbi0gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZWU0ODc0MzVkMTYxZTY4ZTdkOWZkYTcxN2YzNTQ0NDAwYmNlZDhiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxODo0MToyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDYxOTQwZTc1MzU1MjMuLmE0MWNjNjBhNDAxYTUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC0xMjkxMiw4ICsxMjkxMiw5IEBAIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbiAgKiBAc29jazogUG9pbnRlciB0byBzb2NrZXQgdG8gYmUgZGVzdHJveWVkXG4gICpcbiAgKiBSZXR1cm46XG4tICogT24gZXJyb3IsIG1heSByZXR1cm4gRVBST1RPTk9TVVBQT1JULCBFSU5WQUwuXG4tICogRVBST1RPTk9TVVBQT1JUIGlmIHByb3RvY29sIHNwZWNpZmljIGRlc3Ryb3kgaGFuZGxlciBpcyBub3Qgc3VwcG9ydGVkLlxuKyAqIE9uIGVycm9yLCBtYXkgcmV0dXJuIEVPUE5PVFNVUFAsIG9yIHdoYXRldmVyIHRoZSBwcm90b2NvbCBzcGVjaWZpY1xuKyAqIGRlc3Ryb3kgaGFuZGxlciByZXR1cm5zLlxuKyAqIEVPUE5PVFNVUFAgaWYgcHJvdG9jb2wgc3BlY2lmaWMgZGVzdHJveSBoYW5kbGVyIGlzIG5vdCBzdXBwb3J0ZWQuXG4gICogMCBvdGhlcndpc2VcbiAgKi9cbiBfX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spXG5AQCAtMTI5MjUsOCArMTI5MjYsMTIgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9zb2NrX2Rlc3Ryb3koc3RydWN0IHNvY2tfY29tbW9uICpzb2NrKVxuIFx0ICogU3VwcG9ydGluZyBwcm90b2NvbHMgd2lsbCBuZWVkIHRvIGFjcXVpcmUgc29jayBsb2NrIGluIHRoZSBCUEYgY29udGV4dFxuIFx0ICogcHJpb3IgdG8gaW52b2tpbmcgdGhpcyBrZnVuYy5cbiBcdCAqL1xuLVx0aWYgKCFzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveSB8fCAoc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdCAgIHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKSlcbitcdGlmICghc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkaWFnX2Rlc3Ryb3kpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGlmIChza19mdWxsc29jayhzaykgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdHJldHVybiBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrX2Rlc3Ryb3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG5pbmRleCA5YzExOTM4ZmU1OTdkLi5iOTBmYWI3MDczMzg2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja19kZXN0cm95LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2tfZGVzdHJveS5jXG5AQCAtMTEwLDYgKzExMCw3NCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3RjcF9zZXJ2ZXIoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuIFx0XHRjbG9zZShzZXJ2KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGVzdF90Y3BfdGltZXdhaXQoc3RydWN0IHNvY2tfZGVzdHJveV9wcm9nICpza2VsKVxuK3tcbitcdGludCBzZXJ2ID0gLTEsIGNsaWVuID0gLTEsIGFjY2VwdF9zZXJ2ID0gLTEsIG47XG4rXHRzdHJ1Y3QgdGltZXZhbCB0diA9IHt9O1xuK1x0Y2hhciBidWZbMV07XG4rXG4rXHRzZXJ2ID0gc3RhcnRfc2VydmVyKEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgTlVMTCwgMCwgMCk7XG4rXHRpZiAoIUFTU0VSVF9HRShzZXJ2LCAwLCBcInN0YXJ0X3NlcnZlclwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0Y2xpZW4gPSBjb25uZWN0X3RvX2ZkKHNlcnYsIDApO1xuK1x0aWYgKCFBU1NFUlRfR0UoY2xpZW4sIDAsIFwiY29ubmVjdF90b19mZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0YWNjZXB0X3NlcnYgPSBhY2NlcHQoc2VydiwgTlVMTCwgTlVMTCk7XG4rXHRpZiAoIUFTU0VSVF9HRShhY2NlcHRfc2VydiwgMCwgXCJzZXJ2IGFjY2VwdFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LypcbitcdCAqIEFjdGl2ZSBjbG9zZSBmcm9tIHRoZSBjbGllbnQsIHRoZW4gY2xvc2UgdGhlIHNlcnZlciBzaWRlLiBPbmNlXG4rXHQgKiByZWN2KCkgc2VlcyBFT0YgdGhlIHNlcnZlciBGSU4gaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCB0aGUgY2xpZW50XG4rXHQgKiBzb2NrIGlzIGluIFRJTUVfV0FJVC4gQmxvY2sgd2l0aG91dCB0aW1lb3V0IHNvIGEgbG9hZGVkIENJIGJveFxuK1x0ICogY2FuJ3QgcmFjZSB1cy5cbitcdCAqL1xuK1x0aWYgKCFBU1NFUlRfT0soc2V0c29ja29wdChjbGllbiwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFx1MDAyNnR2LFxuK1x0XHRcdFx0ICBzaXplb2YodHYpKSwgXCJjbGVhciByY3Z0aW1lb1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aWYgKCFBU1NFUlRfT0soc2h1dGRvd24oY2xpZW4sIFNIVVRfV1IpLCBcImNsaWVudCBzaHV0ZG93blwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LypcbitcdCAqIE1ha2Ugc3VyZSB0aGUgc2VydmVyIGhhcyBzZWVuIHRoZSBjbGllbnQgRklOIGJlZm9yZSBpdCBjbG9zZXMsXG4rXHQgKiBzbyB0aGUgdHdvIEZJTnMgbmV2ZXIgY3Jvc3MuXG4rXHQgKi9cbitcdG4gPSByZWN2KGFjY2VwdF9zZXJ2LCBidWYsIHNpemVvZihidWYpLCAwKTtcbitcdGlmICghQVNTRVJUX0VRKG4sIDAsIFwic2VydmVyIHJlY3YgRU9GXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRjbG9zZShhY2NlcHRfc2Vydik7XG4rXHRhY2NlcHRfc2VydiA9IC0xO1xuK1xuK1x0LyogYmxvY2sgdW50aWwgcmV0dXJuIEVPRiAqL1xuK1x0biA9IHJlY3YoY2xpZW4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuK1x0aWYgKCFBU1NFUlRfRVEobiwgMCwgXCJjbGllbnQgcmVjdiBFT0ZcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIFJ1biBpdGVyYXRvciBwcm9ncmFtIHRoYXQgZGVzdHJveXMgdGhlIHRpbWV3YWl0IGNsaWVudCBzb2NrLiAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQgPSAwO1xuK1x0c3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtXHUwMDNlcHJvZ3MuaXRlcl90Y3A2X3RpbWV3YWl0KTtcbitcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXR3X2ZvdW5kLCAxLCBcInRpbWV3YWl0IHNvY2sgZm91bmRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdEFTU0VSVF9PSyhza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19kZXN0cm95X2VyciwgXCJkZXN0cm95IHRpbWV3YWl0IHNvY2tcIik7XG4rXG4rXHQvKiBUaGUgZGVzdHJveWVkIHRpbWV3YWl0IHNvY2sgbXVzdCBiZSBnb25lLiAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldHdfZm91bmQgPSAwO1xuK1x0c3RhcnRfaXRlcl9zb2NrZXRzKHNrZWwtXHUwMDNlcHJvZ3MuaXRlcl90Y3A2X3RpbWV3YWl0KTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0d19mb3VuZCwgMCwgXCJ0aW1ld2FpdCBzb2NrIGRlc3Ryb3llZFwiKTtcbitcbitjbGVhbnVwOlxuK1x0aWYgKGNsaWVuICE9IC0xKVxuK1x0XHRjbG9zZShjbGllbik7XG4rXHRpZiAoYWNjZXB0X3NlcnYgIT0gLTEpXG4rXHRcdGNsb3NlKGFjY2VwdF9zZXJ2KTtcbitcdGlmIChzZXJ2ICE9IC0xKVxuK1x0XHRjbG9zZShzZXJ2KTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGVzdF91ZHBfY2xpZW50KHN0cnVjdCBzb2NrX2Rlc3Ryb3lfcHJvZyAqc2tlbClcbiB7XG4gXHRpbnQgc2VydiA9IC0xLCBjbGllbiA9IC0xLCBuID0gMDtcbkBAIC0yMDQsMTEgKzI3MiwxMiBAQCB2b2lkIHRlc3Rfc29ja19kZXN0cm95KHZvaWQpXG4gXHRcdHRlc3RfdGNwX2NsaWVudChza2VsKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidGNwX3NlcnZlclwiKSlcbiBcdFx0dGVzdF90Y3Bfc2VydmVyKHNrZWwpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ0Y3BfdGltZXdhaXRcIikpXG4rXHRcdHRlc3RfdGNwX3RpbWV3YWl0KHNrZWwpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ1ZHBfY2xpZW50XCIpKVxuIFx0XHR0ZXN0X3VkcF9jbGllbnQoc2tlbCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInVkcF9zZXJ2ZXJcIikpXG4gXHRcdHRlc3RfdWRwX3NlcnZlcihza2VsKTtcbi1cbiBcdFJVTl9URVNUUyhzb2NrX2Rlc3Ryb3lfcHJvZ19mYWlsKTtcbiBcbiBjbGVhbnVwOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zb2NrX2Rlc3Ryb3lfcHJvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbmluZGV4IDllMGJmN2E1NGNlYzkuLjBhODg4NzU0MzIxOGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc29ja19kZXN0cm95X3Byb2cuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3NvY2tfZGVzdHJveV9wcm9nLmNcbkBAIC03LDYgKzcsOCBAQFxuICNpbmNsdWRlIFwiYnBmX3RyYWNpbmdfbmV0LmhcIlxuIFxuIF9fYmUxNiBzZXJ2X3BvcnQgPSAwO1xuK2ludCB0d19mb3VuZCA9IDA7XG4raW50IHR3X2Rlc3Ryb3lfZXJyID0gMDtcbiBcbiBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNrKSBfX2tzeW07XG4gXG5AQCAtMTAwLDYgKzEwMiwzNCBAQCBpbnQgaXRlcl90Y3A2X3NlcnZlcihzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcIml0ZXIvdGNwXCIpXG4raW50IGl0ZXJfdGNwNl90aW1ld2FpdChzdHJ1Y3QgYnBmX2l0ZXJfX3RjcCAqY3R4KVxuK3tcbitcdHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tfY29tbW9uID0gY3R4LVx1MDAzZXNrX2NvbW1vbjtcbitcdF9fdTY0ICp2YWw7XG4rXHRpbnQga2V5ID0gMDtcbitcbitcdGlmICghc2tfY29tbW9uKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChza19jb21tb24tXHUwMDNlc2tjX2ZhbWlseSAhPSBBRl9JTkVUNilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIWJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2soc2tfY29tbW9uKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRjcF9jb25uX3NvY2tldHMsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXHQvKiBUaGUgdGltZXdhaXQgc29jayBpbmhlcml0cyB0aGUgY29va2llIG9mIHRoZSBjbG9zZWQgY2xpZW50IHNvY2suICovXG4rXHRpZiAoYnBmX2dldF9zb2NrZXRfY29va2llKHNrX2NvbW1vbikgIT0gKnZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR0d19mb3VuZCsrO1xuK1x0dHdfZGVzdHJveV9lcnIgPSBicGZfc29ja19kZXN0cm95KHNrX2NvbW1vbik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4gXG4gU0VDKFwiaXRlci91ZHBcIilcbiBpbnQgaXRlcl91ZHA2X2NsaWVudChzdHJ1Y3QgYnBmX2l0ZXJfX3VkcCAqY3R4KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6MzUuNzAxMzY3ODIxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkzMjQzNzA1MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFuYWx5c2lzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIGtlcm5lbCBwYXRjaCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0J3MgZGlnIGluLiBJIHNlZSB0aGV5J3ZlIG1vZGlmaWVkIHRoZSBgYnBmX3NvY2tfZGVzdHJveWAgZnVuY3Rpb24uIFRoZSBjb2RlJ3MgYmVlbiBzaW1wbGlmaWVkIGEgYml0LCBidXQgdGhlcmUncyBhIG5ldyBjaGVjayB1c2luZyBgc2tfZnVsbHNvY2soc2spYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgc2tfZnVsbHNvY2tgIGFjdHVhbGx5ICpkb2VzKiBhbmQsIGltcG9ydGFudGx5LCB0aGUgY29udGV4dHMgaW4gd2hpY2ggYGJwZl9zb2NrX2Rlc3Ryb3lgIGlzIGNhbGxlZCBhbmQgaG93IHRoZSBuZXcgY2hlY2sgaW50ZXJhY3RzIHdpdGggZGlmZmVyZW50IHNvY2tldCB0eXBlcy4gSSdtIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCBUQ1AgYW5kIFVEUCwgYXMgdGhlIGNvbW1lbnQgbWVudGlvbnMgcHJvdG9jb2wtc3BlY2lmaWMgbG9ja2luZyBzZW1hbnRpY3MuIFRoZSByZW1vdmVkIGNvbmRpdGlvbiBhbmQgYWRkZWQgY29uZGl0aW9uIGNvdWxkIGNoYW5nZSBiZWhhdmlvciBmb3Igc29tZSBwcm90b2NvbHMuXG5cbkknbSBnb2luZyB0byBxdWlja2x5IHNlYXJjaCBmb3IgdGhlIGRlZmluaXRpb24gb2YgYGJwZl9zb2NrX2Rlc3Ryb3lgLCBgc2tfZnVsbHNvY2tgLCBhbmQgYGRpYWdfZGVzdHJveWAgdXNpbmcgYGdyZXBwZXJgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGJlaGF2ZSBpbiB0aGUgcHJlc2VuY2Ugb2YgVENQIHRpbWV3YWl0IHNvY2tldHMsIG9yIGFueSBvdGhlciBraW5kIG9mIFwibm9uLWZ1bGxzb2NrXCIgc2NlbmFyaW9zLiBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIG1pZ2h0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBzYWZldHkgaXNzdWVzLCBlc3BlY2lhbGx5IHdpdGggdGhvc2UgZGVsaWNhdGUsIG9mdGVuIHRyYW5zaWVudCwgc3RhdGVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgc2hvdWxkIGFsbG93IG1lIHRvIG1ha2UgYW4gaW5mb3JtZWQgZGVjaXNpb24gYXMgdG8gd2hldGhlciBhIHNwZWNpYWxpemVkIGZ1enppbmcgY2FtcGFpZ24gaXMgbmVlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDc5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6NDUuMDI1NzQzNjIyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM4MTI4MzE5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgc2tfZnVsbHNvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQyOjQ2LjY2Mzg4Mzc2MVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTkyNjk5MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYHNrX2Z1bGxzb2NrYCBpbiBgaW5jbHVkZS9uZXQvc29jay5oYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgc2tfZnVsbHNvY2tgIGlzIGJlaW5nIHVzZWQuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBkZWZpbml0aW9uLCB3aGljaCBsaWtlbHkgbGl2ZXMgaW4gYGluY2x1ZGUvbmV0L3NvY2suaGAuIEknbSBob3BpbmcgaXQncyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIHN0cnVjdHVyZSBvciBtYWNybywgYW5kIHRoZSBoZWFkZXIgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBjb250ZXh0LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGBzb2NrYCBzdHJ1Y3R1cmUgaXRzZWxmLCBhbnkgYXNzb2NpYXRlZCBmbGFncyBvciBzdGF0ZXMsIGFuZCBob3cgaXQgcmVsYXRlcyB0byBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIGRhdGEgZmxvdywgYW5kIHNvY2tldCBsaWZlY3ljbGUgaW4gZ2VuZXJhbC4gSXQgd2lsbCBhbHNvIGJlIHVzZWZ1bCB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciB2YXJpYWJsZSwgYHNrX2Z1bGxzb2NrYCBoYXMgYmVlbiB1c2VkLCBzbyBJIGFtIGdvaW5nIHRvIG5lZWQgdG8gZG8gc29tZSBjb2RlIHNlYXJjaGVzIGJhc2VkIG9uIHRoaXMgaW5mb3JtYXRpb24uIExldCdzIHN0YXJ0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3OTIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0Mjo0OC44NTY1ODY1MloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5Mzg2MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tfZnVsbHNvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvc29jay5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3NvY2suaD0zMDE2PXNrYl9za19pc19wcmVmZXRjaGVkKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmgtMzAyNy0gKi9cXG5pbmNsdWRlL25ldC9zb2NrLmg6MzAyODpzdGF0aWMgaW5saW5lIGJvb2wgc2tfZnVsbHNvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbmluY2x1ZGUvbmV0L3NvY2suaC0zMDI5LXtcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0zMDM0PXNrX2lzX3JlZmNvdW50ZWQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTMwMzYtXFx0LyogT25seSBmdWxsIHNvY2tldHMgaGF2ZSBzay1cXHUwMDNlc2tfZmxhZ3MuICovXFxuaW5jbHVkZS9uZXQvc29jay5oOjMwMzc6XFx0cmV0dXJuICFza19mdWxsc29jayhzaykgfHwgIXNvY2tfZmxhZyhzaywgU09DS19SQ1VfRlJFRSk7XFxuaW5jbHVkZS9uZXQvc29jay5oLTMwMzgtfVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTMwNDE9c2tfcmVxdWVzdHNfd2lmaV9zdGF0dXMoc3RydWN0IHNvY2sgKnNrKVxcbmluY2x1ZGUvbmV0L3NvY2suaC0zMDQyLXtcXG5pbmNsdWRlL25ldC9zb2NrLmg6MzA0MzpcXHRyZXR1cm4gc2sgXFx1MDAyNlxcdTAwMjYgc2tfZnVsbHNvY2soc2spIFxcdTAwMjZcXHUwMDI2IHNvY2tfZmxhZyhzaywgU09DS19XSUZJX1NUQVRVUyk7XFxuaW5jbHVkZS9uZXQvc29jay5oLTMwNDQtfVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTMxMTY9c3RhdGljIGlubGluZSB2b2lkIHNrX3BhY2luZ19zaGlmdF91cGRhdGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxcbmluY2x1ZGUvbmV0L3NvY2suaC0zMTE3LXtcXG5pbmNsdWRlL25ldC9zb2NrLmg6MzExODpcXHRpZiAoIXNrIHx8ICFza19mdWxsc29jayhzaykgfHwgUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19wYWNpbmdfc2hpZnQpID09IHZhbClcXG5pbmNsdWRlL25ldC9zb2NrLmgtMzExOS1cXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQyOjQ4LjkwNTUzMTgzNloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTg0MTA2MzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBzb2NrLmhgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgbmV0d29yayBzb2NrZXQgYmVoYXZpb3IuIExldCdzIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbmV0L3NvY2suaGAuIEknbSBnb2luZyB0byBzdGFydCBhcm91bmQgbGluZSAzMDI4LiBIb3BlZnVsbHksIHRoYXQncyB3aGVyZSB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgYXJlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBhdCBhIGdyYW51bGFyIGxldmVsLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0Mjo1MC40ODk2NDAzNzlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L3NvY2suaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzMDIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMDIwOlxcdCNlbHNlXFxuMzAyMTpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMzAyMjpcXHQjZW5kaWYgLyogQ09ORklHX0lORVQgKi9cXG4zMDIzOlxcdH1cXG4zMDI0OlxcdFxcbjMwMjU6XFx0LyogVGhpcyBoZWxwZXIgY2hlY2tzIGlmIGEgc29ja2V0IGlzIGEgZnVsbCBzb2NrZXQsXFxuMzAyNjpcXHQgKiBpZSBfbm90XyBhIHRpbWV3YWl0IG9yIHJlcXVlc3Qgc29ja2V0LlxcbjMwMjc6XFx0ICovXFxuMzAyODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgc2tfZnVsbHNvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbjMwMjk6XFx0e1xcbjMwMzA6XFx0XFx0cmV0dXJuICgxIFxcdTAwM2NcXHUwMDNjIHNrLVxcdTAwM2Vza19zdGF0ZSkgXFx1MDAyNiB+KFRDUEZfVElNRV9XQUlUIHwgVENQRl9ORVdfU1lOX1JFQ1YpO1xcbjMwMzE6XFx0fVxcbjMwMzI6XFx0XFxuMzAzMzpcXHRzdGF0aWMgaW5saW5lIGJvb2xcXG4zMDM0OlxcdHNrX2lzX3JlZmNvdW50ZWQoc3RydWN0IHNvY2sgKnNrKVxcbjMwMzU6XFx0e1xcbjMwMzY6XFx0XFx0LyogT25seSBmdWxsIHNvY2tldHMgaGF2ZSBzay1cXHUwMDNlc2tfZmxhZ3MuICovXFxuMzAzNzpcXHRcXHRyZXR1cm4gIXNrX2Z1bGxzb2NrKHNrKSB8fCAhc29ja19mbGFnKHNrLCBTT0NLX1JDVV9GUkVFKTtcXG4zMDM4OlxcdH1cXG4zMDM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0Mjo1MC40ODk3ODEzOTlaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM0MjI5NjU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWx2aW5nIGludG8gU29ja2V0IFN0cnVjdHVyZXMgYW5kIERlc3RydWN0aW9uIE1lY2hhbmlzbXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBgYnBmX3NvY2tfZGVzdHJveWAgZnVuY3Rpb24gd2FzIGNoZWNraW5nIGBzay1cdTAwM2Vza19wcm90b2NvbGAsIGV2ZW4gdGhvdWdoIGl0IHNlZW1zIGxpa2UgdGhhdCBmaWVsZCBtaWdodCBub3QgYWx3YXlzIGJlIHJlbGlhYmxlIG9yIGV2ZW4gdmFsaWQgaW4gc29ja2V0cyB0aGF0IGFyZSBpbiB0aGUgYFRJTUVfV0FJVGAgb3IgYFJFUVVFU1RgIHN0YXRlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgc3RydWN0dXJlcyB0aGVtc2VsdmVzLCBwYXJ0aWN1bGFybHkgYHN0cnVjdCBzb2NrX2NvbW1vbmAsIGBzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrYCwgYW5kIGBzdHJ1Y3QgdGNwX3RpbWV3YWl0X3NvY2tgLiBTZWVpbmcgaG93IHRoZXNlIGFyZSBkZWZpbmVkIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgc29ja2V0IChgc2tgKSB3aWxsIGxpa2VseSBzaGVkIGxpZ2h0IG9uIHRoZSBpc3N1ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGVzZSBzb2NrZXRzIGFuZCB3aGVyZSBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIGZpdHMgaW4uXG5cbkZvbGxvd2luZyB0aGF0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcGF0aCB0aGUgc29ja2V0IHRha2VzIHRvIGJlIGRlc3Ryb3llZC4gVGhlcmVmb3JlLCBJIHdpbGwgc2VhcmNoIGZvciB0aGUgZnVuY3Rpb24gYGRpYWdfZGVzdHJveWAgYWNyb3NzIHRoZSBgbmV0L2AgZGlyZWN0b3J5IGFuZCBmdW5jdGlvbnMgc3VjaCBhcyBgdGNwX3R3c2tfZGlhZ19kZXN0cm95YCBvciBgdGNwX2RpYWdfZGVzdHJveWAgdG8gZ2V0IGEgc2Vuc2Ugb2YgdGhlIGRlc3RydWN0aW9uIHByb2Nlc3MuIEhvcGVmdWxseSwgdGhpcyB3aWxsIHRlbGwgbWUgd2hhdCB0aGUgZGVzdHJ1Y3Rpb24gcm91dGluZXMgZGVwZW5kIG9uLiBJdCBzaG91bGQgc2hvdyBpZiB0aGUgcHJvdG9jb2wgaXMgbmVlZGVkIG9yIG5vdC4gSSdtIGhvcGluZyB0byBwaW5wb2ludCB0aGUgZXhhY3QgbW9tZW50IG9yIGNvbnRleHQgd2hlcmUgdGhlIHByb3RvY29sIG1pZ2h0IGJlY29tZSB1bmF2YWlsYWJsZSBvciB1bmRlZmluZWQsIGFuZCB0aHVzLCB3aHkgdGhhdCBjaGVjayBpbiBgYnBmX3NvY2tfZGVzdHJveWAgbWlnaHQgaGF2ZSBjYXVzZWQgcHJvYmxlbXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiB3aGV0aGVyIHRoZSBjaGVjayB3YXMgbmVjZXNzYXJ5LCBhbmQgaG93IHdlIGNvdWxkIGhhbmRsZSB0aGUgc29ja2V0J3Mgc3RhdGVzIG1vcmUgcm9idXN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MzcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0Mjo1My44MzIwODAxNTJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxOTY5OTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpYWdfZGVzdHJveVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyOTIwPV9fYnBmX2tmdW5jIGludCBicGZfc29ja19kZXN0cm95KHN0cnVjdCBzb2NrX2NvbW1vbiAqc29jaylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyOTI4LVxcdCAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyOTI5OlxcdGlmICghc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkzMC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkzNi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjkzNzpcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjkzOC19XFxuLS1cXG5uZXQvY29yZS9zb2NrX2RpYWcuYz0xNDM9c3RhdGljIHZvaWQgc29ja19kaWFnX2Jyb2FkY2FzdF9kZXN0cm95X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2NvcmUvc29ja19kaWFnLmMtMTQ5LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxubmV0L2NvcmUvc29ja19kaWFnLmM6MTUwOlxcdGNvbnN0IGVudW0gc2tuZXRsaW5rX2dyb3VwcyBncm91cCA9IHNvY2tfZGlhZ19kZXN0cm95X2dyb3VwKHNrKTtcXG5uZXQvY29yZS9zb2NrX2RpYWcuYy0xNTEtXFx0aW50IGVyciA9IC0xO1xcbi0tXFxubmV0L2NvcmUvc29ja19kaWFnLmM9Mjk1PXN0YXRpYyBpbnQgc29ja19kaWFnX2JpbmQoc3RydWN0IG5ldCAqbmV0LCBpbnQgZ3JvdXApXFxuLS1cXG5uZXQvY29yZS9zb2NrX2RpYWcuYy0zMTEtXFxubmV0L2NvcmUvc29ja19kaWFnLmM6MzEyOmludCBzb2NrX2RpYWdfZGVzdHJveShzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXFxubmV0L2NvcmUvc29ja19kaWFnLmMtMzEzLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTMxNi1cXG5uZXQvY29yZS9zb2NrX2RpYWcuYzozMTc6XFx0aWYgKCFzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlZGlhZ19kZXN0cm95KVxcbm5ldC9jb3JlL3NvY2tfZGlhZy5jLTMxOC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxubmV0L2NvcmUvc29ja19kaWFnLmMtMzE5LVxcbm5ldC9jb3JlL3NvY2tfZGlhZy5jOjMyMDpcXHRyZXR1cm4gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRpYWdfZGVzdHJveShzaywgZXJyKTtcXG5uZXQvY29yZS9zb2NrX2RpYWcuYy0zMjEtfVxcbm5ldC9jb3JlL3NvY2tfZGlhZy5jOjMyMjpFWFBPUlRfU1lNQk9MX0dQTChzb2NrX2RpYWdfZGVzdHJveSk7XFxubmV0L2NvcmUvc29ja19kaWFnLmMtMzIzLVxcbi0tXFxubmV0L2lwdjQvcmF3LmM9OTQ4PXN0cnVjdCBwcm90byByYXdfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3Jhdy5jLTk3Mi0jZW5kaWZcXG5uZXQvaXB2NC9yYXcuYzo5NzM6XFx0LmRpYWdfZGVzdHJveVxcdCAgID0gcmF3X2Fib3J0LFxcbm5ldC9pcHY0L3Jhdy5jLTk3NC19O1xcbi0tXFxubmV0L2lwdjQvcmF3X2RpYWcuYz0xODc9c3RhdGljIHZvaWQgcmF3X2RpYWdfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqcixcXG4tLVxcbm5ldC9pcHY0L3Jhd19kaWFnLmMtMTk0LSNpZmRlZiBDT05GSUdfSU5FVF9ESUFHX0RFU1RST1lcXG5uZXQvaXB2NC9yYXdfZGlhZy5jOjE5NTpzdGF0aWMgaW50IHJhd19kaWFnX2Rlc3Ryb3koc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG5uZXQvaXB2NC9yYXdfZGlhZy5jLTE5Ni1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnIpXFxuLS1cXG5uZXQvaXB2NC9yYXdfZGlhZy5jLTIwNC1cXHRcXHRyZXR1cm4gUFRSX0VSUihzayk7XFxubmV0L2lwdjQvcmF3X2RpYWcuYzoyMDU6XFx0ZXJyID0gc29ja19kaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XFxubmV0L2lwdjQvcmF3X2RpYWcuYy0yMDYtXFx0c29ja19wdXQoc2spO1xcbi0tXFxubmV0L2lwdjQvcmF3X2RpYWcuYz0yMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciByYXdfZGlhZ19oYW5kbGVyID0ge1xcbi0tXFxubmV0L2lwdjQvcmF3X2RpYWcuYy0yMTgtI2lmZGVmIENPTkZJR19JTkVUX0RJQUdfREVTVFJPWVxcbm5ldC9pcHY0L3Jhd19kaWFnLmM6MjE5OlxcdC5kZXN0cm95XFx0XFx0PSByYXdfZGlhZ19kZXN0cm95LFxcbm5ldC9pcHY0L3Jhd19kaWFnLmMtMjIwLSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvdGNwX2RpYWcuYz02MDQ9c3RhdGljIGludCB0Y3BfZGlhZ19kdW1wX29uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY0MS0jaWZkZWYgQ09ORklHX0lORVRfRElBR19ERVNUUk9ZXFxubmV0L2lwdjQvdGNwX2RpYWcuYzo2NDI6c3RhdGljIGludCB0Y3BfZGlhZ19kZXN0cm95KHN0cnVjdCBza19idWZmICppbl9za2IsXFxubmV0L2lwdjQvdGNwX2RpYWcuYy02NDMtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyICpyZXEpXFxuLS1cXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY1Mi1cXG5uZXQvaXB2NC90Y3BfZGlhZy5jOjY1MzpcXHRlcnIgPSBzb2NrX2RpYWdfZGVzdHJveShzaywgRUNPTk5BQk9SVEVEKTtcXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY1NC1cXG4tLVxcbm5ldC9pcHY0L3RjcF9kaWFnLmM9NjYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgdGNwX2RpYWdfaGFuZGxlciA9IHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9kaWFnLmMtNjY5LSNpZmRlZiBDT05GSUdfSU5FVF9ESUFHX0RFU1RST1lcXG5uZXQvaXB2NC90Y3BfZGlhZy5jOjY3MDpcXHQuZGVzdHJveVxcdFxcdD0gdGNwX2RpYWdfZGVzdHJveSxcXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTY3MS0jZW5kaWZcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzM0Nz1zdHJ1Y3QgcHJvdG8gdGNwX3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzOTUtXFx0Lm5vX2F1dG9iaW5kXFx0XFx0PSB0cnVlLFxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzM5NjpcXHQuZGlhZ19kZXN0cm95XFx0XFx0PSB0Y3BfYWJvcnQsXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzk3LX07XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0zMTQzPXN0cnVjdCBwcm90byB1ZHBfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTMxNzMtXFx0Lm9ial9zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IHVkcF9zb2NrKSxcXG5uZXQvaXB2NC91ZHAuYzozMTc0OlxcdC5kaWFnX2Rlc3Ryb3lcXHRcXHQ9IHVkcF9hYm9ydCxcXG5uZXQvaXB2NC91ZHAuYy0zMTc1LX07XFxuLS1cXG5uZXQvaXB2NC91ZHBfZGlhZy5jPTE0ND1zdGF0aWMgdm9pZCB1ZHBfZGlhZ19nZXRfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2RpYWdfbXNnICpyLFxcbi0tXFxubmV0L2lwdjQvdWRwX2RpYWcuYy0xNTEtI2lmZGVmIENPTkZJR19JTkVUX0RJQUdfREVTVFJPWVxcbm5ldC9pcHY0L3VkcF9kaWFnLmM6MTUyOnN0YXRpYyBpbnQgdWRwX2RpYWdfZGVzdHJveShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbm5ldC9pcHY0L3VkcF9kaWFnLmMtMTUzLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxKVxcbi0tXFxubmV0L2lwdjQvdWRwX2RpYWcuYy0yMDAtXFxubmV0L2lwdjQvdWRwX2RpYWcuYzoyMDE6XFx0ZXJyID0gc29ja19kaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRCk7XFxubmV0L2lwdjQvdWRwX2RpYWcuYy0yMDItXFxuLS1cXG5uZXQvaXB2NC91ZHBfZGlhZy5jPTIwOT1zdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyIHVkcF9kaWFnX2hhbmRsZXIgPSB7XFxuLS1cXG5uZXQvaXB2NC91ZHBfZGlhZy5jLTIxNi0jaWZkZWYgQ09ORklHX0lORVRfRElBR19ERVNUUk9ZXFxubmV0L2lwdjQvdWRwX2RpYWcuYzoyMTc6XFx0LmRlc3Ryb3lcXHQgPSB1ZHBfZGlhZ19kZXN0cm95LFxcbm5ldC9pcHY0L3VkcF9kaWFnLmMtMjE4LSNlbmRpZlxcbi0tXFxubmV0L2lwdjYvcmF3LmM9MTIwNz1zdHJ1Y3QgcHJvdG8gcmF3djZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jLTEyMzEtI2VuZGlmXFxubmV0L2lwdjYvcmF3LmM6MTIzMjpcXHQuZGlhZ19kZXN0cm95XFx0ICAgPSByYXdfYWJvcnQsXFxubmV0L2lwdjYvcmF3LmMtMTIzMy19O1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMjc2PXN0cnVjdCBwcm90byB0Y3B2Nl9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzI1LVxcdC5ub19hdXRvYmluZFxcdFxcdD0gdHJ1ZSxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIzMjY6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdGNwX2Fib3J0LFxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMyNy19O1xcbi0tXFxubmV0L2lwdjYvdWRwLmM9MTkwOD1zdHJ1Y3QgcHJvdG8gdWRwdjZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTE5NDAtXFx0LmlwdjZfcGluZm9fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVkcDZfc29jaywgaW5ldDYpLFxcbm5ldC9pcHY2L3VkcC5jOjE5NDE6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdWRwX2Fib3J0LFxcbm5ldC9pcHY2L3VkcC5jLTE5NDItfTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE0Nj12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X2luaXQodm9pZClcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE2Ni1cXHR0Y3BfcHJvdF9vdmVycmlkZS5yZWxlYXNlX2NiID0gdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGU7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoyMTY3OlxcdHRjcF9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjgtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTgwPXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfdjZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMjEzLVxcdHRjcHY2X3Byb3Rfb3ZlcnJpZGUucmVsZWFzZV9jYiA9IHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjIxNDpcXHR0Y3B2Nl9wcm90X292ZXJyaWRlLmRpYWdfZGVzdHJveSA9IHRjcF9hYm9ydF9vdmVycmlkZTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTUtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0Mjo1My45MDQwNTY4NTdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUxOTA2MTUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgU29ja2V0IFN0cnVjdHVyZXMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgc29ja2V0IGRhdGEgc3RydWN0dXJlcyBhZ2FpbiwgYW5kIHRoZSBzcGVjaWZpYyByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlbSBhcmUsIGFzIGFsd2F5cywgdGhlIGtleS4gTGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IGBzdHJ1Y3Qgc29ja19jb21tb25gLCBgc3RydWN0IHNvY2tgLCBhbmQgYHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2tgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0byBwdWxsIHVwIHRoZSBtZW1vcnkgbWFwcyBhbmQgbGlrZWx5IHRoZSBpbmhlcml0YW5jZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlbS4gV2hlcmUgZG9lcyBlYWNoIG9uZSBjb21lIGluIHRvIHBsYXk/IFdoYXQgY29yZSBmZWF0dXJlcyBhcmUgZWFjaCByZXNwb25zaWJsZSBmb3I/XG5cbkkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgZm91bmRhdGlvbiwgc28gdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgYHN0cnVjdCBzb2NrX2NvbW1vbmAuIEknbGwgd2FudCB0byByZXZpZXcgdGhlIGJhc2ljIGVsZW1lbnRzIHRoYXQgYXJlIGNvbW1vbiBhY3Jvc3Mgc29ja2V0IHR5cGVzLiBMZXQncyBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgYXQgdGhlIGxvdyBsZXZlbC4gR290dGEgcmVmcmVzaCB0aGUgbWVtb3J5IG9mIHdoYXQncyBmdW5kYW1lbnRhbCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6NTYuNDIzMTIxODIxWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY4NzY0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgc29ja19jb21tb24gXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvc29jay5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3NvY2suaD0xMDg9dHlwZWRlZiBfX3U2NCBfX2JpdHdpc2UgX19hZGRycGFpcjtcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaC0xNTUtICovXFxuaW5jbHVkZS9uZXQvc29jay5oOjE1NjpzdHJ1Y3Qgc29ja19jb21tb24ge1xcbmluY2x1ZGUvbmV0L3NvY2suaC0xNTctXFx0dW5pb24ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0Mjo1Ni40Njk4MjA5MDhaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI3OTQ2MDQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgc3RydWN0IHNvY2tfY29tbW9uYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBkaWcgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgSSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZSB0aGF0IHVuZGVycGlucyBzb2NrZXQgb3BlcmF0aW9ucyBpbiB0aGUgTGludXgga2VybmVsLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiBgc3RydWN0IHNvY2tfY29tbW9uYCB3aXRoaW4gYGluY2x1ZGUvbmV0L3NvY2suaGAuIEkndmUgcHJvYmFibHkgbG9va2VkIGF0IHRoaXMgYSB0aG91c2FuZCB0aW1lcywgYnV0IGV2ZXJ5IHRpbWUgSSByZXZpZXcgaXQgSSBmaW5kIHNvbWV0aGluZyBuZXcgb3IgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgZml0cyBpbnRvIHRoZSB3aG9sZS4gSeKAmW0gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIHN0cnVjdHVyZSB0aWVzIGludG8gdGhlIHZhcmlvdXMgc29ja2V0IHN0YXRlcyBhbmQgbGlmZWN5Y2xlIGV2ZW50cy4gSG9wZWZ1bGx5LCBpdCdzIGFsbCBpbiB0aGUgaGVhZGVyLCBvciB0aGUgcmVsYXRlZCBzb3VyY2UgZmlsZXMuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBzb2NrZXQgcXVldWluZyBpcyBtYW5hZ2VkIGluIHJlbGF0aW9uIHRvIFJYL1RYIHBhdGhzLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgaW1wYWN0IG9mIHZhcmlvdXMgc29ja2V0IG9wdGlvbnMgYW5kIGZsYWdzLiBJJ20gYW50aWNpcGF0aW5nIGZpbmRpbmcgcG9pbnRlcnMgdG8gcXVldWVzLCBmbGFncyBpbmRpY2F0aW5nIHN0YXRlIChsaWtlIGBUQ1BfRVNUQUJMSVNIRURgIG9yIGBTT0NLX0RFQURgKSwgYW5kIHBvc3NpYmx5IGZpZWxkcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLiBJdCdzIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIGNoZWNrIGZvciBhbnkgbnVhbmNlcyBvciBjaGFuZ2VzIHNpbmNlIG15IGxhc3QgZGVlcCBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDc2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6NTguNzQ5MjgzODg5WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9zb2NrLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTU2LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTU2OlxcdHN0cnVjdCBzb2NrX2NvbW1vbiB7XFxuIDE1NzpcXHRcXHR1bmlvbiB7XFxuIDE1ODpcXHRcXHRcXHRfX2FkZHJwYWlyXFx0c2tjX2FkZHJwYWlyO1xcbiAxNTk6XFx0XFx0XFx0c3RydWN0IHtcXG4gMTYwOlxcdFxcdFxcdFxcdF9fYmUzMlxcdHNrY19kYWRkcjtcXG4gMTYxOlxcdFxcdFxcdFxcdF9fYmUzMlxcdHNrY19yY3Zfc2FkZHI7XFxuIDE2MjpcXHRcXHRcXHR9O1xcbiAxNjM6XFx0XFx0fTtcXG4gMTY0OlxcdFxcdHVuaW9uICB7XFxuIDE2NTpcXHRcXHRcXHR1bnNpZ25lZCBpbnRcXHRza2NfaGFzaDtcXG4gMTY2OlxcdFxcdFxcdF9fdTE2XFx0XFx0c2tjX3UxNmhhc2hlc1syXTtcXG4gMTY3OlxcdFxcdH07XFxuIDE2ODpcXHRcXHQvKiBza2NfZHBvcnQgXFx1MDAyNlxcdTAwMjYgc2tjX251bSBtdXN0IGJlIGdyb3VwZWQgYXMgd2VsbCAqL1xcbiAxNjk6XFx0XFx0dW5pb24ge1xcbiAxNzA6XFx0XFx0XFx0X19wb3J0cGFpclxcdHNrY19wb3J0cGFpcjtcXG4gMTcxOlxcdFxcdFxcdHN0cnVjdCB7XFxuIDE3MjpcXHRcXHRcXHRcXHRfX2JlMTZcXHRza2NfZHBvcnQ7XFxuIDE3MzpcXHRcXHRcXHRcXHRfX3UxNlxcdHNrY19udW07XFxuIDE3NDpcXHRcXHRcXHR9O1xcbiAxNzU6XFx0XFx0fTtcXG4gMTc2OlxcdFxcbiAxNzc6XFx0XFx0dW5zaWduZWQgc2hvcnRcXHRcXHRza2NfZmFtaWx5O1xcbiAxNzg6XFx0XFx0dm9sYXRpbGUgdW5zaWduZWQgY2hhclxcdHNrY19zdGF0ZTtcXG4gMTc5OlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHRza2NfcmV1c2U6NDtcXG4gMTgwOlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHRza2NfcmV1c2Vwb3J0OjE7XFxuIDE4MTpcXHRcXHR1bnNpZ25lZCBjaGFyXFx0XFx0c2tjX2lwdjZvbmx5OjE7XFxuIDE4MjpcXHRcXHR1bnNpZ25lZCBjaGFyXFx0XFx0c2tjX25ldF9yZWZjbnQ6MTtcXG4gMTgzOlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHRza2NfYnlwYXNzX3Byb3RfbWVtOjE7XFxuIDE4NDpcXHRcXHRpbnRcXHRcXHRcXHRza2NfYm91bmRfZGV2X2lmO1xcbiAxODU6XFx0XFx0dW5pb24ge1xcbiAxODY6XFx0XFx0XFx0c3RydWN0IGhsaXN0X25vZGVcXHRza2NfYmluZF9ub2RlO1xcbiAxODc6XFx0XFx0XFx0c3RydWN0IGhsaXN0X25vZGVcXHRza2NfcG9ydGFkZHJfbm9kZTtcXG4gMTg4OlxcdFxcdH07XFxuIDE4OTpcXHRcXHRzdHJ1Y3QgcHJvdG9cXHRcXHQqc2tjX3Byb3Q7XFxuIDE5MDpcXHRcXHRwb3NzaWJsZV9uZXRfdFxcdFxcdHNrY19uZXQ7XFxuIDE5MTpcXHRcXG4gMTkyOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiAxOTM6XFx0XFx0c3RydWN0IGluNl9hZGRyXFx0XFx0c2tjX3Y2X2RhZGRyO1xcbiAxOTQ6XFx0XFx0c3RydWN0IGluNl9hZGRyXFx0XFx0c2tjX3Y2X3Jjdl9zYWRkcjtcXG4gMTk1OlxcdCNlbmRpZlxcbiAxOTY6XFx0XFxuIDE5NzpcXHRcXHRhdG9taWM2NF90XFx0XFx0c2tjX2Nvb2tpZTtcXG4gMTk4OlxcdFxcbiAxOTk6XFx0XFx0LyogZm9sbG93aW5nIGZpZWxkcyBhcmUgcGFkZGluZyB0byBmb3JjZVxcbiAyMDA6XFx0XFx0ICogb2Zmc2V0KHN0cnVjdCBzb2NrLCBza19yZWZjbnQpID09IDEyOCBvbiA2NGJpdCBhcmNoZXNcXG4gMjAxOlxcdFxcdCAqIGFzc3VtaW5nIElQVjYgaXMgZW5hYmxlZC4gV2UgdXNlIHRoaXMgcGFkZGluZyBkaWZmZXJlbnRseVxcbiAyMDI6XFx0XFx0ICogZm9yIGRpZmZlcmVudCBraW5kIG9mICdzb2NrZXRzJ1xcbiAyMDM6XFx0XFx0ICovXFxuIDIwNDpcXHRcXHR1bmlvbiB7XFxuIDIwNTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nXFx0c2tjX2ZsYWdzO1xcbiAyMDY6XFx0XFx0XFx0c3RydWN0IHNvY2tcXHQqc2tjX2xpc3RlbmVyOyAvKiByZXF1ZXN0X3NvY2sgKi9cXG4gMjA3OlxcdFxcdFxcdHN0cnVjdCBpbmV0X3RpbWV3YWl0X2RlYXRoX3JvdyAqc2tjX3R3X2RyOyAvKiBpbmV0X3RpbWV3YWl0X3NvY2sgKi9cXG4gMjA4OlxcdFxcdH07XFxuIDIwOTpcXHRcXHQvKlxcbiAyMTA6XFx0XFx0ICogZmllbGRzIGJldHdlZW4gZG9udGNvcHlfYmVnaW4vZG9udGNvcHlfZW5kXFxuIDIxMTpcXHRcXHQgKiBhcmUgbm90IGNvcGllZCBpbiBzb2NrX2NvcHkoKVxcbiAyMTI6XFx0XFx0ICovXFxuIDIxMzpcXHRcXHQvKiBwcml2YXRlOiAqL1xcbiAyMTQ6XFx0XFx0aW50XFx0XFx0XFx0c2tjX2RvbnRjb3B5X2JlZ2luWzBdO1xcbiAyMTU6XFx0XFx0LyogcHVibGljOiAqL1xcbiAyMTY6XFx0XFx0dW5pb24ge1xcbiAyMTc6XFx0XFx0XFx0c3RydWN0IGhsaXN0X25vZGVcXHRza2Nfbm9kZTtcXG4gMjE4OlxcdFxcdFxcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlIHNrY19udWxsc19ub2RlO1xcbiAyMTk6XFx0XFx0fTtcXG4gMjIwOlxcdFxcdHVuc2lnbmVkIHNob3J0XFx0XFx0c2tjX3R4X3F1ZXVlX21hcHBpbmc7XFxuIDIyMTpcXHQjaWZkZWYgQ09ORklHX1NPQ0tfUlhfUVVFVUVfTUFQUElOR1xcbiAyMjI6XFx0XFx0dW5zaWduZWQgc2hvcnRcXHRcXHRza2NfcnhfcXVldWVfbWFwcGluZztcXG4gMjIzOlxcdCNlbmRpZlxcbiAyMjQ6XFx0XFx0dW5pb24ge1xcbiAyMjU6XFx0XFx0XFx0aW50XFx0XFx0c2tjX2luY29taW5nX2NwdTtcXG4gMjI2OlxcdFxcdFxcdHUzMlxcdFxcdHNrY19yY3Zfd25kO1xcbiAyMjc6XFx0XFx0XFx0dTMyXFx0XFx0c2tjX3R3X3Jjdl9ueHQ7IC8qIHN0cnVjdCB0Y3BfdGltZXdhaXRfc29jayAgKi9cXG4gMjI4OlxcdFxcdH07XFxuIDIyOTpcXHRcXG4gMjMwOlxcdFxcdHJlZmNvdW50X3RcXHRcXHRza2NfcmVmY250O1xcbiAyMzE6XFx0XFx0LyogcHJpdmF0ZTogKi9cXG4gMjMyOlxcdFxcdGludCAgICAgICAgICAgICAgICAgICAgIHNrY19kb250Y29weV9lbmRbMF07XFxuIDIzMzpcXHRcXHR1bmlvbiB7XFxuIDIzNDpcXHRcXHRcXHR1MzJcXHRcXHRza2NfcnhoYXNoO1xcbiAyMzU6XFx0XFx0XFx0dTMyXFx0XFx0c2tjX3dpbmRvd19jbGFtcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDI6NTguNzQ5NDQwOTQ5WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNzExMzM2NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBOZXR3b3JrIFNvY2tldCBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpc3NlY3QgYHN0cnVjdCBzb2NrYC4gTGV0J3Mgc2VlLi4uIEkgc2VlbSB0byByZWNhbGwgdGhhdCBzb21ld2hlcmUgaW4gaGVyZSwgYHNrX3Byb3RvY29sYCBpcyBkZWZpbmVkLiBJIHRoaW5rIGl0J3MgcGFydCBvZiB0aGUgY29tbW9uIHNvY2tldCBkYXRhLCBtYXliZSBkZWZpbmVkIHVzaW5nIGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBgI2RlZmluZSBza19wcm90b2NvbCBfX3NrX2NvbW1vbi5za2NfcHJvdG9jb2xgLi4uIG9yIHdhcyBpdCBhIHNsaWdodGx5IGRpZmZlcmVudCBuYW1pbmcgY29udmVudGlvbj8gRWl0aGVyIHdheSwgSSBuZWVkIHRvIGNvbmZpcm0gd2hlcmUgYHNrX3Byb3RvY29sYCBhY3R1YWxseSBsaXZlcyB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmUuIFRoYXQncyB0aGUga2V5OiB1bmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgbWVtYmVycy4gVGltZSB0byB0cmFjZSB3aGVyZSBleGFjdGx5IGl0J3MgZGVjbGFyZWQgYW5kIGhvdyBpdCBpcyB1c2VkLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpdCdzIGxvY2F0ZWQgdG8gY29udGludWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTkzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MzowMC44MjA1NzgzOTZaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODcwNjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Byb3RvY29sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L3NvY2suaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9zb2NrLmg9MjQyPXN0cnVjdCBza19maWx0ZXI7XFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmgtMzAxLSAgKlxcdEBza190eXBlOiBzb2NrZXQgdHlwZSAoJVNPQ0tfU1RSRUFNLCBldGMpXFxuaW5jbHVkZS9uZXQvc29jay5oOjMwMjogICpcXHRAc2tfcHJvdG9jb2w6IHdoaWNoIHByb3RvY29sIHRoaXMgc29ja2V0IGJlbG9uZ3MgaW4gdGhpcyBuZXR3b3JrIGZhbWlseVxcbmluY2x1ZGUvbmV0L3NvY2suaC0zMDMtICAqXFx0QHNrX3BlZXJfbG9jazogbG9jayBwcm90ZWN0aW5nIEBza19wZWVyX3BpZCBhbmQgQHNrX3BlZXJfY3JlZFxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTM2NT1zdHJ1Y3Qgc29jayB7XFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmgtNTExLVxcdGt1aWRfdFxcdFxcdFxcdHNrX3VpZDtcXG5pbmNsdWRlL25ldC9zb2NrLmg6NTEyOlxcdHUxNlxcdFxcdFxcdHNrX3Byb3RvY29sO1xcbmluY2x1ZGUvbmV0L3NvY2suaC01MTMtXFx0dTE2XFx0XFx0XFx0c2tfdHlwZTtcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0yOTY1PXN0YXRpYyBpbmxpbmUgYm9vbCBza19pc190Y3AoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTI5NjgtXFx0ICAgICAgIHNrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfU1RSRUFNIFxcdTAwMjZcXHUwMDI2XFxuaW5jbHVkZS9uZXQvc29jay5oOjI5Njk6XFx0ICAgICAgIHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUDtcXG5pbmNsdWRlL25ldC9zb2NrLmgtMjk3MC19XFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmg9Mjk3Mj1zdGF0aWMgaW5saW5lIGJvb2wgc2tfaXNfdWRwKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaC0yOTc1LVxcdCAgICAgICBzay1cXHUwMDNlc2tfdHlwZSA9PSBTT0NLX0RHUkFNIFxcdTAwMjZcXHUwMDI2XFxuaW5jbHVkZS9uZXQvc29jay5oOjI5NzY6XFx0ICAgICAgIHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1VEUDtcXG5pbmNsdWRlL25ldC9zb2NrLmgtMjk3Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQzOjAwLjg2NzQ1NDE4M1oiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjU0NjU0MTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgYnBmX3NvY2tfZGVzdHJveWAgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4uLiBUaGUgYHNrX3Byb3RvY29sYCBmaWVsZCBpcyBsb2NhdGVkIHdpdGhpbiB0aGUgYHN0cnVjdCBzb2NrYCBzdHJ1Y3R1cmUsIGFuZCBpdCBhcHBlYXJzICphZnRlciogdGhlIGBzdHJ1Y3Qgc29ja19jb21tb25gIHBvcnRpb24gb2YgdGhhdCBzdHJ1Y3R1cmUuIEJ1dCwgaW1wb3J0YW50bHksIGBzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrYCAqZG9lc24ndCogY29udGFpbiBhIGZ1bGwgYHN0cnVjdCBzb2NrYCEgSXQgb25seSBjb250YWlucyBhIGBzdHJ1Y3Qgc29ja19jb21tb25gLiBSaWdodCwgc28gaWYgYGJwZl9zb2NrX2Rlc3Ryb3lgIGdldHMgaGFuZGVkIGEgYHN0cnVjdCBzb2NrX2NvbW1vbiAqc29ja2AsIHdoaWNoLCBpbiBzb21lIGNhc2VzLCBjb3VsZCBhY3R1YWxseSBiZSBhIGBzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICpgIGNvbWluZyBmcm9tIGEgQlBGIGl0ZXJhdG9yLCBhbmQgdGhlbiBpdCBjYXN0cyB0aGF0IHRvIGEgYHN0cnVjdCBzb2NrICpgLi4uIHRoYXQncyBhIHByb2JsZW0uXG5cbkJhc2ljYWxseSwgKmJlZm9yZSosIHdoZW4gdGhlIGNvZGUgdHJpZWQgdG8gcmVhZCBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIGluIHRoZSBgYnBmX3NvY2tfZGVzdHJveWAgZnVuY3Rpb24sIGl0IHdhcyBlZmZlY3RpdmVseSByZWFkaW5nIG1lbW9yeSAqYmV5b25kKiB0aGUgYm91bmRzIG9mIHRoZSBgaW5ldF90aW1ld2FpdF9zb2NrYCBzdHJ1Y3R1cmUuIElmIHRoZSBgaW5ldF90aW1ld2FpdF9zb2NrYCBzdHJ1Y3R1cmUgaXMgc21hbGxlciB0aGFuIGBzdHJ1Y3Qgc29ja2AsIHdlIHdlcmUgcmVhZGluZyBnYXJiYWdlIVxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBzaXplcy4uLiBZZWFoLCBgc3RydWN0IHNvY2tgIGlzIGRlZmluaXRlbHkgKm11Y2gqIGxhcmdlciB0aGFuIGBzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrYC4gIEdvdCBpdC5cblxuQWxyaWdodCwgd2hhdCBhYm91dCB0aGF0IGBza19mdWxsc29jayhzaylgIGNhbGw/IFRoYXQgY2hlY2tzIHRoZSBgc2stXHUwMDNlc2tfc3RhdGVgLiBPa2F5LCBidXQgd2hlcmUgaXMgYHNrX3N0YXRlYD8gQWgsIGl0J3MgaW5zaWRlIGBzdHJ1Y3Qgc29ja19jb21tb25gIGFzIGBza2Nfc3RhdGVgLiBQZXJmZWN0LiBTbyB3ZSBkbyBub3QgaGF2ZSBhbiBpc3N1ZSB3aXRoIGBza19mdWxsc29ja2AuXG5cbk5vdyBsZXQncyBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBjaGFuZ2UgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBmb3IgYGJwZl9zb2NrX2Rlc3Ryb3lgOlxuXG5gYGBjXG5fX2JwZl9rZnVuYyBpbnQgYnBmX3NvY2tfZGVzdHJveShzdHJ1Y3Qgc29ja19jb21tb24gKnNvY2spXG57XG5cdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKXNvY2s7XG5cblx0LyogVGhlIGxvY2tpbmcgc2VtYW50aWNzIHRoYXQgYWxsb3cgZm9yIGNvbmN1cnJlbnQgc29jayBkZXN0cm95IGFyZVxuXHQgKiBzcGVjaWZpYyB0byBlYWNoIHByb3RvY29sLCBzbyBvbmx5IGFsbG93IHRoZSBzdXBwb3J0ZWQgcHJvdG9jb2xzLlxuXHQgKiBTdXBwb3J0aW5nIHByb3RvY29scyB3aWxsIG5lZWQgdG8gYWNxdWlyZSBzb2NrIGxvY2sgaW4gdGhlIEJQRiBjb250ZXh0XG5cdCAqIHByaW9yIHRvIGludm9raW5nIHRoaXMga2Z1bmMuXG5cdCAqL1xuXHRpZiAoIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KVxuXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcblxuXHRpZiAoc2tfZnVsbHNvY2soc2spIFx1MDAyNlx1MDAyNlxuXHQgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2XG5cdCAgICBzay1cdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1VEUClcblx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5cblx0cmV0dXJuIHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95KHNrLCBFQ09OTkFCT1JURUQpO1xufVxuYGBgXG5cbk9rYXksIHNvIHRoZSB2dWxuZXJhYmlsaXR5IGlzIHRoZSBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIGFjY2Vzcy4gTm93IGxldCdzIHNlZSB3aGF0IGBzay1cdTAwM2Vza19wcm90YCBhY3R1YWxseSAqaXMqIHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIGEgdGltZXdhaXQgc29ja2V0IG9yIGEgcmVxdWVzdCBzb2NrZXQuIFdlIG5lZWQgdG8gY2hlY2sgd2hlcmUgYGRpYWdfZGVzdHJveWAgZ2V0cyBjYWxsZWQgZm9yIHRoZXNlIHR5cGVzLiBPa2F5LCBzbyBJIHNob3VsZCBzZWFyY2ggZm9yIGB0d3NrYCBhbmQgYGRpYWdfZGVzdHJveWAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLiBJIGFtIG5vdCBzZWVpbmcgYGRpYWdfZGVzdHJveWAgZGlyZWN0bHkuIExldCdzIGxvb2sgZm9yIGB0Y3BfdHdza19kaWFnX2Rlc3Ryb3lgLCBgdGNwX3R3c2tfZGVzY2hlZHVsZV9yZXRyeWAsIGB0Y3BfYWJvcnRgLCBvciBgaW5ldF90d3NrX2Rlc2NoZWR1bGVfcHV0YC4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjU4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQzOjA2LjEyMjExMTg0NVoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM0NTIyMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2Fib3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM9NjI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xMjc5LVxcdHtcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzoxMjgwOlxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInRjcF9hYm9ydF9vbl9vdmVyZmxvd1xcXCIsXFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTI4MTpcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LmlwdjQuc3lzY3RsX3RjcF9hYm9ydF9vbl9vdmVyZmxvdyxcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xMjgyLVxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZih1OCksXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz01MDg5PXZvaWQgdGNwX2RvbmUoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNTExNC1cXG5uZXQvaXB2NC90Y3AuYzo1MTE1OmludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxcbm5ldC9pcHY0L3RjcC5jLTUxMTYte1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtNTE2Ny19XFxubmV0L2lwdjQvdGNwLmM6NTE2ODpFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYWJvcnQpO1xcbm5ldC9pcHY0L3RjcC5jLTUxNjktXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTMzNDc9c3RydWN0IHByb3RvIHRjcF9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzk1LVxcdC5ub19hdXRvYmluZFxcdFxcdD0gdHJ1ZSxcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjMzOTY6XFx0LmRpYWdfZGVzdHJveVxcdFxcdD0gdGNwX2Fib3J0LFxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM5Ny19O1xcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTY4Nz1zdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtOTU4LVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo5NTk6XFx0aWYgKCFSRUFEX09OQ0Uoc29ja19uZXQoc2spLVxcdTAwM2VpcHY0LnN5c2N0bF90Y3BfYWJvcnRfb25fb3ZlcmZsb3cpKSB7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk2MC1cXHRcXHRpbmV0X3JzayhyZXEpLVxcdTAwM2VhY2tlZCA9IDE7XFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTIyNzY9c3RydWN0IHByb3RvIHRjcHY2X3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIzMjUtXFx0Lm5vX2F1dG9iaW5kXFx0XFx0PSB0cnVlLFxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MjMyNjpcXHQuZGlhZ19kZXN0cm95XFx0XFx0PSB0Y3BfYWJvcnQsXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzI3LX07XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIwOTY9c3RhdGljIHZvaWQgdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGUoc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjExMS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIxMTI6c3RhdGljIGludCB0Y3BfYWJvcnRfb3ZlcnJpZGUoc3RydWN0IHNvY2sgKnNzaywgaW50IGVycilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxMTMte1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTE5LVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjEyMDpcXHRyZXR1cm4gdGNwX2Fib3J0KHNzaywgZXJyKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxMjEtfVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTQ2PXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTY2LVxcdHRjcF9wcm90X292ZXJyaWRlLnJlbGVhc2VfY2IgPSB0Y3BfcmVsZWFzZV9jYl9vdmVycmlkZTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIxNjc6XFx0dGNwX3Byb3Rfb3ZlcnJpZGUuZGlhZ19kZXN0cm95ID0gdGNwX2Fib3J0X292ZXJyaWRlO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE2OC0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIxODA9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd192Nl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTMtXFx0dGNwdjZfcHJvdF9vdmVycmlkZS5yZWxlYXNlX2NiID0gdGNwX3JlbGVhc2VfY2Jfb3ZlcnJpZGU7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoyMjE0OlxcdHRjcHY2X3Byb3Rfb3ZlcnJpZGUuZGlhZ19kZXN0cm95ID0gdGNwX2Fib3J0X292ZXJyaWRlO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjIxNS0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTMyOD1pbnQgc21jX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzQzLVxcdGlmIChzbWMtXFx1MDAzZWNvbm5lY3Rfbm9uYmxvY2sgXFx1MDAyNlxcdTAwMjYgb2xkX3N0YXRlID09IFNNQ19JTklUKVxcbm5ldC9zbWMvYWZfc21jLmM6MzQ0OlxcdFxcdHRjcF9hYm9ydChzbWMtXFx1MDAzZWNsY3NvY2stXFx1MDAzZXNrLCBFQ09OTkFCT1JURUQpO1xcbm5ldC9zbWMvYWZfc21jLmMtMzQ1LVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYz0xMjg9dm9pZCBzbWNfY2xvc2VfYWN0aXZlX2Fib3J0KHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYy0xMzUtXFx0XFx0aWYgKHNtYy1cXHUwMDNlY2xjc29jayBcXHUwMDI2XFx1MDAyNiBzbWMtXFx1MDAzZWNsY3NvY2stXFx1MDAzZXNrKVxcbm5ldC9zbWMvc21jX2Nsb3NlLmM6MTM2OlxcdFxcdFxcdHRjcF9hYm9ydChzbWMtXFx1MDAzZWNsY3NvY2stXFx1MDAzZXNrLCBFQ09OTkFCT1JURUQpO1xcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTM3LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NDM6MDYuMTk1NTY5ODNaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQxMDg4NzA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgYHRjcF9hYm9ydGAgZnVuY3Rpb246XG5cbioqRGl2aW5nIGludG8gYHRjcF9hYm9ydGAqKlxuXG5Pa2F5LCBsZXQncyBnZXQgaW50byB0aGUgZ3V0cyBvZiBgbmV0L2lwdjQvdGNwLmNgIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgYHRjcF9hYm9ydGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBUQ1AgY29ubmVjdGlvbnMgYXJlIGdyYWNlZnVsbHkgKG9yLCBsZXNzIGdyYWNlZnVsbHksIGRlcGVuZGluZyBvbiB0aGUgc2l0dWF0aW9uKSB0b3JuIGRvd24gd2hlbiBzb21ldGhpbmcgZ29lcyB3cm9uZyBhdCB0aGUga2VybmVsIGxldmVsLiBSaWdodCBhd2F5LCBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgY3JpdGljYWwgZm9yIGhhbmRsaW5nIGEgdmFyaWV0eSBvZiBlcnJvciBzY2VuYXJpb3Mg4oCTIHRoaW5ncyBsaWtlIHVucmVjb3ZlcmFibGUgY29uZ2VzdGlvbiwgUlNUIHNlZ21lbnRzIGJlaW5nIHJlY2VpdmVkIHdoZW4gd2Ugd2VyZW4ndCBleHBlY3RpbmcgdGhlbSwgb3IgcGVyaGFwcyBpbnRlcm5hbCBrZXJuZWwgaW5jb25zaXN0ZW5jaWVzLlxuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHN0YXRlIHRyYW5zaXRpb25zLiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGluZmx1ZW5jZSB0aGUgVENQIHN0YXRlIG1hY2hpbmU/IERvZXMgaXQgYWx3YXlzIHRyaWdnZXIgYSBoYXJkIHJlc2V0PyBPciBhcmUgdGhlcmUgbW9yZSBudWFuY2VkIGFwcHJvYWNoZXMgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gc3RhdGU/IEkgaW1hZ2luZSB0aGVyZSBhcmUgZGlmZmVyZW50IGNvZGVwYXRocyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgY29ubmVjdGlvbiBpcyBFU1RBQkxJU0hFRCwgTElTVEVOLCBvciBpbiBzb21lIG90aGVyIGludGVyaW0gc3RhdGUuIEhhbmRsaW5nIGEgRklOX1dBSVQgc3RhdGUgZGlmZmVyZW50bHkgdGhhbiBhIFNZTl9TRU5UIHN0YXRlIGlzIGdvaW5nIHRvIGJlIGtleSwgYW5kIEnigJlsbCBiZSB3YXRjaGluZyBmb3IgdGhvc2Ugc3BlY2lmaWMgbG9naWMgYnJhbmNoZXMuXG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBUQ1Agc3RhY2suIEhvdyBkb2VzIGl0IHNpZ25hbCB0aGUgYXBwbGljYXRpb24gbGF5ZXIgYWJvdXQgdGhlIGNvbm5lY3Rpb24ncyBkZW1pc2U/IERvZXMgaXQgc2VuZCBhbiBlcnJvciBjb2RlIGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uIG9yIGlzIHRoZSBzb2NrZXQgc2ltcGx5IGNsb3NlZD8gQW5kIHdoYXQgYWJvdXQgcmVzb3VyY2UgY2xlYW51cD8gRG9lcyBpdCBoYW5kbGUgcmVsZWFzaW5nIGFueSBhbGxvY2F0ZWQgYnVmZmVycywgdGltZXJzLCBvciBvdGhlciBjb25uZWN0aW9uLXNwZWNpZmljIGRhdGEgc3RydWN0dXJlcz8gQSBtZW1vcnkgbGVhayBoZXJlIGlzIHVuYWNjZXB0YWJsZS4gVGhlIGxldmVsIG9mIGRldGFpbCBhbmQgY2FyZSBpbiB0aGVzZSBhcmVhcyB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgdmlldyBvZiB0aGUgcXVhbGl0eSBvZiB0aGUgc3RhY2ssIGFuZCBob3cgcm9idXN0IGl0IGlzLlxuXG5UaGUgdXNlIG9mIGxvY2tzIGlzIGFsc28gYSBjb25jZXJuLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBwcm90ZWN0cyBhbmQgdGhlIHBvdGVudGlhbCBmb3IgYW55IHJhY2UgY29uZGl0aW9ucy4gQSBmdW5jdGlvbiBsaWtlIHRoaXMgaXMgZ29pbmcgdG8gYmUgY3JpdGljYWwgZm9yIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5LCBhbmQgSSB3YW50IHRvIHNlZSBob3cgdGhhdCdzIGhhbmRsZWQuIEZpbmFsbHksIEknbSBob3BpbmcgdG8gc2VlIHdlbGwtY29tbWVudGVkIGNvZGUsIGFzIGl0J3MgaW1wZXJhdGl2ZSB0aGF0IEkgZ2FpbiBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGZ1bmN0aW9uJ3MgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk5MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQzOjA5LjYwNjQ2MTY2N1oiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY3MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTExNSxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTExNTpcXHRpbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcXG41MTE2OlxcdHtcXG41MTE3OlxcdFxcdGludCBzdGF0ZSA9IGluZXRfc2tfc3RhdGVfbG9hZChzayk7XFxuNTExODpcXHRcXG41MTE5OlxcdFxcdGlmIChzdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKSB7XFxuNTEyMDpcXHRcXHRcXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEgPSBpbmV0X3JlcXNrKHNrKTtcXG41MTIxOlxcdFxcbjUxMjI6XFx0XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbjUxMjM6XFx0XFx0XFx0aW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChyZXEtXFx1MDAzZXJza19saXN0ZW5lciwgcmVxKTtcXG41MTI0OlxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbjUxMjU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTEyNjpcXHRcXHR9XFxuNTEyNzpcXHRcXHRpZiAoc3RhdGUgPT0gVENQX1RJTUVfV0FJVCkge1xcbjUxMjg6XFx0XFx0XFx0c3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBpbmV0X3R3c2soc2spO1xcbjUxMjk6XFx0XFxuNTEzMDpcXHRcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNnR3LVxcdTAwM2V0d19yZWZjbnQpO1xcbjUxMzE6XFx0XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbjUxMzI6XFx0XFx0XFx0aW5ldF90d3NrX2Rlc2NoZWR1bGVfcHV0KHR3KTtcXG41MTMzOlxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbjUxMzQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNTEzNTpcXHRcXHR9XFxuNTEzNjpcXHRcXG41MTM3OlxcdFxcdC8qIEJQRiBjb250ZXh0IGVuc3VyZXMgc29jayBsb2NraW5nLiAqL1xcbjUxMzg6XFx0XFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXFxuNTEzOTpcXHRcXHRcXHQvKiBEb24ndCByYWNlIHdpdGggdXNlcnNwYWNlIHNvY2tldCBjbG9zZXMgc3VjaCBhcyB0Y3BfY2xvc2UuICovXFxuNTE0MDpcXHRcXHRcXHRsb2NrX3NvY2soc2spO1xcbjUxNDE6XFx0XFxuNTE0MjpcXHRcXHQvKiBBdm9pZCBjbG9zaW5nIHRoZSBzYW1lIHNvY2tldCB0d2ljZS4gKi9cXG41MTQzOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XFxuNTE0NDpcXHRcXHRcXHRpZiAoIWhhc19jdXJyZW50X2JwZl9jdHgoKSlcXG41MTQ1OlxcdFxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuNTE0NjpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG41MTQ3OlxcdFxcdH1cXG41MTQ4OlxcdFxcbjUxNDk6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOKSB7XFxuNTE1MDpcXHRcXHRcXHR0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xcbjUxNTE6XFx0XFx0XFx0aW5ldF9jc2tfbGlzdGVuX3N0b3Aoc2spO1xcbjUxNTI6XFx0XFx0fVxcbjUxNTM6XFx0XFxuNTE1NDpcXHRcXHQvKiBEb24ndCByYWNlIHdpdGggQkggc29ja2V0IGNsb3NlcyBzdWNoIGFzIGluZXRfY3NrX2xpc3Rlbl9zdG9wLiAqL1xcbjUxNTU6XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbjUxNTY6XFx0XFx0YmhfbG9ja19zb2NrKHNrKTtcXG41MTU3OlxcdFxcbjUxNTg6XFx0XFx0aWYgKHRjcF9uZWVkX3Jlc2V0KHNrLVxcdTAwM2Vza19zdGF0ZSkpXFxuNTE1OTpcXHRcXHRcXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTtcXG41MTYwOlxcdFxcdHRjcF9kb25lX3dpdGhfZXJyb3Ioc2ssIGVycik7XFxuNTE2MTpcXHRcXG41MTYyOlxcdFxcdGJoX3VubG9ja19zb2NrKHNrKTtcXG41MTYzOlxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbjUxNjQ6XFx0XFx0aWYgKCFoYXNfY3VycmVudF9icGZfY3R4KCkpXFxuNTE2NTpcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjUxNjY6XFx0XFx0cmV0dXJuIDA7XFxuNTE2NzpcXHR9XFxuNTE2ODpcXHRFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYWJvcnQpO1xcbjUxNjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjQzOjA5LjYwNjY3MDU4N1oiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjExNDgxNDMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBSZWFzb25pbmcgZm9yIFRDUCBUaW1lLVdhaXQgU29ja2V0IERlc3RydWN0aW9uIGluIEJQRioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHJlcXVpcmVzIEtNU0FOIG9yIGlmIEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1Z2dlcnMgYXJlIHN1ZmZpY2llbnQuIFRoZSBjb3JlIGNoYW5nZSBmb2N1c2VzIG9uIHNhZmVseSBkZXN0cm95aW5nIFRDUCBUSU1FX1dBSVQgc29ja2V0cyBhbmQgc2ltaWxhciBcIm1pbmktc29ja2V0c1wiIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQgdmlhIGBicGZfc29ja19kZXN0cm95YC4gU3BlY2lmaWNhbGx5LCBpdCBhZGRyZXNzZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgd2hlbiBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIHdhcyBhY2Nlc3NlZCBvbiB0aGVzZSBub24tZnVsbCBzb2NrZXRzLCB3aGljaCB1c2UgYGluZXRfdGltZXdhaXRfc29ja2AgaW5zdGVhZCBvZiBgc3RydWN0IHNvY2tgLlxuXG5Jbml0aWFsbHksIGB0Y3BfYWJvcnRgIHdhcyB1c2VkIHRvIGhhbmRsZSB0aGUgY2xlYW51cCBhbmQgaXQgdG91Y2hlZCB0aGVzZSB0aW1lLXdhaXQgc29ja2V0cy4gTm93LCB0aGlzIHBhdGNoIG5vdyBjaGVja3MgYHNrX2Z1bGxzb2NrKHNrKWAgKmJlZm9yZSogYWNjZXNzaW5nIGBzay1cdTAwM2Vza19wcm90b2NvbGAuIElmIGl0ICppcyogYSBmdWxsIHNvY2tldCwgaXQgcHJvY2VlZHMgd2l0aCB0aGUgcHJvdG9jb2wgY2hlY2suIElmIGl0J3MgKm5vdCogZnVsbCAobGlrZSBhIGBUSU1FX1dBSVRgIHNvY2tldCksIGl0IGludm9rZXMgYHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlhZ19kZXN0cm95YCAod2hpY2ggaXMgYHRjcF9hYm9ydGAgaGVyZSkgdG8gY2xlYW5seSBoYW5kbGUgZGVzdHJ1Y3Rpb24sIGVuc3VyaW5nIHdlIGF2b2lkIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQgaXNzdWUuIFdlJ3JlIGFsc28gYWRkaW5nIHNlbGZ0ZXN0cyB0byB2ZXJpZnkgdGhpcyBiZWhhdmlvci5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgS01TQU4tc3BlY2lmaWMgcmlza3M/IExldCdzIGdvIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhOlxuXG4qICAgKipVc2VyLXNwYWNlIGNvcGllcy9sZWFrcz8qKiBOb3BlLiBObyBuZXcga2VybmVsIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZS4gVGhlcmUncyBubyBkYXRhIGNvcHlpbmcgdXNpbmcgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIGV0Yy5cbiogICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzL2NvbmRpdGlvbmFsIGxvZ2ljPyoqIEFic29sdXRlbHkgbm90LiBUaGUgY29kZSBpcyAqcHJldmVudGluZyogYW4gb3V0LW9mLWJvdW5kcyByZWFkIGFuZCBub3QgYWRkaW5nIGFueSBsb2dpYyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBXZSBhcmUgYWRkaW5nIGEgY2hlY2sgdG8gZW5zdXJlIHdlIG9ubHkgYWNjZXNzIHRoZSBmdWxsIHNvY2tldC5cbiogICAqKkNvbXBsZXggYWxsb2NhdGlvbnM/KiogTm8gbmV3IGFsbG9jYXRpb25zIHRoYXQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyZSBwcmVzZW50LlxuKiAgICoqQm91bmRzIGNoZWNrcy9sZW5ndGggaXNzdWVzPyoqIFRoZSBtYWluIGNoYW5nZSAqaXMqIGEgYm91bmRzIGNoZWNrLCBidXQgaXQncyAqc3RyZW5ndGhlbmluZyogdGhlIGJvdW5kcyBjaGVja2luZy4gVGhlIGNoZWNrIGVuc3VyZXMgd2UncmUgKm5vdCogYWNjZXNzaW5nIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBwcm90ZWN0cyBgc2stXHUwMDNlc2tfcHJvdG9jb2xgLlxuXG5JbiBmYWN0LCB0aGlzIHBhdGNoIGlzICpwcmV2ZW50aW5nKiB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIHByZXZpb3VzIGNvZGUgd2FzIGFjY2Vzc2luZyBgc2stXHUwMDNlc2tfcHJvdG9jb2xgIG9uIHdoYXQgd2VyZSBlc3NlbnRpYWxseSwgc21hbGxlciBgc29ja19jb21tb25gIHN0cnVjdHVyZXMuIFRoZSBuZXcgbG9naWMgaXMgZGVzaWduZWQgdG8gKmF2b2lkKiB0aGF0LlxuXG5UaGUgYnVncyBwb3RlbnRpYWxseSBpbnRyb2R1Y2VkIGFyZSBvZiB0aGUgdHlwZSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dlcnMgYXJlIGJ1aWx0IHRvIGZpbmQuIEZvciBleGFtcGxlLCBpZiB0aGVyZSB3ZXJlIGlzc3VlcyB3aXRoIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcsIHVzZS1hZnRlci1mcmVlLCBvciBpZiBgZGlhZ19kZXN0cm95YCB3YXMgaW5jb3JyZWN0bHkgY2FsbGVkLCB0aGVzZSB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCB3aGljaCBhcmUgYWxsIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgbG9ja2RlcC5cblxuVGhlcmVmb3JlLCB0aGUgcmVhc29uaW5nIGlzIGFzIGZvbGxvd3M6XG5cbiogICAqKktBU0FOIC8gU3RhbmRhcmQgRGV0ZWN0b3JzOioqIFRoZSBwYXRjaCBtYWlubHkgYWRkcmVzc2VzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBzb2NrZXQgbGlmZWN5Y2xlIGlzc3VlcyByZWxhdGVkIHRvIHRoZXNlIG5vbi1mdWxsIHNvY2tldHMuIFRoZXNlIHJpc2tzIGFyZSByZWxhdGVkIHRvIHJlZmNvdW50aW5nLCBzb2NrZXQgbGlmZWN5Y2xlL2xvY2tpbmcgKGhhbmRsZWQgYnkgYGluZXRfdHdza19kZXNjaGVkdWxlX3B1dGApLCB1c2UtYWZ0ZXItZnJlZSwgYW5kIGludmFsaWQgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy5cbiogICAqKktNU0FOOioqIFRoZSBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBtZW1vcnkgY29waWVzIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGFsbG9jYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLiBBY3R1YWxseSwgdGhlIHBhdGNoICpwcmV2ZW50cyogYW4gb3V0LW9mLWJvdW5kcyByZWFkaW5nIG9mIGBza19wcm90b2NvbGAgb24gbWluaS1zb2NrZXRzLCBzbyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIEtNU0FOLlxuXG5TbywgYE5lZWRzS01TQU4gPSBmYWxzZWAuIFdlIGNhbiBzYWZlbHkgbWFyayB0aGlzIGFzIG5vdCBuZWVkaW5nIEtNU0FOIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzA2LCJPdXRwdXRUb2tlbnMiOjI1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo0MzoyMS43MjE0ODgxNDNaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYga2Z1bmMgYGJwZl9zb2NrX2Rlc3Ryb3koKWAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBzdXBwb3J0IG5vbi1mdWxsIHNvY2tldHMgKHN1Y2ggYXMgVENQIFRJTUVfV0FJVCBzb2NrZXRzKSBieSBjaGVja2luZyBgc2tfZnVsbHNvY2soc2spYCBiZWZvcmUgaW5zcGVjdGluZyBgc2stXFx1MDAzZXNrX3Byb3RvY29sYCwgYW5kIGludm9rZXMgYHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VkaWFnX2Rlc3Ryb3koc2ssIEVDT05OQUJPUlRFRClgLiBUaGUgYWNjb21wYW55aW5nIGNoYW5nZXMgYXJlIEJQRiBzZWxmdGVzdHMuXFxuXFxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlcnNwYWNlICh2aWEgY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCwgZXRjLiksIGFuZCBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLlxcbi0gVGhlIHBvdGVudGlhbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggc29ja2V0IGRlc3RydWN0aW9uIChlLmcuLCBzb2NrZXQgbGlmZWN5Y2xlL3JlZmNvdW50aW5nIHJhY2VzLCBsb2NraW5nIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBkZXJlZmVyZW5jZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0b3JzLlxcbi0gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGtmdW5jIGBicGZfc29ja19kZXN0cm95KClgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gc3VwcG9ydCBub24tZnVsbCBzb2NrZXRzIChzdWNoIGFzIFRDUCBUSU1FX1dBSVQgc29ja2V0cykgYnkgY2hlY2tpbmcgYHNrX2Z1bGxzb2NrKHNrKWAgYmVmb3JlIGluc3BlY3RpbmcgYHNrLVxcdTAwM2Vza19wcm90b2NvbGAsIGFuZCBpbnZva2VzIGBzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlZGlhZ19kZXN0cm95KHNrLCBFQ09OTkFCT1JURUQpYC4gVGhlIGFjY29tcGFueWluZyBjaGFuZ2VzIGFyZSBCUEYgc2VsZnRlc3RzLlxcblxcbktNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXJzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGwsIGV0Yy4pLCBhbmQgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cXG4tIFRoZSBwb3RlbnRpYWwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHNvY2tldCBkZXN0cnVjdGlvbiAoZS5nLiwgc29ja2V0IGxpZmVjeWNsZS9yZWZjb3VudGluZyByYWNlcywgbG9ja2luZyBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgZGVyZWZlcmVuY2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIG1lbW9yeSBjb3JydXB0aW9uIGRldGVjdG9ycy5cXG4tIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowtwpkb[1] Phase: Succeeded StartedAt: 2026-09-05 18:43:32 +0000 UTC FinishedAt: 2026-09-05 18:43:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 18:43:32 +0000 UTC FinishedAt: 2026-09-05 18:43:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[2] Phase: Succeeded StartedAt: 2026-09-05 18:43:32 +0000 UTC FinishedAt: 2026-09-05 22:28:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 18:43:32 +0000 UTC FinishedAt: 2026-09-05 22:28:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 18:43:32 +0000 UTC FinishedAt: 2026-09-05 18:43:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 18:43:32 +0000 UTC FinishedAt: 2026-09-05 18:43:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowtwpkb/series-workflowtwpkb-convert-artifact-2414402963/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 18:43:42 +0000 UTC FinishedAt: 2026-09-05 19:00:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 18:43:42 +0000 UTC FinishedAt: 2026-09-05 19:00:43 +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:*f341a73e-2c8e-4ba3-bea5-35c675c3308a,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-workflowtwpkb/series-workflowtwpkb-convert-artifact-2414402963/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": "658a752c-755b-43c7-b076-446d29fca0e6", "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-workflowtwpkb/series-workflowtwpkb-build-action-1564277441/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 18:43:42 +0000 UTC FinishedAt: 2026-09-05 19:00:33 +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:*f341a73e-2c8e-4ba3-bea5-35c675c3308a,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-workflowtwpkb/series-workflowtwpkb-convert-artifact-2414402963/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": "658a752c-755b-43c7-b076-446d29fca0e6", "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-workflowtwpkb/series-workflowtwpkb-build-action-1564277441/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 19:00:43 +0000 UTC FinishedAt: 2026-09-05 19:00:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 19:00:43 +0000 UTC FinishedAt: 2026-09-05 19:00:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 19:00:43 +0000 UTC FinishedAt: 2026-09-05 19:00:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 19:00:43 +0000 UTC FinishedAt: 2026-09-05 19:00:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowtwpkb/series-workflowtwpkb-convert-artifact-2413905802/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 19:00:53 +0000 UTC FinishedAt: 2026-09-05 19:03:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 19:00:53 +0000 UTC FinishedAt: 2026-09-05 19:02:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*658a752c-755b-43c7-b076-446d29fca0e6,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-workflowtwpkb/series-workflowtwpkb-build-action-1564277441/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-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 19:03:00 +0000 UTC FinishedAt: 2026-09-05 19:03:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 19:03:00 +0000 UTC FinishedAt: 2026-09-05 19:03:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 19:03:00 +0000 UTC FinishedAt: 2026-09-05 19:23:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 19:03:00 +0000 UTC FinishedAt: 2026-09-05 19:23:33 +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:*f341a73e-2c8e-4ba3-bea5-35c675c3308a,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-workflowtwpkb/series-workflowtwpkb-convert-artifact-2413905802/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": "fa6ecefe-f302-4563-8257-e3623b725549", "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-workflowtwpkb/series-workflowtwpkb-build-action-2602599854/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 19:03:00 +0000 UTC FinishedAt: 2026-09-05 19:23:23 +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:*f341a73e-2c8e-4ba3-bea5-35c675c3308a,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-workflowtwpkb/series-workflowtwpkb-convert-artifact-2413905802/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": "fa6ecefe-f302-4563-8257-e3623b725549", "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-workflowtwpkb/series-workflowtwpkb-build-action-2602599854/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 19:23:33 +0000 UTC FinishedAt: 2026-09-05 19:23:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 19:23:33 +0000 UTC FinishedAt: 2026-09-05 19:23:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 19:23:33 +0000 UTC FinishedAt: 2026-09-05 19:25:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 19:23:33 +0000 UTC FinishedAt: 2026-09-05 19:25:41 +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:*fa6ecefe-f302-4563-8257-e3623b725549,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-workflowtwpkb/series-workflowtwpkb-build-action-2602599854/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-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 19:25:51 +0000 UTC FinishedAt: 2026-09-05 22:28:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 19:25:51 +0000 UTC FinishedAt: 2026-09-05 22:28:30 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"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:*658a752c-755b-43c7-b076-446d29fca0e6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fa6ecefe-f302-4563-8257-e3623b725549,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-workflowtwpkb/series-workflowtwpkb-build-action-1564277441/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-workflowtwpkb/series-workflowtwpkb-build-action-2602599854/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 19:25:51 +0000 UTC FinishedAt: 2026-09-05 19:26:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 19:25:51 +0000 UTC FinishedAt: 2026-09-05 19:25:57 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"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-workflowtwpkb/series-workflowtwpkb-convert-artifact-2450396191/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 19:25:51 +0000 UTC FinishedAt: 2026-09-05 19:25:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 19:25:51 +0000 UTC FinishedAt: 2026-09-05 19:25:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 19:25:51 +0000 UTC FinishedAt: 2026-09-05 19:25:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 19:26:01 +0000 UTC FinishedAt: 2026-09-05 22:28:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwpkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sock_destroy","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET","DEBUG_INFO_BTF"],"series_id":"155af2d4-4256-4f64-b299-b1d7508b6d0d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 19:26:01 +0000 UTC FinishedAt: 2026-09-05 22:28:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*658a752c-755b-43c7-b076-446d29fca0e6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fa6ecefe-f302-4563-8257-e3623b725549,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-workflowtwpkb/series-workflowtwpkb-build-action-1564277441/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-workflowtwpkb/series-workflowtwpkb-build-action-2602599854/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-workflowtwpkb/series-workflowtwpkb-convert-artifact-2450396191/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,}